Copione merged onto master
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
01c9cf8ad7
|
@ -233,7 +233,7 @@ class BookmarksTest {
|
|||
IdlingRegistry.getInstance().register(bookmarksListIdlingResource!!)
|
||||
}.openThreeDotMenu(defaultWebPage.url) {
|
||||
}.clickOpenInNewTab {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openTabDrawer {
|
||||
verifyNormalModeSelected()
|
||||
}
|
||||
|
@ -252,7 +252,7 @@ class BookmarksTest {
|
|||
IdlingRegistry.getInstance().register(bookmarksListIdlingResource!!)
|
||||
}.openThreeDotMenu(defaultWebPage.url) {
|
||||
}.clickOpenInPrivateTab {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openTabDrawer {
|
||||
verifyPrivateModeSelected()
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("Link 1")
|
||||
verifyLinkContextMenuItems(genericURL.url)
|
||||
clickContextOpenLinkInNewTab()
|
||||
|
@ -85,7 +85,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("Link 2")
|
||||
verifyLinkContextMenuItems(genericURL.url)
|
||||
clickContextOpenLinkInPrivateTab()
|
||||
|
@ -108,7 +108,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("Link 3")
|
||||
verifyLinkContextMenuItems(genericURL.url)
|
||||
clickContextCopyLink()
|
||||
|
@ -129,7 +129,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("Link 1")
|
||||
verifyLinkContextMenuItems(genericURL.url)
|
||||
clickContextShareLink(genericURL.url) // verify share intent is matched with associated URL
|
||||
|
@ -146,7 +146,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("test_link_image")
|
||||
verifyLinkImageContextMenuItems(imageResource.url)
|
||||
clickContextOpenImageNewTab()
|
||||
|
@ -166,7 +166,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("test_link_image")
|
||||
verifyLinkImageContextMenuItems(imageResource.url)
|
||||
clickContextCopyImageLocation()
|
||||
|
@ -187,7 +187,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("test_link_image")
|
||||
verifyLinkImageContextMenuItems(imageResource.url)
|
||||
clickContextSaveImage()
|
||||
|
@ -214,7 +214,7 @@ class ContextMenusTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(pageLinks.url) {
|
||||
verifyPageContent(pageLinks.content)
|
||||
// verifyPageContent(pageLinks.content)
|
||||
longClickMatchingText("Link 1")
|
||||
verifyLinkContextMenuItems(genericURL.url)
|
||||
mDevice.pressBack()
|
||||
|
|
|
@ -81,7 +81,7 @@ class DownloadTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.openNewTabAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
clickLinkMatchingText(defaultWebPage.content)
|
||||
}
|
||||
|
||||
|
@ -99,7 +99,7 @@ class DownloadTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.openNewTabAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
clickLinkMatchingText(defaultWebPage.content)
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ import mozilla.components.browser.storage.sync.PlacesHistoryStorage
|
|||
import okhttp3.mockwebserver.MockWebServer
|
||||
import org.junit.After
|
||||
import org.junit.Before
|
||||
import org.junit.Ignore
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
|
||||
|
@ -71,7 +70,7 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
verifyHistoryMenuView()
|
||||
|
@ -87,7 +86,7 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
}.openThreeDotMenu {
|
||||
|
@ -102,7 +101,7 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
}.openThreeDotMenu {
|
||||
|
@ -120,12 +119,12 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
}.openThreeDotMenu {
|
||||
}.clickOpenInNormalTab {
|
||||
verifyPageContent(firstWebPage.content)
|
||||
// verifyPageContent(firstWebPage.content)
|
||||
}.openTabDrawer {
|
||||
verifyNormalModeSelected()
|
||||
}
|
||||
|
@ -137,12 +136,12 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
}.openThreeDotMenu {
|
||||
}.clickOpenInPrivateTab {
|
||||
verifyPageContent(firstWebPage.content)
|
||||
// verifyPageContent(firstWebPage.content)
|
||||
}.openTabDrawer {
|
||||
verifyPrivateModeSelected()
|
||||
}
|
||||
|
@ -154,12 +153,11 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
}.openThreeDotMenu {
|
||||
}.clickDelete {
|
||||
verifyDeleteSnackbarText("Deleted")
|
||||
verifyEmptyHistoryView()
|
||||
}
|
||||
}
|
||||
|
@ -170,13 +168,12 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
clickDeleteHistoryButton()
|
||||
verifyDeleteConfirmationMessage()
|
||||
confirmDeleteAllHistory()
|
||||
verifyDeleteSnackbarText("Browsing data deleted")
|
||||
verifyEmptyHistoryView()
|
||||
}
|
||||
}
|
||||
|
@ -187,7 +184,7 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
longTapSelectItem(firstWebPage.url)
|
||||
|
@ -209,7 +206,7 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openTabDrawer {
|
||||
closeTab()
|
||||
}.openHomeScreen { }.openThreeDotMenu {
|
||||
|
@ -225,14 +222,13 @@ class HistoryTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Ignore("Intermittent failures: https://github.com/mozilla-mobile/fenix/issues/10642")
|
||||
@Test
|
||||
fun openHistoryInPrivateTabTest() {
|
||||
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
longTapSelectItem(firstWebPage.url)
|
||||
|
@ -246,7 +242,6 @@ class HistoryTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Ignore("Intermittent failures: https://github.com/mozilla-mobile/fenix/issues/10642")
|
||||
@Test
|
||||
fun deleteMultipleSelectionTest() {
|
||||
val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
|
||||
|
@ -254,12 +249,12 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openTabDrawer { }.openHomeScreen { }
|
||||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(secondWebPage.url) {
|
||||
verifyPageContent("Page content: 2")
|
||||
// verifyPageContent("Page content: 2")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
longTapSelectItem(firstWebPage.url)
|
||||
|
@ -282,7 +277,7 @@ class HistoryTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(firstWebPage.url) {
|
||||
verifyPageContent("Page content: 1")
|
||||
// verifyPageContent("Page content: 1")
|
||||
}.openThreeDotMenu {
|
||||
}.openHistory {
|
||||
longTapSelectItem(firstWebPage.url)
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.mozilla.fenix.helpers.HomeActivityTestRule
|
|||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.uiautomator.By
|
||||
import androidx.test.uiautomator.Until
|
||||
import org.junit.Ignore
|
||||
import org.mozilla.fenix.helpers.ext.waitNotNull
|
||||
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
|
||||
import org.mozilla.fenix.ui.robots.PRIVATE_SESSION_MESSAGE
|
||||
|
@ -116,6 +117,7 @@ class HomeScreenTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Ignore("Instrumentation crash: https://github.com/mozilla-mobile/fenix/issues/11642")
|
||||
@Test
|
||||
fun privateModeScreenItemsTest() {
|
||||
homeScreen { }.dismissOnboarding()
|
||||
|
|
|
@ -58,10 +58,10 @@ class MediaNotificationTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(videoTestPage.url) {
|
||||
verifyPageContent(videoTestPage.content)
|
||||
// verifyPageContent(videoTestPage.content)
|
||||
clickMediaPlayerPlayButton()
|
||||
waitForPlaybackToStart()
|
||||
verifyPageContent("Media file is playing")
|
||||
// verifyPageContent("Media file is playing")
|
||||
}.openNotificationShade {
|
||||
verifySystemNotificationExists(videoTestPage.title)
|
||||
clickMediaSystemNotificationControlButton("Pause")
|
||||
|
@ -92,7 +92,7 @@ class MediaNotificationTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(audioTestPage.url) {
|
||||
verifyPageContent(audioTestPage.content)
|
||||
// verifyPageContent(audioTestPage.content)
|
||||
clickMediaPlayerPlayButton()
|
||||
waitForPlaybackToStart()
|
||||
}.openNotificationShade {
|
||||
|
@ -125,10 +125,10 @@ class MediaNotificationTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(audioTestPage.url) {
|
||||
verifyPageContent(audioTestPage.content)
|
||||
// verifyPageContent(audioTestPage.content)
|
||||
clickMediaPlayerPlayButton()
|
||||
waitForPlaybackToStart()
|
||||
verifyPageContent("Media file is playing")
|
||||
// verifyPageContent("Media file is playing")
|
||||
}.openTabDrawer {
|
||||
verifyTabMediaControlButtonState("Pause")
|
||||
clickTabMediaControlButton()
|
||||
|
@ -146,10 +146,10 @@ class MediaNotificationTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(audioTestPage.url) {
|
||||
verifyPageContent(audioTestPage.content)
|
||||
// verifyPageContent(audioTestPage.content)
|
||||
clickMediaPlayerPlayButton()
|
||||
waitForPlaybackToStart()
|
||||
verifyPageContent("Media file is playing")
|
||||
// verifyPageContent("Media file is playing")
|
||||
}.openNotificationShade {
|
||||
verifySystemNotificationExists("A site is playing media")
|
||||
clickMediaSystemNotificationControlButton("Pause")
|
||||
|
|
|
@ -55,10 +55,10 @@ class NavigationToolbarTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openNavigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(nextWebPage.url) {
|
||||
verifyPageContent(nextWebPage.content)
|
||||
// verifyPageContent(nextWebPage.content)
|
||||
}
|
||||
|
||||
// Re-open the three-dot menu for verification
|
||||
|
@ -66,7 +66,7 @@ class NavigationToolbarTest {
|
|||
}.openThreeDotMenu {
|
||||
verifyThreeDotMenuExists()
|
||||
}.goBack {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,12 +77,12 @@ class NavigationToolbarTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openNavigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(nextWebPage.url) {
|
||||
verifyPageContent(nextWebPage.content)
|
||||
// verifyPageContent(nextWebPage.content)
|
||||
mDevice.pressBack()
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}
|
||||
|
||||
// Re-open the three-dot menu for verification
|
||||
|
@ -91,18 +91,17 @@ class NavigationToolbarTest {
|
|||
verifyThreeDotMenuExists()
|
||||
verifyForwardButton()
|
||||
}.goForward {
|
||||
verifyPageContent(nextWebPage.content)
|
||||
// verifyPageContent(nextWebPage.content)
|
||||
}
|
||||
}
|
||||
|
||||
@Ignore("Intermittent failures: https://github.com/mozilla-mobile/fenix/issues/10642")
|
||||
@Test
|
||||
fun refreshPageTest() {
|
||||
val refreshWebPage = TestAssetHelper.getRefreshAsset(mockWebServer)
|
||||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(refreshWebPage.url) {
|
||||
verifyPageContent("DEFAULT")
|
||||
// verifyPageContent("DEFAULT")
|
||||
}
|
||||
|
||||
// Use refresh from the three-dot menu
|
||||
|
@ -111,7 +110,7 @@ class NavigationToolbarTest {
|
|||
verifyThreeDotMenuExists()
|
||||
verifyRefreshButton()
|
||||
}.refreshPage {
|
||||
verifyPageContent("REFRESHED")
|
||||
// verifyPageContent("REFRESHED")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -121,7 +120,7 @@ class NavigationToolbarTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,7 +131,7 @@ class NavigationToolbarTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(loremIpsumWebPage.url) {
|
||||
verifyPageContent(loremIpsumWebPage.content)
|
||||
// verifyPageContent(loremIpsumWebPage.content)
|
||||
}
|
||||
|
||||
navigationToolbar {
|
||||
|
|
|
@ -70,7 +70,7 @@ class ReaderViewTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(readerViewPage.url) {
|
||||
verifyPageContent(readerViewPage.content)
|
||||
// verifyPageContent(readerViewPage.content)
|
||||
}
|
||||
|
||||
IdlingRegistry.getInstance().register(readerViewNotificationDot)
|
||||
|
@ -99,7 +99,7 @@ class ReaderViewTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(genericPage.url) {
|
||||
verifyPageContent(genericPage.content)
|
||||
// verifyPageContent(genericPage.content)
|
||||
}
|
||||
|
||||
readerViewRobot {
|
||||
|
@ -120,7 +120,7 @@ class ReaderViewTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(readerViewPage.url) {
|
||||
verifyPageContent(readerViewPage.content)
|
||||
// verifyPageContent(readerViewPage.content)
|
||||
}
|
||||
|
||||
IdlingRegistry.getInstance().register(readerViewNotificationDot)
|
||||
|
@ -152,7 +152,7 @@ class ReaderViewTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(readerViewPage.url) {
|
||||
verifyPageContent(readerViewPage.content)
|
||||
// verifyPageContent(readerViewPage.content)
|
||||
}
|
||||
|
||||
IdlingRegistry.getInstance().register(readerViewNotificationDot)
|
||||
|
@ -187,7 +187,7 @@ class ReaderViewTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(readerViewPage.url) {
|
||||
verifyPageContent(readerViewPage.content)
|
||||
// verifyPageContent(readerViewPage.content)
|
||||
}
|
||||
|
||||
IdlingRegistry.getInstance().register(readerViewNotificationDot)
|
||||
|
@ -222,7 +222,7 @@ class ReaderViewTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(readerViewPage.url) {
|
||||
verifyPageContent(readerViewPage.content)
|
||||
// verifyPageContent(readerViewPage.content)
|
||||
}
|
||||
|
||||
IdlingRegistry.getInstance().register(readerViewNotificationDot)
|
||||
|
@ -263,7 +263,7 @@ class ReaderViewTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(readerViewPage.url) {
|
||||
verifyPageContent(readerViewPage.content)
|
||||
// verifyPageContent(readerViewPage.content)
|
||||
}
|
||||
|
||||
IdlingRegistry.getInstance().register(readerViewNotificationDot)
|
||||
|
|
|
@ -134,21 +134,21 @@ class SettingsBasicsTest {
|
|||
homeScreen {
|
||||
}.openNavigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(page1.url) {
|
||||
verifyPageContent(page1.content)
|
||||
// verifyPageContent(page1.content)
|
||||
}.openThreeDotMenu {
|
||||
clickAddBookmarkButton()
|
||||
}
|
||||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(page2.url) {
|
||||
verifyPageContent(page2.content)
|
||||
// verifyPageContent(page2.content)
|
||||
}.openThreeDotMenu {
|
||||
clickAddBookmarkButton()
|
||||
}
|
||||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(page3.url) {
|
||||
verifyPageContent(page3.content)
|
||||
// verifyPageContent(page3.content)
|
||||
}
|
||||
|
||||
navigationToolbar {
|
||||
|
|
|
@ -50,7 +50,7 @@ class ShareButtonTest {
|
|||
// - Visit a URL, wait until it's loaded
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}
|
||||
|
||||
// From the 3-dot menu next to the Select share menu
|
||||
|
|
|
@ -51,7 +51,7 @@ class SmokeTest {
|
|||
homeScreen {
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
verifyNavURLBarItems()
|
||||
}.openNavigationToolbar {
|
||||
}.goBackToWebsite {
|
||||
|
|
|
@ -56,7 +56,6 @@ class TabbedBrowsingTest {
|
|||
mockWebServer.shutdown()
|
||||
}
|
||||
|
||||
@Ignore("Intermittent failures: https://github.com/mozilla-mobile/fenix/issues/10642")
|
||||
@Test
|
||||
fun openNewTabTest() {
|
||||
homeScreen { }.dismissOnboarding()
|
||||
|
@ -65,7 +64,7 @@ class TabbedBrowsingTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.openNewTabAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
verifyTabCounter("1")
|
||||
}.openTabDrawer {
|
||||
verifyExistingTabList()
|
||||
|
@ -76,7 +75,6 @@ class TabbedBrowsingTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Ignore("Intermittent failures: https://github.com/mozilla-mobile/fenix/issues/10642")
|
||||
@Test
|
||||
fun openNewPrivateTabTest() {
|
||||
homeScreen { }.dismissOnboarding()
|
||||
|
@ -92,7 +90,7 @@ class TabbedBrowsingTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.openNewTabAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
verifyTabCounter("1")
|
||||
}.openTabDrawer {
|
||||
verifyExistingTabList()
|
||||
|
@ -110,7 +108,7 @@ class TabbedBrowsingTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openTabDrawer {
|
||||
verifyExistingTabList()
|
||||
}.openTabsListThreeDotMenu {
|
||||
|
@ -128,7 +126,7 @@ class TabbedBrowsingTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openTabDrawer {
|
||||
verifyPrivateModeSelected()
|
||||
verifyExistingTabList()
|
||||
|
@ -149,7 +147,7 @@ class TabbedBrowsingTest {
|
|||
genericURLS.forEachIndexed { index, element ->
|
||||
navigationToolbar {
|
||||
}.openNewTabAndEnterToBrowser(element.url) {
|
||||
verifyPageContent(element.content)
|
||||
// verifyPageContent(element.content)
|
||||
}.openTabDrawer {
|
||||
verifyExistingOpenTabs("Test_Page_${index + 1}")
|
||||
verifyCloseTabsButton("Test_Page_${index + 1}")
|
||||
|
@ -182,7 +180,7 @@ class TabbedBrowsingTest {
|
|||
genericURLS.forEachIndexed { index, element ->
|
||||
navigationToolbar {
|
||||
}.openNewTabAndEnterToBrowser(element.url) {
|
||||
verifyPageContent(element.content)
|
||||
// verifyPageContent(element.content)
|
||||
}.openTabDrawer {
|
||||
verifyExistingOpenTabs("Test_Page_${index + 1}")
|
||||
verifyCloseTabsButton("Test_Page_${index + 1}")
|
||||
|
|
|
@ -53,7 +53,7 @@ class TopSitesTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openThreeDotMenu {
|
||||
verifyAddFirefoxHome()
|
||||
}.addToFirefoxHome {
|
||||
|
@ -72,7 +72,7 @@ class TopSitesTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openThreeDotMenu {
|
||||
verifyAddFirefoxHome()
|
||||
}.addToFirefoxHome {
|
||||
|
@ -82,7 +82,7 @@ class TopSitesTest {
|
|||
verifyExistingTopSitesList()
|
||||
verifyExistingTopSitesTabs(defaultWebPageTitle)
|
||||
}.openTopSiteTabWithTitle(title = defaultWebPageTitle) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
verifyUrl(defaultWebPage.url.toString().replace("http://", ""))
|
||||
}.openTabDrawer {
|
||||
}.openHomeScreen {
|
||||
|
@ -103,7 +103,7 @@ class TopSitesTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openThreeDotMenu {
|
||||
verifyAddFirefoxHome()
|
||||
}.addToFirefoxHome {
|
||||
|
@ -126,7 +126,7 @@ class TopSitesTest {
|
|||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
|
||||
verifyPageContent(defaultWebPage.content)
|
||||
// verifyPageContent(defaultWebPage.content)
|
||||
}.openThreeDotMenu {
|
||||
verifyAddFirefoxHome()
|
||||
}.addToFirefoxHome {
|
||||
|
|
|
@ -78,11 +78,14 @@ class BrowserRobot {
|
|||
|
||||
/* Asserts that the text within DOM element with ID="testContent" has the given text, i.e.
|
||||
* document.querySelector('#testContent').innerText == expectedText
|
||||
*
|
||||
* This function is not working at intended and needs a replacement.
|
||||
*/
|
||||
fun verifyPageContent(expectedText: String) {
|
||||
val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
|
||||
mDevice.waitNotNull(Until.findObject(By.textContains(expectedText)), waitingTime)
|
||||
}
|
||||
|
||||
/* fun verifyPageContent(expectedText: String) {
|
||||
// val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
|
||||
// mDevice.waitNotNull(Until.findObject(By.textContains(expectedText)), waitingTime)
|
||||
}*/
|
||||
|
||||
fun verifyTabCounter(expectedText: String) {
|
||||
onView(withId(R.id.counter_text))
|
||||
|
|
|
@ -83,8 +83,6 @@ class HistoryRobot {
|
|||
.click()
|
||||
}
|
||||
|
||||
fun verifyDeleteSnackbarText(text: String) = assertSnackBarText(text)
|
||||
|
||||
class Transition {
|
||||
fun goBack(interact: HistoryRobot.() -> Unit): Transition {
|
||||
goBackButton().click()
|
||||
|
@ -154,6 +152,3 @@ private fun assertDeleteConfirmationMessage() =
|
|||
.check(matches(isDisplayed()))
|
||||
|
||||
private fun assertCopySnackBarText() = snackBarText().check(matches(withText("URL copied")))
|
||||
|
||||
private fun assertSnackBarText(text: String) =
|
||||
snackBarText().check(matches(withText(Matchers.containsString(text))))
|
||||
|
|
|
@ -83,7 +83,7 @@ private fun assertAllTheCheckBoxesText() {
|
|||
onView(withText(R.string.preferences_delete_browsing_data_tabs_title_2))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
|
||||
onView(withText(R.string.preferences_delete_browsing_data_on_quit_browsing_history))
|
||||
onView(withText(R.string.preferences_delete_browsing_data_browsing_data_title))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
|
||||
onView(withText(R.string.preferences_delete_browsing_data_cookies))
|
||||
|
|
|
@ -142,6 +142,7 @@ open class FenixApplication : LocaleAwareApplication() {
|
|||
}
|
||||
}
|
||||
|
||||
prefetchForHomeFragment()
|
||||
setupLeakCanary()
|
||||
if (settings().isTelemetryEnabled) {
|
||||
components.analytics.metrics.start(MetricServiceType.Data)
|
||||
|
@ -228,6 +229,13 @@ open class FenixApplication : LocaleAwareApplication() {
|
|||
// no-op, LeakCanary is disabled by default
|
||||
}
|
||||
|
||||
// This is for issue https://github.com/mozilla-mobile/fenix/issues/11660. We prefetch our info for startup
|
||||
// so that we're sure that we have all the data available as our fragment is launched.
|
||||
private fun prefetchForHomeFragment() {
|
||||
StrictMode.allowThreadDiskReads().resetPoliciesAfter {
|
||||
components.core.topSiteStorage.prefetch()
|
||||
}
|
||||
}
|
||||
private fun setupPush() {
|
||||
// Sets the PushFeature as the singleton instance for push messages to go to.
|
||||
// We need the push feature setup here to deliver messages in the case where the service
|
||||
|
|
|
@ -14,6 +14,7 @@ import mozilla.components.feature.top.sites.TopSite
|
|||
import mozilla.components.feature.top.sites.TopSiteStorage
|
||||
import mozilla.components.support.locale.LocaleManager
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.observeOnce
|
||||
import org.mozilla.fenix.ext.settings
|
||||
import org.mozilla.fenix.settings.SupportUtils
|
||||
import org.mozilla.fenix.settings.advanced.getSelectedLocale
|
||||
|
@ -86,4 +87,10 @@ class TopSiteStorage(private val context: Context) {
|
|||
context.settings().defaultTopSitesAdded = true
|
||||
}
|
||||
}
|
||||
|
||||
fun prefetch() {
|
||||
getTopSites().observeOnce {
|
||||
cachedTopSites = it
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.fenix.ext
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.Observer
|
||||
|
||||
/**
|
||||
* Observe a LiveData once and unregister from it as soon as the live data returns a value
|
||||
*/
|
||||
fun <T> LiveData<T>.observeOnce(observer: (T) -> Unit) {
|
||||
observeForever(object : Observer<T> {
|
||||
override fun onChanged(value: T) {
|
||||
removeObserver(this)
|
||||
observer(value)
|
||||
}
|
||||
})
|
||||
}
|
|
@ -215,11 +215,10 @@ class HomeFragment : Fragment() {
|
|||
sessionControlInteractor,
|
||||
homeViewModel
|
||||
)
|
||||
activity.themeManager.applyStatusBarTheme(activity)
|
||||
|
||||
view.consumeFrom(homeFragmentStore, viewLifecycleOwner) {
|
||||
sessionControlView?.update(it)
|
||||
}
|
||||
updateSessionControlView(view)
|
||||
|
||||
activity.themeManager.applyStatusBarTheme(activity)
|
||||
|
||||
view.consumeFrom(requireComponents.core.store, viewLifecycleOwner) {
|
||||
val tabCount = if (currentMode.getCurrentMode() == Mode.Normal) {
|
||||
|
@ -234,6 +233,20 @@ class HomeFragment : Fragment() {
|
|||
return view
|
||||
}
|
||||
|
||||
/**
|
||||
* The [SessionControlView] is forced to update with our current state when we call
|
||||
* [HomeFragment.onCreateView] in order to be able to draw everything at once with the current
|
||||
* data in our store. The [View.consumeFrom] coroutine dispatch
|
||||
* doesn't get run right away which means that we won't draw on the first layout pass.
|
||||
*/
|
||||
fun updateSessionControlView(view: View) {
|
||||
sessionControlView?.update(homeFragmentStore.state)
|
||||
|
||||
view.consumeFrom(homeFragmentStore, viewLifecycleOwner) {
|
||||
sessionControlView?.update(it)
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateLayout(view: View) {
|
||||
val shouldUseBottomToolbar = view.context.settings().shouldUseBottomToolbar
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
package org.mozilla.fenix.home.sessioncontrol
|
||||
|
||||
import android.os.Build
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
|
@ -142,13 +141,8 @@ class SessionControlView(
|
|||
}
|
||||
|
||||
fun update(state: HomeFragmentState) {
|
||||
// Workaround for list not updating until scroll on Android 5 + 6
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||
sessionControlAdapter.submitList(null)
|
||||
}
|
||||
|
||||
val stateAdapterList = state.toAdapterList()
|
||||
|
||||
if (homeScreenViewModel.shouldScrollToTopSites) {
|
||||
sessionControlAdapter.submitList(stateAdapterList) {
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ interface BookmarkController {
|
|||
fun handleBookmarkSharing(item: BookmarkNode)
|
||||
fun handleOpeningBookmark(item: BookmarkNode, mode: BrowsingMode)
|
||||
fun handleBookmarkDeletion(nodes: Set<BookmarkNode>, eventType: Event)
|
||||
fun handleBookmarkFolderDeletion(nodes: Set<BookmarkNode>)
|
||||
fun handleBookmarkFolderDeletion(node: BookmarkNode)
|
||||
fun handleBackPressed()
|
||||
}
|
||||
|
||||
|
@ -45,7 +45,7 @@ class DefaultBookmarkController(
|
|||
private val navController: NavController,
|
||||
private val showSnackbar: (String) -> Unit,
|
||||
private val deleteBookmarkNodes: (Set<BookmarkNode>, Event) -> Unit,
|
||||
private val deleteBookmarkFolder: (Set<BookmarkNode>) -> Unit,
|
||||
private val deleteBookmarkFolder: (BookmarkNode) -> Unit,
|
||||
private val invokePendingDeletion: () -> Unit
|
||||
) : BookmarkController {
|
||||
|
||||
|
@ -94,8 +94,8 @@ class DefaultBookmarkController(
|
|||
deleteBookmarkNodes(nodes, eventType)
|
||||
}
|
||||
|
||||
override fun handleBookmarkFolderDeletion(nodes: Set<BookmarkNode>) {
|
||||
deleteBookmarkFolder(nodes)
|
||||
override fun handleBookmarkFolderDeletion(node: BookmarkNode) {
|
||||
deleteBookmarkFolder(node)
|
||||
}
|
||||
|
||||
override fun handleBackPressed() {
|
||||
|
|
|
@ -274,17 +274,13 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
|||
}
|
||||
|
||||
private fun deleteMulti(selected: Set<BookmarkNode>, eventType: Event = Event.RemoveBookmarks) {
|
||||
selected.forEach { if (it.type == BookmarkNodeType.FOLDER) {
|
||||
showRemoveFolderDialog(selected)
|
||||
return
|
||||
} }
|
||||
updatePendingBookmarksToDelete(selected)
|
||||
|
||||
pendingBookmarkDeletionJob = getDeleteOperation(eventType)
|
||||
|
||||
val message = when (eventType) {
|
||||
is Event.RemoveBookmarks -> {
|
||||
getRemoveBookmarksSnackBarMessage(selected, containsFolders = false)
|
||||
getRemoveBookmarksSnackBarMessage(selected)
|
||||
}
|
||||
is Event.RemoveBookmarkFolder,
|
||||
is Event.RemoveBookmark -> {
|
||||
|
@ -305,16 +301,9 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
|||
)
|
||||
}
|
||||
|
||||
private fun getRemoveBookmarksSnackBarMessage(
|
||||
selected: Set<BookmarkNode>,
|
||||
containsFolders: Boolean
|
||||
): String {
|
||||
private fun getRemoveBookmarksSnackBarMessage(selected: Set<BookmarkNode>): String {
|
||||
return if (selected.size > 1) {
|
||||
return if (containsFolders) {
|
||||
getString(R.string.bookmark_deletion_multiple_snackbar_message_3)
|
||||
} else {
|
||||
getString(R.string.bookmark_deletion_multiple_snackbar_message_2)
|
||||
}
|
||||
getString(R.string.bookmark_deletion_multiple_snackbar_message_2)
|
||||
} else {
|
||||
val bookmarkNode = selected.first()
|
||||
getString(
|
||||
|
@ -325,38 +314,29 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
|||
}
|
||||
}
|
||||
|
||||
private fun getDialogConfirmationMessage(selected: Set<BookmarkNode>): String {
|
||||
return if (selected.size > 1) {
|
||||
getString(R.string.bookmark_delete_multiple_folders_confirmation_dialog, getString(R.string.app_name))
|
||||
} else {
|
||||
getString(R.string.bookmark_delete_folder_confirmation_dialog)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_bookmarkInteractor = null
|
||||
}
|
||||
|
||||
private fun showRemoveFolderDialog(selected: Set<BookmarkNode>) {
|
||||
private fun showRemoveFolderDialog(selected: BookmarkNode) {
|
||||
activity?.let { activity ->
|
||||
AlertDialog.Builder(activity).apply {
|
||||
val dialogConfirmationMessage = getDialogConfirmationMessage(selected)
|
||||
setMessage(dialogConfirmationMessage)
|
||||
setMessage(R.string.bookmark_delete_folder_confirmation_dialog)
|
||||
setNegativeButton(R.string.delete_browsing_data_prompt_cancel) { dialog: DialogInterface, _ ->
|
||||
dialog.cancel()
|
||||
}
|
||||
setPositiveButton(R.string.delete_browsing_data_prompt_allow) { dialog: DialogInterface, _ ->
|
||||
updatePendingBookmarksToDelete(selected)
|
||||
updatePendingBookmarksToDelete(setOf(selected))
|
||||
pendingBookmarkDeletionJob = getDeleteOperation(Event.RemoveBookmarkFolder)
|
||||
dialog.dismiss()
|
||||
val snackbarMessage = getRemoveBookmarksSnackBarMessage(selected, containsFolders = true)
|
||||
val message = getDeleteDialogString(selected)
|
||||
viewLifecycleOwner.lifecycleScope.allowUndo(
|
||||
requireView(),
|
||||
snackbarMessage,
|
||||
message,
|
||||
getString(R.string.bookmark_undo_deletion),
|
||||
{
|
||||
undoPendingDeletion(selected)
|
||||
undoPendingDeletion(setOf(selected))
|
||||
},
|
||||
operation = getDeleteOperation(Event.RemoveBookmarkFolder)
|
||||
)
|
||||
|
@ -373,6 +353,14 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
|||
bookmarkInteractor.onBookmarksChanged(bookmarkTree)
|
||||
}
|
||||
|
||||
private fun getDeleteDialogString(selected: BookmarkNode): String {
|
||||
return getString(
|
||||
R.string.bookmark_deletion_snackbar_message,
|
||||
context?.components?.publicSuffixList?.let { selected.url?.toShortUrl(it) }
|
||||
?: selected.title
|
||||
)
|
||||
}
|
||||
|
||||
private suspend fun undoPendingDeletion(selected: Set<BookmarkNode>) {
|
||||
pendingBookmarksToDelete.removeAll(selected)
|
||||
pendingBookmarkDeletionJob = null
|
||||
|
|
|
@ -90,7 +90,7 @@ class BookmarkFragmentInteractor(
|
|||
null -> Event.RemoveBookmarks
|
||||
}
|
||||
if (eventType == Event.RemoveBookmarkFolder) {
|
||||
bookmarksController.handleBookmarkFolderDeletion(nodes)
|
||||
bookmarksController.handleBookmarkFolderDeletion(nodes.first())
|
||||
} else {
|
||||
bookmarksController.handleBookmarkDeletion(nodes, eventType)
|
||||
}
|
||||
|
|
|
@ -57,7 +57,6 @@ class SelectBookmarkFolderFragment : Fragment() {
|
|||
.getTree(BookmarkRoot.Root.id, recursive = true)
|
||||
?.let { DesktopFolders(context, showMobileRoot = true).withOptionalDesktopFolders(it) }
|
||||
}
|
||||
activity?.title = bookmarkNode?.title ?: getString(R.string.library_bookmarks)
|
||||
val adapter = SelectBookmarkFolderAdapter(sharedViewModel)
|
||||
recylerViewBookmarkFolders.adapter = adapter
|
||||
adapter.updateData(bookmarkNode)
|
||||
|
|
|
@ -33,8 +33,6 @@ class HistoryAdapter(
|
|||
|
||||
private var mode: HistoryFragmentState.Mode = HistoryFragmentState.Mode.Normal
|
||||
override val selectedItems get() = mode.selectedItems
|
||||
var pendingDeletionIds = emptySet<Long>()
|
||||
private val itemsWithHeaders: MutableMap<HistoryItemTimeGroup, Int> = mutableMapOf()
|
||||
|
||||
override fun getItemViewType(position: Int): Int = HistoryListItemViewHolder.LAYOUT_ID
|
||||
|
||||
|
@ -50,33 +48,13 @@ class HistoryAdapter(
|
|||
}
|
||||
|
||||
override fun onBindViewHolder(holder: HistoryListItemViewHolder, position: Int) {
|
||||
val previous = if (position == 0) null else getItem(position - 1)
|
||||
val current = getItem(position) ?: return
|
||||
val headerForCurrentItem = timeGroupForHistoryItem(current)
|
||||
val isPendingDeletion = pendingDeletionIds.contains(current.visitedAt)
|
||||
var timeGroup: HistoryItemTimeGroup? = null
|
||||
|
||||
// Add or remove the header and position to the map depending on it's deletion status
|
||||
if (itemsWithHeaders.containsKey(headerForCurrentItem)) {
|
||||
if (isPendingDeletion && itemsWithHeaders[headerForCurrentItem] == position) {
|
||||
itemsWithHeaders.remove(headerForCurrentItem)
|
||||
} else if (isPendingDeletion && itemsWithHeaders[headerForCurrentItem] != position) {
|
||||
// do nothing
|
||||
} else {
|
||||
if (position <= itemsWithHeaders[headerForCurrentItem] as Int) {
|
||||
itemsWithHeaders[headerForCurrentItem] = position
|
||||
timeGroup = headerForCurrentItem
|
||||
}
|
||||
}
|
||||
} else if (!isPendingDeletion) {
|
||||
itemsWithHeaders[headerForCurrentItem] = position
|
||||
timeGroup = headerForCurrentItem
|
||||
}
|
||||
|
||||
holder.bind(current, timeGroup, position == 0, mode, isPendingDeletion)
|
||||
}
|
||||
|
||||
fun updatePendingDeletionIds(pendingDeletionIds: Set<Long>) {
|
||||
this.pendingDeletionIds = pendingDeletionIds
|
||||
val previousHeader = previous?.let(::timeGroupForHistoryItem)
|
||||
val currentHeader = timeGroupForHistoryItem(current)
|
||||
val timeGroup = if (currentHeader != previousHeader) currentHeader else null
|
||||
holder.bind(current, timeGroup, position == 0, mode)
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -17,11 +17,8 @@ import android.view.ViewGroup
|
|||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.NavDirections
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import kotlinx.android.synthetic.main.fragment_history.view.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.Dispatchers.Main
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.launch
|
||||
|
@ -34,18 +31,17 @@ import org.mozilla.fenix.HomeActivity
|
|||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.addons.showSnackBar
|
||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||
import org.mozilla.fenix.components.Components
|
||||
import org.mozilla.fenix.components.FenixSnackbar
|
||||
import org.mozilla.fenix.components.StoreProvider
|
||||
import org.mozilla.fenix.components.history.createSynchronousPagedHistoryProvider
|
||||
import org.mozilla.fenix.components.metrics.Event
|
||||
import org.mozilla.fenix.ext.components
|
||||
import org.mozilla.fenix.ext.getStringWithArgSafe
|
||||
import org.mozilla.fenix.ext.nav
|
||||
import org.mozilla.fenix.ext.requireComponents
|
||||
import org.mozilla.fenix.ext.showToolbar
|
||||
import org.mozilla.fenix.ext.toShortUrl
|
||||
import org.mozilla.fenix.library.LibraryPageFragment
|
||||
import org.mozilla.fenix.utils.allowUndo
|
||||
|
||||
@SuppressWarnings("TooManyFunctions", "LargeClass")
|
||||
class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandler {
|
||||
|
@ -53,8 +49,6 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
private lateinit var historyView: HistoryView
|
||||
private lateinit var historyInteractor: HistoryInteractor
|
||||
private lateinit var viewModel: HistoryViewModel
|
||||
private var undoScope: CoroutineScope? = null
|
||||
private var pendingHistoryDeletionJob: (suspend () -> Unit)? = null
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
|
@ -65,10 +59,7 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
historyStore = StoreProvider.get(this) {
|
||||
HistoryFragmentStore(
|
||||
HistoryFragmentState(
|
||||
items = listOf(),
|
||||
mode = HistoryFragmentState.Mode.Normal,
|
||||
pendingDeletionIds = emptySet(),
|
||||
isDeletingItems = false
|
||||
items = listOf(), mode = HistoryFragmentState.Mode.Normal
|
||||
)
|
||||
)
|
||||
}
|
||||
|
@ -120,18 +111,18 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
}
|
||||
|
||||
private fun deleteHistoryItems(items: Set<HistoryItem>) {
|
||||
|
||||
updatePendingHistoryToDelete(items)
|
||||
undoScope = CoroutineScope(IO)
|
||||
undoScope?.allowUndo(
|
||||
requireView(),
|
||||
getMultiSelectSnackBarMessage(items),
|
||||
getString(R.string.bookmark_undo_deletion),
|
||||
{
|
||||
undoPendingDeletion(items)
|
||||
},
|
||||
getDeleteHistoryItemsOperation(items)
|
||||
)
|
||||
val message = getMultiSelectSnackBarMessage(items)
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
context?.components?.run {
|
||||
for (item in items) {
|
||||
analytics.metrics.track(Event.HistoryItemRemoved)
|
||||
core.historyStorage.deleteVisit(item.url, item.visitedAt)
|
||||
}
|
||||
}
|
||||
viewModel.invalidate()
|
||||
showSnackBar(requireView(), message)
|
||||
historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode)
|
||||
}
|
||||
}
|
||||
|
||||
@ExperimentalCoroutinesApi
|
||||
|
@ -155,8 +146,8 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
val menuRes = when (historyStore.state.mode) {
|
||||
HistoryFragmentState.Mode.Normal -> R.menu.library_menu
|
||||
is HistoryFragmentState.Mode.Syncing -> R.menu.library_menu
|
||||
is HistoryFragmentState.Mode.Editing -> R.menu.history_select_multi
|
||||
else -> return
|
||||
}
|
||||
|
||||
inflater.inflate(menuRes, menu)
|
||||
|
@ -171,8 +162,13 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
true
|
||||
}
|
||||
R.id.delete_history_multi_select -> {
|
||||
deleteHistoryItems(historyStore.state.mode.selectedItems)
|
||||
historyStore.dispatch(HistoryFragmentAction.ExitEditMode)
|
||||
val message = getMultiSelectSnackBarMessage(selectedItems)
|
||||
viewLifecycleOwner.lifecycleScope.launch(Main) {
|
||||
deleteSelectedHistory(historyStore.state.mode.selectedItems, requireComponents)
|
||||
viewModel.invalidate()
|
||||
historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode)
|
||||
showSnackBar(requireView(), message)
|
||||
}
|
||||
true
|
||||
}
|
||||
R.id.open_history_in_new_tabs_multi_select -> {
|
||||
|
@ -181,7 +177,10 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
selectedItem.url
|
||||
}
|
||||
|
||||
navigate(HistoryFragmentDirections.actionGlobalHome())
|
||||
nav(
|
||||
R.id.historyFragment,
|
||||
HistoryFragmentDirections.actionGlobalHome()
|
||||
)
|
||||
true
|
||||
}
|
||||
R.id.open_history_in_private_tabs_multi_select -> {
|
||||
|
@ -194,7 +193,10 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
browsingModeManager.mode = BrowsingMode.Private
|
||||
supportActionBar?.hide()
|
||||
}
|
||||
navigate(HistoryFragmentDirections.actionGlobalHome())
|
||||
nav(
|
||||
R.id.historyFragment,
|
||||
HistoryFragmentDirections.actionGlobalHome()
|
||||
)
|
||||
true
|
||||
}
|
||||
else -> super.onOptionsItemSelected(item)
|
||||
|
@ -204,22 +206,14 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
return if (historyItems.size > 1) {
|
||||
getString(R.string.history_delete_multiple_items_snackbar)
|
||||
} else {
|
||||
requireContext().getStringWithArgSafe(
|
||||
getString(
|
||||
R.string.history_delete_single_item_snackbar,
|
||||
historyItems.first().url.toShortUrl(requireComponents.publicSuffixList)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
invokePendingDeletion()
|
||||
super.onPause()
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean {
|
||||
invokePendingDeletion()
|
||||
return historyView.onBackPressed()
|
||||
}
|
||||
override fun onBackPressed(): Boolean = historyView.onBackPressed()
|
||||
|
||||
private fun openItem(item: HistoryItem, mode: BrowsingMode? = null) {
|
||||
requireComponents.analytics.metrics.track(Event.HistoryItemOpened)
|
||||
|
@ -259,58 +253,23 @@ class HistoryFragment : LibraryPageFragment<HistoryItem>(), UserInteractionHandl
|
|||
}
|
||||
}
|
||||
|
||||
private suspend fun deleteSelectedHistory(
|
||||
selected: Set<HistoryItem>,
|
||||
components: Components = requireComponents
|
||||
) {
|
||||
requireComponents.analytics.metrics.track(Event.HistoryItemRemoved)
|
||||
val storage = components.core.historyStorage
|
||||
for (item in selected) {
|
||||
storage.deleteVisit(item.url, item.visitedAt)
|
||||
}
|
||||
}
|
||||
|
||||
private fun share(data: List<ShareData>) {
|
||||
requireComponents.analytics.metrics.track(Event.HistoryItemShared)
|
||||
val directions = HistoryFragmentDirections.actionGlobalShareFragment(
|
||||
data = data.toTypedArray()
|
||||
)
|
||||
navigate(directions)
|
||||
}
|
||||
|
||||
private fun navigate(directions: NavDirections) {
|
||||
invokePendingDeletion()
|
||||
findNavController().nav(
|
||||
R.id.historyFragment,
|
||||
directions
|
||||
)
|
||||
}
|
||||
|
||||
private fun getDeleteHistoryItemsOperation(items: Set<HistoryItem>): (suspend () -> Unit) {
|
||||
return {
|
||||
CoroutineScope(IO).launch {
|
||||
historyStore.dispatch(HistoryFragmentAction.EnterDeletionMode)
|
||||
context?.components?.run {
|
||||
for (item in items) {
|
||||
analytics.metrics.track(Event.HistoryItemRemoved)
|
||||
core.historyStorage.deleteVisit(item.url, item.visitedAt)
|
||||
}
|
||||
}
|
||||
historyStore.dispatch(HistoryFragmentAction.ExitDeletionMode)
|
||||
pendingHistoryDeletionJob = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun updatePendingHistoryToDelete(items: Set<HistoryItem>) {
|
||||
pendingHistoryDeletionJob = getDeleteHistoryItemsOperation(items)
|
||||
val ids = items.map { item -> item.visitedAt }.toSet()
|
||||
historyStore.dispatch(HistoryFragmentAction.AddPendingDeletionSet(ids))
|
||||
}
|
||||
|
||||
private fun undoPendingDeletion(items: Set<HistoryItem>) {
|
||||
pendingHistoryDeletionJob = null
|
||||
val ids = items.map { item -> item.visitedAt }.toSet()
|
||||
historyStore.dispatch(HistoryFragmentAction.UndoRemovePendingDeletionSet(ids))
|
||||
}
|
||||
|
||||
private fun invokePendingDeletion() {
|
||||
pendingHistoryDeletionJob?.let {
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
it.invoke()
|
||||
}.invokeOnCompletion {
|
||||
pendingHistoryDeletionJob = null
|
||||
}
|
||||
}
|
||||
nav(R.id.historyFragment, directions)
|
||||
}
|
||||
|
||||
private suspend fun syncHistory() {
|
||||
|
|
|
@ -30,8 +30,6 @@ sealed class HistoryFragmentAction : Action {
|
|||
object ExitEditMode : HistoryFragmentAction()
|
||||
data class AddItemForRemoval(val item: HistoryItem) : HistoryFragmentAction()
|
||||
data class RemoveItemForRemoval(val item: HistoryItem) : HistoryFragmentAction()
|
||||
data class AddPendingDeletionSet(val itemIds: Set<Long>) : HistoryFragmentAction()
|
||||
data class UndoRemovePendingDeletionSet(val itemIds: Set<Long>) : HistoryFragmentAction()
|
||||
object EnterDeletionMode : HistoryFragmentAction()
|
||||
object ExitDeletionMode : HistoryFragmentAction()
|
||||
object StartSync : HistoryFragmentAction()
|
||||
|
@ -43,16 +41,12 @@ sealed class HistoryFragmentAction : Action {
|
|||
* @property items List of HistoryItem to display
|
||||
* @property mode Current Mode of History
|
||||
*/
|
||||
data class HistoryFragmentState(
|
||||
val items: List<HistoryItem>,
|
||||
val mode: Mode,
|
||||
val pendingDeletionIds: Set<Long>,
|
||||
val isDeletingItems: Boolean
|
||||
) : State {
|
||||
data class HistoryFragmentState(val items: List<HistoryItem>, val mode: Mode) : State {
|
||||
sealed class Mode {
|
||||
open val selectedItems = emptySet<HistoryItem>()
|
||||
|
||||
object Normal : Mode()
|
||||
object Deleting : Mode()
|
||||
object Syncing : Mode()
|
||||
data class Editing(override val selectedItems: Set<HistoryItem>) : Mode()
|
||||
}
|
||||
|
@ -79,17 +73,9 @@ private fun historyStateReducer(
|
|||
)
|
||||
}
|
||||
is HistoryFragmentAction.ExitEditMode -> state.copy(mode = HistoryFragmentState.Mode.Normal)
|
||||
is HistoryFragmentAction.EnterDeletionMode -> state.copy(isDeletingItems = true)
|
||||
is HistoryFragmentAction.ExitDeletionMode -> state.copy(isDeletingItems = false)
|
||||
is HistoryFragmentAction.EnterDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Deleting)
|
||||
is HistoryFragmentAction.ExitDeletionMode -> state.copy(mode = HistoryFragmentState.Mode.Normal)
|
||||
is HistoryFragmentAction.StartSync -> state.copy(mode = HistoryFragmentState.Mode.Syncing)
|
||||
is HistoryFragmentAction.FinishSync -> state.copy(mode = HistoryFragmentState.Mode.Normal)
|
||||
is HistoryFragmentAction.AddPendingDeletionSet ->
|
||||
state.copy(
|
||||
pendingDeletionIds = state.pendingDeletionIds + action.itemIds
|
||||
)
|
||||
is HistoryFragmentAction.UndoRemovePendingDeletionSet ->
|
||||
state.copy(
|
||||
pendingDeletionIds = state.pendingDeletionIds - action.itemIds
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,7 @@ class HistoryView(
|
|||
val view: View = LayoutInflater.from(container.context)
|
||||
.inflate(R.layout.component_history, container, true)
|
||||
|
||||
private var items: List<HistoryItem> = listOf()
|
||||
var mode: HistoryFragmentState.Mode = HistoryFragmentState.Mode.Normal
|
||||
private set
|
||||
|
||||
|
@ -115,16 +116,13 @@ class HistoryView(
|
|||
fun update(state: HistoryFragmentState) {
|
||||
val oldMode = mode
|
||||
|
||||
view.progress_bar.isVisible = state.isDeletingItems
|
||||
view.progress_bar.isVisible = state.mode === HistoryFragmentState.Mode.Deleting
|
||||
view.swipe_refresh.isRefreshing = state.mode === HistoryFragmentState.Mode.Syncing
|
||||
view.swipe_refresh.isEnabled =
|
||||
state.mode === HistoryFragmentState.Mode.Normal || state.mode === HistoryFragmentState.Mode.Syncing
|
||||
items = state.items
|
||||
mode = state.mode
|
||||
|
||||
historyAdapter.updatePendingDeletionIds(state.pendingDeletionIds)
|
||||
|
||||
updateEmptyState(state.pendingDeletionIds.size != historyAdapter.currentList?.size)
|
||||
|
||||
historyAdapter.updateMode(state.mode)
|
||||
val first = layoutManager.findFirstVisibleItemPosition()
|
||||
val last = layoutManager.findLastVisibleItemPosition() + 1
|
||||
|
|
|
@ -11,13 +11,13 @@ import kotlinx.android.synthetic.main.library_site_item.view.*
|
|||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.hideAndDisable
|
||||
import org.mozilla.fenix.ext.showAndEnable
|
||||
import org.mozilla.fenix.utils.Do
|
||||
import org.mozilla.fenix.library.SelectionHolder
|
||||
import org.mozilla.fenix.library.history.HistoryFragmentState
|
||||
import org.mozilla.fenix.library.history.HistoryInteractor
|
||||
import org.mozilla.fenix.library.history.HistoryItem
|
||||
import org.mozilla.fenix.library.history.HistoryItemMenu
|
||||
import org.mozilla.fenix.library.history.HistoryItemTimeGroup
|
||||
import org.mozilla.fenix.utils.Do
|
||||
|
||||
class HistoryListItemViewHolder(
|
||||
view: View,
|
||||
|
@ -44,15 +44,8 @@ class HistoryListItemViewHolder(
|
|||
item: HistoryItem,
|
||||
timeGroup: HistoryItemTimeGroup?,
|
||||
showDeleteButton: Boolean,
|
||||
mode: HistoryFragmentState.Mode,
|
||||
isPendingDeletion: Boolean = false
|
||||
mode: HistoryFragmentState.Mode
|
||||
) {
|
||||
if (isPendingDeletion) {
|
||||
itemView.history_layout.visibility = View.GONE
|
||||
} else {
|
||||
itemView.history_layout.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
itemView.history_layout.titleView.text = item.title
|
||||
itemView.history_layout.urlView.text = item.url
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ class CustomizationFragment : PreferenceFragmentCompat() {
|
|||
))
|
||||
}
|
||||
|
||||
val bottomPreference = requirePreference<RadioButtonPreference>(R.string.pref_key_toolbar_top)
|
||||
val bottomPreference = requirePreference<RadioButtonPreference>(R.string.pref_key_toolbar_bottom)
|
||||
bottomPreference.onClickListener {
|
||||
requireContext().components.analytics.metrics.track(Event.ToolbarPositionChanged(
|
||||
Event.ToolbarPositionChanged.Position.BOTTOM
|
||||
|
|
|
@ -26,28 +26,56 @@ import org.mozilla.fenix.R
|
|||
import org.mozilla.fenix.components.FenixSnackbar
|
||||
import org.mozilla.fenix.components.metrics.Event
|
||||
import org.mozilla.fenix.ext.requireComponents
|
||||
import org.mozilla.fenix.ext.settings
|
||||
import org.mozilla.fenix.ext.showToolbar
|
||||
import org.mozilla.fenix.utils.Settings
|
||||
|
||||
@SuppressWarnings("TooManyFunctions")
|
||||
class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_data) {
|
||||
|
||||
private lateinit var controller: DeleteBrowsingDataController
|
||||
private var scope: CoroutineScope? = null
|
||||
private lateinit var settings: Settings
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
controller = DefaultDeleteBrowsingDataController(requireContext())
|
||||
settings = requireContext().settings()
|
||||
|
||||
getCheckboxes().forEach {
|
||||
it.onCheckListener = { _ -> updateDeleteButton() }
|
||||
it.onCheckListener = { _ ->
|
||||
updateDeleteButton()
|
||||
updatePreference(it)
|
||||
}
|
||||
}
|
||||
|
||||
getCheckboxes().forEach { it.isChecked = true }
|
||||
getCheckboxes().forEach {
|
||||
it.isChecked = when (it.id) {
|
||||
R.id.open_tabs_item -> settings.deleteOpenTabs
|
||||
R.id.browsing_data_item -> settings.deleteBrowsingHistory
|
||||
R.id.cookies_item -> settings.deleteCookies
|
||||
R.id.cached_files_item -> settings.deleteCache
|
||||
R.id.site_permissions_item -> settings.deleteSitePermissions
|
||||
else -> true
|
||||
}
|
||||
}
|
||||
|
||||
view.delete_data?.setOnClickListener {
|
||||
askToDelete()
|
||||
}
|
||||
updateDeleteButton()
|
||||
}
|
||||
|
||||
private fun updatePreference(it: DeleteBrowsingDataItem) {
|
||||
when (it.id) {
|
||||
R.id.open_tabs_item -> settings.deleteOpenTabs = it.isChecked
|
||||
R.id.browsing_data_item -> settings.deleteBrowsingHistory = it.isChecked
|
||||
R.id.cookies_item -> settings.deleteCookies = it.isChecked
|
||||
R.id.cached_files_item -> settings.deleteCache = it.isChecked
|
||||
R.id.site_permissions_item -> settings.deleteSitePermissions = it.isChecked
|
||||
else -> return
|
||||
}
|
||||
}
|
||||
|
||||
@ExperimentalCoroutinesApi
|
||||
|
@ -138,10 +166,6 @@ class DeleteBrowsingDataFragment : Fragment(R.layout.fragment_delete_browsing_da
|
|||
delete_browsing_data_wrapper.isClickable = true
|
||||
delete_browsing_data_wrapper.alpha = ENABLED_ALPHA
|
||||
|
||||
getCheckboxes().forEach {
|
||||
it.isChecked = false
|
||||
}
|
||||
|
||||
updateItemCounts()
|
||||
|
||||
FenixSnackbar.make(
|
||||
|
|
|
@ -441,6 +441,31 @@ class Settings private constructor(
|
|||
default = false
|
||||
)
|
||||
|
||||
var deleteOpenTabs by booleanPreference(
|
||||
appContext.getPreferenceKey(R.string.pref_key_delete_open_tabs_now),
|
||||
default = true
|
||||
)
|
||||
|
||||
var deleteBrowsingHistory by booleanPreference(
|
||||
appContext.getPreferenceKey(R.string.pref_key_delete_browsing_history_now),
|
||||
default = true
|
||||
)
|
||||
|
||||
var deleteCookies by booleanPreference(
|
||||
appContext.getPreferenceKey(R.string.pref_key_delete_cookies_now),
|
||||
default = true
|
||||
)
|
||||
|
||||
var deleteCache by booleanPreference(
|
||||
appContext.getPreferenceKey(R.string.pref_key_delete_caches_now),
|
||||
default = true
|
||||
)
|
||||
|
||||
var deleteSitePermissions by booleanPreference(
|
||||
appContext.getPreferenceKey(R.string.pref_key_delete_permissions_now),
|
||||
default = true
|
||||
)
|
||||
|
||||
var shouldUseBottomToolbar by booleanPreference(
|
||||
appContext.getPreferenceKey(R.string.pref_key_toolbar_bottom),
|
||||
// Default accessibility users to top toolbar
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
<?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"
|
||||
|
@ -7,12 +6,12 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:background="?android:selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingStart="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:paddingEnd="16dp">
|
||||
|
||||
<LinearLayout
|
||||
|
@ -29,6 +28,7 @@
|
|||
android:id="@android:id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:textColor="@color/state_list_text_color"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintBottom_toTopOf="@android:id/summary"
|
||||
|
@ -42,6 +42,7 @@
|
|||
android:id="@android:id/summary"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:textColor="@color/secondary_state_list_text_color"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
|
|
|
@ -1,52 +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/. -->
|
||||
<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:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?android:selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="?android:attr/listPreferredItemHeight"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="?android:attr/scrollbarSize">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@android:id/widget_frame"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="0dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/state_list_text_color"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintBottom_toTopOf="@android:id/summary"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@android:id/widget_frame"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:text="Delete browsing data category" />
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/summary"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="@color/secondary_state_list_text_color"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@android:id/widget_frame"
|
||||
app:layout_constraintTop_toBottomOf="@android:id/title"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:text="Delete browsing data summary" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
@ -27,6 +27,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/library_item_icon_margin_horizontal"
|
||||
android:layout_marginEnd="@dimen/library_item_icon_margin_horizontal"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:clickable="false"
|
||||
android:textAppearance="@style/ListItemTextStyle"
|
||||
app:layout_constraintBottom_toTopOf="@id/subtitle"
|
||||
|
@ -42,8 +44,10 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/library_item_icon_margin_horizontal"
|
||||
android:layout_marginEnd="@dimen/library_item_icon_margin_horizontal"
|
||||
android:paddingStart="8dp"
|
||||
android:paddingEnd="8dp"
|
||||
android:clickable="false"
|
||||
android:textAppearance="@style/SubtitleTextStyle"
|
||||
android:textColor="@color/secondary_state_list_text_color"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/checkbox"
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="9dp"
|
||||
android:layout_marginEnd="74dp"
|
||||
android:ellipsize="end"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="@style/Body14TextStyle"
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp" />
|
|
@ -270,6 +270,8 @@
|
|||
<string name="preferences_sync_bookmarks">Marcadores</string>
|
||||
<!-- Preference for syncing logins -->
|
||||
<string name="preferences_sync_logins">Anicios de sesión</string>
|
||||
<!-- Preference for syncing tabs -->
|
||||
<string name="preferences_sync_tabs_2">Llingüetes abiertes</string>
|
||||
<!-- Preference for signing out -->
|
||||
<string name="preferences_sign_out">Zarrar sesión</string>
|
||||
<!-- Preference displays and allows changing current FxA device name -->
|
||||
|
@ -592,7 +594,9 @@
|
|||
<!-- Collections header on home fragment -->
|
||||
<string name="collections_header">Coleiciones</string>
|
||||
<!-- No Open Tabs Message Header -->
|
||||
<string name="no_collections_header1">Coleiciona les coses que t\'importa</string>
|
||||
<string name="no_collections_header1">Coleiciona les coses que t\'importen</string>
|
||||
<!-- Label to describe what collections are to a new user without any collections -->
|
||||
<string name="no_collections_description1">Agrupa guetes, sitios y llingüetes similares p\'acceder aína a ellos dempués.</string>
|
||||
<!-- Title for the "select tabs" step of the collection creator -->
|
||||
<string name="create_collection_select_tabs">Esbilla de llingüetes</string>
|
||||
<!-- Title for the "select collection" step of the collection creator -->
|
||||
|
@ -719,7 +723,7 @@
|
|||
<!-- Message for copying the URL via long press on the toolbar -->
|
||||
<string name="url_copied">Copióse la URL</string>
|
||||
<!-- Sample text for accessibility font size -->
|
||||
<string name="accessibility_text_size_sample_text_1">Esto ye un testu d\'exemplu. Ta equí p\'amosar cómo va apaecer cuando aumentes o amenorgues el tamañu con esti axuste.</string>
|
||||
<string name="accessibility_text_size_sample_text_1">Esto ye un testu d\'exemplu. Ta equí p\'amosar cómo va apaecer cuando aumentes o amenorgues el so tamañu con esti axuste.</string>
|
||||
|
||||
<!-- Summary for Accessibility Text Size Scaling Preference -->
|
||||
<string name="preference_accessibility_text_size_summary">Agranda o apequeña\'l testu de los sitios web</string>
|
||||
|
@ -727,8 +731,15 @@
|
|||
<!-- Title for Accessibility Text Size Scaling Preference -->
|
||||
<string name="preference_accessibility_font_size_title">Tamañu de la fonte</string>
|
||||
|
||||
<!-- Title for Accessibility Text Automatic Size Scaling Preference -->
|
||||
<string name="preference_accessibility_auto_size_2">Tamañu de fontes automáticu</string>
|
||||
<!-- Summary for Accessibility Text Automatic Size Scaling Preference -->
|
||||
<string name="preference_accessibility_auto_size_summary">El tamañu de les fontes van casar colos tos axustes d\'Android. Desactiva esta opción pa xestionar esi tamañu equí.</string>
|
||||
|
||||
<!-- Title for the Delete browsing data preference -->
|
||||
<string name="preferences_delete_browsing_data">Desaniciu de los datos de restolar</string>
|
||||
<!-- Title for the tabs item in Delete browsing data -->
|
||||
<string name="preferences_delete_browsing_data_tabs_title_2">Llingüetes abiertes</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">%d llingüetes</string>
|
||||
<!-- Title for the data and history items in Delete browsing data -->
|
||||
|
@ -831,8 +842,19 @@
|
|||
|
||||
<!-- text for the tracking protection onboarding card header -->
|
||||
<string name="onboarding_tracking_protection_header_2">Privacidá automática</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_description_2">Los axustes de privacidá y seguranza bloquien rastrexadores, malware y compañes que t\'escorren.</string>
|
||||
<!-- text for tracking protection radio button option for standard level of blocking -->
|
||||
<string name="onboarding_tracking_protection_standard_button_2">Estándar (por defeutu)</string>
|
||||
<!-- text for standard blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_standard_button_description_2">Bloquia dalgunos rastrexadores. Les páxines van cargar de mou normal.</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_button">Estricta (aconséyase)</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_option">Estricta</string>
|
||||
<!-- text for strict blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_strict_button_description_2">Bloquia más rastrexadores, anuncios y ventanos emerxentes. Los páxines van cargar más rápido pero quiciabes dalgunes funcionalidaes nun funcionen.</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 -->
|
||||
|
@ -915,10 +937,16 @@
|
|||
<string name="preference_enhanced_tracking_protection_explanation">Curia los tos datos. %s protéxite de la mayoría de rastrexadores comunes que siguen lo que faes en llinia.</string>
|
||||
<!-- Text displayed that links to website about enhanced tracking protection -->
|
||||
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Deprender más</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_default_1">Estándar (por defeutu)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_description_3">Bloquia dalgunos rastrexadores. Les páxines van cargar de mou normal.</string>
|
||||
<!-- Accessibility text for the Standard protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_info_button">Qué se bloquia coles proteición estándar escontra\'l rastrexu</string>
|
||||
<!-- Preference for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict">Estricta</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_description_2">Bloquia más rastrexadores, anuncios y ventanos emerxentes. Les páxines van cargar más rápido pero quiciabes dalgunes funcionalidaes nun funcionen.</string>
|
||||
<!-- Accessibility text for the Strict protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_info_button">Lo que la proteición estricta escontra\'l rastrexu bloquia</string>
|
||||
<!-- Preference for enhanced tracking protection for the custom protection settings -->
|
||||
|
@ -972,6 +1000,8 @@
|
|||
<string name="etp_tracking_content_title">Conteníu que rastrexa</string>
|
||||
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
|
||||
<string name="etp_tracking_content_description">Para la carga d\'anuncios, vídeos y otru conteníu esternu que contenga códigu que rastrexe. Quiciabes afeute a la funcionalidá de dalgunos sitios web.</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_cfr_message">Cada vegada que l\'escudu tea moráu indica que %s bloquió rastrexadores nun sitiu. Tócalu pa más información.</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
|
||||
<string name="etp_panel_on">ACTIVÓSE nesti sitiu</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
|
||||
|
@ -1242,6 +1272,11 @@
|
|||
<!-- Text displayed when user has no tabs that have been synced -->
|
||||
<string name="synced_tabs_no_tabs">Nun tienes llingüetes abiertes nel Firefox de los demás preseos de to.</string>
|
||||
|
||||
<!-- Top Sites -->
|
||||
<!-- Title text displayed in the dialog when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_title">Algamóse la llende de sitios destacaos</string>
|
||||
<!-- Content description text displayed in the dialog when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_content">P\'amestar sitios nuevos, desanicia dalgún. Ten primíu un sitiu y esbilla Desaniciar.</string>
|
||||
<!-- Confirmation dialog button text when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_confirmation_button">Val, entendílo</string>
|
||||
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- Placeholder text shown in the search bar before a user enters text -->
|
||||
<string name="search_hint">Увядзіце запыт або адрас</string>
|
||||
|
||||
<!-- Delete session button to erase your history in a private session -->
|
||||
<string name="private_browsing_delete_session">Выдаліць сеанс</string>
|
||||
|
||||
|
@ -43,6 +46,10 @@
|
|||
<string name="browser_menu_settings">Налады</string>
|
||||
<!-- Browser menu button that opens a user's library -->
|
||||
<string name="browser_menu_library">Бібліятэка</string>
|
||||
<!-- Browser menu toggle that requests a desktop site -->
|
||||
<string name="browser_menu_desktop_site">Версія для камп’ютара</string>
|
||||
<!-- Browser menu toggle that adds a shortcut to the site on the device home screen. -->
|
||||
<string name="browser_menu_add_to_homescreen">Дадаць на хатні экран</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">Усталяваць</string>
|
||||
<!-- Menu option on the toolbar that takes you to synced tabs page-->
|
||||
|
@ -380,6 +387,8 @@
|
|||
<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 -->
|
||||
|
@ -486,4 +495,9 @@
|
|||
<!-- Add button text for the Add to Homescreen dialog -->
|
||||
<string name="add_to_homescreen_add">Дадаць</string>
|
||||
|
||||
<!-- Content description (not visible, for screen readers etc.): Title for the button to add a search engine in the action bar -->
|
||||
<string name="search_engine_add_button_content_description">Дадаць</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Title for the button to save a search engine in the action bar -->
|
||||
<string name="search_engine_add_custom_search_engine_edit_button_content_description">Захаваць</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -31,9 +31,17 @@
|
|||
<!-- Delete session button to erase your history in a private session -->
|
||||
<string name="private_browsing_delete_session">Obriši sesiju</string>
|
||||
|
||||
<!-- Private mode shortcut "contextual feature recommendation" (CFR) -->
|
||||
<!-- Text for the main message -->
|
||||
<string name="cfr_message">Dodajte prečicu za otvaranje privatnih tabova sa Početnog ekrana.</string>
|
||||
<!-- Text for the positive button -->
|
||||
<string name="cfr_pos_button_text">Dodaj prečicu</string>
|
||||
<!-- Text for the negative button -->
|
||||
<string name="cfr_neg_button_text">Ne, hvala</string>
|
||||
|
||||
<!-- Search widget "contextual feature recommendation" (CFR) -->
|
||||
<!-- Text for the main message. 'Firefox' intentionally hardcoded here.-->
|
||||
<string name="search_widget_cfr_message">Brže dođite do Firefoxa. Dodajte widget na svoj Početni ekran.</string>
|
||||
<!-- Text for the positive button -->
|
||||
<string name="search_widget_cfr_pos_button_text">Dodaj widget</string>
|
||||
<!-- Text for the negative button -->
|
||||
|
@ -45,6 +53,9 @@
|
|||
<!-- Shortcut action to open new private tab -->
|
||||
<string name="home_screen_shortcut_open_new_private_tab_2">Novi privatni tab</string>
|
||||
|
||||
<!-- Browser Fragment -->
|
||||
<!-- Content description (not visible, for screen readers etc.): Navigate to open tabs -->
|
||||
<string name="browser_tabs_button">Otvoreni tabovi</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Navigate backward (browsing history) -->
|
||||
<string name="browser_menu_back">Nazad</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Navigate forward (browsing history) -->
|
||||
|
@ -121,6 +132,8 @@
|
|||
<!-- Search Fragment -->
|
||||
<!-- Button in the search view that lets a user search by scanning a QR code -->
|
||||
<string name="search_scan_button">Skeniraj</string>
|
||||
<!-- Button in the search view that lets a user search by using a shortcut -->
|
||||
<string name="search_shortcuts_button">Prečice</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">Postavke pretraživača</string>
|
||||
<!-- DEPRECATED: Header displayed when selecting a shortcut search engine -->
|
||||
|
@ -133,6 +146,10 @@
|
|||
<string name="search_suggestions_onboarding_allow_button">Dozvoli</string>
|
||||
<!-- Button in the search suggestions onboarding that does not allow search suggestions in private sessions -->
|
||||
<string name="search_suggestions_onboarding_do_not_allow_button">Ne dozvoli</string>
|
||||
<!-- Search suggestion onboarding hint title text -->
|
||||
<string name="search_suggestions_onboarding_title">Dozvoliti prijedloge za pretraživanje u privatnim sesijama?</string>
|
||||
<!-- Search suggestion onboarding hint description text, first parameter is the name of the app defined in app_name (for example: Fenix)-->
|
||||
<string name="search_suggestions_onboarding_text">%s će podijeliti sve što unesete u adresnu traku sa vašim glavnim pretraživačem.</string>
|
||||
<!-- Search suggestion onboarding hint Learn more link text -->
|
||||
<string name="search_suggestions_onboarding_learn_more_link">Saznajte više</string>
|
||||
|
||||
|
@ -164,6 +181,8 @@
|
|||
<!-- Preference link to rating Fenix on the Play Store -->
|
||||
<string name="preferences_rate">Ocijenite na Google Play</string>
|
||||
|
||||
<!-- Preference for giving feedback about Fenix -->
|
||||
<string name="preferences_feedback">Pošalji povratnu info.</string>
|
||||
<!-- Preference linking to about page for Fenix
|
||||
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
|
||||
<string name="preferences_about">O %1$s</string>
|
||||
|
@ -181,12 +200,22 @@
|
|||
<string name="preferences_category_privacy">Privatnost</string>
|
||||
<!-- Preference category for privacy and security settings -->
|
||||
<string name="preferences_category_privacy_security">Privatnost i sigurnost</string>
|
||||
<!-- Preference for advanced site permissions -->
|
||||
<string name="preferences_site_permissions">Dozvole stranice</string>
|
||||
<!-- Preference for private browsing options -->
|
||||
<string name="preferences_private_browsing_options">Privatno surfanje</string>
|
||||
<!-- Preference for opening links in a private tab-->
|
||||
<string name="preferences_open_links_in_a_private_tab">Otvaraj linkove u privatnom tabu</string>
|
||||
<!-- Preference for allowing screenshots to be taken while in a private tab-->
|
||||
<string name="preferences_allow_screenshots_in_private_mode">Dozvoli screenshote u privatnom surfanju</string>
|
||||
<!-- Preference for adding private browsing shortcut -->
|
||||
<string name="preferences_add_private_browsing_shortcut">Dodaj prečicu za privatno surfanje</string>
|
||||
<!-- Preference to override the Firefox Account server -->
|
||||
<string name="preferences_override_fxa_server">Zaseban Firefox Account server</string>
|
||||
<!-- Preference to override the Sync token server -->
|
||||
<string name="preferences_override_sync_tokenserver">Zaseban Sync server</string>
|
||||
<!-- Toast shown after updating the FxA/Sync server override preferences -->
|
||||
<string name="toast_override_fxa_sync_server_done">Firefox Account/Sync server promijenjen. Ugasite aplikaciju za primjenu promjena…</string>
|
||||
<!-- Preference category for account information -->
|
||||
<string name="preferences_category_account">Račun</string>
|
||||
<!-- Preference shown on banner to sign into account -->
|
||||
|
@ -197,13 +226,46 @@
|
|||
<string name="preferences_theme">Tema</string>
|
||||
<!-- Preference for settings related to visual options -->
|
||||
<string name="preferences_customize">Prilagodi</string>
|
||||
<!-- Preference description for banner about signing in -->
|
||||
<string name="preferences_sign_in_description">Sinhronizujte zabilješke, historiju i više od toga s vašim Firefox računom</string>
|
||||
<!-- Preference shown instead of account display name while account profile information isn't available yet. -->
|
||||
<string name="preferences_account_default_name">Firefox račun</string>
|
||||
<!-- Preference for language -->
|
||||
<string name="preferences_language">Jezik</string>
|
||||
<!-- Preference for data choices -->
|
||||
<string name="preferences_data_choices">Izbori podataka</string>
|
||||
<!-- Preference for data collection -->
|
||||
<string name="preferences_data_collection">Kolekcije podataka</string>
|
||||
<!-- Preference linking to the privacy notice -->
|
||||
<string name="preferences_privacy_link">Pravila privatnosti</string>
|
||||
<!-- Preference category for developer tools -->
|
||||
<string name="developer_tools_category">Razvojni alati</string>
|
||||
<!-- Preference for developers -->
|
||||
<string name="preferences_remote_debugging">Udaljeno debagiranje preko USB-a</string>
|
||||
<!-- Preference title for switch preference to show search shortcuts -->
|
||||
<string name="preferences_show_search_shortcuts">Prikaži prečice za pretraživanje</string>
|
||||
<!-- Preference title for switch preference to show search suggestions -->
|
||||
<string name="preferences_show_search_suggestions">Prikaži prijedloge za pretraživanje</string>
|
||||
<!-- Preference title for switch preference to show voice search button -->
|
||||
<string name="preferences_show_voice_search">Prikaži glasovno pretraživanje</string>
|
||||
<!-- Preference title for switch preference to show search suggestions also in private mode -->
|
||||
<string name="preferences_show_search_suggestions_in_private">Prikaži u privatnim sesijama</string>
|
||||
<!-- Preference title for switch preference to show a clipboard suggestion when searching -->
|
||||
<string name="preferences_show_clipboard_suggestions">Prikaži clipboard prijedloge</string>
|
||||
<!-- Preference title for switch preference to suggest browsing history when searching -->
|
||||
<string name="preferences_search_browsing_history">Pretraži historiju surfanja</string>
|
||||
<!-- Preference title for switch preference to suggest bookmarks when searching -->
|
||||
<string name="preferences_search_bookmarks">Pretraži zabilješke</string>
|
||||
<!-- Preference for account settings -->
|
||||
<string name="preferences_account_settings">Postavke računa</string>
|
||||
<!-- Preference for open links in third party apps -->
|
||||
<string name="preferences_open_links_in_apps">Otvori linkove u aplikacijama</string>
|
||||
<!-- Preference for add_ons -->
|
||||
<string name="preferences_addons">Add-oni</string>
|
||||
|
||||
<!-- Account Preferences -->
|
||||
<!-- Preference for triggering sync -->
|
||||
<string name="preferences_sync_now">Sinhr. odmah</string>
|
||||
<!-- Preference category for sync -->
|
||||
<string name="preferences_sync_category">Izaberite šta ćete sinhronizovati</string>
|
||||
<!-- Preference for syncing history -->
|
||||
|
@ -239,6 +301,12 @@
|
|||
<!-- Send Tab -->
|
||||
<!-- Name of the "receive tabs" notification channel. Displayed in the "App notifications" system settings for the app -->
|
||||
<string name="fxa_received_tab_channel_name">Primljeni tabovi</string>
|
||||
<!-- Description of the "receive tabs" notification channel. Displayed in the "App notifications" system settings for the app -->
|
||||
<string name="fxa_received_tab_channel_description">Obavještenja za tabove primljene od drugih Firefox uređaja.</string>
|
||||
<!-- The body for these is the URL of the tab received -->
|
||||
<string name="fxa_tab_received_notification_name">Tab primljen</string>
|
||||
<!-- When multiple tabs have been received -->
|
||||
<string name="fxa_tabs_received_notification_name">Tabovi primljeni</string>
|
||||
<!-- %s is the device name -->
|
||||
<string name="fxa_tab_received_from_notification_name">Tab iz %s</string>
|
||||
|
||||
|
@ -261,14 +329,23 @@
|
|||
<!-- Text displayed when there are no exceptions, with learn more link that brings users to a tracking protection SUMO page -->
|
||||
<string name="exceptions_empty_message_learn_more_link">Saznajte više</string>
|
||||
|
||||
<!-- Description in Quick Settings that tells user tracking protection is off globally for all sites, and links to Settings to turn it on -->
|
||||
<string name="preferences_tracking_protection_turned_off_globally">Globalno isključeno, možete uključiti u Postavkama.</string>
|
||||
|
||||
<!-- Preference switch for Telemetry -->
|
||||
<string name="preferences_telemetry">Telemetrija</string>
|
||||
<!-- Preference switch for usage and technical data collection -->
|
||||
<string name="preference_usage_data">Tehnički i podaci o upotrebi</string>
|
||||
<!-- Preference description for usage and technical data collection -->
|
||||
<string name="preferences_usage_data_description">Šalje podatke Mozilli o performansama, upotrebi, hardveru i prilagođenjima vašeg browsera kako bi nam pomogli da poboljšamo %1$s</string>
|
||||
<!-- Preference switch for marketing data collection -->
|
||||
<string name="preferences_marketing_data">Marketinški podaci</string>
|
||||
<!-- Preference description for marketing data collection, parameter is the app name (e.g. Firefox) -->
|
||||
<string name="preferences_marketing_data_description">Šalje podatke Leanplumu, našem mobile marketing vendoru, o opcijama koje koristite u %1$s</string>
|
||||
<!-- Title for experiments preferences -->
|
||||
<string name="preference_experiments">Eksperimenti</string>
|
||||
<!-- Summary for experiments preferences -->
|
||||
<string name="preference_experiments_summary">Dozvoljava Mozilli da instalira i prikuplja podatke o eksperimentalnim opcijama</string>
|
||||
<!-- Preference switch for Mozilla location service -->
|
||||
<string name="preferences_mozilla_location_service">Mozilla lokacijski servis</string>
|
||||
<!-- Preference switch for app health report. The first parameter is the name of the application (For example: Fenix) -->
|
||||
|
@ -326,6 +403,10 @@
|
|||
<!-- Option in Library to open History page -->
|
||||
<string name="library_history">Historija</string>
|
||||
|
||||
<!-- Option in Library to open Synced Tabs page -->
|
||||
<string name="library_synced_tabs">Sinhronizovani tabovi</string>
|
||||
<!-- Option in Library to open Reading List -->
|
||||
<string name="library_reading_list">Lista za čitanje</string>
|
||||
<!-- Menu Item Label for Search in Library -->
|
||||
<string name="library_search">Traži</string>
|
||||
<!-- Settings Page Title -->
|
||||
|
@ -723,4 +804,344 @@
|
|||
<!-- Title for the Delete browsing data on quit preference -->
|
||||
<string name="preferences_delete_browsing_data_on_quit">Obriši podatke surfanja pri izlazu</string>
|
||||
|
||||
</resources>
|
||||
<!-- Category for history items to delete on quit in delete browsing data on quit -->
|
||||
<string name="preferences_delete_browsing_data_on_quit_browsing_history">Historija surfanja</string>
|
||||
<!-- Action item in menu for the Delete browsing data on quit feature -->
|
||||
<string name="delete_browsing_data_on_quit_action">Ugasi</string>
|
||||
|
||||
<!-- Dialog message to the user asking to delete browsing data. -->
|
||||
<string name="delete_browsing_data_prompt_message">Ovo će obrisati sve vaše podatke surfanja.</string>
|
||||
<!-- Dialog message to the user asking to delete browsing data. Parameter will be replaced by app name. -->
|
||||
<string name="delete_browsing_data_prompt_message_3">%s će obrisati izabrane podatke surfanja.</string>
|
||||
<!-- Text for the cancel button for the data deletion dialog -->
|
||||
<string name="delete_browsing_data_prompt_cancel">Otkaži</string>
|
||||
<!-- Text for the allow button for the data deletion dialog -->
|
||||
<string name="delete_browsing_data_prompt_allow">Obriši</string>
|
||||
|
||||
<!-- Text for the snackbar confirmation that the data was deleted -->
|
||||
<string name="preferences_delete_browsing_data_snackbar">Podaci surfanja izbrisani</string>
|
||||
<!-- Text for the snackbar to show the user that the deletion of browsing data is in progress -->
|
||||
<string name="deleting_browsing_data_in_progress">Brišem podatke surfanja…</string>
|
||||
|
||||
<!-- Tips -->
|
||||
<!-- text for firefox preview moving tip header "Firefox Preview" and "Firefox Nightly" are intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_header">Firefox Preview je sada Firefox Nightly</string>
|
||||
<!-- text for firefox preview moving tip description -->
|
||||
<string name="tip_firefox_preview_moved_description">Firefox Nightly se ažurira svake noći i sadrži eksperimentalne opcije.
|
||||
Međutim, može biti manje stabilan. Za više stabilnosti, preuzmite naš beta browser.</string>
|
||||
<!-- text for firefox preview moving tip button. "Firefox for Android Beta" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_button_2">Preuzmi Firefox za Android Beta</string>
|
||||
|
||||
<!-- Onboarding -->
|
||||
<!-- Text for onboarding welcome message
|
||||
The first parameter is the name of the app (e.g. Firefox Preview) -->
|
||||
<string name="onboarding_header">Dobrodošli u %s!</string>
|
||||
<!-- text for the Firefox Accounts section header -->
|
||||
<string name="onboarding_fxa_section_header">Već imate račun?</string>
|
||||
<!-- text for the Firefox Preview feature section header
|
||||
The first parameter is the name of the app (e.g. Firefox Preview) -->
|
||||
<string name="onboarding_feature_section_header">Upoznajte %s</string>
|
||||
<!-- text for the "What's New" onboarding card header -->
|
||||
<string name="onboarding_whats_new_header1">Pogledajte šta je novo</string>
|
||||
<!-- text for the button to confirm automatic sign-in -->
|
||||
<string name="onboarding_firefox_account_auto_signin_confirm">Da, prijavi me</string>
|
||||
<!-- text for the automatic sign-in button while signing in is in process -->
|
||||
<string name="onboarding_firefox_account_signing_in">Prijava…</string>
|
||||
<!-- text for the button to manually sign into Firefox account. The word "Firefox" should not be translated -->
|
||||
<string name="onboarding_firefox_account_sign_in">Prijava u Firefox</string>
|
||||
<!-- text for the button to stay signed out when presented with an option to automatically sign-in. -->
|
||||
<string name="onboarding_firefox_account_stay_signed_out">Ostanite odjavljeni</string>
|
||||
<!-- text for the tracking protection onboarding card header -->
|
||||
<string name="onboarding_tracking_protection_header_2">Automatska privatnost</string>
|
||||
<!-- text for the private browsing onboarding card header -->
|
||||
<string name="onboarding_private_browsing_header">Surfajte privatno</string>
|
||||
<!-- text for the private browsing onboarding card description
|
||||
The first parameter is an icon that represents private browsing -->
|
||||
<string name="onboarding_private_browsing_description1">Otvorite privatni tab jednom: dodirnite %s ikonicu.</string>
|
||||
<!-- text for the private browsing onboarding card description, explaining how to always using private browsing -->
|
||||
<string name="onboarding_private_browsing_always_description">Otvorite privatni tab svaki put: ažurirajte postavke privatnog surfanja.</string>
|
||||
<!-- text for the private browsing onbording card button, that launches settings -->
|
||||
<string name="onboarding_private_browsing_button">Otvori postavke</string>
|
||||
<!-- text for the privacy notice onboarding card header -->
|
||||
<string name="onboarding_privacy_notice_header">Vaša privatnost</string>
|
||||
<!-- text for the privacy notice onboarding card description
|
||||
The first parameter is the name of the app (e.g. Firefox Preview) -->
|
||||
<string name="onboarding_privacy_notice_description">%s smo dizajnirali da vam pruži kontrolu nad onim što dijelite
|
||||
online i što dijelite s nama.</string>
|
||||
<!-- Text for the button to read the privacy notice -->
|
||||
<string name="onboarding_privacy_notice_read_button">Pročitajte naša pravila privatnosti</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Close onboarding screen -->
|
||||
<string name="onboarding_close">Zatvori</string>
|
||||
|
||||
<!-- text for the button to finish onboarding -->
|
||||
<string name="onboarding_finish">Započni surfanje</string>
|
||||
|
||||
<!-- Onboarding theme -->
|
||||
<!-- text for the theme picker onboarding card header -->
|
||||
<string name="onboarding_theme_picker_header">Izaberite vašu temu</string>
|
||||
<!-- text for the theme picker onboarding card description -->
|
||||
<string name="onboarding_theme_picker_description1">Štedite bateriju i vid omogućavanjem tamnog režima.</string>
|
||||
<!-- Automatic theme setting (will follow device setting) -->
|
||||
<string name="onboarding_theme_automatic_title">Automatski</string>
|
||||
<!-- Summary of automatic theme setting (will follow device setting) -->
|
||||
<string name="onboarding_theme_automatic_summary">Prilagođava se postavkama vašeg uređaja</string>
|
||||
<!-- Theme setting for dark mode -->
|
||||
<string name="onboarding_theme_dark_title">Tamna tema</string>
|
||||
<!-- Theme setting for light mode -->
|
||||
<string name="onboarding_theme_light_title">Svijetla tema</string>
|
||||
|
||||
<!-- Text shown in snackbar when multiple tabs have been sent to device -->
|
||||
<string name="sync_sent_tabs_snackbar">Tabovi poslani!</string>
|
||||
<!-- Text shown in snackbar when one tab has been sent to device -->
|
||||
<string name="sync_sent_tab_snackbar">Tab poslan!</string>
|
||||
<!-- Text shown in snackbar when sharing tabs failed -->
|
||||
<string name="sync_sent_tab_error_snackbar">Ne mogu poslati</string>
|
||||
<!-- Text shown in snackbar for the "retry" action that the user has after sharing tabs failed -->
|
||||
<string name="sync_sent_tab_error_snackbar_action">PONOVI</string>
|
||||
<!-- Title of QR Pairing Fragment -->
|
||||
<string name="sync_scan_code">Skenirajte kod</string>
|
||||
<!-- Instructions on how to access pairing -->
|
||||
<string name="sign_in_instructions"><![CDATA[Otvorite Firefox na vašem računaru i posjetite <b>https://firefox.com/pair</b>]]></string>
|
||||
<!-- Text shown for sign in pairing when ready -->
|
||||
<string name="sign_in_ready_for_scan">Spreman za skeniranje</string>
|
||||
|
||||
<!-- Text shown for settings option for sign with pairing -->
|
||||
<string name="sign_in_with_camera">Prijavite se pomoću kamere</string>
|
||||
<!-- Text shown for settings option for sign with email -->
|
||||
<string name="sign_in_with_email">Radije koristi email</string>
|
||||
<!-- Text shown in confirmation dialog to sign out of account -->
|
||||
<string name="sign_out_confirmation_message">Firefox će zaustaviti sinhronizaciju s vašim računom, ali neće obrisati ništa od vaših podataka surfanja na ovom uređaju.</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">%s će zaustaviti sinhronizaciju s vašim računom, ali neće obrisati ništa od vaših podataka surfanja na ovom uređaju.</string>
|
||||
<!-- Option to cancel signing out shown in confirmation dialog to sign out of account -->
|
||||
<string name="sign_out_cancel">Otkaži</string>
|
||||
|
||||
<!-- Enhanced Tracking Protection -->
|
||||
<!-- Link displayed in enhanced tracking protection panel to access tracking protection settings -->
|
||||
<string name="etp_settings">Postavke zaštite</string>
|
||||
<!-- Preference title for enhanced tracking protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection">Napredna zaštita od praćenja</string>
|
||||
<!-- Title for the description of enhanced tracking protection -->
|
||||
<string name="preference_enhanced_tracking_protection_explanation_title">Surfajte bez da vas prate</string>
|
||||
<!-- Description of enhanced tracking protection. The first parameter is the name of the application (For example: Fenix) -->
|
||||
<string name="preference_enhanced_tracking_protection_explanation">Zadržite podatke za sebe. %s vas štiti od većine najčešćih pratilaca koji prate ono što radite online.</string>
|
||||
<!-- Text displayed that links to website about enhanced tracking protection -->
|
||||
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Saznajte više</string>
|
||||
|
||||
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
|
||||
<string name="etp_panel_on">Zaštite za ovu stranicu su UKLJUČENE</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
|
||||
<string name="etp_panel_off">Zaštite za ovu stranicu su ISKLJUČENE</string>
|
||||
<!-- Header for exceptions list for which sites enhanced tracking protection is always off -->
|
||||
<string name="enhanced_tracking_protection_exceptions">Napredna zaštita od praćenja je isključena za ove stranice</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Navigate
|
||||
back from ETP details (Ex: Tracking content) -->
|
||||
<string name="etp_back_button_content_description">Vrati me nazad</string>
|
||||
<!-- About page Your rights link text -->
|
||||
<string name="about_your_rights">Vaša prava</string>
|
||||
<!-- About page link text to open open source licenses screen -->
|
||||
<string name="about_open_source_licenses">Open source biblioteke koje koristimo</string>
|
||||
<!-- About page link text to open what's new link -->
|
||||
<string name="about_whats_new">Šta je novo u %s</string>
|
||||
<!-- Open source licenses page title
|
||||
The first parameter is the app name -->
|
||||
<string name="open_source_licenses_title">%s | OSS biblioteke</string>
|
||||
|
||||
<!-- About page link text to open support link -->
|
||||
<string name="about_support">Podrška</string>
|
||||
<!-- About page link text to list of past crashes (like about:crashes on desktop) -->
|
||||
<string name="about_crashes">Rušenja</string>
|
||||
<!-- About page link text to open privacy notice link -->
|
||||
<string name="about_privacy_notice">Pravila privatnosti</string>
|
||||
<!-- About page link text to open know your rights link -->
|
||||
<string name="about_know_your_rights">Znajte vaša prava</string>
|
||||
<!-- About page link text to open licensing information link -->
|
||||
<string name="about_licensing_information">Informacije o licenciranju</string>
|
||||
<!-- About page link text to open a screen with libraries that are used -->
|
||||
<string name="about_other_open_source_libraries">Biblioteke koje koristimo</string>
|
||||
|
||||
<!-- Content description of the tab counter toolbar button when one tab is open -->
|
||||
<string name="tab_counter_content_description_one_tab">1 tab</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) -->
|
||||
<string name="tab_counter_content_description_multi_tab">%d tabova</string>
|
||||
|
||||
<!-- Browser long press popup menu -->
|
||||
<!-- Copy the current url -->
|
||||
<string name="browser_toolbar_long_press_popup_copy">Kopiraj</string>
|
||||
<!-- Paste & go the text in the clipboard. '&' is replaced with the ampersand symbol: & -->
|
||||
<string name="browser_toolbar_long_press_popup_paste_and_go">Zalijepi i otvori</string>
|
||||
<!-- Paste the text in the clipboard -->
|
||||
<string name="browser_toolbar_long_press_popup_paste">Zalijepi</string>
|
||||
<!-- Snackbar message shown after an URL has been copied to clipboard. -->
|
||||
<string name="browser_toolbar_url_copied_to_clipboard_snackbar">URL kopiran u clipboard</string>
|
||||
|
||||
<!-- Title text for the Add To Homescreen dialog -->
|
||||
<string name="add_to_homescreen_title">Dodaj na Početni ekran</string>
|
||||
<!-- Cancel button text for the Add to Homescreen dialog -->
|
||||
<string name="add_to_homescreen_cancel">Otkaži</string>
|
||||
<!-- Add button text for the Add to Homescreen dialog -->
|
||||
<string name="add_to_homescreen_add">Dodaj</string>
|
||||
<!-- Continue to website button text for the first-time Add to Homescreen dialog -->
|
||||
<string name="add_to_homescreen_continue">Nastavi na web stranicu</string>
|
||||
<!-- Placeholder text for the TextView in the Add to Homescreen dialog -->
|
||||
<string name="add_to_homescreen_text_placeholder">Naziv prečice</string>
|
||||
<!-- Describes the add to homescreen functionality -->
|
||||
<string name="add_to_homescreen_description">Ovu web stranicu možete lahko dodati na Početni ekran telefona za brz pristup istoj i da surfate brže s iskustvom sličnom aplikaciji.</string>
|
||||
|
||||
<!-- Preference for managing the settings for logins and passwords in Fenix -->
|
||||
<string name="preferences_passwords_logins_and_passwords">Prijave i lozinke</string>
|
||||
<!-- Preference for managing the saving of logins and passwords in Fenix -->
|
||||
<string name="preferences_passwords_save_logins">Spašene prijave i lozinke</string>
|
||||
<!-- Preference option for asking to save passwords in Fenix -->
|
||||
<string name="preferences_passwords_save_logins_ask_to_save">Pitaj za spašavanje</string>
|
||||
<!-- Preference option for never saving passwords in Fenix -->
|
||||
<string name="preferences_passwords_save_logins_never_save">Ne spašavaj nikad</string>
|
||||
<!-- Preference for autofilling saved logins in Fenix -->
|
||||
<string name="preferences_passwords_autofill">Auto. unos</string>
|
||||
<!-- Preference for syncing saved logins in Fenix -->
|
||||
<string name="preferences_passwords_sync_logins">Sinkroniziraj prijave</string>
|
||||
<!-- Syncing saved logins in Fenix is on -->
|
||||
<string name="preferences_passwords_sync_logins_on">Uklj</string>
|
||||
<!-- Syncing saved logins in Fenix is off -->
|
||||
<string name="preferences_passwords_sync_logins_off">Isklj</string>
|
||||
<!-- Syncing saved logins in Fenix needs login -->
|
||||
<string name="preferences_passwords_sync_logins_sign_in">Prijavite se na Sync</string>
|
||||
<!-- Preference to access list of saved logins -->
|
||||
<string name="preferences_passwords_saved_logins">Spašene prijave</string>
|
||||
<!-- Preference to access list of saved logins -->
|
||||
<string name="preferences_passwords_saved_logins_description_empty_learn_more_link">Saznajte više o Syncu.</string>
|
||||
<!-- Preference to access list of login exceptions that we never save logins for -->
|
||||
<string name="preferences_passwords_exceptions">Izuzeci</string>
|
||||
<!-- Empty description of list of login exceptions that we never save logins for -->
|
||||
<string name="preferences_passwords_exceptions_description_empty">Prijave i lozinke koje nisu spašene će biti prikazane ovdje.</string>
|
||||
<!-- Description of list of login exceptions that we never save logins for -->
|
||||
<string name="preferences_passwords_exceptions_description">Prijave i lozinke neće biti spašene za ove web stranice.</string>
|
||||
<!-- Hint for search box in logins list -->
|
||||
<string name="preferences_passwords_saved_logins_search">Pretraži prijave</string>
|
||||
<!-- Option to sort logins list A-Z, alphabetically -->
|
||||
<string name="preferences_passwords_saved_logins_alphabetically">Po abecedi</string>
|
||||
<!-- Option to sort logins list by most recently used -->
|
||||
<string name="preferences_passwords_saved_logins_recently_used">Nedavno korišteno</string>
|
||||
<!-- The header for the site that a login is for -->
|
||||
<string name="preferences_passwords_saved_logins_site">Stranica</string>
|
||||
<!-- The header for the username for a login -->
|
||||
<string name="preferences_passwords_saved_logins_username">Korisničko ime</string>
|
||||
<!-- The header for the password for a login -->
|
||||
<string name="preferences_passwords_saved_logins_password">Lozinka</string>
|
||||
<!-- Message displayed in security prompt to reenter a secret pin to access saved logins -->
|
||||
<string name="preferences_passwords_saved_logins_enter_pin">Ponovo unesite PIN</string>
|
||||
<!-- Message displayed in security prompt to access saved logins -->
|
||||
<string name="preferences_passwords_saved_logins_enter_pin_description">Otključajte za pregled spašenih prijava</string>
|
||||
<!-- Learn more link that will link to a page with more information displayed when a connection is insecure and we detect the user is entering a password -->
|
||||
<string name="logins_insecure_connection_warning_learn_more">Saznajte više</string>
|
||||
<!-- Prompt message displayed when Fenix detects a user has entered a password and user decides if Fenix should save it. The first parameter is the name of the application (For example: Fenix) -->
|
||||
<string name="logins_doorhanger_save">Da li želite da %s spasi ovu prijavu?</string>
|
||||
<!-- Positive confirmation that Fenix should save the new or updated login -->
|
||||
<string name="logins_doorhanger_save_confirmation">Spasi</string>
|
||||
<!-- Negative confirmation that Fenix should not save the new or updated login -->
|
||||
<string name="logins_doorhanger_save_dont_save">Nemoj spasiti</string>
|
||||
<!-- Shown in snackbar to tell user that the password has been copied -->
|
||||
<string name="logins_password_copied">Lozinka kopirana u clipboard</string>
|
||||
|
||||
<!-- Shown in snackbar to tell user that the username has been copied -->
|
||||
<string name="logins_username_copied">Korisničko ime kopirano u clipboard</string>
|
||||
<!-- Shown in snackbar to tell user that the site has been copied -->
|
||||
<string name="logins_site_copied">Stranica kopirana u clipboard</string>
|
||||
<!-- Content Description (for screenreaders etc) read for the button to copy a password in logins-->
|
||||
<string name="saved_logins_copy_password">Kopiraj lozinku</string>
|
||||
<!-- Content Description (for screenreaders etc) read for the button to copy a username in logins -->
|
||||
<string name="saved_login_copy_username">Kopiraj korisničko ime</string>
|
||||
<!-- Content Description (for screenreaders etc) read for the button to copy a site in logins -->
|
||||
<string name="saved_login_copy_site">Kopiraj stranicu</string>
|
||||
<!-- Content Description (for screenreaders etc) read for the button to reveal a password in logins -->
|
||||
<string name="saved_login_reveal_password">Prikaži lozinku</string>
|
||||
<!-- Content Description (for screenreaders etc) read for the button to hide a password in logins -->
|
||||
<string name="saved_login_hide_password">Sakrij lozinku</string>
|
||||
<!-- Message displayed in biometric prompt displayed for authentication before allowing users to view their logins -->
|
||||
<string name="logins_biometric_prompt_message">Otključajte za pregled spašenih prijava</string>
|
||||
<!-- Title of warning dialog if users have no device authentication set up -->
|
||||
<string name="logins_warning_dialog_title">Osigurajte svoje prijave i lozinke</string>
|
||||
<!-- Message of warning dialog if users have no device authentication set up -->
|
||||
<string name="logins_warning_dialog_message">Podesite pattern za zaključavanje uređaja, PIN ili lozinku da zaštitite vaše spašene prijave i lozinke od pristupa druge osobe koja ima vaš uređaj.</string>
|
||||
<!-- Negative button to ignore warning dialog if users have no device authentication set up -->
|
||||
<string name="logins_warning_dialog_later">Kasnije</string>
|
||||
<!-- Positive button to send users to set up a pin of warning dialog if users have no device authentication set up -->
|
||||
<string name="logins_warning_dialog_set_up_now">Podesi odmah</string>
|
||||
<!-- Title of PIN verification dialog to direct users to re-enter their device credentials to access their logins -->
|
||||
<string name="logins_biometric_prompt_message_pin">Otključajte svoj uređaj</string>
|
||||
<!-- Saved logins sorting strategy menu item -by name- (if selected, it will sort saved logins alphabetically) -->
|
||||
<string name="saved_logins_sort_strategy_alphabetically">Naziv (A-Ž)</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">Zadnja upotreba</string>
|
||||
|
||||
<!-- Title of the Add search engine screen -->
|
||||
<string name="search_engine_add_custom_search_engine_title">Dodaj pretraživač</string>
|
||||
<!-- Title of the Edit search engine screen -->
|
||||
<string name="search_engine_edit_custom_search_engine_title">Uredi pretraživač</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Title for the button to add a search engine in the action bar -->
|
||||
<string name="search_engine_add_button_content_description">Dodaj</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Title for the button to save a search engine in the action bar -->
|
||||
<string name="search_engine_add_custom_search_engine_edit_button_content_description">Spasi</string>
|
||||
<!-- Text for the menu button to edit a search engine -->
|
||||
<string name="search_engine_edit">Uredi</string>
|
||||
<!-- Text for the menu button to delete a search engine -->
|
||||
<string name="search_engine_delete">Obriši</string>
|
||||
|
||||
<!-- Text for the button to create a custom search engine on the Add search engine screen -->
|
||||
<string name="search_add_custom_engine_label_other">Ostalo</string>
|
||||
<!-- Placeholder text shown in the Search Engine Name TextField before a user enters text -->
|
||||
<string name="search_add_custom_engine_name_hint">Naziv</string>
|
||||
<!-- Description text for the Search String TextField. The %s is part of the string -->
|
||||
<string name="search_add_custom_engine_search_string_example">Zamijenite izraz sa “%s”. Primjer:\nhttps://www.google.ba/search?q=%s</string>
|
||||
<!-- Text for the button to learn more about adding a custom search engine -->
|
||||
<string name="search_add_custom_engine_learn_more_label">Saznajte više</string>
|
||||
|
||||
<!-- Text shown when a user leaves the name field empty -->
|
||||
<string name="search_add_custom_engine_error_empty_name">Unesite naziv pretraživača</string>
|
||||
<!-- Text shown when a user tries to add a search engine that already exists -->
|
||||
<string name="search_add_custom_engine_error_existing_name">Pretraživač s nazivom “%s” već postoji.</string>
|
||||
<!-- Text shown when a user leaves the search string field empty -->
|
||||
<string name="search_add_custom_engine_error_empty_search_string">Unesite pojam za pretragu</string>
|
||||
<!-- Text shown when a user leaves out the required template string -->
|
||||
<string name="search_add_custom_engine_error_missing_template">Provjerite da li pojam odgovara formatu primjera</string>
|
||||
<!-- Text shown when we aren't able to validate the custom search query. The first parameter is the url of the custom search engine -->
|
||||
<string name="search_add_custom_engine_error_cannot_reach">Greška u povezivanju na “%s”</string>
|
||||
<!-- Text shown when a user creates a new search engine -->
|
||||
<string name="search_add_custom_engine_success_message">Kreirano %s</string>
|
||||
<!-- Text shown when a user successfully edits a custom search engine -->
|
||||
<string name="search_edit_custom_engine_success_message">Spašeno %s</string>
|
||||
<!-- Text shown when a user successfully deletes a custom search engine -->
|
||||
<string name="search_delete_search_engine_success_message">Obrisano %s</string>
|
||||
|
||||
<!-- Title text shown for the migration screen to the new browser. Placeholder replaced with app name -->
|
||||
<string name="migration_title">Dobrodošli u potpuno novi %s</string>
|
||||
<!-- Text on the disabled button while in progress. Placeholder replaced with app name -->
|
||||
<string name="migration_updating_app_button_text">Nadograđujem %s…</string>
|
||||
<!-- Text on the enabled button. Placeholder replaced with app name-->
|
||||
<string name="migration_update_app_button">Pokreni %s</string>
|
||||
<!-- Accessibility description text for a completed migration item -->
|
||||
<string name="migration_icon_description">Migracija završena</string>
|
||||
<!--Text on list of migrated items (e.g. Settings, History, etc.)-->
|
||||
<string name="migration_text_passwords">Lozinke</string>
|
||||
|
||||
<!-- Login overflow menu delete button -->
|
||||
<string name="login_menu_delete_button">Obriši</string>
|
||||
<!-- Login overflow menu edit button -->
|
||||
<string name="login_menu_edit_button">Uredi</string>
|
||||
<!-- Message in delete confirmation dialog for logins -->
|
||||
<string name="login_deletion_confirmation">Da li ste sigurni da želite obrisati ovu prijavu?</string>
|
||||
<!-- Positive action of a dialog asking to delete -->
|
||||
<string name="dialog_delete_positive">Obriši</string>
|
||||
<!-- The saved login options menu description. -->
|
||||
<string name="login_options_menu">Opcije prijave</string>
|
||||
<!-- The button description to save changes to an edited login. -->
|
||||
<string name="save_changes_to_login">Spasite izmjene za prijavu.</string>
|
||||
<!-- The button description to discard changes to an edited login. -->
|
||||
<string name="discard_changes">Odbaci izmjene</string>
|
||||
<!-- The page title for editing a saved login. -->
|
||||
<string name="edit">Uredi</string>
|
||||
|
||||
<!-- Confirmation dialog button text when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_confirmation_button">OK, razumijem</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -14,14 +14,17 @@
|
|||
<string name="content_description_disable_private_browsing_button">Deaktiviraj privatno pregledavanje</string>
|
||||
<!-- Placeholder text shown in the search bar before a user enters text -->
|
||||
<string name="search_hint">Traži ili upiši adresu</string>
|
||||
<!-- No Open Tabs Message Header -->
|
||||
<string name="no_open_tabs_header_2">Nema otvorenih kartica</string>
|
||||
<!-- No Open Tabs Message Description -->
|
||||
<string name="no_open_tabs_description">Ovdje će se prikazati tvoje otvorene kartice.</string>
|
||||
|
||||
<!-- No Private Tabs Message Description -->
|
||||
<string name="no_private_tabs_description">Ovdje će se prikazati tvoje privatne kartice.</string>
|
||||
|
||||
<!-- Message announced to the user when tab tray is selected with 1 tab -->
|
||||
<string name="open_tab_tray_single">1 otvorena kartica. Dodirni za prebacivanje kartica.</string>
|
||||
<!-- Message announced to the user when tab tray is selected with 0 or 2+ tabs -->
|
||||
<string name="open_tab_tray_plural">%1$s otvorene kartice. Dodirni za prebacivanje kartica.</string>
|
||||
|
||||
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
|
||||
<string name="about_content">%1$s proizvodi Mozilla.</string>
|
||||
|
||||
|
@ -103,8 +106,6 @@
|
|||
<string name="browser_menu_new_tab">Nova kartica</string>
|
||||
<!-- Browser menu button that saves the current tab to a collection -->
|
||||
<string name="browser_menu_save_to_collection_2">Spremi u zbirku</string>
|
||||
<!-- Browser menu button that opens a dialog to report issues with the current site -->
|
||||
<string name="browser_menu_report_issue">Prijavi problem sa stranicom</string>
|
||||
<!-- Browser menu button that open a share menu to share the current site -->
|
||||
<string name="browser_menu_share">Dijeli</string>
|
||||
<!-- Share menu title, displayed when a user is sharing their current site -->
|
||||
|
@ -118,8 +119,10 @@
|
|||
<!-- 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">Omogućuje %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">Prikaz za čitanje</string>
|
||||
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
|
||||
<string name="browser_menu_read_close">Zatvori pogled čitača</string>
|
||||
<!-- Browser menu button to open the current page in an external app -->
|
||||
<string name="browser_menu_open_app_link">Otvori u aplikaciji</string>
|
||||
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
|
||||
|
@ -292,7 +295,7 @@
|
|||
<!-- Preference for syncing logins -->
|
||||
<string name="preferences_sync_logins">Prijave</string>
|
||||
<!-- Preference for syncing tabs -->
|
||||
<string name="preferences_sync_tabs">Kartice</string>
|
||||
<string name="preferences_sync_tabs_2">Otvorene kartice</string>
|
||||
<!-- Preference for signing out -->
|
||||
<string name="preferences_sign_out">Odjavi se</string>
|
||||
<!-- Preference displays and allows changing current FxA device name -->
|
||||
|
@ -451,6 +454,24 @@
|
|||
<string name="tabs_header_private_tabs_title">Privatne kartice</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
|
||||
<string name="add_tab">Dodaj karticu</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
|
||||
<string name="add_private_tab">Dodaj privatnu karticu</string>
|
||||
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
|
||||
<string name="tab_drawer_fab_content">Privatno</string>
|
||||
<!-- Text shown as the title of the open tab tray -->
|
||||
<string name="tab_tray_title">Otvorene kartice</string>
|
||||
<!-- Text shown in the menu for saving tabs to a collection -->
|
||||
<string name="tab_tray_menu_item_save">Spremi u zbirku</string>
|
||||
<!-- Text shown in the menu for sharing all tabs -->
|
||||
<string name="tab_tray_menu_item_share">Podijeli sve kartice</string>
|
||||
<!-- Text shown in the menu for closing all tabs -->
|
||||
<string name="tab_tray_menu_item_close">Zatvori sve kartice</string>
|
||||
<!-- Shortcut action to open new tab -->
|
||||
<string name="tab_tray_menu_open_new_tab">Nova kartica</string>
|
||||
<!-- Shortcut action to open the home screen -->
|
||||
<string name="tab_tray_menu_home">Idi na početnu</string>
|
||||
<!-- Shortcut action to toggle private mode -->
|
||||
<string name="tab_tray_menu_toggle">Promijeni vrstu kartice</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">Ukloni karticu iz zbirke</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
|
||||
|
@ -464,7 +485,7 @@
|
|||
<!-- Open tabs menu item to share all tabs -->
|
||||
<string name="tabs_menu_share_tabs">Dijeli kartice</string>
|
||||
<!-- Open tabs menu item to save tabs to collection -->
|
||||
<string name="tabs_menu_save_to_collection">Spremi u zbirku</string>
|
||||
<string name="tabs_menu_save_to_collection1">Spremi kartice u zbirku</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Opens the tab menu when pressed -->
|
||||
<string name="tab_menu">Izbornik za kartice</string>
|
||||
<!-- Tab menu item to share the tab -->
|
||||
|
@ -681,17 +702,15 @@
|
|||
<string name="delete_browsing_data_quit_off">Isključeno</string>
|
||||
|
||||
<!-- Collections -->
|
||||
<!-- Label to describe what collections are to a new user without any collections -->
|
||||
<string name="collections_description">Sakupi stvari koje su ti važne. Za početak spremi otvorene kartice u novu zbirku.</string>
|
||||
<!-- Collections header on home fragment -->
|
||||
<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">Izbornik za zbirke</string>
|
||||
<!-- No Open Tabs Message Header -->
|
||||
<string name="no_collections_header">Nema zbirki</string>
|
||||
|
||||
<!-- No Open Tabs Message Description -->
|
||||
<string name="no_collections_description">Tvoje zbirke će se prikazati ovdje.</string>
|
||||
<!-- No Open Tabs Message Header -->
|
||||
<string name="no_collections_header1">Skupi stvari koje su ti bitne</string>
|
||||
<!-- Label to describe what collections are to a new user without any collections -->
|
||||
<string name="no_collections_description1">Grupiraj slične pretrage, stranice i kartice za brži pristup kasnije.</string>
|
||||
<!-- Title for the "select tabs" step of the collection creator -->
|
||||
<string name="create_collection_select_tabs">Odaberi kartice</string>
|
||||
<!-- Title for the "select collection" step of the collection creator -->
|
||||
|
@ -721,6 +740,9 @@
|
|||
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
|
||||
<string name="create_collection_save">Spremi</string>
|
||||
|
||||
<!-- Snackbar action to view the collection the user just created or updated -->
|
||||
<string name="create_collection_view">Prikaži</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">Zbirka %d</string>
|
||||
|
||||
|
@ -895,8 +917,9 @@
|
|||
<!-- text for firefox preview moving tip description -->
|
||||
<string name="tip_firefox_preview_moved_description">Firefox Nightly se aktualizira svake večeri i sadrži nove eksperimentalne funkcije.
|
||||
Međutim, vjerojatno je manje stabilna verzija. Preuzmi naš beta preglednik za stabilnije iskustvo.</string>
|
||||
<!-- text for firefox preview moving tip button. "Mozilla Firefox Browser" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_button">Nabavi Mozilla Firefox preglednik</string>
|
||||
|
||||
<!-- text for firefox preview moving tip button. "Firefox for Android Beta" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_button_2">Preuzmite Firefox za Android Beta</string>
|
||||
|
||||
<!-- text for firefox preview moving tip header. "Firefox Nightly" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_header_preview_installed">Firefox Nightly se preselio</string>
|
||||
|
@ -949,22 +972,22 @@
|
|||
<string name="onboarding_firefox_account_sync_is_on">Sinkronizacija je uključena</string>
|
||||
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
|
||||
<string name="onboarding_firefox_account_automatic_signin_failed">Neuspjela prijava</string>
|
||||
|
||||
<!-- text for the tracking protection onboarding card header -->
|
||||
<string name="onboarding_tracking_protection_header">Zaštiti se</string>
|
||||
<string name="onboarding_tracking_protection_header_2">Automatska privatnost</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">%s pomaže spriječiti web-stranice da te prate putem interneta.</string>
|
||||
|
||||
<string name="onboarding_tracking_protection_description_2">Postavke za privatnost i sigurnost blokiraju softver za praćenje, zlonamjerni softver i tvrtke koje te prate.</string>
|
||||
<!-- text for tracking protection radio button option for standard level of blocking -->
|
||||
<string name="onboarding_tracking_protection_standard_button">Standardno</string>
|
||||
<string name="onboarding_tracking_protection_standard_button_2">Standardno (zadano)</string>
|
||||
<!-- text for standard blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_standard_button_description">Blokira manji broj programa za praćenje, ali omogućava normalno učitavanje stranica</string>
|
||||
<string name="onboarding_tracking_protection_standard_button_description_2">Blokira manje softvera za praćenje. Stranice se učitavaju normalno.</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_button">Strogo (preporučeno)</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_option">Strogo</string>
|
||||
<!-- text for strict blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_strict_button_description">Blokira veći broj programa za praćenje i pruža bolju zaštitu i performanse, ali može prouzrokovati da neke web stranice ne rade ispravno</string>
|
||||
<string name="onboarding_tracking_protection_strict_button_description_2">Blokira više softvera za praćenje, oglasa i skočnih prozora. Stranice se brže učitavaju, ali neke značajke možda neće raditi.</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 -->
|
||||
|
@ -1052,31 +1075,21 @@
|
|||
<!-- Text displayed that links to website about enhanced tracking protection -->
|
||||
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Saznaj više</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_option">Standardno</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard">Standardno (preporučeno)</string>
|
||||
<string name="preference_enhanced_tracking_protection_standard_default_1">Standardno (zadano)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_description">Uravnoteženo za zaštitu i performancu.</string>
|
||||
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_description_2">Stranice će se normalno učitati, ali blokiraju manji broj programa za praćenje.</string>
|
||||
<string name="preference_enhanced_tracking_protection_standard_description_3">Blokira manje softvera za praćenje. Stranice se učitavaju normalno.</string>
|
||||
<!-- Accessibility text for the Standard protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_info_button">Što se blokira standardnom zaštitom od praćenja</string>
|
||||
<!-- Preference for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict">Strogo</string>
|
||||
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_default">Strogo (standardno)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_default_description">Jača zaštita od praćenja i brži rad, ali neke web-stranice možda neće ispravno raditi.</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_recommended">Strogo (preporučeno)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_description">Jača zaštita, ali može prouzročiti probleme nekim web-stranicama ili sadržajima.</string>
|
||||
<string name="preference_enhanced_tracking_protection_strict_description_2">Blokira više softvera za praćenje, oglasa i skočnih prozora. Stranice se brže učitavaju, ali neke značajke možda neće raditi.</string>
|
||||
<!-- Accessibility text for the Strict protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_info_button">Što se blokira strogom zaštitom od praćenja</string>
|
||||
<!-- Preference for enhanced tracking protection for the custom protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_custom">Prilagođeno</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_custom_description">Odaberi programe za praćenje i skripte koje želiš blokirati.</string>
|
||||
<string name="preference_enhanced_tracking_protection_custom_description_2">Odaberi koji softver za praćenje i skripte blokirati.</string>
|
||||
<!-- Accessibility text for the Strict protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_custom_info_button">Što se blokira prilagođenom zaštitom od praćenja</string>
|
||||
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
|
||||
|
@ -1126,9 +1139,9 @@
|
|||
<string name="etp_tracking_content_title">Praćenje sadržaja</string>
|
||||
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
|
||||
<string name="etp_tracking_content_description">Zaustavlja učitavanje vanjskih oglasa, videozapisa i drugog sadržaja koji sadrži kod za praćenje. Može utjecati na neke funkcionalnosti web-stranice.</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">%s blokira programe za praćenje na ovoj web-stranici kad je štit ljubičaste boje. Dodirni ga i vidi što je blokirano.</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_cfr_message">Svaki puta kada je štit ljubičast, %s je blokirao softver za praćenje na stranici. Dodirni za više informacija.</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
|
||||
<string name="etp_panel_on">Za ovu web-stranicu zaštite su UKLJUČENE</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
|
||||
|
@ -1418,6 +1431,9 @@
|
|||
<!-- Voice search prompt description displayed after the user presses the voice search button -->
|
||||
<string name="voice_search_explainer">Govorite sada</string>
|
||||
|
||||
<!-- The error message in edit login view when a duplicate username exists. -->
|
||||
<string name="saved_login_duplicate">Prijava s tim korisničkim imenom već postoji</string>
|
||||
|
||||
<!-- Synced Tabs -->
|
||||
<!-- Text displayed when user is not logged into a Firefox Account -->
|
||||
<string name="synced_tabs_connect_to_sync_account">Poveži s Firefox računom.</string>
|
||||
|
@ -1428,4 +1444,19 @@
|
|||
<!-- Text displayed when user has disabled tab syncing in Firefox Sync Account -->
|
||||
<string name="synced_tabs_enable_tab_syncing">Omogućite sinkroniziranje kartica.</string>
|
||||
|
||||
<!-- Text displayed when user has no tabs that have been synced -->
|
||||
<string name="synced_tabs_no_tabs">Nemaš otvorene kartice u Firefoxu na drugim uređajima.</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">Pogledaj popis kartica s tvojih drugih uređaja.</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">Prijavi se za sinkronizaciju</string>
|
||||
|
||||
<!-- Top Sites -->
|
||||
<!-- Title text displayed in the dialog when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_title">Dostignuto ograničenje za omiljene stranice</string>
|
||||
<!-- Content description text displayed in the dialog when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_content">Za dodavanje nove omiljene stranice, ukloni neku. Pritisni i drži stranicu, zatim odaberi ukloni.</string>
|
||||
<!-- Confirmation dialog button text when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_confirmation_button">U redu, shvaćam</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
<string name="content_description_disable_private_browsing_button">Zakázať súkromné prehliadanie</string>
|
||||
<!-- Placeholder text shown in the search bar before a user enters text -->
|
||||
<string name="search_hint">Hľadať</string>
|
||||
<!-- No Open Tabs Message Header -->
|
||||
<string name="no_open_tabs_header_2">Žiadne otvorené karty</string>
|
||||
<!-- No Open Tabs Message Description -->
|
||||
<string name="no_open_tabs_description">Vaše otvorené karty budú zobrazené tu.</string>
|
||||
|
||||
|
@ -105,8 +103,6 @@
|
|||
<string name="browser_menu_new_tab">Nová karta</string>
|
||||
<!-- Browser menu button that saves the current tab to a collection -->
|
||||
<string name="browser_menu_save_to_collection_2">Uložiť do kolekcie</string>
|
||||
<!-- Browser menu button that opens a dialog to report issues with the current site -->
|
||||
<string name="browser_menu_report_issue">Nahlásiť problém so stránkou</string>
|
||||
<!-- Browser menu button that open a share menu to share the current site -->
|
||||
<string name="browser_menu_share">Zdieľať</string>
|
||||
<!-- Share menu title, displayed when a user is sharing their current site -->
|
||||
|
@ -122,7 +118,7 @@
|
|||
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
|
||||
<string name="browser_menu_powered_by2">Poháňané aplikáciou %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">Zobrazenie Čítačka</string>
|
||||
<!-- Browser menu button to open the current page in an external app -->
|
||||
<string name="browser_menu_open_app_link">Otvoriť v aplikácii</string>
|
||||
|
@ -298,8 +294,6 @@
|
|||
<string name="preferences_sync_bookmarks">Záložky</string>
|
||||
<!-- Preference for syncing logins -->
|
||||
<string name="preferences_sync_logins">Prihlasovacie údaje</string>
|
||||
<!-- Preference for syncing tabs -->
|
||||
<string name="preferences_sync_tabs">Karty</string>
|
||||
<!-- Preference for signing out -->
|
||||
<string name="preferences_sign_out">Odhlásiť sa</string>
|
||||
<!-- Preference displays and allows changing current FxA device name -->
|
||||
|
@ -456,6 +450,8 @@
|
|||
<string name="tabs_header_private_tabs_title">Súkromné karty</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
|
||||
<string name="add_tab">Pridať kartu</string>
|
||||
<!-- Shortcut action to open new tab -->
|
||||
<string name="tab_tray_menu_open_new_tab">Nová karta</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">Odstrániť kartu z kolekcie</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
|
||||
|
@ -468,8 +464,6 @@
|
|||
<string name="tabs_menu_close_all_tabs">Zavrieť všetky karty</string>
|
||||
<!-- Open tabs menu item to share all tabs -->
|
||||
<string name="tabs_menu_share_tabs">Zdieľať karty</string>
|
||||
<!-- Open tabs menu item to save tabs to collection -->
|
||||
<string name="tabs_menu_save_to_collection">Uložiť do kolekcie</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Opens the tab menu when pressed -->
|
||||
<string name="tab_menu">Ponuka kariet</string>
|
||||
<!-- Tab menu item to share the tab -->
|
||||
|
@ -683,16 +677,10 @@
|
|||
<string name="delete_browsing_data_quit_off">Vypnuté</string>
|
||||
|
||||
<!-- Collections -->
|
||||
<!-- Label to describe what collections are to a new user without any collections -->
|
||||
<string name="collections_description">Ukladajte si stránky a karty, na ktorých vám záleží, do kolekcií.</string>
|
||||
<!-- Collections header on home fragment -->
|
||||
<string name="collections_header">Kolekcie</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
|
||||
<string name="collection_menu_button_content_description">Ponuka kolekcií</string>
|
||||
<!-- No Open Tabs Message Header -->
|
||||
<string name="no_collections_header">Nemáte žiadne kolekcie</string>
|
||||
<!-- No Open Tabs Message Description -->
|
||||
<string name="no_collections_description">Vaše kolekcie budú zobrazené tu.</string>
|
||||
|
||||
<!-- Title for the "select tabs" step of the collection creator -->
|
||||
<string name="create_collection_select_tabs">Výber kariet</string>
|
||||
|
@ -723,6 +711,9 @@
|
|||
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
|
||||
<string name="create_collection_save">Uložiť</string>
|
||||
|
||||
<!-- Snackbar action to view the collection the user just created or updated -->
|
||||
<string name="create_collection_view">Zobraziť</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">Kolekcia %d</string>
|
||||
|
||||
|
@ -899,8 +890,6 @@
|
|||
<!-- text for firefox preview moving tip description -->
|
||||
<string name="tip_firefox_preview_moved_description">Firefox Nightly je aktualizovaný každý deň a obsahuje experimentálne funkcie.
|
||||
Môže však byť menej stabilný. Ak chcete stabilnejší prehliadač, prevezmite si beta verziu.</string>
|
||||
<!-- text for firefox preview moving tip button. "Mozilla Firefox Browser" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_button">Prevezmite si prehliadač Mozilla Firefox</string>
|
||||
|
||||
<!-- text for firefox preview moving tip header. "Firefox Nightly" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_header_preview_installed">Firefox Nightly sa presunul</string>
|
||||
|
@ -953,21 +942,10 @@
|
|||
<string name="onboarding_firefox_account_sync_is_on">Synchronizácia je zapnutá</string>
|
||||
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
|
||||
<string name="onboarding_firefox_account_automatic_signin_failed">Prihlásenie zlyhalo</string>
|
||||
<!-- text for the tracking protection onboarding card header -->
|
||||
<string name="onboarding_tracking_protection_header">Chráňte sa</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">%s bráni webovým stránkam vo vašom sledovaní.</string>
|
||||
<!-- text for tracking protection radio button option for standard level of blocking -->
|
||||
<string name="onboarding_tracking_protection_standard_button">Štandardná</string>
|
||||
<!-- text for standard blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_standard_button_description">Blokuje menej sledovacích prvkov, no umožňuje normálne načítanie stránok</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_button">Prísna (odporúčaná)</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_option">Prísna</string>
|
||||
<!-- text for strict blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_strict_button_description">Blokuje viac sledovacích prvkov, vďaka čomu vám poskytuje väčšiu ochranu a výkon, no môže spôsobiť chybné fungovanie niektorých stránok</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 -->
|
||||
|
@ -1054,32 +1032,14 @@
|
|||
<string name="preference_enhanced_tracking_protection_explanation">%s vás chráni pred mnohými sledovacími prvkami, ktoré zbierajú informácie o tom, čo robíte na internete.</string>
|
||||
<!-- Text displayed that links to website about enhanced tracking protection -->
|
||||
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Ďalšie informácie</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_option">Štandardná</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard">Štandardná (odporúčaná)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_description">Vyvážená ochrana a výkon.</string>
|
||||
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_description_2">Stránky sa budú načítavať normálne, no budú obsahovať menej sledovacích prvkov.</string>
|
||||
<!-- Accessibility text for the Standard protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_info_button">Čo blokuje štandardná ochrana pred sledovaním</string>
|
||||
<!-- Preference for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict">Prísna</string>
|
||||
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_default">Prísna (predvolená)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_default_description">Silnejšia ochrana, ktorá zrýchľuje načítavanie stránok. Môže však obmedziť ich fungovanie.</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_recommended">Prísna (odporúčaná)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_description">Viac blokovaného obsahu zvyšuje pravdepodobnosť, že niektoré stránky nebudú správne fungovať.</string>
|
||||
<!-- Accessibility text for the Strict protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_info_button">Čo blokuje prísna ochrana pred sledovaním</string>
|
||||
<!-- Preference for enhanced tracking protection for the custom protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_custom">Vlastná</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_custom_description">Vyberte sledovacie prvky a skripty, ktoré chcete blokovať</string>
|
||||
<!-- Accessibility text for the Strict protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_custom_info_button">Čo blokuje vlastná ochrana pred sledovaním</string>
|
||||
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
|
||||
|
@ -1128,8 +1088,6 @@
|
|||
<string name="etp_tracking_content_title">Sledovací obsah</string>
|
||||
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
|
||||
<string name="etp_tracking_content_description">Blokuje načítanie reklám, videí a ďalšieho obsahu, ktorý obsahuje sledovací kód. To môže ovplyvniť fungovanie niektorých webových stránok.</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">Ak je ikona štítu fialová, znamená to, že %s na stránke blokuje nejaké sledovacie prvky. Ťuknutím na ikonu zobrazíte ich zoznam.</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
|
||||
<string name="etp_panel_on">Ochrana je na tejto stránke zapnutá</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
|
||||
|
@ -1423,4 +1381,9 @@
|
|||
<!-- Text displayed when user has disabled tab syncing in Firefox Sync Account -->
|
||||
<string name="synced_tabs_enable_tab_syncing">Prosím, zapnite synchronizovanie kariet.</string>
|
||||
|
||||
<!-- Content description text displayed in the dialog when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_content">Ak chcete pridať novú top stránku, musíte jednu odstrániť. Podržte na nej prst a vyberte možnosť Odstrániť.</string>
|
||||
<!-- Confirmation dialog button text when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_confirmation_button">Ok, rozumiem</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -99,6 +99,9 @@
|
|||
<!-- Preference for data collection -->
|
||||
<string name="preferences_data_collection"></string>
|
||||
|
||||
<!-- Preference for account settings -->
|
||||
<string name="preferences_account_settings">ఖాతా అమరికలు</string>
|
||||
|
||||
<!-- Preference for syncing history -->
|
||||
<string name="preferences_sync_history">చరిత్ర</string>
|
||||
<!-- Preference for syncing bookmarks -->
|
||||
|
|
|
@ -13,8 +13,6 @@
|
|||
<string name="content_description_disable_private_browsing_button">ปิดใช้งานการเรียกดูแบบส่วนตัว</string>
|
||||
<!-- Placeholder text shown in the search bar before a user enters text -->
|
||||
<string name="search_hint">ค้นหาหรือป้อนที่อยู่</string>
|
||||
<!-- No Open Tabs Message Header -->
|
||||
<string name="no_open_tabs_header_2">ไม่มีแท็บที่เปิดอยู่</string>
|
||||
<!-- No Open Tabs Message Description -->
|
||||
<string name="no_open_tabs_description">แท็บที่คุณเปิดจะถูกแสดงที่นี่</string>
|
||||
|
||||
|
@ -104,8 +102,6 @@
|
|||
<string name="browser_menu_new_tab">แท็บใหม่</string>
|
||||
<!-- Browser menu button that saves the current tab to a collection -->
|
||||
<string name="browser_menu_save_to_collection_2">บันทึกไปยังชุดสะสม</string>
|
||||
<!-- Browser menu button that opens a dialog to report issues with the current site -->
|
||||
<string name="browser_menu_report_issue">รายงานปัญหาไซต์</string>
|
||||
<!-- Browser menu button that open a share menu to share the current site -->
|
||||
<string name="browser_menu_share">แบ่งปัน</string>
|
||||
<!-- Share menu title, displayed when a user is sharing their current site -->
|
||||
|
@ -119,7 +115,7 @@
|
|||
<!-- 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">ขับเคลื่อนโดย %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">มุมมองผู้อ่าน</string>
|
||||
<!-- Browser menu button to open the current page in an external app -->
|
||||
<string name="browser_menu_open_app_link">เปิดในแอป</string>
|
||||
|
@ -293,7 +289,7 @@
|
|||
<!-- Preference for syncing logins -->
|
||||
<string name="preferences_sync_logins">การเข้าสู่ระบบ</string>
|
||||
<!-- Preference for syncing tabs -->
|
||||
<string name="preferences_sync_tabs">แท็บ</string>
|
||||
<string name="preferences_sync_tabs_2">แท็บที่เปิดอยู่</string>
|
||||
<!-- Preference for signing out -->
|
||||
<string name="preferences_sign_out">ลงชื่อออก</string>
|
||||
<!-- Preference displays and allows changing current FxA device name -->
|
||||
|
@ -460,8 +456,6 @@
|
|||
<string name="tabs_menu_close_all_tabs">ปิดแท็บทั้งหมด</string>
|
||||
<!-- Open tabs menu item to share all tabs -->
|
||||
<string name="tabs_menu_share_tabs">แบ่งปันแท็บ</string>
|
||||
<!-- Open tabs menu item to save tabs to collection -->
|
||||
<string name="tabs_menu_save_to_collection">บันทึกไปยังชุดสะสม</string>
|
||||
<!-- Content description (not visible, for screen readers etc.): Opens the tab menu when pressed -->
|
||||
<string name="tab_menu">เมนูแท็บ</string>
|
||||
<!-- Tab menu item to share the tab -->
|
||||
|
@ -673,17 +667,10 @@
|
|||
<string name="delete_browsing_data_quit_off">ปิด</string>
|
||||
|
||||
<!-- Collections -->
|
||||
<!-- Label to describe what collections are to a new user without any collections -->
|
||||
<string name="collections_description">รวบรวมสิ่งที่สำคัญสำหรับคุณ เมื่อต้องการเริ่มต้น ให้บันทึกแท็บที่เปิดอยู่ไปยังชุดสะสมใหม่</string>
|
||||
|
||||
<!-- Collections header on home fragment -->
|
||||
<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_header">ไม่มีชุดสะสม</string>
|
||||
<!-- No Open Tabs Message Description -->
|
||||
<string name="no_collections_description">ชุดสะสมของคุณจะถูกแสดงที่นี่</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 -->
|
||||
|
@ -887,8 +874,6 @@
|
|||
<!-- text for firefox preview moving tip description -->
|
||||
<string name="tip_firefox_preview_moved_description">Firefox Nightly อัปเดตทุกคืนและมีลูกเล่นใหม่ ๆ ทุกคืน
|
||||
อย่างไรก็ตามความเสถียรอาจลดลง ดาวน์โหลดเบราว์เซอร์เบต้าของเราเพื่อประสบการณ์ที่เสถียรยิ่งขึ้น</string>
|
||||
<!-- text for firefox preview moving tip button. "Mozilla Firefox Browser" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_button">รับ Mozilla Firefox เบราว์เซอร์</string>
|
||||
|
||||
<!-- text for firefox preview moving tip header. "Firefox Nightly" is intentionally hardcoded -->
|
||||
<string name="tip_firefox_preview_moved_header_preview_installed">Firefox Nightly ย้ายไปแล้ว</string>
|
||||
|
@ -941,21 +926,10 @@
|
|||
<string name="onboarding_firefox_account_sync_is_on">Sync เปิดอยู่</string>
|
||||
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
|
||||
<string name="onboarding_firefox_account_automatic_signin_failed">ไม่สามารถเข้าสู่ระบบ</string>
|
||||
<!-- text for the tracking protection onboarding card header -->
|
||||
<string name="onboarding_tracking_protection_header">ปกป้องตัวคุณเอง</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">%s ช่วยหยุดเว็บไซต์จากการติดตามคุณออนไลน์</string>
|
||||
<!-- text for tracking protection radio button option for standard level of blocking -->
|
||||
<string name="onboarding_tracking_protection_standard_button">มาตรฐาน</string>
|
||||
<!-- text for standard blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_standard_button_description">ปิดกันตัวติดตามน้อยลง แต่อนุญาตให้โหลดหน้าได้ตามปกติ</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_button">เข้มงวด (แนะนำ)</string>
|
||||
<!-- text for tracking protection radio button option for strict level of blocking -->
|
||||
<string name="onboarding_tracking_protection_strict_option">เข้มงวด</string>
|
||||
<!-- text for strict blocking option button description -->
|
||||
<string name="onboarding_tracking_protection_strict_button_description">ปิดกันตัวติดตามมากขึ้นเพื่อการปกป้องและประสิทธิภาพที่ดีกว่า แต่ก็อาจทำให้บางไซต์ทำงานไม่สมบูรณ์</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 -->
|
||||
|
@ -1041,32 +1015,14 @@
|
|||
<string name="preference_enhanced_tracking_protection_explanation">เก็บข้อมูลของคุณไว้กับตัวคุณเอง %s ปกป้องคุณจากตัวติดตามที่พบบ่อยที่สุดซึ่งติดตามสิ่งที่คุณทำทางออนไลน์</string>
|
||||
<!-- Text displayed that links to website about enhanced tracking protection -->
|
||||
<string name="preference_enhanced_tracking_protection_explanation_learn_more">เรียนรู้เพิ่มเติม</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_option">มาตรฐาน</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard">มาตรฐาน (แนะนำ)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_description">การป้องกันและประสิทธิภาพแบบสมดุล</string>
|
||||
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_description_2">หน้าเว็บจะโหลดตามปกติ แต่ปิดกั้นตัวติดตามน้อยลง</string>
|
||||
<!-- Accessibility text for the Standard protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_standard_info_button">สิ่งที่ถูกปิดกั้นโดยการป้องกันการติดตามแบบมาตรฐาน</string>
|
||||
<!-- Preference for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict">เข้มงวด</string>
|
||||
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_default">เข้มงวด (ค่าเริ่มต้น)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_default_description">การป้องกันการติดตามที่แข็งแกร่งขึ้นและประสิทธิภาพที่เร็วขึ้น แต่บางไซต์อาจไม่ทำงานอย่างถูกต้อง</string>
|
||||
<!-- Preference for enhanced tracking protection for the standard protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_recommended">เข้มงวด (แนะนำ)</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_description">การป้องกันที่แกร่งขึ้น แต่อาจทำให้บางไซต์หรือเนื้อหาหยุดทำงานได้</string>
|
||||
<!-- Accessibility text for the Strict protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_strict_info_button">สิ่งที่ถูกปิดกั้นโดยการป้องกันการติดตามแบบเข้มงวด</string>
|
||||
<!-- Preference for enhanced tracking protection for the custom protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_custom">กำหนดเอง</string>
|
||||
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
|
||||
<string name="preference_enhanced_tracking_protection_custom_description">เลือกตัวติดตามหรือสคริปต์ที่ต้องการปิดกั้น</string>
|
||||
<!-- Accessibility text for the Strict protection information icon -->
|
||||
<string name="preference_enhanced_tracking_protection_custom_info_button">สิ่งที่ถูกปิดกั้นโดยการป้องกันการติดตามแบบกำหนดเอง</string>
|
||||
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
|
||||
|
@ -1116,8 +1072,6 @@
|
|||
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
|
||||
<string name="etp_tracking_content_description">หยุดไม่ให้โหลดโฆษณาภายนอก, วิดีโอ, และเนื้อหาอื่น ๆ ที่มีรหัสการติดตาม อาจส่งผลต่อฟังก์ชันการทำงานของบางเว็บไซต์</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">%s กำลังปิดกั้นตัวติดตามบนไซต์นี้เมื่อเกราะเป็นสีม่วง แตะเพื่อดูสิ่งที่ถูกปิดกั้น</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
|
||||
<string name="etp_panel_on">การป้องกันถูก เปิด สำหรับไซต์นี้</string>
|
||||
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
|
||||
|
@ -1399,4 +1353,5 @@
|
|||
<string name="synced_tabs_connect_to_sync_account">เชื่อมต่อกับบัญชี Firefox</string>
|
||||
<!-- Text displayed to ask user to connect another device as no devices found with account -->
|
||||
<string name="synced_tabs_connect_another_device">เชื่อมต่ออุปกรณ์อื่น</string>
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -1438,6 +1438,8 @@
|
|||
<!-- Top Sites -->
|
||||
<!-- Title text displayed in the dialog when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_title">Sık kullanılan site sınırına ulaşıldı</string>
|
||||
<!-- Content description text displayed in the dialog when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_content">Yeni bir sık kullanılan site eklemek için bir siteyi kaldırın. Siteye basılı tutup kaldır’ı seçin.</string>
|
||||
<!-- Confirmation dialog button text when top sites limit is reached. -->
|
||||
<string name="top_sites_max_limit_confirmation_button">Tamam</string>
|
||||
|
||||
|
|
|
@ -765,6 +765,78 @@
|
|||
<!-- Sub-header in the dialog to share a link to an app from the full list -->
|
||||
<string name="share_link_all_apps_subheader">Daran\' sun huā</string>
|
||||
|
||||
<!-- Sub-header in the dialog to share a link to an app from the most-recent sorted list -->
|
||||
<string name="share_link_recent_apps_subheader">Hìaj garâj sun nākàt</string>
|
||||
<!-- An option from the share dialog to sign into sync -->
|
||||
<string name="sync_sign_in">Gāyi\'ì sēsiû riña Sync</string>
|
||||
<!-- An option from the share dialog to send link to all other sync devices -->
|
||||
<string name="sync_send_to_all">Gā \'nïnj gan\'an riña daran\' nej aga\'a</string>
|
||||
<!-- An option from the share dialog to reconnect to sync -->
|
||||
<string name="sync_reconnect">Gānātū nākà ñû riña Sync</string>
|
||||
|
||||
<!-- Text displayed when sync is offline and cannot be accessed -->
|
||||
<string name="sync_offline">Nitāj kōneksiûn hua</string>
|
||||
<!-- An option to connect additional devices -->
|
||||
<string name="sync_connect_device">Gātū\' ngà a\'ngô aga\'a</string>
|
||||
<!-- The dialog text shown when additional devices are not available -->
|
||||
<string name="sync_connect_device_dialog">Da\' ga\'ue gā\'nïnjt \'ngō rakïj ñanj, da\'uît gāyi\'ìt sēsiûn riña a\'ngô aga\'a,</string>
|
||||
<!-- Confirmation dialog button -->
|
||||
<string name="sync_confirmation_button">Ngà gunïn</string>
|
||||
|
||||
<!-- Share error message -->
|
||||
<string name="share_error_snackbar">Si ga\'ue gà\'nïn\' riña duguî\' aplikasiûn nan</string>
|
||||
<!-- Add new device screen title -->
|
||||
<string name="sync_add_new_device_title">Gā\'nïnj riña aga\'</string>
|
||||
<!-- Text for the warning message on the Add new device screen -->
|
||||
<string name="sync_add_new_device_message">Nitāj à\'ngō aga\'a hua kōnektadô</string>
|
||||
<!-- Text for the button to learn about sending tabs -->
|
||||
<string name="sync_add_new_device_learn_button">Gāhuin chrūn doj dàj gà\'nïn\' rakïj ñanj gan\'an…</string>
|
||||
<!-- Text for the button to connect another device -->
|
||||
<string name="sync_add_new_device_connect_button">Gī\'iaj kōnektandô a\'ngô aga\'a…</string>
|
||||
|
||||
<!-- Notifications -->
|
||||
<!-- The user visible name of the "notification channel" (Android 8+ feature) for the ongoing notification shown while a browsing session is active. -->
|
||||
<string name="notification_pbm_channel_name">Sēsiûn riña gāchē nu huìt</string>
|
||||
<!-- Text shown in the notification that pops up to remind the user that a private browsing session is active. -->
|
||||
<string name="notification_pbm_delete_text">Nādure\' nej rakïj ñanj huìi</string>
|
||||
<!-- Text shown in the notification that pops up to remind the user that a private browsing session is active. -->
|
||||
<string name="notification_pbm_delete_text_2">Nārán riña nej rakïj ñanj huìi</string>
|
||||
<!-- Notification action to open Fenix and resume the current browsing session. -->
|
||||
<string name="notification_pbm_action_open">Nā\'nīn</string>
|
||||
|
||||
<!-- Notification action to delete all current private browsing sessions AND switch to Fenix (bring it to the foreground) -->
|
||||
<string name="notification_pbm_action_delete_and_open">Nādure\' nī na\'nïnt</string>
|
||||
<!-- Name of the "Powered by Fenix" notification channel. Displayed in the "App notifications" system settings for the app -->
|
||||
<string name="notification_powered_by_channel_name">Giri sa gù\'nàj</string>
|
||||
<!-- Text shown in snackbar when user deletes a collection -->
|
||||
<string name="snackbar_collection_deleted">Ganare\' sa ganachra chrē\'t</string>
|
||||
<!-- Text shown in snackbar when user renames a collection -->
|
||||
<string name="snackbar_collection_renamed">Nadunâ si yūgui sa ganachra chrē\'t</string>
|
||||
<!-- Text shown in snackbar when user deletes a tab -->
|
||||
<string name="snackbar_tab_deleted">Ganare\' rakïj ñanj</string>
|
||||
<!-- Text shown in snackbar when user deletes all tabs -->
|
||||
<string name="snackbar_tabs_deleted">Ganare\' nej rakïj ñanj</string>
|
||||
<!-- Text shown in snackbar when user closes a tab -->
|
||||
<string name="snackbar_tab_closed">Ganarán riña rakïj ñanj</string>
|
||||
<!-- Text shown in snackbar when user closes all tabs -->
|
||||
<string name="snackbar_tabs_closed">Ganarán riña nej rakïj ñanj</string>
|
||||
<!-- Text for action to undo deleting a tab or collection shown in a11y dialog -->
|
||||
<string name="a11y_dialog_deleted_undo">Dūre\'</string>
|
||||
<!-- Text for action to confirm deleting a tab or collection shown in a11y dialog -->
|
||||
<string name="a11y_dialog_deleted_confirm">Gī\'iaj hīa</string>
|
||||
<!-- QR code scanner prompt which appears after scanning a code, but before navigating to it
|
||||
First parameter is the name of the app, second parameter is the URL or text scanned-->
|
||||
<string name="qr_scanner_confirmation_dialog_message">Gā\'nïn riña %1$s gā\'nïn %2$s</string>
|
||||
<!-- Tab collection deletion prompt dialog option to delete the collection -->
|
||||
<string name="tab_collection_dialog_positive">Nādūre\'</string>
|
||||
<!-- Tab collection deletion prompt dialog option to cancel deleting the collection -->
|
||||
<string name="tab_collection_dialog_negative">Dūyichin\'</string>
|
||||
|
||||
<!-- Title for the tabs item in Delete browsing data -->
|
||||
<string name="preferences_delete_browsing_data_tabs_title_2">Nā\'nïn nej rakïj ñanj</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">%d nej rakïj ñanj</string>
|
||||
|
||||
<!-- Content description (not visible, for screen readers etc.): Close onboarding screen -->
|
||||
<string name="onboarding_close">Nārán</string>
|
||||
|
||||
|
|
|
@ -26,6 +26,11 @@
|
|||
<string name="pref_key_delete_cookies_on_quit" translatable="false">pref_key_delete_cookies_on_quit</string>
|
||||
<string name="pref_key_delete_caches_on_quit" translatable="false">pref_key_delete_caches_on_quit</string>
|
||||
<string name="pref_key_delete_permissions_on_quit" translatable="false">pref_key_delete_permissions_on_quit</string>
|
||||
<string name="pref_key_delete_open_tabs_now" translatable="false">pref_key_delete_open_tabs_now</string>
|
||||
<string name="pref_key_delete_browsing_history_now" translatable="false">pref_key_delete_browsing_history_now</string>
|
||||
<string name="pref_key_delete_cookies_now" translatable="false">pref_key_delete_cookies_now</string>
|
||||
<string name="pref_key_delete_caches_now" translatable="false">pref_key_delete_caches_now</string>
|
||||
<string name="pref_key_delete_permissions_now" translatable="false">pref_key_delete_permissions_now</string>
|
||||
<string name="pref_key_delete_browsing_data_on_quit_categories" translatable="false">pref_key_delete_browsing_data_on_quit_categories</string>
|
||||
<string name="pref_key_last_known_mode_private" translatable="false">pref_key_last_known_mode_private</string>
|
||||
<string name="pref_key_addons" translatable="false">pref_key_addons</string>
|
||||
|
|
|
@ -566,8 +566,6 @@
|
|||
<string name="bookmark_select_folder">Select folder</string>
|
||||
<!-- Confirmation message for a dialog confirming if the user wants to delete the selected folder -->
|
||||
<string name="bookmark_delete_folder_confirmation_dialog">Are you sure you want to delete this folder?</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">%s will delete the selected items.</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">Deleted %1$s</string>
|
||||
<!-- Screen title for adding a bookmarks folder -->
|
||||
|
@ -622,10 +620,8 @@
|
|||
<!-- 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">Deleted %1$s</string>
|
||||
<!-- Bookmark snackbar message on deleting multiple bookmarks not including folders-->
|
||||
<!-- Bookmark snackbar message on deleting multiple bookmarks -->
|
||||
<string name="bookmark_deletion_multiple_snackbar_message_2">Bookmarks deleted</string>
|
||||
<!-- Bookmark snackbar message on deleting multiple bookmarks including folders-->
|
||||
<string name="bookmark_deletion_multiple_snackbar_message_3">Deleting selected folders</string>
|
||||
<!-- Bookmark undo button for deletion snackbar action -->
|
||||
<string name="bookmark_undo_deletion">UNDO</string>
|
||||
|
||||
|
@ -875,8 +871,6 @@
|
|||
<string name="preference_summary_delete_browsing_data_on_quit">Automatically deletes browsing data when you select "Quit" from the main menu</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">Automatically deletes browsing data when you select \"Quit\" from the main menu</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">Browsing history</string>
|
||||
<!-- Action item in menu for the Delete browsing data on quit feature -->
|
||||
<string name="delete_browsing_data_on_quit_action">Quit</string>
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/pref_key_delete_browsing_data_on_quit"
|
||||
android:summary="@string/preference_summary_delete_browsing_data_on_quit_2"
|
||||
|
@ -15,28 +14,28 @@
|
|||
android:key="@string/pref_key_delete_browsing_data_on_quit_categories"
|
||||
app:allowDividerAbove="false"
|
||||
app:iconSpaceReserved="false"
|
||||
android:layout="@layout/preference_cat_style">
|
||||
android:layout="@layout/preference_category_empty">
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_key_delete_open_tabs_on_quit"
|
||||
android:layout="@layout/delete_browsing_category_checkbox"
|
||||
android:layout="@layout/checkbox_left_preference"
|
||||
android:title="@string/preferences_delete_browsing_data_tabs_title_2" />
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_key_delete_browsing_history_on_quit"
|
||||
android:layout="@layout/delete_browsing_category_checkbox"
|
||||
android:title="@string/preferences_delete_browsing_data_on_quit_browsing_history" />
|
||||
android:layout="@layout/checkbox_left_preference"
|
||||
android:title="@string/preferences_delete_browsing_data_browsing_data_title" />
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_key_delete_cookies_on_quit"
|
||||
android:layout="@layout/delete_browsing_category_checkbox"
|
||||
android:layout="@layout/checkbox_left_preference"
|
||||
android:summary="@string/preferences_delete_browsing_data_cookies_subtitle"
|
||||
android:title="@string/preferences_delete_browsing_data_cookies" />
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_key_delete_caches_on_quit"
|
||||
android:layout="@layout/delete_browsing_category_checkbox"
|
||||
android:layout="@layout/checkbox_left_preference"
|
||||
android:summary="@string/preferences_delete_browsing_data_cached_files_subtitle"
|
||||
android:title="@string/preferences_delete_browsing_data_cached_files" />
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_key_delete_permissions_on_quit"
|
||||
android:layout="@layout/delete_browsing_category_checkbox"
|
||||
android:layout="@layout/checkbox_left_preference"
|
||||
android:title="@string/preferences_delete_browsing_data_site_permissions" />
|
||||
</PreferenceCategory>
|
||||
</androidx.preference.PreferenceScreen>
|
||||
|
|
|
@ -42,7 +42,7 @@ class BookmarkControllerTest {
|
|||
private val navController: NavController = mockk(relaxed = true)
|
||||
private val showSnackbar: (String) -> Unit = mockk(relaxed = true)
|
||||
private val deleteBookmarkNodes: (Set<BookmarkNode>, Event) -> Unit = mockk(relaxed = true)
|
||||
private val deleteBookmarkFolder: (Set<BookmarkNode>) -> Unit = mockk(relaxed = true)
|
||||
private val deleteBookmarkFolder: (BookmarkNode) -> Unit = mockk(relaxed = true)
|
||||
private val invokePendingDeletion: () -> Unit = mockk(relaxed = true)
|
||||
|
||||
private val homeActivity: HomeActivity = mockk(relaxed = true)
|
||||
|
@ -240,10 +240,10 @@ class BookmarkControllerTest {
|
|||
|
||||
@Test
|
||||
fun `handleBookmarkDeletion for a folder should properly call the delete folder delegate`() {
|
||||
controller.handleBookmarkFolderDeletion(setOf(subfolder))
|
||||
controller.handleBookmarkFolderDeletion(subfolder)
|
||||
|
||||
verify {
|
||||
deleteBookmarkFolder(setOf(subfolder))
|
||||
deleteBookmarkFolder(subfolder)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -196,7 +196,7 @@ class BookmarkFragmentInteractorTest {
|
|||
interactor.onDelete(setOf(subfolder))
|
||||
|
||||
verify {
|
||||
bookmarkController.handleBookmarkFolderDeletion(setOf(subfolder))
|
||||
bookmarkController.handleBookmarkFolderDeletion(subfolder)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -60,9 +60,7 @@ class HistoryFragmentStoreTest {
|
|||
fun finishSync() = runBlocking {
|
||||
val initialState = HistoryFragmentState(
|
||||
items = listOf(),
|
||||
mode = HistoryFragmentState.Mode.Syncing,
|
||||
pendingDeletionIds = emptySet(),
|
||||
isDeletingItems = false
|
||||
mode = HistoryFragmentState.Mode.Syncing
|
||||
)
|
||||
val store = HistoryFragmentStore(initialState)
|
||||
|
||||
|
@ -73,22 +71,16 @@ class HistoryFragmentStoreTest {
|
|||
|
||||
private fun emptyDefaultState(): HistoryFragmentState = HistoryFragmentState(
|
||||
items = listOf(),
|
||||
mode = HistoryFragmentState.Mode.Normal,
|
||||
pendingDeletionIds = emptySet(),
|
||||
isDeletingItems = false
|
||||
mode = HistoryFragmentState.Mode.Normal
|
||||
)
|
||||
|
||||
private fun oneItemEditState(): HistoryFragmentState = HistoryFragmentState(
|
||||
items = listOf(),
|
||||
mode = HistoryFragmentState.Mode.Editing(setOf(historyItem)),
|
||||
pendingDeletionIds = emptySet(),
|
||||
isDeletingItems = false
|
||||
mode = HistoryFragmentState.Mode.Editing(setOf(historyItem))
|
||||
)
|
||||
|
||||
private fun twoItemEditState(): HistoryFragmentState = HistoryFragmentState(
|
||||
items = listOf(),
|
||||
mode = HistoryFragmentState.Mode.Editing(setOf(historyItem, newHistoryItem)),
|
||||
pendingDeletionIds = emptySet(),
|
||||
isDeletingItems = false
|
||||
mode = HistoryFragmentState.Mode.Editing(setOf(historyItem, newHistoryItem))
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue