From 6e85bb1e08d6512ad6c034757d926e0c54c6ee05 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 8 Feb 2024 16:18:35 +0200 Subject: [PATCH 01/51] Bug 1879339 - Add missing pairs of logs to ComposeTopSitesRobot --- .../fenix/ui/robots/ComposeTopSitesRobot.kt | 59 +++++++++++++------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ComposeTopSitesRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ComposeTopSitesRobot.kt index 1a25a39e6915..53f1121bfaea 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ComposeTopSitesRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ComposeTopSitesRobot.kt @@ -34,25 +34,31 @@ class ComposeTopSitesRobot(private val composeTestRule: HomeActivityComposeTestR @OptIn(ExperimentalTestApi::class) fun verifyExistingTopSitesList() { - Log.i(TAG, "verifyExistingTopSitesList: Waiting for top sites list to exist") + Log.i(TAG, "verifyExistingTopSitesList: Waiting for $waitingTime ms until the top sites list exists") composeTestRule.waitUntilAtLeastOneExists(hasTestTag(TopSitesTestTag.topSites), timeoutMillis = waitingTime) + Log.i(TAG, "verifyExistingTopSitesList: Waited for $waitingTime ms until the top sites list to exists") } @OptIn(ExperimentalTestApi::class) fun verifyExistingTopSiteItem(vararg titles: String) { titles.forEach { title -> - Log.i(TAG, "verifyExistingTopSiteItem: Waiting for top site: $title to exist") + Log.i(TAG, "verifyExistingTopSiteItem: Waiting for $waitingTime ms until the top site with title: $title exists") composeTestRule.waitUntilAtLeastOneExists(hasText(title), timeoutMillis = waitingTime) + Log.i(TAG, "verifyExistingTopSiteItem: Waited for $waitingTime ms until the top site with title: $title exists") + Log.i(TAG, "verifyExistingTopSiteItem: Trying to verify that the top site with title: $title exists") composeTestRule.topSiteItem(title).assertExists() - Log.i(TAG, "verifyExistingTopSiteItem: Top site with $title exists") + Log.i(TAG, "verifyExistingTopSiteItem: Verified that the top site with title: $title exists") } } fun verifyNotExistingTopSiteItem(vararg titles: String) { titles.forEach { title -> + Log.i(TAG, "verifyNotExistingTopSiteItem: Waiting for $waitingTime ms for top site with title: $title to exist") itemContainingText(title).waitForExists(waitingTime) + Log.i(TAG, "verifyNotExistingTopSiteItem: Waited for $waitingTime ms for top site with title: $title to exist") + Log.i(TAG, "verifyNotExistingTopSiteItem: Trying to verify that top site with title: $title does not exist") composeTestRule.topSiteItem(title).assertDoesNotExist() - Log.i(TAG, "verifyNotExistingTopSiteItem: Top site with $title does not exist") + Log.i(TAG, "verifyNotExistingTopSiteItem: Verified that top site with title: $title does not exist") } } @@ -63,18 +69,21 @@ class ComposeTopSitesRobot(private val composeTestRule: HomeActivityComposeTestR } fun verifyTopSiteContextMenuOpenInPrivateTabButton() { + Log.i(TAG, "verifyTopSiteContextMenuOpenInPrivateTabButton: Trying to verify that the \"Open in private tab\" menu button exists") composeTestRule.contextMenuItemOpenInPrivateTab().assertExists() - Log.i(TAG, "verifyTopSiteContextMenuOpenInPrivateTabButton: Verified \"Open in private tab\" menu button exists") + Log.i(TAG, "verifyTopSiteContextMenuOpenInPrivateTabButton: Verified that the \"Open in private tab\" menu button exists") } fun verifyTopSiteContextMenuRenameButton() { + Log.i(TAG, "verifyTopSiteContextMenuRenameButton: Trying to verify that the \"Rename\" menu button exists") composeTestRule.contextMenuItemRename().assertExists() - Log.i(TAG, "verifyTopSiteContextMenuRenameButton: Verified \"Rename\" menu button exists") + Log.i(TAG, "verifyTopSiteContextMenuRenameButton: Verified that the \"Rename\" menu button exists") } fun verifyTopSiteContextMenuRemoveButton() { + Log.i(TAG, "verifyTopSiteContextMenuRemoveButton: Trying to verify that the \"Remove\" menu button exists") composeTestRule.contextMenuItemRemove().assertExists() - Log.i(TAG, "verifyTopSiteContextMenuRemoveButton: Verified \"Remove\" menu button exists") + Log.i(TAG, "verifyTopSiteContextMenuRemoveButton: Verified that the \"Remove\" menu button exists") } class Transition(private val composeTestRule: HomeActivityComposeTestRule) { @@ -83,8 +92,12 @@ class ComposeTopSitesRobot(private val composeTestRule: HomeActivityComposeTestR title: String, interact: BrowserRobot.() -> Unit, ): BrowserRobot.Transition { - composeTestRule.topSiteItem(title).performScrollTo().performClick() - Log.i(TAG, "openTopSiteTabWithTitle: Scrolled and clicked top site with title: $title") + Log.i(TAG, "openTopSiteTabWithTitle: Trying to scroll to top site with title: $title") + composeTestRule.topSiteItem(title).performScrollTo() + Log.i(TAG, "openTopSiteTabWithTitle: Scrolled to top site with title: $title") + Log.i(TAG, "openTopSiteTabWithTitle: Trying to click top site with title: $title") + composeTestRule.topSiteItem(title).performClick() + Log.i(TAG, "openTopSiteTabWithTitle: Clicked top site with title: $title") BrowserRobot().interact() return BrowserRobot.Transition() @@ -93,8 +106,9 @@ class ComposeTopSitesRobot(private val composeTestRule: HomeActivityComposeTestR fun openTopSiteInPrivate( interact: BrowserRobot.() -> Unit, ): BrowserRobot.Transition { + Log.i(TAG, "openTopSiteInPrivate: Trying to click the \"Open in private tab\" menu button") composeTestRule.contextMenuItemOpenInPrivateTab().performClick() - Log.i(TAG, "openTopSiteInPrivate: Clicked \"Open in private tab\" menu button") + Log.i(TAG, "openTopSiteInPrivate: Clicked the \"Open in private tab\" menu button") composeTestRule.waitForIdle() BrowserRobot().interact() @@ -105,9 +119,11 @@ class ComposeTopSitesRobot(private val composeTestRule: HomeActivityComposeTestR title: String, interact: ComposeTopSitesRobot.() -> Unit, ): Transition { - composeTestRule.topSiteItem(title).performScrollTo().performTouchInput { - longClick() - } + Log.i(TAG, "openContextMenuOnTopSitesWithTitle: Trying to scroll to top site with title: $title") + composeTestRule.topSiteItem(title).performScrollTo() + Log.i(TAG, "openContextMenuOnTopSitesWithTitle: Scrolled to top site with title: $title") + Log.i(TAG, "openContextMenuOnTopSitesWithTitle: Trying to long click top site with title: $title") + composeTestRule.topSiteItem(title).performTouchInput { longClick() } Log.i(TAG, "openContextMenuOnTopSitesWithTitle: Long clicked top site with title: $title") ComposeTopSitesRobot(composeTestRule).interact() @@ -118,16 +134,21 @@ class ComposeTopSitesRobot(private val composeTestRule: HomeActivityComposeTestR title: String, interact: ComposeTopSitesRobot.() -> Unit, ): Transition { + Log.i(TAG, "renameTopSite: Trying to click the \"Rename\" menu button") composeTestRule.contextMenuItemRename().performClick() - Log.i(TAG, "renameTopSite: Clicked \"Rename\" menu button") + Log.i(TAG, "renameTopSite: Clicked the \"Rename\" menu button") itemWithResId("$packageName:id/top_site_title") .also { + Log.i(TAG, "renameTopSite: Waiting for $waitingTimeShort ms for top site rename text box to exist") it.waitForExists(waitingTimeShort) + Log.i(TAG, "renameTopSite: Waited for $waitingTimeShort ms for top site rename text box to exist") + Log.i(TAG, "renameTopSite: Trying to set top site rename text box text to: $title") it.setText(title) + Log.i(TAG, "renameTopSite: Top site rename text box text was set to: $title") } - Log.i(TAG, "renameTopSite: Top site rename text box was set to: $title") + Log.i(TAG, "renameTopSite: Trying to click the \"Ok\" dialog button") itemWithResIdContainingText("android:id/button1", "OK").click() - Log.i(TAG, "renameTopSite: Clicked \"Ok\" dialog button") + Log.i(TAG, "renameTopSite: Clicked the \"Ok\" dialog button") ComposeTopSitesRobot(composeTestRule).interact() return Transition(composeTestRule) @@ -137,10 +158,12 @@ class ComposeTopSitesRobot(private val composeTestRule: HomeActivityComposeTestR fun removeTopSite( interact: ComposeTopSitesRobot.() -> Unit, ): Transition { + Log.i(TAG, "removeTopSite: Trying to click the \"Remove\" menu button") composeTestRule.contextMenuItemRemove().performClick() - Log.i(TAG, "removeTopSite: Clicked \"Remove\" menu button") + Log.i(TAG, "removeTopSite: Clicked the \"Remove\" menu button") + Log.i(TAG, "removeTopSite: Waiting for $waitingTime ms until the \"Remove\" menu button does not exist") composeTestRule.waitUntilDoesNotExist(hasTestTag(TopSitesTestTag.remove), waitingTime) - Log.i(TAG, "removeTopSite: Waited for \"Remove\" menu button to not exist") + Log.i(TAG, "removeTopSite: Waited for $waitingTime ms until the \"Remove\" menu button does not exist") ComposeTopSitesRobot(composeTestRule).interact() return Transition(composeTestRule) From b4daeab8c98ed5b3809d70ba1022633c52daa3fe Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 12:23:15 +0200 Subject: [PATCH 02/51] Bug 1879498 - Add missing pairs of logs to CustomTabRobot --- .../mozilla/fenix/ui/robots/CustomTabRobot.kt | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/CustomTabRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/CustomTabRobot.kt index 01959e7b8560..3c4d37710a50 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/CustomTabRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/CustomTabRobot.kt @@ -48,21 +48,24 @@ class CustomTabRobot { fun verifyMainMenuButton() = assertUIObjectExists(mainMenuButton()) fun verifyDesktopSiteButtonExists() { + Log.i(TAG, "verifyDesktopSiteButtonExists: Trying to verify that the request desktop site button is displayed") desktopSiteButton().check(matches(isDisplayed())) - Log.i(TAG, "verifyDesktopSiteButtonExists: Verified request desktop site button is displayed") + Log.i(TAG, "verifyDesktopSiteButtonExists: Verified that the request desktop site button is displayed") } fun verifyFindInPageButtonExists() { + Log.i(TAG, "verifyFindInPageButtonExists: Trying to verify that the find in page button is displayed") findInPageButton().check(matches(isDisplayed())) - Log.i(TAG, "verifyFindInPageButtonExists: Verified find in page button is displayed") + Log.i(TAG, "verifyFindInPageButtonExists: Verified that the find in page button is displayed") } fun verifyPoweredByTextIsDisplayed() = assertUIObjectExists(itemContainingText("POWERED BY $appName")) fun verifyOpenInBrowserButtonExists() { + Log.i(TAG, "verifyOpenInBrowserButtonExists: Trying to verify that the \"Open in Firefox\" button is displayed") openInBrowserButton().check(matches(isDisplayed())) - Log.i(TAG, "verifyOpenInBrowserButtonExists: Verified open in browser button is displayed") + Log.i(TAG, "verifyOpenInBrowserButtonExists: Verified that the \"Open in Firefox\" button is displayed") } fun verifyBackButtonExists() = assertUIObjectExists(itemWithDescription("Back")) @@ -74,8 +77,9 @@ class CustomTabRobot { fun verifyCustomMenuItem(label: String) = assertUIObjectExists(itemContainingText(label)) fun verifyCustomTabCloseButton() { + Log.i(TAG, "verifyCustomTabCloseButton: Trying to verify that the close custom tab button is displayed") closeButton().check(matches(isDisplayed())) - Log.i(TAG, "verifyCustomTabCloseButton: Verified close custom tab button is displayed") + Log.i(TAG, "verifyCustomTabCloseButton: Verified that the close custom tab button is displayed") } fun verifyCustomTabToolbarTitle(title: String) { @@ -109,13 +113,16 @@ class CustomTabRobot { mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar")), waitingTime, ) + Log.i(TAG, "longCLickAndCopyToolbarUrl: Trying to long click the custom tab toolbar") customTabToolbar().click(LONG_CLICK_DURATION) - Log.i(TAG, "longCLickAndCopyToolbarUrl: Long clicked custom tab toolbar") + Log.i(TAG, "longCLickAndCopyToolbarUrl: Long clicked the custom tab toolbar") clickContextMenuItem("Copy") } fun fillAndSubmitLoginCredentials(userName: String, password: String) { + Log.i(TAG, "fillAndSubmitLoginCredentials: Waiting for device to be idle for $waitingTime ms") mDevice.waitForIdle(waitingTime) + Log.i(TAG, "fillAndSubmitLoginCredentials: Waited for device to be idle for $waitingTime ms") setPageObjectText(itemWithResId("username"), userName) setPageObjectText(itemWithResId("password"), password) clickPageObject(itemWithResId("submit")) @@ -126,11 +133,13 @@ class CustomTabRobot { } fun waitForPageToLoad() { + Log.i(TAG, "waitForPageToLoad: Waiting for $waitingTime ms until progress bar is gone") progressBar().waitUntilGone(waitingTime) - Log.i(TAG, "waitForPageToLoad: Waited $waitingTime ms until progress bar was gone") + Log.i(TAG, "waitForPageToLoad: Waited for $waitingTime ms until progress bar was gone") } fun clickCustomTabCloseButton() { + Log.i(TAG, "clickCustomTabCloseButton: Trying to click close custom tab button") closeButton().click() Log.i(TAG, "clickCustomTabCloseButton: Clicked close custom tab button") } @@ -147,10 +156,12 @@ class CustomTabRobot { class Transition { fun openMainMenu(interact: CustomTabRobot.() -> Unit): Transition { mainMenuButton().also { - Log.i(TAG, "openMainMenu: Looking for main menu button") + Log.i(TAG, "openMainMenu: Waiting for $waitingTime ms for the main menu button to exist") it.waitForExists(waitingTime) + Log.i(TAG, "openMainMenu: Waited for $waitingTime ms for the main menu button to exist") + Log.i(TAG, "openMainMenu: Trying to click the main menu button") it.click() - Log.i(TAG, "openMainMenu: Clicked main menu button") + Log.i(TAG, "openMainMenu: Clicked the main menu button") } CustomTabRobot().interact() @@ -158,16 +169,18 @@ class CustomTabRobot { } fun clickOpenInBrowserButton(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + Log.i(TAG, "clickOpenInBrowserButton: Trying to click the \"Open in Firefox\" button") openInBrowserButton().perform(click()) - Log.i(TAG, "clickOpenInBrowserButton: Clicked \"Open in Firefox\" button") + Log.i(TAG, "clickOpenInBrowserButton: Clicked the \"Open in Firefox\" button") BrowserRobot().interact() return BrowserRobot.Transition() } fun clickShareButton(interact: ShareOverlayRobot.() -> Unit): ShareOverlayRobot.Transition { + Log.i(TAG, "clickShareButton: Trying to click the share button") itemWithDescription(getStringResource(R.string.mozac_feature_customtabs_share_link)).click() - Log.i(TAG, "clickShareButton: Clicked share button") + Log.i(TAG, "clickShareButton: Clicked the share button") ShareOverlayRobot().interact() return ShareOverlayRobot.Transition() From d566743ea0f041ce27c1204da903de380f96b46e Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 13:34:04 +0200 Subject: [PATCH 03/51] Bug 1879509 - Add missing pairs of logs to DownloadRobot --- .../mozilla/fenix/ui/robots/DownloadRobot.kt | 58 ++++++++++++------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/DownloadRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/DownloadRobot.kt index 975000dd2095..eab72fffb12a 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/DownloadRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/DownloadRobot.kt @@ -51,9 +51,8 @@ class DownloadRobot { fun verifyDownloadPrompt(fileName: String) { var currentTries = 0 while (currentTries++ < 3) { - Log.i(TAG, "verifyDownloadPrompt: While loop currentTries = $currentTries") + Log.i(TAG, "verifyDownloadPrompt: Started try #$currentTries") try { - Log.i(TAG, "verifyDownloadPrompt: Try block") assertUIObjectExists( itemWithResId("$packageName:id/download_button"), itemContainingText(fileName), @@ -61,7 +60,7 @@ class DownloadRobot { break } catch (e: AssertionError) { - Log.i(TAG, "verifyDownloadPrompt: Catch block") + Log.i(TAG, "verifyDownloadPrompt: AssertionError caught, executing fallback methods") Log.e("DOWNLOAD_ROBOT", "Failed to find locator: ${e.localizedMessage}") browserScreen { @@ -96,11 +95,12 @@ class DownloadRobot { ) fun clickTryAgainButton() { + Log.i(TAG, "clickTryAgainButton: Trying to click the \"TRY AGAIN\" in app prompt button") itemWithResIdAndText( "$packageName:id/download_dialog_action_button", "Try Again", ).click() - Log.i(TAG, "clickTryAgainButton: Clicked \"TRY AGAIN\" in app prompt button") + Log.i(TAG, "clickTryAgainButton: Clicked the \"TRY AGAIN\" in app prompt button") } fun verifyPhotosAppOpens() = assertExternalAppOpens(GOOGLE_APPS_PHOTOS) @@ -111,34 +111,40 @@ class DownloadRobot { fun verifyDownloadedFileIcon() = assertUIObjectExists(itemWithResId("$packageName:id/favicon")) fun verifyEmptyDownloadsList() { - Log.i(TAG, "verifyEmptyDownloadsList: Looking for empty download list") + Log.i(TAG, "verifyEmptyDownloadsList: Waiting for $waitingTime ms for for empty download list to exist") mDevice.findObject(UiSelector().resourceId("$packageName:id/download_empty_view")) .waitForExists(waitingTime) + Log.i(TAG, "verifyEmptyDownloadsList: Waited for $waitingTime ms for for empty download list to exist") + Log.i(TAG, "verifyEmptyDownloadsList: Trying to verify that the \"No downloaded files\" list message is displayed") onView(withText("No downloaded files")).check(matches(isDisplayed())) - Log.i(TAG, "verifyEmptyDownloadsList: Verified \"No downloaded files\" list message") + Log.i(TAG, "verifyEmptyDownloadsList: Verified that the \"No downloaded files\" list message is displayed") } fun waitForDownloadsListToExist() = assertUIObjectExists(itemWithResId("$packageName:id/download_list")) fun openDownloadedFile(fileName: String) { - downloadedFile(fileName) - .check(matches(isDisplayed())) - .click() + Log.i(TAG, "openDownloadedFile: Trying to verify that the downloaded file: $fileName is displayed") + downloadedFile(fileName).check(matches(isDisplayed())) + Log.i(TAG, "openDownloadedFile: Verified that the downloaded file: $fileName is displayed") + Log.i(TAG, "openDownloadedFile: Trying to click downloaded file: $fileName") + downloadedFile(fileName).click() Log.i(TAG, "openDownloadedFile: Clicked downloaded file: $fileName") } fun deleteDownloadedItem(fileName: String) { + Log.i(TAG, "deleteDownloadedItem: Trying to click the trash bin icon to delete downloaded file: $fileName") onView( allOf( withId(R.id.overflow_menu), hasSibling(withText(fileName)), ), ).click() - Log.i(TAG, "deleteDownloadedItem: Deleted downloaded file: $fileName using trash bin icon") + Log.i(TAG, "deleteDownloadedItem: Clicked the trash bin icon to delete downloaded file: $fileName") } fun longClickDownloadedItem(title: String) { + Log.i(TAG, "longClickDownloadedItem: Trying to long click downloaded file: $title") onView( allOf( withId(R.id.title), @@ -149,21 +155,24 @@ class DownloadRobot { } fun selectDownloadedItem(title: String) { + Log.i(TAG, "selectDownloadedItem: Trying click downloaded file: $title to select it") onView( allOf( withId(R.id.title), withText(title), ), ).perform(click()) - Log.i(TAG, "selectDownloadedItem: Selected downloaded file: $title") + Log.i(TAG, "selectDownloadedItem: Clicked downloaded file: $title to select it") } fun openMultiSelectMoreOptionsMenu() { + Log.i(TAG, "openMultiSelectMoreOptionsMenu: Trying to click multi-select more options button") itemWithDescription(getStringResource(R.string.content_description_menu)).click() Log.i(TAG, "openMultiSelectMoreOptionsMenu: Clicked multi-select more options button") } fun clickMultiSelectRemoveButton() { + Log.i(TAG, "clickMultiSelectRemoveButton: Trying to click multi-select remove button") itemWithResIdContainingText("$packageName:id/title", "Remove").click() Log.i(TAG, "clickMultiSelectRemoveButton: Clicked multi-select remove button") } @@ -180,27 +189,31 @@ class DownloadRobot { class Transition { fun clickDownload(interact: DownloadRobot.() -> Unit): Transition { + Log.i(TAG, "clickDownload: Trying to click the \"Download\" download prompt button") downloadButton().click() - Log.i(TAG, "clickDownload: Clicked \"DOWNLOAD\" button from prompt") + Log.i(TAG, "clickDownload: Clicked the \"Download\" download prompt button") DownloadRobot().interact() return Transition() } fun closeDownloadPrompt(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + Log.i(TAG, "closeDownloadPrompt: Trying to click the close download prompt button") itemWithResId("$packageName:id/download_dialog_close_button").click() - Log.i(TAG, "closeDownloadPrompt: Dismissed download prompt by clicking close prompt button") + Log.i(TAG, "closeDownloadPrompt: Clicked the close download prompt button") BrowserRobot().interact() return BrowserRobot.Transition() } fun clickOpen(type: String, interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { - Log.i(TAG, "clickOpen: Looking for \"OPEN\" download prompt button") + Log.i(TAG, "clickOpen: Waiting for $waitingTime ms for the for \"OPEN\" download prompt button to exist") openDownloadButton().waitForExists(waitingTime) + Log.i(TAG, "clickOpen: Waited for $waitingTime ms for the for \"OPEN\" download prompt button to exist") + Log.i(TAG, "clickOpen: Trying to click the \"OPEN\" download prompt button") openDownloadButton().click() - Log.i(TAG, "clickOpen: Clicked \"OPEN\" download prompt button") - + Log.i(TAG, "clickOpen: Clicked the \"OPEN\" download prompt button") + Log.i(TAG, "clickOpen: Trying to verify that the open intent is matched with associated data type") // verify open intent is matched with associated data type Intents.intended( allOf( @@ -208,37 +221,38 @@ class DownloadRobot { IntentMatchers.hasType(type), ), ) - Log.i(TAG, "clickOpen: Verified that open intent is matched with associated data type") + Log.i(TAG, "clickOpen: Verified that the open intent is matched with associated data type") BrowserRobot().interact() return BrowserRobot.Transition() } fun clickAllowPermission(interact: DownloadRobot.() -> Unit): Transition { - Log.i(TAG, "clickAllowPermission: Looking for \"ALLOW\" permission button") mDevice.waitNotNull( Until.findObject(By.res(getPermissionAllowID() + ":id/permission_allow_button")), waitingTime, ) - + Log.i(TAG, "clickAllowPermission: Trying to click the \"ALLOW\" permission button") mDevice.findObject(By.res(getPermissionAllowID() + ":id/permission_allow_button")).click() - Log.i(TAG, "clickAllowPermission: Clicked \"ALLOW\" permission button") + Log.i(TAG, "clickAllowPermission: Clicked the \"ALLOW\" permission button") DownloadRobot().interact() return Transition() } fun exitDownloadsManagerToBrowser(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + Log.i(TAG, "exitDownloadsManagerToBrowser: Trying to click the navigate up toolbar button") onView(withContentDescription("Navigate up")).click() - Log.i(TAG, "exitDownloadsManagerToBrowser: Exited download manager to browser by clicking the navigate up toolbar button") + Log.i(TAG, "exitDownloadsManagerToBrowser: Clicked the navigate up toolbar button") BrowserRobot().interact() return BrowserRobot.Transition() } fun goBack(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { + Log.i(TAG, "goBack: Trying to click the navigate up toolbar button") goBackButton().click() - Log.i(TAG, "exitDownloadsManagerToBrowser: Exited download manager to home screen by clicking the navigate up toolbar button") + Log.i(TAG, "goBack: Clicked the navigate up toolbar button") HomeScreenRobot().interact() return HomeScreenRobot.Transition() From 01c2307b2bb198e97a403b674aa44b893e482361 Mon Sep 17 00:00:00 2001 From: sarah541 Date: Thu, 8 Feb 2024 10:59:45 -0500 Subject: [PATCH 04/51] Bug 1879135 - Add ecosia crawl website --- .../src/main/assets/extensions/ads/manifest.template.json | 3 ++- .../src/main/assets/extensions/search/manifest.template.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/android-components/components/feature/search/src/main/assets/extensions/ads/manifest.template.json b/android-components/components/feature/search/src/main/assets/extensions/ads/manifest.template.json index bacc0d7cac73..219e41b55454 100644 --- a/android-components/components/feature/search/src/main/assets/extensions/ads/manifest.template.json +++ b/android-components/components/feature/search/src/main/assets/extensions/ads/manifest.template.json @@ -204,7 +204,8 @@ "https://www.bing.com/search*", "https://www.baidu.com/*", "https://m.baidu.com/*", - "https://duckduckgo.com/*" + "https://duckduckgo.com/*", + "https://www.ecosia.org/*" ], "js": ["adsTelemetry.js"], "run_at": "document_end" diff --git a/android-components/components/feature/search/src/main/assets/extensions/search/manifest.template.json b/android-components/components/feature/search/src/main/assets/extensions/search/manifest.template.json index 642ad819ffc0..ae9cf13dac99 100644 --- a/android-components/components/feature/search/src/main/assets/extensions/search/manifest.template.json +++ b/android-components/components/feature/search/src/main/assets/extensions/search/manifest.template.json @@ -205,7 +205,8 @@ "https://m.baidu.com/*", "https://*search.yahoo.com/search*", "https://www.bing.com/search*", - "https://duckduckgo.com/*" + "https://duckduckgo.com/*", + "https://www.ecosia.org/*" ], "js": ["searchTelemetry.js"], "run_at": "document_end" From 0733fc077a9d0e82816efcc8aad6cd6b4ad0259f Mon Sep 17 00:00:00 2001 From: Titouan Thibaud Date: Fri, 9 Feb 2024 18:00:17 +0100 Subject: [PATCH 05/51] Bug 1879583 - Change the default for pull-to-refresh to enabled Co-authored-by: Jonathan Almeida --- fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 7b8f0343e656..1808eb3a30d6 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -1477,7 +1477,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { var isPullToRefreshEnabledInBrowser by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_website_pull_to_refresh), - default = Config.channel.isNightlyOrDebug, + default = true, ) var isDynamicToolbarEnabled by booleanPreference( From 48c917f78f4c94664790dba80c0874b92756d3ed Mon Sep 17 00:00:00 2001 From: Matthew Tighe Date: Fri, 9 Feb 2024 09:19:20 -0800 Subject: [PATCH 06/51] Revert "Bug 1833666 - Update original RFC guidelines with stakeholders" This reverts commit e1e6e86bf6525a123518919bfc620108396ad3dc. --- docs/rfcs/0001-rfc-process.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/rfcs/0001-rfc-process.md b/docs/rfcs/0001-rfc-process.md index 8f120399fa58..09919475460c 100644 --- a/docs/rfcs/0001-rfc-process.md +++ b/docs/rfcs/0001-rfc-process.md @@ -35,7 +35,6 @@ The high-level process of creating an RFC is: * Create an RFC document (like this one) using the template. * Open a pull request for the RFC document. * Ask for feedback on the pull request, via the [mailing list]() or in [chat](https://chat.mozilla.org/#/room/#android-components:mozilla.org). -* Assign or receive volunteers to act as stakeholders for the RFC. They will be responsible for a final decision on the proposal. This should include at least 2 internal team members, and at least 1 external team member if the proposal has been suggested from an external team. During the lifetime of an RFC: From 62072cdbec13bfca1d950eee968e6bc4e54e56eb Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 10 Feb 2024 00:03:28 +0000 Subject: [PATCH 07/51] Import translations from android-l10n --- .../addons/src/main/res/values-rm/strings.xml | 2 + .../src/main/res/values-cy/strings.xml | 2 +- .../media/src/main/res/values-et/strings.xml | 23 +++- .../media/src/main/res/values-rm/strings.xml | 11 +- .../src/main/res/values-hy-rAM/strings.xml | 3 + .../src/main/res/values-rm/strings.xml | 36 ++++++ fenix/app/src/main/res/values-azb/strings.xml | 104 ++++++++++++++++++ fenix/app/src/main/res/values-bg/strings.xml | 2 +- fenix/app/src/main/res/values-et/strings.xml | 68 ++++++++++++ .../src/main/res/values-hy-rAM/strings.xml | 3 + fenix/app/src/main/res/values-kab/strings.xml | 16 ++- fenix/app/src/main/res/values-rm/strings.xml | 74 ++++++------- fenix/app/src/main/res/values-sk/strings.xml | 3 + fenix/app/src/main/res/values-ug/strings.xml | 3 + 14 files changed, 301 insertions(+), 49 deletions(-) diff --git a/android-components/components/feature/addons/src/main/res/values-rm/strings.xml b/android-components/components/feature/addons/src/main/res/values-rm/strings.xml index f7b752cd4b87..2a1b17137b40 100644 --- a/android-components/components/feature/addons/src/main/res/values-rm/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-rm/strings.xml @@ -22,6 +22,8 @@ then we will show another collapsed entry saying "Access your data on 2 other domains". This entry it's for the plural case, when the add-on is accessing more than one extra domain. %1$d will be replaced by an integer indicating the number of additional domains for which this web extension is requesting permission. --> Acceder a tias datas per %1$d autras domenas + + %1$s, %2$d da %3$d Acceder als tabs dal navigatur diff --git a/android-components/components/feature/downloads/src/main/res/values-cy/strings.xml b/android-components/components/feature/downloads/src/main/res/values-cy/strings.xml index 4eb29e47c223..ba05a7e8248e 100644 --- a/android-components/components/feature/downloads/src/main/res/values-cy/strings.xml +++ b/android-components/components/feature/downloads/src/main/res/values-cy/strings.xml @@ -13,7 +13,7 @@ Llwytho (%1$s) - Llwytho + Llwytho i Lawr Diddymu diff --git a/android-components/components/feature/media/src/main/res/values-et/strings.xml b/android-components/components/feature/media/src/main/res/values-et/strings.xml index e8f8b7f37668..de103560f60e 100644 --- a/android-components/components/feature/media/src/main/res/values-et/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-et/strings.xml @@ -1,5 +1,5 @@ - + Meedia @@ -10,6 +10,27 @@ Kaamera ja mikrofon on sisse lülitatud + + Puuduta kaamerat kasutava kaardi avamiseks. + + Puuduta mikrofoni kasutava kaardi avamiseks. + + + + Puuduta mikrofoni ja kaamerat kasutava kaardi avamiseks. + + + + Meeldetuletus: %1$s kasutab endiselt kaamerat. Puuduta kaardi avamiseks. + + Meeldetuletus: %1$s kasutab endiselt mikrofoni. Puuduta kaardi avamiseks. + + Meeldetuletus: %1$s kasutab endiselt mikrofoni. Puuduta kaardi avamiseks. + + Meeldetuletus: %1$s kasutab endiselt mikrofoni ja kaamerat. Puuduta kaardi avamiseks. + + Meeldetuletus: %1$s kasutab endiselt mikrofoni ja kaamerat. Puuduta kaardi avamiseks. + Esita diff --git a/android-components/components/feature/media/src/main/res/values-rm/strings.xml b/android-components/components/feature/media/src/main/res/values-rm/strings.xml index 7d7b70d08ef7..5564d782111c 100644 --- a/android-components/components/feature/media/src/main/res/values-rm/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-rm/strings.xml @@ -1,5 +1,5 @@ - + Medias @@ -21,9 +21,14 @@ Promemoria: %1$s utilisescha anc adina tia camera. Tutgar per avrir il tab. - Promemoria: %1$s utilisescha anc adina tes microfon. Tutgar per avrir il tab + Promemoria: %1$s utilisescha anc adina tes microfon. Tutgar per avrir il tab + + Promemoria: %1$s utilisescha anc adina tes microfon. Tutgar per avrir il tab. + + Promemoria: %1$s utilisescha anc adina tes microfon e tia camera. Tutgar per avrir il tab + - Promemoria: %1$s utilisescha anc adina tes microfon e tia camera. Tutgar per avrir il tab + Promemoria: %1$s utilisescha anc adina tes microfon e tia camera. Tutgar per avrir il tab. Far ir diff --git a/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml b/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml index 4af6100e87d7..8190f8d45b30 100644 --- a/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-hy-rAM/strings.xml @@ -152,6 +152,9 @@ Քարտի համարը կկոդավորվի: Անվտանգության կոդը չի պահվի: + + %s-ը գաղտնագրում է ձեր քարտի համարը: Անվտանգության ձեր կոդը չի պահպանվի: + Ընտրեք հասցե diff --git a/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml b/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml index 29183ab85343..2b7976fc1042 100644 --- a/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-rm/strings.xml @@ -18,6 +18,8 @@ Pled-clav Betg memorisar + + Betg ussa Mai memorisar @@ -26,16 +28,26 @@ Memorisar Betg actualisar + + Betg ussa Actualisar Il champ dal pled-clav na dastga betg esser vid + Endatar in pled-clav + Impussibel da memorisar las datas d\'annunzia + + Impussibel da memorisar il pled-clav Memorisar questa infurmaziun d\'annunzia? + + Memorisar il pled-clav? Actualisar questa infurmaziun d\'annunzia? + + Actualisar il pled-clav? Agiuntar in num d\'utilisader al pled-clav memorisà? @@ -85,13 +97,22 @@ Drizzar l\'ura Administrar las datas d\'annunzia + + Administrar ils pleds-clav Expander las datas d\'annunzia proponidas + + Extender ils pleds-clav memorisads Reducir las datas d\'annunzia proponidas + + Reducir ils pleds-clav memorisads Datas d\'annunzia proponidas + + Pleds-clav memorisads + Proponer in ferm pled-clav @@ -110,12 +131,20 @@ Tscherner ina carta da credit + + Utilisar ina carta memorisada Expander las cartas da credit proponidas + + Extender las cartas memorisadas Reducir las cartas da credit proponidas + + Reducir las cartas memorisadas Administrar las cartas da credit + + Administrar las cartas Memorisar questa carta a moda segira? @@ -123,13 +152,20 @@ Il numer da la carta vegn criptà. Il code da segirezza na vegn betg memorisà. + + %s criptescha il numer da tia carta. Tes code da segirezza na vegn betg memorisà. + Tscherner l\'adressa Expander las adressas proponidas + + Extender las adressas proponidas Cumprimer las adressas proponidas + + Reducir las adressas memorisadas Administrar las adressas diff --git a/fenix/app/src/main/res/values-azb/strings.xml b/fenix/app/src/main/res/values-azb/strings.xml index dd604a09ab9c..37a4ebc5fce0 100644 --- a/fenix/app/src/main/res/values-azb/strings.xml +++ b/fenix/app/src/main/res/values-azb/strings.xml @@ -499,6 +499,103 @@ %1$s اوچون کوکی بنر مسدود ائلین ایشدن سالینسین؟ + + %1$s بو سایتدا کوُکی ایستک‌لرینی اوْتوماتیک رد ائده بیلمز. گله‌جکده بوُ سایتی آرخالاماق اوُچون ایستک گؤندره بیلرسینیز. + + + باغلاییْن و %1$s کوُکی‌لری سیله‌جک و بو سایتیْ یئنی‌دن دوْلدوُراجاق. بوُ ، سیزی حسابدان چیخارا ویا آلیْش-وئریْش سبدلرینی بوْشالتا بیلر. + + + آچیْن و %1$s بو سایتداکیْ بوتون کوُکی بنرلرینی اوْتوماتیک رد ائتمه‌گه چالیْشاجاق. + + %1$s سیزین اوچون کوُکی‌لری رد ائتدی. + + + داها آز حواس داغیلماسیْ، بوُ سایتدا سیزی تعقیب ائدن کوُکی‌لر آز. + + + داها چوْخ گوونلیک اوچون HTTPS رمزله‌مه پروْتوکولوُندان ایستیفاده ائده‌رک سایتلارا اوْتوماتیک قوْشوُلماغا چالیْشیر. + + باغلیْ + + + بوتون تاغلاردا آچیْق + + بوتون گیزلی تاغلاردا آچیْق + + آرتیق بیلین + + بوتون تاغلاردا گوجلندیر + + بوتون گیزلی تاغلاردا گوجلندیر + + گوونلی سایت موجود دئییل + + ایحتیمالی چوْخ، سایت HTTPS-ی آرخالامیْر. + + + بوُنونلا بئله، حمله ائده‌نین‌ده ایشتیراک ائتمه‌سی موُمکوندور. ایدامه وئرسز، هئچ بیر بیلگی وئرمه‌یین. ایدامه وئرسز، یالنیز HTTPS حالتی گئچیجی اوْلاراق باغلاناجاقدیْر. + + + اَل چاتانلیق + + اؤزل موْزیلا حسابیْ سِروری + + اؤزل دؤنگل سرور + + + حساب + + ادوات چوبوغو + + تم + + آنایارپاق + + اؤزللشدیرمک + + موْزیلا حسابی + + دیل + + دیتا سئچیمی + + هر زامان + + هئچ زامان + + + تاخیلان‌لار + + + بیلدیریش‌لر + + ایجازه وئریلدی + + ایجازه وئریلمه‌دی + + + تامام + + لغو + + + آرتیق بیلین + + + ایندی دؤنگل‌لندیر + + گئچمیش + + بوُکمارک‌لار + + + رمز‌لر + + آچیْق تاغ‌لار + + چیخیش + اوست @@ -520,6 +617,13 @@ آلت‌لر چوبوغونو گیزلتمک اوچون اسکرول ائله‌ + + + یئندیرنلر + + بوُکمارک‌لار + + diff --git a/fenix/app/src/main/res/values-bg/strings.xml b/fenix/app/src/main/res/values-bg/strings.xml index 04883adee5ec..90068f68de43 100644 --- a/fenix/app/src/main/res/values-bg/strings.xml +++ b/fenix/app/src/main/res/values-bg/strings.xml @@ -526,7 +526,7 @@ Впишете се, за да синхронизирате раздели, отметки, пароли и други. - сметка в Mozilla + Профил в Mozilla Свържете повторно, за да бъде възобновено синхронизирането diff --git a/fenix/app/src/main/res/values-et/strings.xml b/fenix/app/src/main/res/values-et/strings.xml index 998bcdd8f8b4..b7312a3b4029 100644 --- a/fenix/app/src/main/res/values-et/strings.xml +++ b/fenix/app/src/main/res/values-et/strings.xml @@ -16,6 +16,14 @@ Keela privaatne veebilehitsemine Otsi või sisesta aadress + + Otsi veebist + + Otsi ajaloost + + Otsi järjehoidjatest + + Otsi kaartidest Sisesta otsitav fraas @@ -39,6 +47,9 @@ Valitud + + + Hiljuti salvestatud Kuva kõiki järjehoidjaid @@ -55,6 +66,24 @@ %1$s kustutab privaatsete kaartide otsimise ja lehitsemise ajaloo, kui väljud rakendusest või sulged privaatsed kaardid. Kuigi see ei muuda sind külastatavate veebilehtede või internetiteenuse pakkuja ees anonüümseks, kaitseb see siiski sinu privaatsust teiste selle seadme kasutajate eest. Levinumad müüdid privaatse veebilehitsemise kohta + + + Ära jäta sellesse seadmesse jälgi + + %1$s kustutab küpsised, ajaloo ja saidiandmed, kui sulged kõik privaatsed kaardid. %2$s + + Kes võib minu tegevusi näha? + + + + Ava järgmine privaatne kaart ühe puudutusega. + + Lisa avaekraanile Tänan, ei soovi @@ -68,6 +97,19 @@ Peida + + + Meie võimsaim privaatsusfunktsioon, mis siiski eraldab saidiülesed jälitajad. + + + + Rohkem teavet täielikust küpsiste vastasest kaitsest + + + + Uue privaatseansi alustamiseks puuduta siit. Kustuta ajalugu, küpsised – kõik. + + Vajalik on ligipääs kaamerale. Mine Androidi sätetesse, puuduta õigusi ja seejärel puuduta lubamise valikut. @@ -103,6 +145,9 @@ Uus privaatne kaart + + Paroolide otsetee + Hiljutised kaardid @@ -115,6 +160,8 @@ Kuva kõiki sünkroniseeritud kaarte Sünkroniseeritud seade + + Eemalda Eemalda @@ -140,6 +187,8 @@ Peata Lisad + + Konto andmed Lisad puuduvad @@ -153,6 +202,8 @@ Kogumik Töölaua versioon + + Ava tavalisel kaardil Lisa avaekraanile @@ -163,6 +214,8 @@ Otsi lehelt + + Tõlgi leht Salvesta kollektsiooni @@ -197,6 +250,12 @@ Avaleht + + Kustuta lehitsemise ajalugu + + Tõlgi leht + Valitud keel @@ -233,6 +292,15 @@ Otsi seekord järgneva otsingumootoriga: + + %s otsingumootor + + + + Tutvu oma isikupärastatud kodulehega. Siin kuvatakse hiljutised kaardid, järjehoidjad ja otsingutulemused. + + Tere tulemast isikupärasemasse internetti + Ava uus kaart %1$sis diff --git a/fenix/app/src/main/res/values-hy-rAM/strings.xml b/fenix/app/src/main/res/values-hy-rAM/strings.xml index 50cd8346f91e..2e069658692a 100644 --- a/fenix/app/src/main/res/values-hy-rAM/strings.xml +++ b/fenix/app/src/main/res/values-hy-rAM/strings.xml @@ -2165,6 +2165,9 @@ %s որոնում + + Փոխարկեք ձեր սկզբնադիր զննարկիչը + Կայեք հղումներ կայքերից, էլ. նամակներից և հաղորդագրություններից, որոնք ինքնաբար կերպով կբացվեն Firefox-ում: diff --git a/fenix/app/src/main/res/values-kab/strings.xml b/fenix/app/src/main/res/values-kab/strings.xml index bdb13932b350..9f1bd4710373 100644 --- a/fenix/app/src/main/res/values-kab/strings.xml +++ b/fenix/app/src/main/res/values-kab/strings.xml @@ -2150,7 +2150,7 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Anadi %s - + Sbadu iseɣwan seg yismal web, seg yimaylen d yiznan i twaledyawt s wudem awurman deg Firefox. @@ -2329,14 +2329,21 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara ldi aseɣwen i wakken ad tissineḍ ugar + + %s, azwel Iseɣwan + + Iseɣwan i yellan + Suqqel asebter-a? + + Ԑreḍ tisuqilin tusligin n %1$s Issin ugar @@ -2354,13 +2361,20 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Suqqel + + Asuqel iteddu Fren tutlayt Yella wugur deg usuqqel. Ttxil-k ɛreḍ tikkelt niḍen. + + Nesḥassef, mazal ur nessefrak ara tutlayt %1$s. Issin ugar + + + Tixtiṛiyin n usuqel Sumer yal tikkelt tasuqqilt diff --git a/fenix/app/src/main/res/values-rm/strings.xml b/fenix/app/src/main/res/values-rm/strings.xml index 9d9fbb672b23..efa79cba3148 100644 --- a/fenix/app/src/main/res/values-rm/strings.xml +++ b/fenix/app/src/main/res/values-rm/strings.xml @@ -239,6 +239,7 @@ Persunalisar la pagina da partenza + Visur da partenza @@ -246,6 +247,9 @@ Stizzar la cronologia + + Translatar la pagina + Lingua tschernida @@ -257,8 +261,6 @@ Scannar - - Maschina da tschertgar Parameters da la maschina da tschertgar @@ -312,24 +314,29 @@ - Communicaziuns ta gidan da far dapli cun %s + Communicaziuns ta gidan da far dapli cun %s - Sincronisescha tes tabs tranter apparats, administrescha las telechargiadas, retschaiva tips per profitar il meglier da la protecziun da datas da %s ed auter pli. + Sincronisescha tes tabs tranter apparats, administrescha las telechargiadas, retschaiva tips per profitar il meglier da la protecziun da datas da %s ed auter pli. - Cuntinuar + Cuntinuar - Betg ussa + Betg ussa + + Las directivas da Firefox per la protecziun da datas + Nus ta protegin cun plaschair - Noss navigatur dad in\'organisaziun senza finamira da profit, gida ad evitar che interpresas ta persequiteschian a la zuppada en il web.\n + Noss navigatur dad in’organisaziun senza finamira da profit, gida ad evitar che interpresas ta persequiteschian a la zuppada en il web. + + Noss navigatur dad in\'organisaziun senza finamira da profit, gida ad evitar che interpresas ta persequiteschian a la zuppada en il web.\n \nLegia dapli dal tema en nossas infurmaziuns davart la protecziun da datas. - infurmaziuns davart la protecziun da datas + infurmaziuns davart la protecziun da datas Definir sco navigatur da standard @@ -432,21 +439,11 @@ Modus mo HTTPS - - Reducziun da bandieras da cookies Bloccada da bandieras da cookies Bloccada da bandieras da cookies en il modus privat - - Reducir las bandieras da cookies - - Deactivà - - Activà - - - %1$s emprova da refusar automaticamain dumondas da deponer cookies cura ch\'ina bandiera da cookies sa mussa. + Deactivà per questa website @@ -464,34 +461,16 @@ Questa website na vegn actualmain betg sustegnida - - Activar la reducziun da bandieras da cookies per %1$s? Activar la bloccada da bandieras da cookies per %1$s? - Deactivar la reducziun da bandieras da cookies per %1$s? - Deactivar la bloccada da bandieras da cookies per %1$s? %1$s na po betg refusar automaticamain dumondas da deponer cookies da questa website. Ti pos trametter ina dumonda da sustegnair questa website en avegnir. - %1$s vegn a stizzar ils cookies da questa website ed actualisar la pagina. Cun stizzar tut ils cookies vegns ti eventualmain deconnectà da websites ed i po dar che chanasters da cumpras vegnan svidads. - Suenter la deactivaziun vegn %1$s ad allontanar ils cookies e rechargiar questa website. Quai po ta deconnectar da la website e svidar eventuals chanasters da cumpras. - %1$s emprova da refusar automaticamain tut las dumondas da deponer cookies da paginas sustegnidas. - Activescha la bloccada e %1$s vegn ad empruvar da refusar automaticamain tut las bandieras da cookies sin questa website. - - Permetter a %1$s da refusar bandieras da cookies? - - %1$s po refusar automaticamain bleras dumondas da bandieras da cookies. - - Betg ussa - - Ti vegns a vesair damain dumondas da cookies - - Permetter %1$s ha refusà cookies per tai @@ -707,6 +686,8 @@ Segnapaginas Infurmaziuns d\'annunzia + + Pleds-clav Tabs averts @@ -733,6 +714,8 @@ Cartas da credit + + Metodas da pajament Adressas @@ -1266,8 +1249,6 @@ Serrar - Impussibel da stampar - Impussibel da stampar questa pagina Stampar @@ -1680,8 +1661,12 @@ Infurmaziuns d\'annunzia e pleds-clav + + Pleds-clav Memorisar las infurmaziuns d\'annunzia ed ils pleds-clav + + Memorisar ils pleds-clav Dumandar per memorisar @@ -1699,10 +1684,17 @@ Agiuntar infurmaziuns d\'annunzia + + Agiuntar in pled-clav + Sincronisar las infurmaziuns d\'annunzia + + Sincronisar ils pleds-clav Sincronisar las datas d\'annunzia tranter tes apparats + + Sincronisar ils pleds-clav sin tut ils apparats Infurmaziuns d\'annunzia memorisadas @@ -2107,7 +2099,7 @@ Tschertga %s - + Definescha che colliaziuns da websites, e-mails e messadis vegnan averts automaticamain en Firefox. @@ -2181,8 +2173,6 @@ accentuads derivan da las recensiun sin %s dals ultims 80 dis che nus tegnain per fidablas.]]> Ulteriuras infurmaziuns davart %s. - - co %s da Mozilla determinescha la qualitad da las recensiuns co %s determinescha la qualitad da las recensiuns diff --git a/fenix/app/src/main/res/values-sk/strings.xml b/fenix/app/src/main/res/values-sk/strings.xml index 03d13eb44897..9be4f869c3d9 100644 --- a/fenix/app/src/main/res/values-sk/strings.xml +++ b/fenix/app/src/main/res/values-sk/strings.xml @@ -2183,6 +2183,9 @@ Vyhľadávanie %s + + Zmeňte svoj predvolený prehliadač + Nastavte si automatické otváranie webových stránok, e‑mailov a správ vo Firefoxe. diff --git a/fenix/app/src/main/res/values-ug/strings.xml b/fenix/app/src/main/res/values-ug/strings.xml index 27f068117454..d0b0e1fdfd1b 100644 --- a/fenix/app/src/main/res/values-ug/strings.xml +++ b/fenix/app/src/main/res/values-ug/strings.xml @@ -2150,6 +2150,9 @@ %s ئىزدەش + + كۆڭۈلدىكى توركۆرگۈڭىزنى ئالماشتۇرۇڭ + تور بېكەت، ئېلخەت ۋە ئۇچۇر ئۇلانمىلىرىنى Firefox تا ئاپتوماتىك ئېچىشقا تەڭشەيدۇ. From 1509e4504097de0ab054521f0f635c418eb6e9a3 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 10 Feb 2024 02:31:44 +0000 Subject: [PATCH 08/51] Update GeckoView (Nightly) to 124.0.20240209214145. --- android-components/plugins/dependencies/src/main/java/Gecko.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/Gecko.kt b/android-components/plugins/dependencies/src/main/java/Gecko.kt index 5763b408ca4b..fba0773afb05 100644 --- a/android-components/plugins/dependencies/src/main/java/Gecko.kt +++ b/android-components/plugins/dependencies/src/main/java/Gecko.kt @@ -9,7 +9,7 @@ object Gecko { /** * GeckoView Version. */ - const val version = "124.0.20240208210654" + const val version = "124.0.20240209214145" /** * GeckoView channel From c077ee9dbfed5c037a8606e4466dc31470cf3028 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 10 Feb 2024 05:34:48 +0000 Subject: [PATCH 09/51] Update A-S to 124.20240210050349. --- .../plugins/dependencies/src/main/java/ApplicationServices.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt b/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt index 5dea01104e03..188a9b88fdf8 100644 --- a/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt +++ b/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // These lines are generated by android-components/automation/application-services-nightly-bump.py -val VERSION = "124.20240209050256" +val VERSION = "124.20240210050349" val CHANNEL = ApplicationServicesChannel.NIGHTLY object ApplicationServicesConfig { From 283c9f56842712f9e6aeb5d4945e085b0529e169 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 10 Feb 2024 13:05:06 +0000 Subject: [PATCH 10/51] Update GeckoView (Nightly) to 124.0.20240210094249. --- android-components/plugins/dependencies/src/main/java/Gecko.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/Gecko.kt b/android-components/plugins/dependencies/src/main/java/Gecko.kt index fba0773afb05..62d9b0ca99b9 100644 --- a/android-components/plugins/dependencies/src/main/java/Gecko.kt +++ b/android-components/plugins/dependencies/src/main/java/Gecko.kt @@ -9,7 +9,7 @@ object Gecko { /** * GeckoView Version. */ - const val version = "124.0.20240209214145" + const val version = "124.0.20240210094249" /** * GeckoView channel From 0d564109bca765ceaeb64cba5d774e4810c0b011 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 11 Feb 2024 00:03:58 +0000 Subject: [PATCH 11/51] Import translations from android-l10n --- .../addons/src/main/res/values-co/strings.xml | 4 +- .../addons/src/main/res/values-cy/strings.xml | 2 +- .../src/main/res/values-nb-rNO/strings.xml | 4 +- .../src/main/res/values-et/strings.xml | 5 + .../src/main/res/values-et/strings.xml | 5 + .../media/src/main/res/values-co/strings.xml | 13 +- .../src/main/res/values-nb-rNO/strings.xml | 21 ++- .../src/main/res/values-co/strings.xml | 36 +++++ .../src/main/res/values-et/strings.xml | 56 ++++++- .../src/main/res/values-nb-rNO/strings.xml | 43 ++++++ .../search/src/main/res/values-et/strings.xml | 12 ++ .../src/main/res/values-cy/strings.xml | 2 +- .../src/main/res/values-et/strings.xml | 5 + fenix/app/src/main/res/values-co/strings.xml | 146 +++++++++++++----- fenix/app/src/main/res/values-cy/strings.xml | 22 +-- fenix/app/src/main/res/values-da/strings.xml | 3 + fenix/app/src/main/res/values-et/strings.xml | 28 ++++ fenix/app/src/main/res/values-fi/strings.xml | 9 ++ fenix/app/src/main/res/values-fur/strings.xml | 3 + fenix/app/src/main/res/values-kab/strings.xml | 5 + .../src/main/res/values-nb-rNO/strings.xml | 110 +++++++------ .../src/main/res/values-pt-rBR/strings.xml | 2 +- fenix/app/src/main/res/values-uk/strings.xml | 3 + fenix/app/src/main/res/values-vi/strings.xml | 3 + .../app/src/main/res/values-cy/strings.xml | 6 +- .../app/src/main/res/values-kab/strings.xml | 2 + .../src/main/res/values-nb-rNO/strings.xml | 8 +- 27 files changed, 438 insertions(+), 120 deletions(-) create mode 100644 android-components/components/feature/fxsuggest/src/main/res/values-et/strings.xml create mode 100644 android-components/components/feature/search/src/main/res/values-et/strings.xml create mode 100644 android-components/components/ui/widgets/src/main/res/values-et/strings.xml diff --git a/android-components/components/feature/addons/src/main/res/values-co/strings.xml b/android-components/components/feature/addons/src/main/res/values-co/strings.xml index e299aec205d6..5d431f3afef4 100644 --- a/android-components/components/feature/addons/src/main/res/values-co/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-co/strings.xml @@ -22,6 +22,8 @@ then we will show another collapsed entry saying "Access your data on 2 other domains". This entry it's for the plural case, when the add-on is accessing more than one extra domain. %1$d will be replaced by an integer indicating the number of additional domains for which this web extension is requesting permission. --> Accede à i vostri dati per %1$d altri duminii + + %1$s, %2$d nant’à %3$d Accede à l’unghjette di u navigatore @@ -75,7 +77,7 @@ Autore - Autori + Autori Ultima mudificazione diff --git a/android-components/components/feature/addons/src/main/res/values-cy/strings.xml b/android-components/components/feature/addons/src/main/res/values-cy/strings.xml index b64909330d48..fbde39f7c1c5 100644 --- a/android-components/components/feature/addons/src/main/res/values-cy/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-cy/strings.xml @@ -229,7 +229,7 @@ %1$s ychwanegyn - Dysgu rhagor + Darllen rhagor Wedi’i ddiweddaru’n llwyddiannus diff --git a/android-components/components/feature/addons/src/main/res/values-nb-rNO/strings.xml b/android-components/components/feature/addons/src/main/res/values-nb-rNO/strings.xml index db87ef580d98..50cd987ac8e7 100644 --- a/android-components/components/feature/addons/src/main/res/values-nb-rNO/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-nb-rNO/strings.xml @@ -22,6 +22,8 @@ then we will show another collapsed entry saying "Access your data on 2 other domains". This entry it's for the plural case, when the add-on is accessing more than one extra domain. %1$d will be replaced by an integer indicating the number of additional domains for which this web extension is requesting permission. --> Få tilgang til dine data på %1$d andre domener + + %1$s, %2$d av %3$d Få tilgang til faner @@ -75,7 +77,7 @@ Utvikler - Utviklere + Utviklere Sist oppdatert diff --git a/android-components/components/feature/app-links/src/main/res/values-et/strings.xml b/android-components/components/feature/app-links/src/main/res/values-et/strings.xml index eb5d9e1f3dd2..3f5389f6c08d 100644 --- a/android-components/components/feature/app-links/src/main/res/values-et/strings.xml +++ b/android-components/components/feature/app-links/src/main/res/values-et/strings.xml @@ -4,6 +4,11 @@ Ava link äpiga… Kas soovid avada äpis? Sinu tegevus ei pruugi siis enam privaatne olla. + + Ava teises äpis + + Kas soovid selle sisu vaatamiseks %sist lahkuda? Ava diff --git a/android-components/components/feature/fxsuggest/src/main/res/values-et/strings.xml b/android-components/components/feature/fxsuggest/src/main/res/values-et/strings.xml new file mode 100644 index 000000000000..7c4597fbadad --- /dev/null +++ b/android-components/components/feature/fxsuggest/src/main/res/values-et/strings.xml @@ -0,0 +1,5 @@ + + + + Sponsitud + diff --git a/android-components/components/feature/media/src/main/res/values-co/strings.xml b/android-components/components/feature/media/src/main/res/values-co/strings.xml index ed34bcd9d7e3..cffda386cb2d 100644 --- a/android-components/components/feature/media/src/main/res/values-co/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-co/strings.xml @@ -1,5 +1,5 @@ - + Multimedià @@ -19,11 +19,16 @@ - Ramentu : %1$s impiegheghja ancu u vostru apparechju-fotò. Picchichjà per apre l’unghjetta. + Ramentu : %1$s impiegheghja sempre u vostru apparechju-fotò. Picchichjà per apre l’unghjetta. - Ramentu : %1$s impiegheghja sempre u vostru microfonu. Picchichjà per apre l’unghjetta + Ramentu : %1$s impiegheghja sempre u vostru microfonu. Picchichjà per apre l’unghjetta + + Ramentu : %1$s impiegheghja sempre u vostru microfonu. Picchichjà per apre l’unghjetta. + + Ramentu : %1$s impiegheghja sempre i vostri microfonu è apparechju-fotò. Picchichjà per apre l’unghjetta + - Ramentu : %1$s impiegheghja ancu i vostri microfonu è apparechju-fotò. Picchichjà per apre l’unghjetta + Ramentu : %1$s impiegheghja sempre i vostri microfonu è apparechju-fotò. Picchichjà per apre l’unghjetta. Lettura diff --git a/android-components/components/feature/media/src/main/res/values-nb-rNO/strings.xml b/android-components/components/feature/media/src/main/res/values-nb-rNO/strings.xml index 3b7167d160fd..0ec9fd943af5 100644 --- a/android-components/components/feature/media/src/main/res/values-nb-rNO/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-nb-rNO/strings.xml @@ -1,5 +1,5 @@ - + Medier @@ -10,6 +10,25 @@ Kamera og mikrofon er på + + Trykk for å åpne fanen som bruker kameraet ditt. + + Trykk for å åpne fanen som bruker mikrofonen din. + + Trykk for å åpne fanen som bruker mikrofonen og kameraet ditt. + + + + Påminnelse: %1$s bruker fortsatt kameraet ditt. Trykk for å åpne fanen. + + Påminnelse: %1$s bruker fortsatt mikrofonen din. Trykk for å åpne fanen + + Påminnelse: %1$s bruker fortsatt mikrofonen din. Trykk for å åpne fanen. + + Påminnelse: %1$s bruker fortsatt mikrofonen og kameraet ditt. Trykk for å åpne fanen + + Påminnelse: %1$s bruker fortsatt mikrofonen og kameraet ditt. Trykk for å åpne fanen. + Spill av diff --git a/android-components/components/feature/prompts/src/main/res/values-co/strings.xml b/android-components/components/feature/prompts/src/main/res/values-co/strings.xml index 4396140b6a7e..7afbd91b65b0 100644 --- a/android-components/components/feature/prompts/src/main/res/values-co/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-co/strings.xml @@ -18,6 +18,8 @@ Parolla d’intesa Ùn arregistrà micca + + Micca subitu Ùn arregistrà mai @@ -26,16 +28,26 @@ Arregistrà Ùn micca rinnovà + + Micca subitu Piglià in contu U campu di a parolla d’intesa ùn deve micca esse viotu + Stampittate una parolla d’intesa + Impussibule d’arregistrà l’identificazione di cunnessione + + Ùn si pò micca arregistrà a parolla d’intesa Arregistrà st’identificazioni di cunnessione + + Arregistrà a parolla d’intesa ? Mudificà st’identificazione di cunnessione ? + + Mudificà a parolla d’intesa ? Aghjunghje un nome d’utilizatore à a parolla d’intesa arregistrata ? @@ -85,13 +97,22 @@ Sceglie l’ora Urganizà l’identificazioni di cunnessione + + Amministrà e parolle d’intesa Spiegà l’identificazioni di cunnessione suggerite + + Spiegà e parolle d’intesa arregistrate Ripiegà l’identificazioni di cunnessione suggerite + + Ripiegà e parolle d’intesa arregistrate Identificazioni di cunnessione suggerite + + Parolle d’intesa arregistrate + Suggerisce una parolla d’intesa forte @@ -110,12 +131,20 @@ Selezziunà una carta bancaria + + Impiegà una carta arregistrata Spiegà e carte bancarie suggerite + + Spiegà e carte arregistrate Ripiegà e carte bancarie suggerite + + Ripiegà e carte arregistrate Urganizà e carte bancarie + + Amministrà e carte Arregistrà sta carta di manera sicura ? @@ -123,13 +152,20 @@ U numeru di a carta serà cifratu. U codice di sicurità ùn serà micca arregistratu. + + %s cifra u vostru numeru di carta. U vostru codice di sicurità ùn serà micca arregistratu. + Selezziunà un indirizzu Spiegà l’indirizzi suggeriti + + Spiegà l’indirizzi arregistrati Ripiegà l’indirizzi suggeriti + + Ripiegà l’indirizzi arregistrati Urganizà l’indirizzi diff --git a/android-components/components/feature/prompts/src/main/res/values-et/strings.xml b/android-components/components/feature/prompts/src/main/res/values-et/strings.xml index 7f68c4554dec..5d0f71851a97 100644 --- a/android-components/components/feature/prompts/src/main/res/values-et/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-et/strings.xml @@ -18,6 +18,8 @@ Parool Ära salvesta + + Mitte praegu Ära salvesta kunagi @@ -26,16 +28,26 @@ Salvesta Ära uuenda + + Mitte praegu Uuenda Parooli väli ei tohi olla tühi + Sisesta parool + Kasutajatunnuste salvestamine pole võimalik + + Parooli ei saa salvestada Kas salvestada need kasutajatunnused? + + Salvesta parool? Kas uuendada kasutajatunnused? + + Uuenda parool? Kas lisada salvestatud paroolile kasutajanimi? @@ -81,15 +93,34 @@ nov dets + + Aja määramine Halda kasutajakontosid + + Halda paroole Laienda soovitatud kasutajakontosid + + Laienda salvestatud paroolid - Ahenda soovitatud kasutajakontosid + Ahenda soovitatud kasutajakontod + + Ahenda salvestatud paroolid Soovitatud kasutajakontod + + Salvestatud paroolid + + + Soovita tugevat parooli + + Soovita tugevat parooli + + + Kasuta tugevat parooli %1$s + Kas saata andmed sellele saidile uuesti? Selle lehe värskendamine võib dubleerida hiljutisi toiminguid, nagu makse saatmine või kommentaari postitamine. @@ -101,12 +132,20 @@ Vali krediitkaart + + Kasuta salvestatud kaarti Laienda soovitatud krediitkaarte + + Laienda salvestatud kaardid Ahenda soovitatud krediitkaarte + + Ahenda salvestatud kaardid Halda krediitkaarte + + Halda kaarte Kas salvestada see kaart turvaliselt? @@ -114,13 +153,28 @@ Kaardi number krüptitakse. Turvakoodi ei salvestata. + + %s krüpteerib kaardi numbri. Turvakoodi ei salvestata. + Vali aadress Laienda soovitatud aadressid + + Laienda salvestatud aadressid Ahenda soovitatud aadressid + + Ahenda salvestatud aadressid Halda aadresse + + + + Konto pilt + + Jätka + + Loobu diff --git a/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml b/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml index cf3ce8418676..a35beb81bff7 100644 --- a/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-nb-rNO/strings.xml @@ -18,6 +18,8 @@ Passord Ikke lagre + + Ikke nå Lagre aldri @@ -26,16 +28,26 @@ Lagre Ikke oppdater + + Ikke nå Oppdater Passordfeltet kan ikke stå tomt + Skriv inn et passord + Klarte ikke å lagre innloggingen + + Kan ikke lagre passordet Lagre denne innloggingen? + + Lagre passord? Vil du oppdatere denne innloggingen? + + Oppdatere passord? Vil du legge til brukernavn til lagret passord? @@ -85,13 +97,29 @@ Angi tid Behandle innlogginger + + Behandle passord Utvid foreslåtte innlogginger + + Utvid lagrede passord Slå sammen foreslåtte innlogginger + + Skjul lagrede passord Foreslåtte innlogginger + + Lagrede passord + + + Foreslå sterkt passord + + Foreslå sterkt passord + + Bruk sterkt passord: %1$s + Send data på nytt til dette nettstedet? Oppdatering av denne siden kan duplisere nylige handlinger, for eksempel å sende en betaling eller legge igjen en kommentar to ganger. @@ -103,12 +131,20 @@ Velg betalingskort + + Bruk lagret kort Utvid foreslåtte betalingskort + + Utvid lagrede kort Slå sammen foreslåtte betalingskort + + Skjul lagrede kort Behandle betalingskort + + Behandle kort Lagre dette kortet trygt? @@ -116,13 +152,20 @@ Kortnummer vil bli kryptert. Sikkerhetskoden blir ikke lagret. + + %s krypterer kortnummeret ditt. Sikkerhetskoden din blir ikke lagret. + Velg adresse Utvid foreslåtte adresser + + Utvid lagrede adresser Slå sammen foreslåtte adresser + + Skjul lagrede adresser Behandle adresser diff --git a/android-components/components/feature/search/src/main/res/values-et/strings.xml b/android-components/components/feature/search/src/main/res/values-et/strings.xml new file mode 100644 index 000000000000..077b8a047c95 --- /dev/null +++ b/android-components/components/feature/search/src/main/res/values-et/strings.xml @@ -0,0 +1,12 @@ + + + + + Ava uus kaart %1$sis + + Otsing + + Otsi veebist + + Häälotsing + diff --git a/android-components/components/feature/sitepermissions/src/main/res/values-cy/strings.xml b/android-components/components/feature/sitepermissions/src/main/res/values-cy/strings.xml index 270644b6c908..e937f6fc0a99 100644 --- a/android-components/components/feature/sitepermissions/src/main/res/values-cy/strings.xml +++ b/android-components/components/feature/sitepermissions/src/main/res/values-cy/strings.xml @@ -44,5 +44,5 @@ Rhwystro - Dysgu rhagor + Darllen rhagor diff --git a/android-components/components/ui/widgets/src/main/res/values-et/strings.xml b/android-components/components/ui/widgets/src/main/res/values-et/strings.xml new file mode 100644 index 000000000000..b77f8fe2fc7d --- /dev/null +++ b/android-components/components/ui/widgets/src/main/res/values-et/strings.xml @@ -0,0 +1,5 @@ + + + + Pilt kopeeriti vahemällu + diff --git a/fenix/app/src/main/res/values-co/strings.xml b/fenix/app/src/main/res/values-co/strings.xml index a83ceb26785f..b233b981bff3 100644 --- a/fenix/app/src/main/res/values-co/strings.xml +++ b/fenix/app/src/main/res/values-co/strings.xml @@ -247,6 +247,7 @@ Persunalizà a pagina d’accolta + Screnu d’accolta @@ -254,6 +255,9 @@ Squassà a cronolugia di navigazione + + Traduce a pagina + Lingua selezziunata @@ -265,8 +269,6 @@ Numerizà - - Mutore di ricerca Preferenze di u mutore di ricerca @@ -321,14 +323,14 @@ - E nutificazioni vi aiutanu à fane di più cù %s + E nutificazioni vi aiutanu à fane di più cù %s - Sincrunizate l’unghjette trà i vostri apparechji, urganizate i scaricamenti, ottinite cunsiglii per sfruttà u più bellu di a prutezzione di a vita privata da %s, è ancu di più. + Sincrunizate l’unghjette trà i vostri apparechji, urganizate i scaricamenti, ottinite cunsiglii per sfruttà u più bellu di a prutezzione di a vita privata da %s, è ancu di più. - Cuntinuà + Cuntinuà - Micca subitu + Micca subitu @@ -447,22 +449,11 @@ Modu solu HTTPS - - Riduzzione di e striscie di cannistrelli Blucchime di e striscie di cannistrelli Blucchime di e striscie di cannistrelli in navigazione privata - - Riduce e striscie di canistrelli - - - Disattivata - - Attivata - - %1$s prova autumaticamente di righjittà e dumande di canistrelli quandu ci hè striscie di canistrelli. Disattivata per stu situ @@ -480,36 +471,17 @@ Attualmente u situ ùn hè micca accettatu - Attivà a riduzzione di e striscie di cannistrelli per %1$s ? - Attivà u blucchime di e striscie di cannistrelli per %1$s ? - - Disattivà a riduzzione di e striscie di cannistrelli per %1$s ? Disattivà u blucchime di e striscie di cannistrelli per %1$s ? %1$s ùn pò micca righjittà autumaticamente e dumande di canistrelli nant’à stu situ. Pudete mandà una richiesta per ch’ellu sia accettallu in u futuru. - - %1$s squasserà i canistrelli di stu situ è attualizerà a pagina. A squassatura di tutti i canistrelli puderia discunnettevi o viutà e sporte di comprera. Disattivate l’ozzione è %1$s squasserà i canistrelli è ricaricherà stu situ. St’azzioni ponu discunettevi o viutà e vostre sporte di comprera. - %1$s prova autumaticamente di righjittà tutte e dumande di canistrelli nant’à i siti accettati. - Attivate l’ozzione è %1$s pruverà di righjittà autumaticamente tutte e striscie di canistrelli nant’à stu situ. - - Permette à %1$s di righjettà e striscie di canistrelli ? - - %1$s pò righjittà autumaticamente parechje dumande di striscie di canistrelli. - - Micca subitu - - Viderete menu richieste di cannistrelli - - - Permette %1$s hà righjittatu i canistrelli per voi @@ -730,6 +702,8 @@ Indette Identificazioni di cunnessione + + Parolle d’intesa Apre l’unghjette @@ -757,6 +731,8 @@ Carte bancarie + + Metode di pagamentu Indirizzi @@ -1300,8 +1276,6 @@ Chjode - Impussibule di stampà - Impussibule di stampà sta pagina Stampà @@ -1702,8 +1676,12 @@ Identificazioni è parolle d’intesa + + Parolle d’intesa Arregistrà l’identificazioni è e parolle d’intesa + + Arregistrà e parolle d’intesa Dumandà per arregistrà @@ -1721,27 +1699,46 @@ Aghjunghje un’identificazione di cunnessione + + Aghjunghje una parolla d’intesa + Sincrunizà l’identificazioni + + Sincrunizà e parolle d’intesa - Sincrunizà l’identificazioni di cunnessione trà tutti l’apparechji + Sincrunizà l’identificazioni di cunnessione trà l’apparechji + + Sincrunizà e parolle d’intesa trà l’apparechji Identificazioni di cunnessione arregistrate + + Parolle d’intesa arregistrate L’identificazioni di cunnessione chì voi arregistrate o sincrunizate cù %s seranu affissate quì. + + E parolle d’intesa chì vo arregistrate o sincrunizate cù %s seranu affissate quì. Tutte e parolle d’intesa chì vo arregistrate sò cifrate. Sapene di più nant’à Sync. + + Sapene di più nant’à a sincrunizazione Eccezzioni L’identificazioni è parolle d’intesa chì ùn sò micca arregistrate seranu affissate quì. + + %s ùn arregistrerà micca e parolle d’intesa per i siti allistinati quì. L’identificazioni è parolle d’intesa ùn seranu micca arregistrate per sti siti. + + %s ùn arregistrerà micca e parolle d’intesa per sti siti. Squassà tutte l’eccezzioni Ricercà identificazioni di cunnessione + + Ricercà parolle d’intesa Situ @@ -1771,10 +1768,16 @@ Piattà a parolla d’intesa Spalancate per affissà l’identificazioni di cunnessione arregistrate + + Spalancate per affissà e vostre parolle d’intesa arregistrate Prutigite e vostre identificazioni di cunnessione è parolle d’intesa + + Prutigite e vostre parolle d’intesa arregistrate Definite un dissegnu di chjusura, un codice PIN o una parolla d’intesa per prutege e vostre identificazioni di cunnessione è parolle d’intesa arregistrate s’ellu ci era qualchissia chì accidissi à u vostru apparechju. + + Definite un dissegnu di chjuditura, un codice PIN o una parolla d’intesa per prutege e vostre parolle d’intesa arregistrate s’ellu ci era qualchissia chì accidissi à u vostru apparechju. Dopu @@ -1794,6 +1797,9 @@ Listinu di classificazione di l’identificazioni + + Listinu di classificazione di e parolle d’intesa + Riempiimentu autumaticu @@ -1801,18 +1807,28 @@ Indirizzi Carte bancarie + + Metode di pagamentu Arregistrà è riempie autumaticamente e carte + + Arregistrà è rinsignà e metode di pagamentu I dati sò cifrati + + %s cifra tutte e metode di pagamentu chì vo arregistrate Sincrunizate e carte trà i vostri apparechji Sincrunizà e carte Aghjunghje una carta bancaria + + Aghjunghje una carta Amministrà e carte arregistrate + + Amministrà e carte Aghjunghje un indirizzu @@ -1820,9 +1836,14 @@ Arregistrà è riempie autumaticamente l’indirizzi + + Arregistrà è rinsignà l’indirizzi Include l’infurmazioni cum’è i numeri, i messaghji elettronichi è l’indirizzi di spedizione + + Include i numeri di telefonu è l’indirizzi elettronichi + Aghjunghje una carta @@ -1844,6 +1865,8 @@ Squassà a carta Vulete veramente squassà sta carta bancaria ? + + Squassà a carta ? Squassà @@ -1858,15 +1881,23 @@ Ci vole à stampittà un numeru accettevule di carta bancaria + + Stampittate un numeru di carta bancaria accettevule Ci vole à riempie stu campu + + Aghjunghje un nome Spalancate per affissà e vostre carte arregistrate Prutege e vostre carte bancarie + + Prutigite e vostre metode di pagamentu arregistrate Definite un dissegnu di chjusura, un codice PIN o una parolla d’intesa per prutege e vostre carte arregistrate s’ellu ci era qualchissia chì accidissi à u vostru apparechju. + + Definite un dissegnu di chjusura, un codice PIN o una parolla d’intesa per prutege e vostre metode di pagamentu arregistrate s’ellu ci era qualchissia chì accidissi à u vostru apparechju. Cunfigurà subitu @@ -1876,6 +1907,8 @@ Spalancate per impiegà l’infurmazione di e carte bancarie arregistrate + + Spalancate per impiegà e metode di pagamentu arregistrate Aghjunghje un indirizzu @@ -1913,6 +1946,8 @@ Squassà l’indirizzu Vulete veramente squassà st’indirizzu ? + + Squassà st’indirizzu ? Squassà @@ -2012,30 +2047,52 @@ Mudificà Vulete veramente squassà st’identificazione di cunnessione ? + + Vulete veramente squassà sta parolla d’intesa ? Squassà Abbandunà Ozzioni di l’identificazione + + Ozzioni di parolla d’intesa U campu di testu mudifichevule per l’indirizzu web di l’identificazione. + + U campu di testu mudifichevule per l’indirizzu di u situ web. U campu di testu mudifichevule per u nome d’utilizatore di l’identificazione. + + U campu di testu mudifichevule per u nome d’utilizatore. U campu di testu mudifichevule per a parolla d’intesa di l’identificazione. + + U campu di testu mudifichevule per a parolla d’intesa. Arregistrà i cambiamenti di l’identificazione. + + Arregistrà i cambiamenti. Mudificà + + Mudificà a parolla d’intesa Aghjunghje una nova identificazione di cunnessione + + Aghjunghje una parolla d’intesa Parolla d’intesa richiesta + + Stampittate una parolla d’intesa U nome d’utilizatore hè richiestu + + Stampittate un nome d’utilizatore U nome d’ospite hè richiestu + + Stampittate un indirizzu web Ricerca vucale @@ -2134,6 +2191,9 @@ Ricerca cù %s + + Cambià di navigatore predefinitu + Definisce chì i liami di i siti web, i currieri elettronichi è i messaghji s’aprinu autumaticamente in Firefox. @@ -2212,8 +2272,6 @@ Sapene di più nant’à %s. - - cumu %s da Mozilla determineghja a qualità di l’avisi cumu %s determineghja a qualità di l’avisi @@ -2402,6 +2460,8 @@ Traduzzione in corsu + + Sciglite una lingua Un prublema hè accadutu durante a traduzzione. Ci vole à pruvà torna. @@ -2422,6 +2482,10 @@ Ùn traduce mai in %1$s Ùn traduce mai stu situ + + Supraneghja tutte l’altre preferenze + + Supraneghja e pruposte di traduzzione Preferenze di traduzzione diff --git a/fenix/app/src/main/res/values-cy/strings.xml b/fenix/app/src/main/res/values-cy/strings.xml index bc5f735d6a5f..c86dbcc717f0 100644 --- a/fenix/app/src/main/res/values-cy/strings.xml +++ b/fenix/app/src/main/res/values-cy/strings.xml @@ -490,7 +490,7 @@ Ymlaen mewn tabiau preifat - Dysgu rhagor + Darllen rhagor Galluogi ym mhob tab @@ -641,7 +641,7 @@ Methu newid papur wal - Dysgu rhagor + Darllen rhagor %s clasurol @@ -743,7 +743,7 @@ Mae eithriadau’n caniatáu i chi analluogi diogelwch rhag trasio ar wefannau penodol. - Dysgu rhagor + Darllen rhagor Data defnydd a thechnegol @@ -913,7 +913,7 @@ Gall %1$s osod a rhedeg astudiaethau o bryd i’w gilydd. - Dysgu rhagor + Darllen rhagor Bydd yr ap yn cau er mwyn gosod y newidiadau @@ -1511,7 +1511,7 @@ Mae %s yn eich diogelu rhag llawer o’r tracwyr mwyaf cyffredin sy’n dilyn yr hyn rydych chi’n ei wneud ar-lein. - Dysgu rhagor + Darllen rhagor Safonol (rhagosodedig) @@ -1610,7 +1610,7 @@ as we use it on the UI to indicate which trackers have been partially unblocked. --> Mae rhai tracwyr sydd wedi’u marcio isod wedi cael eu dad-rwystr’n rhannol ar y dudalen hon oherwydd i chi ryngweithio â nhw *. - Dysgu rhagor + Darllen rhagor @@ -2065,7 +2065,7 @@ Mae angen cyfrinair - Rhoi cyfrinair + Rhowch gyfrinair Mae angen enw defnyddiwr @@ -2199,7 +2199,7 @@ Rhan o deulu Firefox. %s - Dysgu rhagor + Darllen rhagor Noddwyd @@ -2423,7 +2423,7 @@ Cyfieithu - Ceisio eto + Ceisiwch Eto Yn cyfieithu @@ -2439,7 +2439,7 @@ Ymddiheuriadau, nid ydym yn cefnogi %1$s eto. - Dysgu rhagor + Darllen rhagor @@ -2499,7 +2499,7 @@ - Peidio byth â chyfieithu\'r gwefannau hyn + Peidio â chyfieithu\'r gwefannau hyn I ychwanegu gwefan newydd: Ewch yno a dewis “Peidio byth â chyfieithu\'r wefan hon” o\'r ddewislen cyfieithu. + + Skift din standardbrowser + Indstil links fra websteder, mails og beskeder til automatisk at blive åbnet i Firefox. diff --git a/fenix/app/src/main/res/values-et/strings.xml b/fenix/app/src/main/res/values-et/strings.xml index b7312a3b4029..c0aef4b9c76a 100644 --- a/fenix/app/src/main/res/values-et/strings.xml +++ b/fenix/app/src/main/res/values-et/strings.xml @@ -301,6 +301,34 @@ Tere tulemast isikupärasemasse internetti + + Rohkem värve. Parem privaatsus. Sama pühendunud inimestele kasumi asemel. + + + Ekraani vahetamine on lihtsam kui kunagi varem + + Jätka sealt, kus pooleli jäid, kasutades kaarte teistest seadmetest avalehel. + + Tee algust + + Logi sisse + + Jäta vahele + + Kaarte sünkroonitakse! Jätka teises seadmes sealt, kus pooleli jäid. + + Sulge + + + + Teavitused aitavad %siga rohkem ära teha + + Sünkrooni kaarte seadmete vahel, halda allalaadimisi ning hangi näpunäiteid %si privaatsuskaitse maksimaalse kasutamise kohta ja palju muud. + + Jätka + Ava uus kaart %1$sis diff --git a/fenix/app/src/main/res/values-fi/strings.xml b/fenix/app/src/main/res/values-fi/strings.xml index 01e16e803004..2ca2abadd915 100644 --- a/fenix/app/src/main/res/values-fi/strings.xml +++ b/fenix/app/src/main/res/values-fi/strings.xml @@ -1899,6 +1899,8 @@ Suojaa tallennetut maksutavat Aseta laitteen avaukseen tarkoitettu kuvio, PIN-koodi tai salasana suojataksesi tallennetut luottokorttitiedot siltä varalta, että joku saa laitteesi haltuunsa. + + Määritä laitteen lukituskuvio, PIN-koodi tai salasana suojataksesi tallennettuja maksutapojasi, jos laitteesi on jollain toisella. Aseta nyt @@ -2061,8 +2063,12 @@ Salasanojen asetukset Muokattava tekstikenttä kirjautumisen verkkosivua varten. + + Verkkosivuston muokattava tekstikenttä. Muokattava tekstikenttä kirjautumisen käyttäjätunnusta varten. + + Käyttäjätunnuksen muokattava tekstikenttä. Muokattava tekstikenttä kirjautumisen salasanaa varten. @@ -2187,6 +2193,9 @@ %s-haku + + Vaihda oletusselain + Aseta verkkosivustojen, sähköpostien ja viestien linkit avautumaan automaattisesti Firefoxissa. diff --git a/fenix/app/src/main/res/values-fur/strings.xml b/fenix/app/src/main/res/values-fur/strings.xml index c01770abef49..1360e9100785 100644 --- a/fenix/app/src/main/res/values-fur/strings.xml +++ b/fenix/app/src/main/res/values-fur/strings.xml @@ -2163,6 +2163,9 @@ Ricercje %s + + Cambie il navigadôr predefinît + Configure i colegaments di sîts web, e-mails e messaçs in mût che a vegnin vierts in automatic cun Firefox. diff --git a/fenix/app/src/main/res/values-kab/strings.xml b/fenix/app/src/main/res/values-kab/strings.xml index 9f1bd4710373..099ae1be7691 100644 --- a/fenix/app/src/main/res/values-kab/strings.xml +++ b/fenix/app/src/main/res/values-kab/strings.xml @@ -2053,6 +2053,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Sekcem isem n useqdac Asenneftaɣ yettwasra + + Sekcem tansa web Anadi s taɣect @@ -2150,6 +2152,9 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Anadi %s + + + Beddel iminig-ik·im amezwer Sbadu iseɣwan seg yismal web, seg yimaylen d yiznan i twaledyawt s wudem awurman deg Firefox. diff --git a/fenix/app/src/main/res/values-nb-rNO/strings.xml b/fenix/app/src/main/res/values-nb-rNO/strings.xml index c6bf155c6c7b..86347ea1afd6 100644 --- a/fenix/app/src/main/res/values-nb-rNO/strings.xml +++ b/fenix/app/src/main/res/values-nb-rNO/strings.xml @@ -212,6 +212,8 @@ Synkroniser på nytt Finn på siden + + Oversett siden Lagre i samling @@ -241,6 +243,7 @@ Tilpass startsiden + Startskjerm @@ -248,6 +251,9 @@ Slett nettleserhistorikk + + Oversett siden + Valgt språk @@ -260,8 +266,6 @@ Skann - - Søkemotor Innstillinger for søkemotor @@ -315,24 +319,29 @@ - Varsler hjelper deg å gjøre mer med %s + Varsler hjelper deg å gjøre mer med %s - Synkroniser fanene dine mellom enheter, behandle nedlastinger, få tips om hvordan du får mest mulig ut av %s sitt personvern, og mer. + Synkroniser fanene dine mellom enheter, behandle nedlastinger, få tips om hvordan du får mest mulig ut av %s sitt personvern, og mer. - Fortsett + Fortsett - Ikke nå + Ikke nå + + Firefox personvernerklæring + Vi beskytter deg gjerne - Vår ideelle nettleser forhindrer selskaper i å spore aktiviteten din i hemmelighet på nettet.\n\nLes mer i personvernerklæringen vår. + Vår ideelle nettleser forhindrer selskaper i å spore aktiviteten din i hemmelighet på nettet. + + Vår ideelle nettleser forhindrer selskaper i å spore aktiviteten din i hemmelighet på nettet.\n\nLes mer i personvernerklæringen vår. - personvernerklæring + personvernerklæring Bruk som standard nettleser @@ -435,21 +444,11 @@ Kun-HTTPS-modus - - Redusering av infokapselbannere Blokkering av infokapselbanner Blokkering av infokapselbanner i privat nettlesing - - Reduser infokapselbannere - - Av - - - - - %1$s prøver automatisk å avvise infokapselforespørsler på infokapselbannere. + Av for dette nettstedet @@ -467,35 +466,16 @@ Nettstedet støttes for øyeblikket ikke - Vil du slå på reduksjon av infokapselbannere for %1$s? - Vil du slå på blokkering av infokapselbanner for %1$s? - Vil du slå av reduksjon av infokapselbannere for %1$s? - Vil du slå av blokkering av infokapselbanner for %1$s? %1$s kan ikke automatisk avvise forespørsler om infokapsler på dette nettstedet. Du kan sende en forespørsel om å støtte dette nettstedet i fremtiden. - - %1$s vill slette infokapsler og oppdatere siden. Sletting av alle infokapsler kan føre til at du blir logget ut eller at handlekurver blir tømt. Slå av, og %1$s sletter infokapsler og laster inn dette nettstedet på nytt. Dette kan logge deg ut eller tømme handlekurver. - %1$s prøver å automatisk avvise alle infokapselforespørsler på støttede nettsteder. - Slå på, og %1$s vil prøve å automatisk nekte infokapselbannere på dette nettstedet. - - Tillat at %1$s avviser infokapselbannere? - - %1$s kan automatisk avvise mange infokapselbanner-forespørsler. - - Ikke nå - - Du vil se færre forespørsler om infokapsler - - - Tillat %1$s nektet nettopp infokapsler for deg @@ -712,6 +692,8 @@ Bokmerker Innlogginger + + Passord Åpne faner @@ -738,6 +720,8 @@ Betalingskort + + Betalingsmetoder Adresser @@ -1280,8 +1264,6 @@ Ignorer - Kan ikke å skrive ut - Kan ikke å skrive ut denne siden Skriv ut @@ -1325,6 +1307,11 @@ Lukk private faner + + + Lukk private faner? + Trykk eller sveip dette varselet for å lukke private faner. + Markedsføring @@ -1682,8 +1669,12 @@ Innlogginger og passord + + Passord Lagre innlogginger og passord + + Lagre passord Spør om å lagre @@ -1701,27 +1692,46 @@ Legg til innlogging + + Legg til passord + Synkroniser innlogginger + + Synkroniser passord Synkroniser innlogginger på tvers av enheter + + Synkroniser passord på tvers av enheter Lagrede innlogginger + + Lagrede passord De innlogginger du lagrer eller synkroniserer til %s vil vises her. + + Passordene du lagrer eller synkroniserer med %s vil bli oppført her. Alle passord du lagrer er kryptert. Les mer om Sync. + + Les mer om synkronisering Unntak Innlogginger og passord som ikke er lagret vil vises her. + + %s vil ikke lagre passord for nettsteder som er oppført her. Innlogginger og passord vil ikke bli lagret for disse nettstedene. + + %s vil ikke lagre passord for disse nettstedene. Slett alle unntak Søk innlogginger + + Søk etter passord Nettsted @@ -1751,8 +1761,12 @@ Skjul passord Lås opp for å se dine lagrede innlogginger + + Lås opp for å se dine lagrede passord Sikre dine innlogginger og passord + + Sikre dine lagrede passord Konfigurer en PIN-kode, et passord eller et låsemønster for å forhindre at andre mennesker får tilgang de lagrede innloggingene og passordene dine, hvis de har adgang til din enhet. @@ -2112,7 +2126,7 @@ %s-søk - + Angi at lenker fra nettsteder, e-postmeldinger og meldinger skal åpnes automatisk i Firefox. @@ -2186,8 +2200,6 @@ Høydepunkter er fra %s-vurderinger i løpet av de siste 80 dagene som vi mener er pålitelige.]]> Les mer om %s. - - hvordan %s fra Mozilla bestemmer vurderingskvalitet hvordan %s bestemmer vurderingskvalitet @@ -2271,17 +2283,17 @@ Les mer - Ved å velge «Ja, prøv det» godtar du %1$s fra Mozilla sine %2$s og %3$s. + Ved å velge «Ja, prøv det» godtar du %1$s fra Mozilla sine %2$s og %3$s. - Ved å velge «Ja, prøv det» godtar du følgende fra %1$s: + Ved å velge «Ja, prøv det» godtar du følgende fra %1$s: - personvernbestemmelser + personvernbestemmelser - Personvernbestemmelser + Personvernbestemmelser - vilkår for bruk + vilkår for bruk - Vilkår for bruk + Vilkår for bruk Ja, prøv det diff --git a/fenix/app/src/main/res/values-pt-rBR/strings.xml b/fenix/app/src/main/res/values-pt-rBR/strings.xml index e32bdb52c3bf..ad71b6832367 100644 --- a/fenix/app/src/main/res/values-pt-rBR/strings.xml +++ b/fenix/app/src/main/res/values-pt-rBR/strings.xml @@ -401,7 +401,7 @@ Selecione um - Gerencie mecanismos de pesquisa alternativos + Gerenciar mecanismos de pesquisa alternativos Editar mecanismos visíveis no menu de pesquisa diff --git a/fenix/app/src/main/res/values-uk/strings.xml b/fenix/app/src/main/res/values-uk/strings.xml index 90504d5dafd8..b9f1506f0a69 100644 --- a/fenix/app/src/main/res/values-uk/strings.xml +++ b/fenix/app/src/main/res/values-uk/strings.xml @@ -2183,6 +2183,9 @@ %s пошук + + Змініть типовий браузер + Автоматично відкривати посилання з вебсайтів, електронних листів та повідомлень у Firefox. diff --git a/fenix/app/src/main/res/values-vi/strings.xml b/fenix/app/src/main/res/values-vi/strings.xml index 736a82c332fc..356737044dd8 100644 --- a/fenix/app/src/main/res/values-vi/strings.xml +++ b/fenix/app/src/main/res/values-vi/strings.xml @@ -2161,6 +2161,9 @@ Tìm kiếm trên %s + + Đặt làm trình duyệt mặc định của bạn + Đặt các liên kết từ trang web, email và tin nhắn để tự động mở trong Firefox. diff --git a/focus-android/app/src/main/res/values-cy/strings.xml b/focus-android/app/src/main/res/values-cy/strings.xml index 67cc2aca970d..95a8cdd2dfdb 100644 --- a/focus-android/app/src/main/res/values-cy/strings.xml +++ b/focus-android/app/src/main/res/values-cy/strings.xml @@ -251,7 +251,7 @@ Tynnu URLau cyfaddas - Dysgu rhagor + Darllen rhagor Ychwanegu a rheoli URLs awtogwblhau cyfaddas. @@ -344,7 +344,7 @@ Anfon data defnydd - Dysgu rhagor + Darllen rhagor Mae Mozilla\'n ceisio casglu dim ond yr hyn sydd ei angen arnom i ddarparu a gwella %1$s ar gyfer pawb. @@ -832,7 +832,7 @@ Efallai y bydd Firefox yn gosod a rhedeg astudiaethau o bryd i’w gilydd. - Dysgu rhagor + Darllen rhagor Bydd yr ap yn cau er mwyn gosod y newidiadau diff --git a/focus-android/app/src/main/res/values-kab/strings.xml b/focus-android/app/src/main/res/values-kab/strings.xml index 5e7559129c7b..2d5b089a0b06 100644 --- a/focus-android/app/src/main/res/values-kab/strings.xml +++ b/focus-android/app/src/main/res/values-kab/strings.xml @@ -86,6 +86,8 @@ Sfeḍ amazray n tunigin? + Sit ɣef telɣut-a neɣ kkes-itt i wakken ad tekkseḍ azray-ik n tunigin s wudem aɣelsan. + Sfeḍ amazray n tunigin diff --git a/focus-android/app/src/main/res/values-nb-rNO/strings.xml b/focus-android/app/src/main/res/values-nb-rNO/strings.xml index 2e61c7e582d1..e5257880a9bd 100644 --- a/focus-android/app/src/main/res/values-nb-rNO/strings.xml +++ b/focus-android/app/src/main/res/values-nb-rNO/strings.xml @@ -53,7 +53,6 @@ Fjern fra snarveier - Hva er nytt Innstillinger Om Hjelp @@ -84,10 +83,9 @@ sharing an URL. --> Del via - + Slett nettleserhistorikk? + Trykk eller fjern dette varselet for å slette nettleserhistorikken din på en sikker måte. + Slett nettleserhistorikk From 744c77429a98851b7a481860cf2cef0ea16a4b6a Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 11 Feb 2024 00:48:36 +0000 Subject: [PATCH 12/51] Update GeckoView (Nightly) to 124.0.20240210210518. --- android-components/plugins/dependencies/src/main/java/Gecko.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/Gecko.kt b/android-components/plugins/dependencies/src/main/java/Gecko.kt index 62d9b0ca99b9..68e3ede7293f 100644 --- a/android-components/plugins/dependencies/src/main/java/Gecko.kt +++ b/android-components/plugins/dependencies/src/main/java/Gecko.kt @@ -9,7 +9,7 @@ object Gecko { /** * GeckoView Version. */ - const val version = "124.0.20240210094249" + const val version = "124.0.20240210210518" /** * GeckoView channel From 2d69fcc0c174e8f2e6541db7df542ed3c9f20033 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 11 Feb 2024 12:24:26 +0000 Subject: [PATCH 13/51] Update GeckoView (Nightly) to 124.0.20240211090343. --- android-components/plugins/dependencies/src/main/java/Gecko.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/Gecko.kt b/android-components/plugins/dependencies/src/main/java/Gecko.kt index 68e3ede7293f..6151e8e4691c 100644 --- a/android-components/plugins/dependencies/src/main/java/Gecko.kt +++ b/android-components/plugins/dependencies/src/main/java/Gecko.kt @@ -9,7 +9,7 @@ object Gecko { /** * GeckoView Version. */ - const val version = "124.0.20240210210518" + const val version = "124.0.20240211090343" /** * GeckoView channel From 01938092c80bdfc3c2c512de8021daa3717b8bc6 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 12 Feb 2024 00:03:31 +0000 Subject: [PATCH 14/51] Import translations from android-l10n --- .../addons/src/main/res/values-eo/strings.xml | 2 + .../addons/src/main/res/values-ja/strings.xml | 4 +- .../addons/src/main/res/values-pl/strings.xml | 4 +- .../media/src/main/res/values-eo/strings.xml | 11 +- .../media/src/main/res/values-ja/strings.xml | 11 +- .../media/src/main/res/values-pl/strings.xml | 11 +- .../src/main/res/values-eo/strings.xml | 36 ++++ .../src/main/res/values-ja/strings.xml | 36 ++++ .../src/main/res/values-pl/strings.xml | 36 ++++ fenix/app/src/main/res/values-azb/strings.xml | 47 ++++++ fenix/app/src/main/res/values-co/strings.xml | 2 +- fenix/app/src/main/res/values-cs/strings.xml | 3 + fenix/app/src/main/res/values-dsb/strings.xml | 3 + .../src/main/res/values-en-rGB/strings.xml | 3 + fenix/app/src/main/res/values-eo/strings.xml | 154 ++++++++++++----- fenix/app/src/main/res/values-is/strings.xml | 3 + fenix/app/src/main/res/values-ja/strings.xml | 154 ++++++++++++----- fenix/app/src/main/res/values-pl/strings.xml | 156 +++++++++++++----- fenix/app/src/main/res/values-rm/strings.xml | 81 +++++++++ fenix/app/src/main/res/values-tg/strings.xml | 49 ++++++ fenix/app/src/main/res/values-tr/strings.xml | 3 + .../app/src/main/res/values-eo/strings.xml | 8 +- .../app/src/main/res/values-pl/strings.xml | 10 +- 23 files changed, 677 insertions(+), 150 deletions(-) diff --git a/android-components/components/feature/addons/src/main/res/values-eo/strings.xml b/android-components/components/feature/addons/src/main/res/values-eo/strings.xml index 83ffd79ad57b..affab0359586 100644 --- a/android-components/components/feature/addons/src/main/res/values-eo/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-eo/strings.xml @@ -22,6 +22,8 @@ then we will show another collapsed entry saying "Access your data on 2 other domains". This entry it's for the plural case, when the add-on is accessing more than one extra domain. %1$d will be replaced by an integer indicating the number of additional domains for which this web extension is requesting permission. --> Aliri viajn datumojn de %1$d aliaj nomregnoj + + %1$s, %2$d el %3$d Aliri retumilajn langetojn diff --git a/android-components/components/feature/addons/src/main/res/values-ja/strings.xml b/android-components/components/feature/addons/src/main/res/values-ja/strings.xml index f03d79b68a83..2027ae146f51 100644 --- a/android-components/components/feature/addons/src/main/res/values-ja/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-ja/strings.xml @@ -22,6 +22,8 @@ then we will show another collapsed entry saying "Access your data on 2 other domains". This entry it's for the plural case, when the add-on is accessing more than one extra domain. %1$d will be replaced by an integer indicating the number of additional domains for which this web extension is requesting permission. --> その他 %1$d ドメイン上のデータへのアクセス + + %1$s、%2$d / %3$d ブラウザーのタブへのアクセス @@ -75,7 +77,7 @@ 作者 - 作者 + 作者 最終更新日時 diff --git a/android-components/components/feature/addons/src/main/res/values-pl/strings.xml b/android-components/components/feature/addons/src/main/res/values-pl/strings.xml index d6632d7d8f4b..7dd3bbc45556 100644 --- a/android-components/components/feature/addons/src/main/res/values-pl/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-pl/strings.xml @@ -22,6 +22,8 @@ then we will show another collapsed entry saying "Access your data on 2 other domains". This entry it's for the plural case, when the add-on is accessing more than one extra domain. %1$d will be replaced by an integer indicating the number of additional domains for which this web extension is requesting permission. --> Dostęp do danych użytkownika w %1$d innych domenach + + %1$s, %2$d z %3$d Dostęp do kart przeglądarki @@ -75,7 +77,7 @@ Autor - Autorzy + Autorzy Ostatnia aktualizacja diff --git a/android-components/components/feature/media/src/main/res/values-eo/strings.xml b/android-components/components/feature/media/src/main/res/values-eo/strings.xml index 640a56aef077..7c98f55eec30 100644 --- a/android-components/components/feature/media/src/main/res/values-eo/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-eo/strings.xml @@ -1,5 +1,5 @@ - + Aŭdvidaĵo @@ -22,10 +22,15 @@ Memorigo: %1$s ankoraŭ uzas vian filmilon. Tuŝetu por malfermi la langeton. - Memorigo: %1$s ankoraŭ uzas vian mikrofonon. Tuŝetu por malfermi la langeton. + Memorigo: %1$s ankoraŭ uzas vian mikrofonon. Tuŝetu por malfermi la langeton. + + + Memorigo: %1$s ankoraŭ uzas vian mikrofonon. Tuŝetu por malfermi la langeton. + + Memorigo: %1$s ankoraŭ uzas vian mikrofonon kaj filmilon. Tuŝetu por malfermi la langeton. - Memorigo: %1$s ankoraŭ uzas vian mikrofonon kaj filmilon. Tuŝetu por malfermi la langeton. + Memorigo: %1$s ankoraŭ uzas vian mikrofonon kaj filmilon. Tuŝetu por malfermi la langeton. Ludi diff --git a/android-components/components/feature/media/src/main/res/values-ja/strings.xml b/android-components/components/feature/media/src/main/res/values-ja/strings.xml index 5ad6081ea8ba..c1cfbc4c7d80 100644 --- a/android-components/components/feature/media/src/main/res/values-ja/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-ja/strings.xml @@ -1,5 +1,5 @@ - + メディア @@ -23,9 +23,14 @@ 通知: %1$s がまだカメラを使用しています。タップしてタブを開いてください。 - 通知: %1$s がまだマイクを使用しています。タップしてタブを開いてください。 + 通知: %1$s がまだマイクを使用しています。タップしてタブを開いてください。 + + 通知: %1$s がまだマイクを使用しています。タップしてタブを開いてください。 + + 通知: %1$s がまだマイクとカメラを使用しています。タップしてタブを開いてください。 + - 通知: %1$s がまだマイクとカメラを使用しています。タップしてタブを開いてください。 + 通知: %1$s がまだマイクとカメラを使用しています。タップしてタブを開いてください。 再生 diff --git a/android-components/components/feature/media/src/main/res/values-pl/strings.xml b/android-components/components/feature/media/src/main/res/values-pl/strings.xml index a0c7466ff71d..9c22f9a90b51 100644 --- a/android-components/components/feature/media/src/main/res/values-pl/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-pl/strings.xml @@ -1,5 +1,5 @@ - + Multimedia @@ -21,9 +21,14 @@ Przypomnienie: %1$s nadal korzysta z aparatu. Stuknij, aby otworzyć kartę. - Przypomnienie: %1$s nadal korzysta z mikrofonu. Stuknij, aby otworzyć kartę + Przypomnienie: %1$s nadal korzysta z mikrofonu. Stuknij, aby otworzyć kartę + + Przypomnienie: %1$s nadal korzysta z mikrofonu. Stuknij, aby otworzyć kartę. + + Przypomnienie: %1$s nadal korzysta z mikrofonu i aparatu. Stuknij, aby otworzyć kartę + - Przypomnienie: %1$s nadal korzysta z mikrofonu i aparatu. Stuknij, aby otworzyć kartę + Przypomnienie: %1$s nadal korzysta z mikrofonu i aparatu. Stuknij, aby otworzyć kartę. Odtwórz diff --git a/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml b/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml index 781e22d78aa7..a6cc86761b9c 100644 --- a/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-eo/strings.xml @@ -18,6 +18,8 @@ Pasvorto Ne konservi + + Ne nun Neniam konservi @@ -26,16 +28,26 @@ Konservi Ne ĝisdatigi + + Ne nun Ĝisdatigi La pasvorto ne povas esti malplena + Tajpu pasvorton + Ne eblas konservi legitimilon + + Ne eblas konservi la pasvorton Ĉu konservi tiun ĉi legitimilon? + + Ĉu konservi pasvorton? Ĉu ĝisdatigi tiun ĉi akreditilon? + + Ĉu ĝisdatigi pasvorton? Ĉu aldoni nomon de uzanto al la konservita pasvorto? @@ -85,13 +97,22 @@ Difini horon Administri legitimilojn + + Administri pasvortojn Malfaldi sugestitajn legitimilojn + + Malfaldi konservitajn pasvortojn Faldi sugestitajn legitimilojn + + Faldi konservitajn pasvortojn Sugestitaj legitimiloj + + Konservitaj pasvortoj + Sugesti fortan pasvorton @@ -110,12 +131,20 @@ Elekti kreditkarton + + Uzi konservitan karton Malfaldi sugestitajn kreditkartojn + + Elporti konservitajn pasvortojn Faldi sugestitajn kreditkartojn + + Faldi konservitajn kartojn Administri kreditkartojn + + Administri kartojn Ĉu sekure konservi tiun ĉi kreditkarton? @@ -123,13 +152,20 @@ La numero de kreditkaro estos ĉifrita. La sekureca kodo ne estos konservita. + + %s ĉifras vian numeron de karto. Via sekureca kodo ne estos konservita. + Elekti adresojn Malfaldi sugestitajn adresojn + + Malfaldi konservitajn adresojn Faldi sugestitajn adresojn + + Faldi konservitajn adresojn Administri adresojn diff --git a/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml b/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml index d72f03a9a1f7..9b0ba18b329c 100644 --- a/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-ja/strings.xml @@ -26,6 +26,8 @@ 保存しない + + 後で 保存しない @@ -34,16 +36,26 @@ 保存する 更新しない + + 後で 更新 パスワードを入力してください + パスワードを入力してください + ログイン情報を保存できません + + パスワードを保存できません このログイン情報を保存しますか? + + パスワードを保存しますか? このログイン情報を更新しますか? + + パスワードを更新しますか? 保存されたパスワードにユーザー名を追加しますか? @@ -97,13 +109,22 @@ 時刻の設定 ログイン情報の管理 + + パスワードを管理 提案されたログイン情報を展開 + + 保存したパスワードを展開 提案されたログイン情報を折りたたむ + + 保存したパスワードを折りたたむ 提案されたログイン情報 + + 保存されたパスワード + 強固なパスワードを提案する @@ -122,12 +143,20 @@ クレジットカードを選択 + + 保存したカード情報を使用 提案されたクレジットカード情報を展開する + + 保存したカード情報を展開 提案されたクレジットカード情報を折りたたむ + + 保存したカード情報を折りたたむ クレジットカードを管理 + + カード情報を管理 このカードの情報を安全に保存しますか? @@ -135,13 +164,20 @@ カード番号は暗号化されます。セキュリティコードは保存されません。 + + %s がカード番号を暗号化します。セキュリティコードは保存しません。 + アドレスの選択 提案されたアドレス情報を展開する + + 保存したアドレス情報を展開 提案されたアドレス情報を折りたたむ + + 保存したアドレス情報を折りたたむ アドレスの管理 diff --git a/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml b/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml index c11e34a80a3c..92107e968fd8 100644 --- a/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-pl/strings.xml @@ -18,6 +18,8 @@ Hasło Nie zachowuj + + Nie teraz Nigdy nie zachowuj @@ -26,16 +28,26 @@ Zachowaj Nie aktualizuj + + Nie teraz Aktualizuj Pole hasła nie może być puste + Wpisz hasło + Nie można zachować danych logowania + + Nie można zachować hasła Czy zachować te dane logowania? + + Czy zachować hasło? Czy zaktualizować te dane logowania? + + Czy zaktualizować hasło? Czy dodać nazwę użytkownika do zachowanego hasła? @@ -85,13 +97,22 @@ Ustaw czas Zarządzaj danymi logowania + + Zarządzaj hasłami Rozwiń podpowiadane dane logowania + + Rozwiń zachowane hasła Zwiń podpowiadane dane logowania + + Zwiń zachowane hasła Podpowiadane dane logowania + + Zachowane hasła + Zaproponuj silne hasło @@ -110,12 +131,20 @@ Wybierz kartę płatniczą + + Użyj zachowanej karty Rozwiń podpowiadane karty płatnicze + + Rozwiń zachowane karty Zwiń podpowiadane karty płatnicze + + Zwiń zachowane karty Zarządzaj kartami płatniczymi + + Zarządzaj kartami Czy bezpiecznie zachować tę kartę? @@ -123,13 +152,20 @@ Numer karty zostanie zaszyfrowany. Kod zabezpieczający nie zostanie zachowany. + + %s szyfruje numer karty. Kod zabezpieczający nie zostanie zachowany. + Wybierz adres Rozwiń podpowiadane adresy + + Rozwiń zachowane adresy Zwiń podpowiadane adresy + + Zwiń zachowane adresy Zarządzaj adresami diff --git a/fenix/app/src/main/res/values-azb/strings.xml b/fenix/app/src/main/res/values-azb/strings.xml index 37a4ebc5fce0..1c5e4b0c8767 100644 --- a/fenix/app/src/main/res/values-azb/strings.xml +++ b/fenix/app/src/main/res/values-azb/strings.xml @@ -543,6 +543,8 @@ اؤزل دؤنگل سرور + + موْزیلا حسابیْ/دؤنگل سروری دگیشدیریلدی. دگیشمه‌لری یئرینه سالماق اوچون اپلیکیشن‌دن چیخیلیر... حساب @@ -551,19 +553,64 @@ تم آنایارپاق + + ایشاره‌لر اؤزللشدیرمک + + تاغلاریْ، بوکمارک‌لاریْ، رمزلری و داها چوْخوُنو دؤنگل ائتمک اوچون گیریش ائله‌یین. موْزیلا حسابی + + دؤنگلی ایدامه وئرمک اوچون یئنی‌دن باغلانین. دیل دیتا سئچیمی + + دیتا یئغیلماسیْ + + USB طریقی‌نن اوُزاقدان سازلاما + + آختاریْش تکلیف‌لرینی گؤستر + + سس‌لی آختاریشیْ گؤستر + + گیزلی اوْتوروُم‌لاردا گؤستر + + کلیپ‌بوْرد تکلیف‌لرینی گؤستر + + موُرور گئچمیشینده آختار + + بوکمارک‌دا آختار + + دؤنگل ائدیلمیش تاغ‌لاردا آختار + + حساب تنظیم‌لری + + اؤزاؤزونه URL تکمیل‌لشمه‌سی + + اسپانسرلردن تکلیف‌لر + + بعضاً اسپانسرلیق تکلیف‌لری ایله %1$s -یی آرخالایین. + + %1$s تکلیف‌لری + + وب‌دن آختاریْنیزلا باغلیْ تکلیف‌لری آلیْن. + + اَپ‌لرده باغلانتی‌ْلاری آچیْن. هر زامان + + آچمازدان اؤنجه سوْروُشون. هئچ زامان + + خاریجی یئندیرمه موْدیری. + تاخیلان‌لار diff --git a/fenix/app/src/main/res/values-co/strings.xml b/fenix/app/src/main/res/values-co/strings.xml index b233b981bff3..e41a5e4c1073 100644 --- a/fenix/app/src/main/res/values-co/strings.xml +++ b/fenix/app/src/main/res/values-co/strings.xml @@ -1837,7 +1837,7 @@ Arregistrà è riempie autumaticamente l’indirizzi - Arregistrà è rinsignà l’indirizzi + Arregistrà è rinsignà autumaticamente l’indirizzi Include l’infurmazioni cum’è i numeri, i messaghji elettronichi è l’indirizzi di spedizione diff --git a/fenix/app/src/main/res/values-cs/strings.xml b/fenix/app/src/main/res/values-cs/strings.xml index d257bf7c056b..2a9bafda93c7 100644 --- a/fenix/app/src/main/res/values-cs/strings.xml +++ b/fenix/app/src/main/res/values-cs/strings.xml @@ -2189,6 +2189,9 @@ Vyhledat pomocí %s + + Změňte svůj výchozí prohlížeč + Nastavte si automatické otevírání odkazů, e-mailů a zpráv ve Firefoxu. diff --git a/fenix/app/src/main/res/values-dsb/strings.xml b/fenix/app/src/main/res/values-dsb/strings.xml index bbc3d240baff..629b72032271 100644 --- a/fenix/app/src/main/res/values-dsb/strings.xml +++ b/fenix/app/src/main/res/values-dsb/strings.xml @@ -2172,6 +2172,9 @@ Z %s pytaś + + Standardny wobglědowak změniś + Nastajśo wótkaze z websedłow, mejlkow a powěsćow, aby se awtomatiski we Firefox wócynili. diff --git a/fenix/app/src/main/res/values-en-rGB/strings.xml b/fenix/app/src/main/res/values-en-rGB/strings.xml index ea001e9be880..31dfb31b8d99 100644 --- a/fenix/app/src/main/res/values-en-rGB/strings.xml +++ b/fenix/app/src/main/res/values-en-rGB/strings.xml @@ -2162,6 +2162,9 @@ %s search + + Switch your default browser + Set links from web sites, emails, and messages to open automatically in Firefox. diff --git a/fenix/app/src/main/res/values-eo/strings.xml b/fenix/app/src/main/res/values-eo/strings.xml index 64032af01be0..adae84f571a2 100644 --- a/fenix/app/src/main/res/values-eo/strings.xml +++ b/fenix/app/src/main/res/values-eo/strings.xml @@ -239,6 +239,7 @@ Personecigi ekan paĝon + Hejmekrano @@ -246,6 +247,9 @@ Viŝi retuman historion + + Traduki paĝon + Elektita lingvo @@ -257,8 +261,6 @@ Skani - - Serĉilo Agordoj de serĉilo @@ -312,23 +314,28 @@ - Sciigoj helpas vin plenumi pli per %s + Sciigoj helpas vin plenumi pli per %s - Spegulu viajn langetojn inter aparatoj, administru elŝutojn, ricevu konsiletojn por eltiri la maksimumon el la privateca protekto de %s, kaj pli. + Spegulu viajn langetojn inter aparatoj, administru elŝutojn, ricevu konsiletojn por eltiri la maksimumon el la privateca protekto de %s, kaj pli. - Daŭrigi + Daŭrigi - Ne nun + Ne nun + + Rimarko de Firefox pri privateco + Ni amas teni vin sekura - Nia retumilo, subtenata de nenprofitcela organizo, helpas eviti ke entreprenoj kaŝe sekvu vin tra la reto.\n\nPli da informo en nia rimarko pri privateco. + Nia retumilo, subtenata de nenprofitcela organizo, helpas eviti ke entreprenoj kaŝe sekvu vin tra la reto. + + Nia retumilo, subtenata de nenprofitcela organizo, helpas eviti ke entreprenoj kaŝe sekvu vin tra la reto.\n\nPli da informo en nia rimarko pri privateco. - rimarko pri privateco + rimarko pri privateco Difini kiel norman retumilon @@ -432,21 +439,11 @@ HTTPS-nura reĝimo - - Redukto de kuketaj anoncoj Blokilo de kuketaj anoncoj Blokilo de kuketaj anoncoj en privata retumo - - Redukti kuketajn anoncojn - - Malŝaltita - - Ŝaltita - - - %1$s aŭtomate klopodos rifuzi kuketajn petojn en kuketaj anoncoj. + Malŝaltita por tiu ĉi retejo @@ -463,38 +460,19 @@ Peto pri subteno sendita Retejo nuntempe ne subtenata - - Ĉu ŝalti la redukton de kuketaj anoncoj en %1$s? Ĉu ŝalti la blokilon de kuketaj anoncoj por %1$s? - Ĉu malŝalti la redukton de kuketaj anoncoj en %1$s? - Ĉu malŝalti la blokilon de kuketaj anoncoj por %1$s? %1$s ne povas aŭtomate rifuzi kuketojn en tiu ĉi retejo. Vi povas sendi peton por aldoni subtenon por tiu ĉi retejo en la estonteco. - - %1$s forigos la kuketojn de tiuj ĉi retejo kaj reŝargos la paĝon. Forigo de ĉiuj kuketoj povas fini seancojn aŭ malplenigi aĉetumĉarojn. Malŝaltu kaj %1$s forigos kuketojn kaj reŝagos tiun ĉi retejon. Tiu ĉi ago povus fini la seancon aŭ malplenigi aĉetumĉaron. - - %1$s klopodas aŭtomate rifuzi ĉiujn kuketajn petojn en subtenataj retejoj. Ŝaltu, kaj %1$s klopodos aŭtomate rifuzi kuketajn anoncojn en tiu ĉi retejo. - - Ĉu permesi al %1$s rifuzi kuketajn anoncojn? - - %1$s povas aŭtomate rifuzi multajn petojn de kuketaj anoncoj. - - Ne nun - - Vi vidos malpli da kuketaj anoncoj - - - Permesi %1$s ĵus rifuzis kuketojn por vi @@ -712,6 +690,8 @@ legosignojn legitimilojn + + Pasvortoj Malfermitaj langetoj @@ -738,6 +718,8 @@ Kreditkartoj + + Pagmetodoj Adresoj @@ -1282,8 +1264,6 @@ Ignori - Ne eblas presi - Ne eblas presi tiun ĉi paĝon Presi @@ -1691,8 +1671,12 @@ Legitimiloj kaj pasvortoj + + Pasvortoj Konservi legitimilojn kaj pasvortojn + + Konservi pasvortojn Demandi antaŭ ol konservi @@ -1709,27 +1693,46 @@ Aldoni legitimilon + + Aldoni pasvorton + Speguli legitimilojn + + Speguli pasvortojn Speguli legitimilojn inter aparatoj + + Speguli pasvortojn inter aparatoj Konservitaj legitimiloj + + Konservitaj pasvortoj La legitimiloj, kiujn vi konservas aŭ spegulas al %s, aperos ĉi tie. + + La pasvortoj konservitaj aŭ spegulitaj al %s estos listigitaj ĉi tie. Ĉiuj konservitaj pasvortoj estos ĉifritaj. Pli da informo pri Spegulado. + + Pli da informo pri spegulado Esceptoj Nekonservitaj nomoj de uzantoj kaj pasvortoj estos montritaj ĉi tie. + + %s ne konservos pasvortojn por retejoj listigitaj ĉi tie. Nomoj de uzanto kaj pasvortoj por tiuj ĉi retejoj ne estos konservitaj. + + %s ne konservos pasvortojn por tiuj ĉi retejoj. Forigi ĉiujn esceptojn Serĉi legitimilojn + + Serĉi pasvortojn Retejo @@ -1759,10 +1762,16 @@ Malŝlosu por vidi viajn konservitajn legitimilojn + + Malŝlosi por vidi viajn konservitajn pasvortojn Protektu viajn legitimilojn kaj pasvortojn + + Protektu viajn konservitajn pasvortojn Difinu blokan desegnon, PIN aŭ pasvorton por protekti viajn konservitajn legitimilojn kaj pasvortojn se iu alia havas vian aparaton. + + Difinu blokan desegnon, PIN aŭ pasvorton por protekti viajn konservitajn pasvortojn se iu alia havas vian aparaton. Poste @@ -1781,6 +1790,9 @@ Ordigi menuon de legitimiloj + + Menuo por ordigi pasvortojn + Aŭtomata plenigo @@ -1788,27 +1800,42 @@ Adresoj Kreditkartoj + + Pagmetodoj Konservi kaj aŭtomate plenigi kreditkartojn + + Konservi kaj aŭtomate plenigi pagmetodojn La datumoj estas ĉifritaj + + %s ĉifras ĉiujn pagmetodojn, kiujn vi konservis Speguli kreditkartojn inter aparatoj Speguli kreditkartojn Aldoni kreditkarton + + Aldoni kreditkarton Administri konservitajn kreditkartojn + + Administri kartojn Aldoni adreson Administri adresojn Konservi kaj aŭtomate plenigi adresojn + + Konservi kaj aŭtomate plenigi adresojn Inkluzivi informojn kiel numerojn, retpoŝtajn kaj liverajn adresojn + + Telefonnumeroj kaj retpoŝtaj adresoj inkluzivitaj + Aldoni kreditkarton @@ -1830,6 +1857,8 @@ Forigi kreditkarton Ĉu vi certe volas forigi tiun ĉi kreditkarton? + + Ĉu forigi karton? Forigi @@ -1844,14 +1873,22 @@ Bonvolu tajpi validan kreditkaran numeron + + Tajpu validan numeron de karto Bonvolu plenigi tiun ĉi kampon + + Aldoni nomon Malŝlosu por vidi viajn konservitajn kreditkartojn Sekurigu viajn kreditkartojn + + Protektu viajn konservitajn pagmetodojn Difinu blokan desegnon, PIN aŭ pasvorton por protekti viajn konservitajn kreditkartojn se iu alia havas vian aparaton. + + Difinu blokan desegnon, PIN aŭ pasvorton por protekti viajn konservitajn pagmetodojn se iu alia havas vian aparaton. Agordi nun @@ -1861,6 +1898,8 @@ Malŝlosu por uzi la konservitan informon pri kreditkartojn + + Malŝlosu por uzi konservitajn pagmetodojn Aldoni adreson @@ -1898,6 +1937,8 @@ Forigi adreson Ĉu vi certe volas forigi tiun ĉi adreson? + + Ĉu forigi tiun ĉi adreson? Forigi @@ -1997,30 +2038,52 @@ Modifi Ĉu vi certe volas forigi tiun ĉi legitimilon? + + Ĉu vi certe volas forigi tiun ĉi pasvorton? Forigi Nuligi Preferoj de komenco de seanco + + Pasvortaj elektebloj La modifebla teksta kampo de la retadreso por komenci seancon. + + La modifebla teksta kampo de la reteja retadreso. La modifebla teksta kampo de la nomo de uzanto por komenci seancon. + + La modifebla teksta kampo de la uzanto. La modifebla teksta kampo de la pasvorto por komenci seancon. + + La modifebla teksta kampo de la pasvorto. Konservi ŝanĝojn je komenco de seanco. + + Konservi ŝanĝojn. Modifi + + Modifi pasvorton Aldoni novan legitimilon + + Aldoni pasvorton Pasvorto postulata + + Tajpu pasvorton Nomo de uzanto postulata + + Tajpu nomon de uzanto Nomo de servilo postulata + + Tajpu retadreson Voĉa serĉo @@ -2119,6 +2182,9 @@ Serĉo de %s + + Ŝanĝi vian norman retumilon + Aŭtomate malfermi ligilon en retejoj, retpoŝtoj kaj mesaĝoj per Firefox. @@ -2193,8 +2259,6 @@ Elstaraĵoj venas el recenzoj de %s, kiujn ni opinias fidindaj kaj okazis dum la lastaj 80 tagoj.]]> Pli da informo pri %s. - - Kiel %s (de Mozilla) determinas la kvaliton de recenzoj kiel %s determinas la kvaliton de recenzoj @@ -2378,6 +2442,8 @@ Traduko Traduko okazas + + Elektu lingvon Okazis problemo dum traduko. Bonvolu provi denove. @@ -2398,6 +2464,10 @@ Neniam traduki %1$s Neniam traduki tiun ĉi retejon + + Superregi ĉiujn aliajn agordojn + + Superregi tradukproponojn Tradukaj agordoj diff --git a/fenix/app/src/main/res/values-is/strings.xml b/fenix/app/src/main/res/values-is/strings.xml index bdb531e46c93..46dd967e512e 100644 --- a/fenix/app/src/main/res/values-is/strings.xml +++ b/fenix/app/src/main/res/values-is/strings.xml @@ -2164,6 +2164,9 @@ %s leit + + Skiptu um sjálfgefinn vafra + Stilltu tengla frá vefsvæðum, tölvupósti og skilaboðum til að opna sjálfkrafa í Firefox. diff --git a/fenix/app/src/main/res/values-ja/strings.xml b/fenix/app/src/main/res/values-ja/strings.xml index 9b75f0b363a5..e7af7cfc386c 100644 --- a/fenix/app/src/main/res/values-ja/strings.xml +++ b/fenix/app/src/main/res/values-ja/strings.xml @@ -248,6 +248,7 @@ ホームページをカスタマイズ + ホーム画面 @@ -255,6 +256,9 @@ 閲覧履歴を消去 + + ページを翻訳 + 選択した言語 @@ -266,8 +270,6 @@ スキャン - - 検索エンジン 検索エンジンの設定 @@ -323,23 +325,28 @@ - 通知は %s を活用するのに役立ちます + 通知は %s を活用するのに役立ちます - 端末間でタブを共有したり、ダウンロードを管理したり、%s のプライバシー保護機能を最大限に活用するためのヒントを入手できます。 + 端末間でタブを共有したり、ダウンロードを管理したり、%s のプライバシー保護機能を最大限に活用するためのヒントを入手できます。 - 続ける + 続ける - 後で + 後で + + Firefox のプライバシー通知 + 私たちはあなたの安全を守りたいと願っています - 非営利で作られた私たちのブラウザーは、企業によるウェブ上の密かな追跡を阻止するのに役立ちます。\n\n詳細はプライバシー通知をご覧ください。 + 非営利で作られた私たちのブラウザーは、企業によるウェブ上の密かな追跡を阻止するのに役立ちます。 + + 非営利で作られた私たちのブラウザーは、企業によるウェブ上の密かな追跡を阻止するのに役立ちます。\n\n詳細はプライバシー通知をご覧ください。 - プライバシー通知 + プライバシー通知 既定のブラウザーに設定 @@ -445,22 +452,11 @@ HTTPS-Only モード - - Cookie バナーの削減 Cookie バナーブロッカー プライベートブラウジングでの Cookie バナーブロッカー - - Cookie バナーを減らす - - オフ - - オン - - - %1$s が自動的に Cookie バナー上の Cookie 要求を拒否しようとします。 このサイトでオフ @@ -479,36 +475,16 @@ 現在サポートされていないサイトです - %1$s で Cookie バナー削減を有効にしますか? - %1$s で Cookie バナーブロッカーをオンにしますか? - %1$s で Cookie バナー削減を無効にしますか? - %1$s で Cookie バナーブロッカーをオフにしますか? %1$s は現在、このサイトの Cookie 使用要求を自動的に拒否できません。このサイトへの対処を要求してください。 - - %1$s はこのサイトの Cookie を消去してページを読み込み直します。すべての Cookie を消去すると、ログアウトしたり、ショッピングカートが空になったりする場合があります。 オフにすると、%1$s に保存された Cookie を消去してこのサイトを再読み込みします。サイトからログアウトしたり、買い物かごが空になったりする場合があります。 - %1$s はサポートされたサイト上の Cookie 要求を自動的に拒否しようとします。 - オンにすると、このサイトのすべての Cookie バナーに対して %1$s が自動的に拒否を試みます。 - - %1$s に Cookie バナーを拒否させますか? - - %1$s は多くの Cookie バナーの同意確認を自動的に拒否できます。 - - 後で - - - Cookie 要求が少なくなります - - - 許可 %1$s が Cookie を拒否しました @@ -726,6 +702,8 @@ ブックマーク ログイン情報 + + パスワード 開いているタブ @@ -752,6 +730,8 @@ クレジットカード情報 + + 支払い方法 住所 @@ -1298,8 +1278,6 @@ 閉じる - 印刷できません - このページを印刷できません 印刷 @@ -1708,8 +1686,12 @@ ログイン情報とパスワード + + パスワード ログイン情報を保存する + + パスワードを保存 保存するか確認する @@ -1727,26 +1709,45 @@ ログイン情報を追加 + + パスワードを追加 + ログイン情報を同期 + + パスワードを同期 端末間でログイン情報を同期します + + 端末間でパスワードを同期 保存されたログイン情報 + + 保存されたパスワード 端末に保存または %s と同期したログイン情報がここに表示されます。 + + %s に保存または同期したパスワードがこのリストに表示されます。保存されたすべてのパスワードは暗号化されます。 Sync についての詳細情報。 + + Sync についての詳細情報 例外 ログイン情報が保存されないサイトがここに表示されます。 + + %s は、このリストに表示されているサイトのパスワードを保存しません。 これらのサイトではログイン情報が保存されません。 + + %s はこれらのサイトのパスワードを保存しません。 すべての例外を削除 ログイン情報を検索 + + パスワードを検索 サイト @@ -1775,10 +1776,16 @@ パスワードを隠す ロック解除して保存されたログイン情報を表示します + + 保存されたパスワードを表示するにはロック解除してください ログイン情報とパスワードの保護 + + 保存されたパスワードを保護してください 端末のロックパターンや PIN、パスワードを設定して、保存されたログイン情報とパスワードを他人の不正なアクセスから保護しましょう。 + + 端末のロックパターンや PIN、パスワードを設定して、保存されたパスワードを他人の不正なアクセスから保護しましょう。 後で @@ -1798,6 +1805,9 @@ ログイン情報メニューの並べ替え + + パスワードを並べ替えます + 自動入力 @@ -1806,18 +1816,28 @@ クレジットカード + + 支払い方法 カード情報を保存して自動入力する + + 支払い方法を保存して入力する データは暗号化されています + + %s は保存したすべての支払い方法を暗号化します 端末間でカード情報を同期する クレジットカード情報を同期 クレジットカードを追加 + + カード情報を追加 保存したカードを管理 + + カード情報を管理 アドレスを追加 @@ -1825,9 +1845,14 @@ アドレスを保存して自動入力する + + 住所を保存して入力する カード番号、メールアドレス、配送先などの情報を含める + + 電話番号とメールアドレスを含みます + カードの追加 @@ -1849,6 +1874,8 @@ カードを削除 本当にこのクレジットカード情報を削除してもよろしいですか? + + カード情報を削除しますか? 削除 @@ -1864,15 +1891,23 @@ 有効なクレジットカード番号を入力してください + + 正しいカード番号を入力してください このフィールドは入力必須です + + 名前を追加してください 保存されたカード情報を表示するにはロック解除してください クレジットカード情報の保護 + + 保存された支払い方法を保護してください 端末のロックパターンや PIN、パスワードを設定して、保存されたクレジットカード情報とパスワードを他人の不正なアクセスから保護しましょう。 + + 端末のロックパターンや PIN、パスワードを設定して、保存された支払い方法を他人の不正なアクセスから保護しましょう。 今すぐ設定 @@ -1883,6 +1918,8 @@ ロックを解除して保存したクレジットカード情報を使用します + + 保存された支払い方法を使用するにはロック解除してください アドレスを追加 @@ -1920,6 +1957,8 @@ 本当にこの住所を削除してもよろしいですか? + + このアドレスを削除しますか? 削除 @@ -2018,6 +2057,8 @@ 編集 このログイン情報を削除してもよろしいですか? + + 本当にこのパスワードを削除してもよろしいですか? 削除 @@ -2025,24 +2066,44 @@ キャンセル ログインオプション + + パスワードのオプション ログイン情報のウェブアドレスの編集可能なテキストフィールド。 + + ウェブサイトのアドレスの編集可能なテキストフィールド。 ログイン情報のユーザー名の編集可能なテキストフィールド。 + + ユーザー名の編集可能なテキストフィールド。 ログイン情報のパスワードの編集可能なテキストフィールド。 + + パスワードの編集可能なテキストフィールド。 変更を保存してログインします。 + + 変更を保存します。 編集 + + パスワードを編集 新しいログイン情報の追加 + + パスワードを追加 パスワードが必要です + + パスワードを入力してください ユーザー名は必須です + + ユーザー名を入力してください ホスト名は必須です + + ウェブアドレスを入力してください 音声検索 @@ -2139,6 +2200,9 @@ %s 検索 + + 既定のブラウザーを変更しませんか + ウェブサイトやメール、メッセージのリンクを自動的に Firefox で開きます。 @@ -2213,8 +2277,6 @@ 注目レビュー は最近 80 日以内の %s からのレビューで私たちが信頼するに足ると評価したものです。]]> %s についての詳細。 - - %s by Mozilla がレビュー品質を決定する方法について %s がレビュー品質を決定する方法について @@ -2400,6 +2462,8 @@ 翻訳中 翻訳中です + + 言語を選択 翻訳時に問題が発生しました。もう一度試してください。 @@ -2420,6 +2484,10 @@ %1$s のページは翻訳しない このサイトは翻訳しない + + 他のすべての設定を上書きします + + 翻訳機能の設定を上書きします 翻訳設定 diff --git a/fenix/app/src/main/res/values-pl/strings.xml b/fenix/app/src/main/res/values-pl/strings.xml index f9642e66f6a2..ae67905ffff8 100644 --- a/fenix/app/src/main/res/values-pl/strings.xml +++ b/fenix/app/src/main/res/values-pl/strings.xml @@ -244,6 +244,7 @@ Dostosuj stronę startową + Strona startowa @@ -251,6 +252,9 @@ Usuń historię przeglądania + + Przetłumacz stronę + Wybrany język @@ -262,8 +266,6 @@ Skanuj - - Wyszukiwarka Ustawienia wyszukiwarki @@ -318,23 +320,28 @@ - Dzięki powiadomieniom lepiej wykorzystasz przeglądarkę %s + Dzięki powiadomieniom lepiej wykorzystasz przeglądarkę %s - Synchronizuj karty między urządzeniami, zarządzaj pobieranymi plikami, otrzymuj wskazówki, jak najlepiej wykorzystać ochronę prywatności w przeglądarce %s i nie tylko. + Synchronizuj karty między urządzeniami, zarządzaj pobieranymi plikami, otrzymuj wskazówki, jak najlepiej wykorzystać ochronę prywatności w przeglądarce %s i nie tylko. - Kontynuuj + Kontynuuj - Nie teraz + Nie teraz + + Zasady ochrony prywatności Firefoksa + Uwielbiamy zapewniać Ci bezpieczeństwo - Nasza przeglądarka wspierana przez organizację non-profit pomaga powstrzymywać firmy przed potajemnym śledzeniem Cię w Internecie.\n\nWięcej informacji znajdziesz w naszych zasadach ochrony prywatności. + Nasza przeglądarka wspierana przez organizację non-profit pomaga powstrzymywać firmy przed potajemnym śledzeniem Cię w Internecie. + + Nasza przeglądarka wspierana przez organizację non-profit pomaga powstrzymywać firmy przed potajemnym śledzeniem Cię w Internecie.\n\nWięcej informacji znajdziesz w naszych zasadach ochrony prywatności. - zasadach ochrony prywatności + zasadach ochrony prywatności Ustaw jako domyślną przeglądarkę @@ -438,21 +445,11 @@ Tryb używania wyłącznie protokołu HTTPS - - Ograniczanie informacji o ciasteczkach Blokowanie informacji o ciasteczkach Blokowanie informacji o ciasteczkach w trybie prywatnym - - Ograniczanie informacji o ciasteczkach - - Wyłączone - - Włączone - - - %1$s automatycznie próbuje odrzucać prośby o akceptację ciasteczek. + Wyłączone na tej witrynie @@ -470,36 +467,17 @@ Witryna obecnie nie jest obsługiwana - Włączyć ograniczanie informacji o ciasteczkach na witrynie %1$s? - Włączyć blokowanie informacji o ciasteczkach na witrynie %1$s? - - Wyłączyć ograniczanie informacji o ciasteczkach na witrynie %1$s? Wyłączyć blokowanie informacji o ciasteczkach na witrynie %1$s? %1$s nie może automatycznie odrzucać próśb o akceptację ciasteczek na tej witrynie. Można wysłać prośbę o dodanie obsługi tej witryny w przyszłości. - - %1$s usunie ciasteczka tej witryny i odświeży stronę. Usunięcie wszystkich ciasteczek może spowodować wylogowanie ze strony lub opróżnienie koszyka w sklepie. Wyłącz, a %1$s usunie ciasteczka i ponownie wczyta tę stronę. Może to spowodować wylogowanie ze strony lub opróżnienie koszyka w sklepie. - %1$s próbuje automatycznie odrzucać wszystkie prośby o akceptację ciasteczek na obsługiwanych witrynach. - Włącz, a %1$s spróbuje automatycznie odrzucać wszystkie prośby o akceptację ciasteczek na tej witrynie. - - Pozwolić przeglądarce %1$s odrzucać prośby o akceptację ciasteczek? - - %1$s może automatycznie odrzucać wiele próśb o akceptację ciasteczek. - - Nie teraz - - Będziesz widzieć mniej próśb o akceptację ciasteczek - - - Pozwól %1$s właśnie odrzucił ciasteczka za Ciebie @@ -718,6 +696,8 @@ Zakładki Dane logowania + + Hasła Otwarte karty @@ -746,6 +726,8 @@ Karty płatnicze + + Metody płatności Adresy @@ -1284,8 +1266,6 @@ Zamknij - Nie można wydrukować - Nie można wydrukować tej strony Drukuj @@ -1693,8 +1673,12 @@ Dane logowania i hasła + + Hasła Zachowywanie danych logowania i haseł + + Zachowywanie haseł Pytanie o zachowanie @@ -1711,26 +1695,45 @@ Dodaj dane logowania + + Dodaj hasło + Synchronizowanie danych logowania + + Synchronizowanie haseł - Synchronizuj karty między urządzeniami + Synchronizuj dane logowania między urządzeniami + + Synchronizuj hasła między urządzeniami Zachowane dane logowania + + Zachowane hasła Zachowane lub synchronizowane z przeglądarką %s dane logowania będą wyświetlane w tym miejscu. + + Tutaj będą wyświetlane hasła zachowane lub synchronizowane w przeglądarce %s. Wszystkie zachowywane hasła są zaszyfrowane. Więcej informacji o synchronizacji. + + Więcej informacji o synchronizacji Wyjątki Tutaj będą wyświetlane dane logowania i hasła, które nie będą zachowywane. + + %s nie będzie zachowywać haseł do wymienionych tutaj witryn. Dane logowania i hasła dla tych witryn nie będą zachowywane. + + %s nie będzie zachowywać haseł do tych witryn. Usuń wszystkie wyjątki Szukaj danych logowania + + Szukaj haseł Witryna @@ -1759,10 +1762,16 @@ Ukryj hasło Odblokuj, aby wyświetlić zachowane dane logowania + + Odblokuj, aby wyświetlić zachowane hasła Zabezpiecz dane logowania i hasła + + Zabezpiecz zachowane hasła Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane dane logowania i hasła w przypadku, gdy ktoś inny uzyska dostęp do urządzenia. + + Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane hasła w przypadku, gdy ktoś inny uzyska dostęp do urządzenia. Później @@ -1781,6 +1790,9 @@ Menu sortowania danych logowania + + Menu sortowania haseł + Automatyczne wypełnianie @@ -1789,10 +1801,16 @@ Karty płatnicze + + Metody płatności Zachowywanie i automatyczne wypełnianie kart + + Zachowywanie i wypełnianie metod płatności Dane są zaszyfrowane + + %s szyfruje wszystkie zachowywane metody płatności Synchronizuj karty między urządzeniami @@ -1800,8 +1818,12 @@ Dodaj kartę płatniczą + + Dodaj kartę Zarządzaj zachowanymi kartami + + Zarządzaj kartami Dodaj adres @@ -1809,9 +1831,14 @@ Zachowywanie i automatyczne wypełnianie adresów + + Zachowywanie i wypełnianie adresów Zawiera informacje takie jak numery, adresy e-mail i adresy wysyłki + + W tym numery telefonów i adresy e-mail + Dodaj kartę @@ -1832,6 +1859,8 @@ Usuń kartę Czy na pewno usunąć tę kartę płatniczą? + + Czy usunąć kartę? Usuń @@ -1846,14 +1875,22 @@ Wprowadź prawidłowy numer karty płatniczej + + Podaj prawidłowy numer karty Wypełnij to pole + + Dodaj imię i nazwisko Odblokuj, aby wyświetlić zachowane karty Zabezpiecz karty płatnicze + + Zabezpiecz zachowane metody płatności Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane karty płatnicze w przypadku, gdy ktoś inny uzyska dostęp do urządzenia. + + Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane metody płatności w przypadku, gdy ktoś inny uzyska dostęp do urządzenia. Skonfiguruj teraz @@ -1864,6 +1901,8 @@ Odblokuj, aby użyć przechowywanych informacji o kartach płatniczych + + Odblokuj, aby użyć zachowanych metod płatności Dodaj adres @@ -1900,6 +1939,8 @@ Usuń adres Czy na pewno usunąć ten adres? + + Czy usunąć ten adres? Usuń @@ -1998,30 +2039,52 @@ Edytuj Czy na pewno usunąć te dane logowania? + + Czy na pewno usunąć to hasło? Usuń Anuluj Opcje danych logowania + + Opcje haseł Edytowalne pole tekstowe dla adresu witryny danych logowania. + + Edytowalne pole tekstowe dla adresu witryny. Edytowalne pole tekstowe dla nazwy użytkownika danych logowania. + + Edytowalne pole tekstowe dla nazwy użytkownika. Edytowalne pole tekstowe dla hasła danych logowania. + + Edytowalne pole tekstowe dla hasła. - Zapisz zmiany danych logowania. + Zachowaj zmiany danych logowania. + + Zachowaj zmiany. Edycja + + Edycja hasła Dodanie nowych danych logowania + + Dodanie hasła Hasło jest wymagane + + Wpisz hasło Nazwa użytkownika jest wymagana + + Wpisz nazwę użytkownika Adres jest wymagany + + Wpisz adres witryny Wyszukiwanie głosowe @@ -2117,6 +2180,9 @@ Szukaj w %s + + Przełącz domyślną przeglądarkę + Ustaw automatyczne otwieranie odnośników z witryn, wiadomości e-mail i SMS-ów w Firefoksie. @@ -2206,6 +2272,8 @@ Tłumaczenie Trwa tłumaczenie + + Wybierz język Wystąpił problem przy tłumaczeniu. Spróbuj ponownie. @@ -2226,6 +2294,10 @@ Nigdy nie tłumacz tego języka (%1$s) Nigdy nie tłumacz tej witryny + + Zastępuje wszystkie pozostałe ustawienia + + Zastępuje propozycje tłumaczenia Ustawienia tłumaczenia diff --git a/fenix/app/src/main/res/values-rm/strings.xml b/fenix/app/src/main/res/values-rm/strings.xml index efa79cba3148..c5c40892d4d4 100644 --- a/fenix/app/src/main/res/values-rm/strings.xml +++ b/fenix/app/src/main/res/values-rm/strings.xml @@ -1698,20 +1698,32 @@ Infurmaziuns d\'annunzia memorisadas + + Pleds-clav memorisads Las infurmaziuns d\'annunzia che ti memoriseschas u sincroniseschas cun %s vegnan mussadas qua. + + Ils pleds-clav che ti memoriseschas en u sincroniseschas cun %s vegnan mussads qua. Tut ils pleds-clav che ti memoriseschas èn criptads. Vegnir a savair dapli davart Sync. + + Vegnir a savair dapli davart la sincronisaziun Excepziuns Las infurmaziuns d\'annunzia ed ils pleds-clav betg memorisads vegnan mussadas qua. + + %s na vegn betg a memorisar pleds-clav per websites inditgadas qua. Las infurmaziuns d\'annunzia ed ils pleds-clav na vegnan betg memorisads per questas paginas. + + %s na vegn betg a memorisar pleds-clav per questas websites. Stizzar tut las excepziuns Tschertgar datas d\'annunzia + + Tschertgar en ils pleds-clav Website @@ -1741,11 +1753,17 @@ Zuppentar il pled-clav Debloccar per vesair las infurmaziuns d\'annunzia memorisadas + + Debloccar per vesair tes pleds-clav memorisads Protegia las infurmaziuns d\'annunzia ed ils pleds-clav + + Protegia tes pleds-clav memorisads Definescha in muster per debloccar l\'apparat, in PIN u in pled-clav per proteger tias infurmaziuns d\'annunzia e tes pleds-clav da persunas che han access a tes apparat. + + Endrizza in muster per bloccar l’apparat, in PIN u pled-clav per evitar ch’ina autra persuna possia acceder a tes pleds-clav memorisads sch’ella ha tes apparat. Pli tard @@ -1764,6 +1782,9 @@ Zavrar il menu da las datas d\'annunzia + + Menu per zavrar ils pleds-clav + Endataziun automatica @@ -1771,10 +1792,16 @@ Adressas Cartas da credit + + Metodas da pajament Emplenir automaticamain las datas da la carta da credit + + Memorisar ed endatar automaticamain las metodas da pajament Las datas èn criptadas + + %s criptescha tut las metodas da pajament che ti memoriseschas Sincronisar las cartas tranter ils apparats @@ -1782,17 +1809,26 @@ Agiuntar ina carta da credit + + Agiuntar ina carta Administrar las cartas memorisadas + + Administrar las cartas Agiuntar ina adressa Administrar las adressas Memorisar ed emplenir automaticamain las adressas + + Memorisar ed endatar automaticamain las adressas Includer infurmaziuns sco numers, adressas dad e-mail ed adressas postalas + + Cuntegna numers da telefon ed adressas dad e-mail + Agiuntar ina carta @@ -1813,6 +1849,8 @@ Stizzar la carta Vuls ti propi stizzar questa carta da credit? + + Stizzar la carta? Stizzar @@ -1827,14 +1865,22 @@ Endatescha per plaschair in numer da carta da credit valid + + Endatescha in numer da carta valid Emplenescha per plaschair quest champ + + Agiuntescha in num Debloccar per vesair tias cartas memorisadas Protegia tias cartas da credit + + Protegia tias metodas da pajament memorisadas Endrizza in muster per bloccar l\'apparat, in PIN u pled-clav per evitar ch\'ina autra persuna possia acceder a tias cartas da credit memorisadas sch\'ella ha tes apparat. + + Endrizza in muster per bloccar l\'apparat, in PIN u pled-clav per evitar ch’ina autra persuna possia acceder a tias metodas da pajament memorisadas sch’ella ha tes apparat. Ussa endrizzar @@ -1845,6 +1891,8 @@ Debloccar per utilisar las datas da cartas da credit memorisadas + + Debloccar per utilisar las metodas da pajament memorisadas Agiuntar ina adressa @@ -1882,6 +1930,8 @@ Vuls ti propi stizzar questa adressa? + + Stizzar questa adressa? Stizzar @@ -1980,6 +2030,8 @@ Modifitgar Vuls ti propi stizzar questa infurmaziun d\'annunzia? + + Vuls ti propi stizzar quest pled-clav? Stizzar @@ -1987,24 +2039,44 @@ Interrumper Opziuns per datas d\'annunzia + + Opziuns da pleds-clav Il champ modifitgabel per l\'adressa web da las datas d\'annunzia. + + Il champ da text modifitgabel per l’adressa da la website. Il champ modifitgabel per il num d\'utilisader da las datas d\'annunzia. + + Il champ da text modifitgabel per il num d’utilisader. Il champ modifitgabel per il pled-clav da las datas d\'annunzia. + + Il champ da text modifitgabel per il pled-clav. Memorisar las midadas da las datas d\'annunzia. + + Memorisar las midadas. Modifitgar + + Modifitgar il pled-clav Agiuntar novas datas d\'annunzia + + Agiuntar in pled-clav Pled-clav obligatoric + + Endatar in pled-clav Num d\'utilisader obligatoric + + Endatar in num d’utilisader Num dal server obligatoric + + Endatar ina adressa web Tschertga vocala @@ -2099,6 +2171,9 @@ Tschertga %s + + + Mida tes navigatur standard Definescha che colliaziuns da websites, e-mails e messadis vegnan averts automaticamain en Firefox. @@ -2354,6 +2429,8 @@ Translatar Translaziun en elavuraziun + + Tscherner ina lingua Igl ha dà in problem cun translatar. Emprova per plaschair anc ina giada. @@ -2374,6 +2451,10 @@ Mai translatar %1$s Mai translatar questa website + + Remplazza tut ils auters parameters + + Remplazza las offertas da translaziun Parameters da translaziun diff --git a/fenix/app/src/main/res/values-tg/strings.xml b/fenix/app/src/main/res/values-tg/strings.xml index 4eaf14fdb39c..4ae0da3cfc30 100644 --- a/fenix/app/src/main/res/values-tg/strings.xml +++ b/fenix/app/src/main/res/values-tg/strings.xml @@ -1715,6 +1715,8 @@ Ниҳонвожаҳои нигоҳдошташуда Воридшавиҳое, ки шумо дар %s нигоҳ медоред ё ҳамоҳанг мекунед, дар ин ҷо нишон дода мешаванд. + + Ниҳонвожаҳоеро, ки шумо нигоҳ медоред ё бо «%s» ҳамоҳанг месозед, дар ин рӯйхат нишон дода мешаванд. Ҳамаи ниҳонвожаҳое, ки шумо нигоҳ медоред, рамзгузорӣ карда мешаванд. Маълумоти бештар дар бораи ҳамоҳангсозӣ @@ -1723,8 +1725,12 @@ Истисноҳо Воридшавиҳо ва ниҳонвожаҳое, ки нигоҳ дошта нашудаанд, дар ин ҷо нишон дошта мешаванд. + + «%s» барои сомонаҳое, ки дар ин рӯйхат нишон дода шудаанд, ниҳонвожаҳоро нигоҳ намедорад. Воридшавиҳо ва ниҳонвожаҳо барои сомонаҳои зерин нигоҳ дошта намешаванд. + + «%s» барои сомонаҳои зерин ниҳонвожаҳоро нигоҳ намедорад. Нест кардани ҳамаи истисноҳо @@ -1759,8 +1765,12 @@ Пинҳон кардани ниҳонвожа Барои дидани воридшавиҳои нигоҳдошташуда, қулфро кушоед + + Барои дидани ниҳонвожаҳои нигоҳдошташуда, қулфро кушоед Воридшавиҳо ва ниҳонвожаҳои худро муҳофизат намоед + + Ниҳонвожаҳои нигоҳдоштаро муҳофизат намоед Барои муҳофизат кардани воридшавиҳо ва ниҳонвожаҳои худ аз дастрасии озод, агар касе дигар аз дастгоҳи шумо истифода барад, шаклвораи қулфи экран, рамзи PIN ё ниҳонвожаеро барои дастгоҳи худ танзим намоед. @@ -1804,14 +1814,20 @@ Илова кардани корти кредитӣ + + Илова кардани корт Идора кардани кортҳои нигоҳдошташуда + + Идоракунии кортҳо Илова кардани нишонӣ Идоракунии нишониҳо Нигоҳ доштан ва ба таври худкор пур кардани нишониҳо + + Нигоҳ доштан ва пур кардани нишониҳо Илова кардани маълумот монанди рақамҳо, нишониҳои почтаи электронӣ ва бурдарасонӣ @@ -1836,6 +1852,8 @@ Нест кардани корт Шумо мутмаин ҳастед, ки мехоҳед ин корти кредитиро нест намоед? + + Кортро нест мекунед? Нест кардан @@ -1851,8 +1869,12 @@ Лутфан, рақами корти кредитии дурустро ворид намоед + + Рақами корти дурустро ворид намоед Лутфан, ин майдонро пур кунед + + Номеро ворид намоед Барои дидани кортҳои нигоҳдошташуда, қулфро кушоед @@ -1905,6 +1927,8 @@ Шумо мутмаин ҳастед, ки мехоҳед ин нишониро нест намоед? + + Ин нишониро нест мекунед? Нест кардан @@ -2002,12 +2026,16 @@ Таҳрир кардан Шумо мутмаин ҳастед, ки мехоҳед ин воридшавиро нест намоед? + + Шумо мутмаин ҳастед, ки мехоҳед ин ниҳонвожаро нест намоед? Нест кардан Бекор кардан Имконоти воридшавӣ + + Инконоти ниҳонвожа Майдони матни таҳриршаванда барои нишонии сомонаи воридшавӣ. @@ -2016,17 +2044,29 @@ Майдони матни таҳриршаванда барои ниҳонвожаи воридшавӣ. Нигоҳ доштани тағйирот барои воридшавӣ + + Тағийротро нигоҳ медорад. Таҳрир кардан + + Таҳрир кардани ниҳонвожа Илова кардани воридшавии нав + + Илова кардани ниҳонвожа Ниҳонвожа лозим аст + + Ниҳонвожаеро ворид намоед Номи корбар лозим аст + + Номи корбареро ворид намоед Номи сервер лозим аст + + Нишонии сомонаеро ворид намоед Ҷустуҷӯи овозӣ @@ -2123,6 +2163,9 @@ Ҷустуҷӯ дар «%s» + + Гузоштан ба браузери пешфарзи худ + Пайвандҳоеро, танзим кунед, то ки онҳо аз сомонаҳо, почтаи электронӣ ва паёмҳо дар браузери «Firefox» ба таври худкор кушода шаванд. @@ -2380,6 +2423,8 @@ Дар ҳоли тарҷума қарор дорад + + Забонеро интихоб кунед Ҳангоми тарҷума мушкилие ба миён омад. Лутфан, аз нав кӯшиш кунед. @@ -2401,6 +2446,10 @@ %1$s ҳеҷ вақт тарҷума карда нашавад Ин сомона ҳеҷ гоҳ тарҷума карда нашавад + + Ҳамаи танзимоти дигарро иваз мекунад + + Пешниҳодҳоро барои тарҷума иваз мекунад Танзимоти сомона diff --git a/fenix/app/src/main/res/values-tr/strings.xml b/fenix/app/src/main/res/values-tr/strings.xml index 927f22503d6f..c273ae92ea24 100644 --- a/fenix/app/src/main/res/values-tr/strings.xml +++ b/fenix/app/src/main/res/values-tr/strings.xml @@ -2177,6 +2177,9 @@ %s araması + + Varsayılan tarayıcınızı değiştirin + Web siteleri, e-postalar ve mesajlardaki bağlantılar otomatik olarak Firefox’ta açılsın. diff --git a/focus-android/app/src/main/res/values-eo/strings.xml b/focus-android/app/src/main/res/values-eo/strings.xml index 422afe3c34bd..66c8d9dc1735 100644 --- a/focus-android/app/src/main/res/values-eo/strings.xml +++ b/focus-android/app/src/main/res/values-eo/strings.xml @@ -54,7 +54,6 @@ Forigi el ŝparvojoj - Novaĵoj Agordoj Pri Helpo @@ -85,10 +84,9 @@ sharing an URL. --> Dividi per - + Ĉu viŝi retuman historion? + Tuŝetu aŭ viŝu tiun ĉi sciigon por sekure viŝi vian retuman historion. + Forviŝi retuman historion diff --git a/focus-android/app/src/main/res/values-pl/strings.xml b/focus-android/app/src/main/res/values-pl/strings.xml index ed2d1f76fae7..28c036d45641 100644 --- a/focus-android/app/src/main/res/values-pl/strings.xml +++ b/focus-android/app/src/main/res/values-pl/strings.xml @@ -53,7 +53,6 @@ Usuń ze skrótów - Co nowego Ustawienia O programie Pomoc @@ -84,10 +83,9 @@ sharing an URL. --> Udostępnij przez - + Usunąć historię przeglądania? + Stuknij lub wyczyść to powiadomienie, aby bezpiecznie usunąć historię przeglądania. + Usuń historię przeglądania @@ -290,7 +288,7 @@ Blokowanie śledzących reklam Niektóre reklamy (nawet niekliknięte) śledzą odwiedziny zawierających je stron Blokowanie śledzących statystyk - Używane do zbierania, analizowania i mierzenia działań użytkownika, takich jak kliknięcia i przewijanie + Używane do zbierania, analizowania i mierzenia działań użytkownika, takich jak stuknięcia i przewijanie Blokowanie śledzących społecznościowych Osadzane na stronach, aby śledzić ich odwiedziny i dodawać np. przyciski udostępniania Blokowanie pozostałych śledzących From d22515b8d250c05f81b65a717bc2f0e35834e6a0 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Mon, 12 Feb 2024 00:48:31 +0000 Subject: [PATCH 15/51] Update GeckoView (Nightly) to 124.0.20240211213657. --- android-components/plugins/dependencies/src/main/java/Gecko.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/Gecko.kt b/android-components/plugins/dependencies/src/main/java/Gecko.kt index 6151e8e4691c..1d336b896ce4 100644 --- a/android-components/plugins/dependencies/src/main/java/Gecko.kt +++ b/android-components/plugins/dependencies/src/main/java/Gecko.kt @@ -9,7 +9,7 @@ object Gecko { /** * GeckoView Version. */ - const val version = "124.0.20240211090343" + const val version = "124.0.20240211213657" /** * GeckoView channel From 3e2edae7de1ca04a3a2a11c73fda5fc366948d88 Mon Sep 17 00:00:00 2001 From: iorgamgabriel Date: Tue, 6 Feb 2024 15:06:58 +0200 Subject: [PATCH 16/51] Bug 1876140 - Translations UI Dropdown Checkmark --- .../java/org/mozilla/fenix/compose/Menu.kt | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/fenix/app/src/main/java/org/mozilla/fenix/compose/Menu.kt b/fenix/app/src/main/java/org/mozilla/fenix/compose/Menu.kt index 68acd450bef8..2d1d5cbe148b 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/compose/Menu.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/compose/Menu.kt @@ -6,11 +6,15 @@ package org.mozilla.fenix.compose import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.DropdownMenu import androidx.compose.material.DropdownMenuItem +import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable @@ -24,8 +28,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp +import org.mozilla.fenix.R import org.mozilla.fenix.compose.annotation.LightDarkPreview import org.mozilla.fenix.compose.button.PrimaryButton import org.mozilla.fenix.theme.FirefoxTheme @@ -62,14 +69,51 @@ private fun Menu( .background(color = FirefoxTheme.colors.layer2) .then(modifier), ) { + val hasCheckedItems = menuItems.any { it.isChecked } + for (item in menuItems) { + val checkmarkModifier = if (hasCheckedItems) { + Modifier.selectable( + selected = item.isChecked, + role = Role.Button, + onClick = { + onDismissRequest() + item.onClick() + }, + ) + } else { + Modifier + } + DropdownMenuItem( - modifier = Modifier.testTag(item.testTag), + modifier = Modifier + .testTag(item.testTag) + .align(alignment = Alignment.CenterHorizontally) + .then(checkmarkModifier), onClick = { onDismissRequest() item.onClick() }, ) { + if (hasCheckedItems) { + if (item.isChecked) { + Icon( + painter = painterResource(id = R.drawable.mozac_ic_checkmark_24), + modifier = Modifier + .size(24.dp), + contentDescription = null, + tint = FirefoxTheme.colors.iconPrimary, + ) + } else { + Spacer( + modifier = Modifier + .size(24.dp), + ) + } + + Spacer(modifier = Modifier.width(12.dp)) + } + Text( text = item.title, color = item.color ?: FirefoxTheme.colors.textPrimary, @@ -117,12 +161,14 @@ fun ContextualMenu( * * @property title Text the item should display. * @property color Color used to display the text. + * @property isChecked Whether a checkmark should appear next to the text. * @property testTag Tag used to identify the item in automated tests. * @property onClick Callback to be called when the item is clicked. */ data class MenuItem( val title: String, val color: Color? = null, + val isChecked: Boolean = false, val testTag: String = "", val onClick: () -> Unit, ) From cd5b5497c88e2a703f7a8734315d705de5dc472b Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 11:02:40 +0200 Subject: [PATCH 17/51] Bug 1816066 - Fix verifyMultipleLoginsSelectionsTest UI test --- .../java/org/mozilla/fenix/helpers/TestAssetHelper.kt | 1 + .../java/org/mozilla/fenix/helpers/TestHelper.kt | 7 +++++++ .../androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt index d638e762f634..fb90e772f380 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestAssetHelper.kt @@ -17,6 +17,7 @@ object TestAssetHelper { val waitingTime: Long = TimeUnit.SECONDS.toMillis(15) val waitingTimeLong = TimeUnit.SECONDS.toMillis(25) val waitingTimeShort: Long = TimeUnit.SECONDS.toMillis(3) + val waitingTimeVeryShort: Long = TimeUnit.SECONDS.toMillis(1) data class TestAsset(val url: Uri, val content: String, val title: String) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt index a1f415a5cfc4..2a06b0990458 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt @@ -39,6 +39,7 @@ import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeShort +import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeVeryShort import org.mozilla.fenix.helpers.ext.waitNotNull import org.mozilla.fenix.ui.robots.clickPageObject @@ -142,4 +143,10 @@ object TestHelper { assertFalse("Light theme not selected", expected) fun verifyDarkThemeApplied(expected: Boolean) = assertTrue("Dark theme not selected", expected) + + fun waitForAppWindowToBeUpdated() { + Log.i(TAG, "waitForAppWindowToBeUpdated: Waiting for $waitingTimeVeryShort ms for $packageName window to be updated") + mDevice.waitForWindowUpdate(packageName, waitingTimeVeryShort) + Log.i(TAG, "waitForAppWindowToBeUpdated: Waited for $waitingTimeVeryShort ms for $packageName window to be updated") + } } diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt index a725fd33dbb9..3dcdd96cdf4b 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt @@ -28,6 +28,7 @@ import org.mozilla.fenix.helpers.TestHelper.packageName import org.mozilla.fenix.helpers.TestHelper.restartApp import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText +import org.mozilla.fenix.helpers.TestHelper.waitForAppWindowToBeUpdated import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.clearTextFieldItem import org.mozilla.fenix.ui.robots.clickPageObject @@ -260,12 +261,16 @@ class LoginsTest { navigationToolbar { }.enterURLAndEnterToBrowser(loginPage.toUri()) { setPageObjectText(itemWithResId("username"), firstUser) + waitForAppWindowToBeUpdated() setPageObjectText(itemWithResId("password"), firstPass) + waitForAppWindowToBeUpdated() clickPageObject(itemWithResId("submit")) verifySaveLoginPromptIsDisplayed() clickPageObject(itemWithText("Save")) setPageObjectText(itemWithResId("username"), secondUser) + waitForAppWindowToBeUpdated() setPageObjectText(itemWithResId("password"), secondPass) + waitForAppWindowToBeUpdated() clickPageObject(itemWithResId("submit")) verifySaveLoginPromptIsDisplayed() clickPageObject(itemWithText("Save")) From 97fd5abb21c87f8856afcd657ba9014ac538f260 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Thu, 18 Jan 2024 15:51:53 -0700 Subject: [PATCH 18/51] Bug 1875379 - Update Private notification description text --- .../org/mozilla/focus/session/SessionNotificationService.kt | 2 +- focus-android/app/src/main/res/values/strings.xml | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/focus-android/app/src/main/java/org/mozilla/focus/session/SessionNotificationService.kt b/focus-android/app/src/main/java/org/mozilla/focus/session/SessionNotificationService.kt index 875ec3b03635..0360d3017929 100644 --- a/focus-android/app/src/main/java/org/mozilla/focus/session/SessionNotificationService.kt +++ b/focus-android/app/src/main/java/org/mozilla/focus/session/SessionNotificationService.kt @@ -108,7 +108,7 @@ class SessionNotificationService : Service() { } val contentText = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { - getString(R.string.notification_erase_text_android_14) + getString(R.string.notification_erase_text_android_14_1) } else { getString(R.string.notification_erase_text) } diff --git a/focus-android/app/src/main/res/values/strings.xml b/focus-android/app/src/main/res/values/strings.xml index fb0275eb5397..20aa1234291f 100644 --- a/focus-android/app/src/main/res/values/strings.xml +++ b/focus-android/app/src/main/res/values/strings.xml @@ -86,7 +86,11 @@ Share via Erase browsing history? - Tap or clear this notification to securely erase your browsing history. + Tap or clear this notification to securely erase your browsing history. + + + Tap or swipe this notification to securely erase your browsing history. Erase browsing history From 09592e559a82cd366243455624038ed3f8a3858d Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Wed, 26 Jul 2023 14:56:25 +0300 Subject: [PATCH 19/51] Bug 1845496 - Upgrade Kotlin and compose compiler. Also upgrade Kotlin related libraries: coroutines, serialisation and ksp. upgrade --- .../dependencies/src/main/java/DependenciesPlugin.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt index 44340909cd8d..878bea815397 100644 --- a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt +++ b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt @@ -14,9 +14,9 @@ class DependenciesPlugin : Plugin { // Synchronized version numbers for dependencies used by (some) modules object Versions { - const val kotlin = "1.8.22" - const val coroutines = "1.7.2" - const val serialization = "1.5.1" + const val kotlin = "1.9.22" + const val coroutines = "1.7.3" + const val serialization = "1.6.0" const val python_envs_plugin = "0.0.31" const val junit = "4.13.2" @@ -47,13 +47,13 @@ object Versions { const val mozilla_glean = "56.1.0" const val material = "1.9.0" - const val ksp = "1.0.11" + const val ksp = "1.0.17" val ksp_plugin = "$kotlin-$ksp" // see https://android-developers.googleblog.com/2022/06/independent-versioning-of-Jetpack-Compose-libraries.html // for Jetpack Compose libraries versioning const val compose_version = "1.5.4" - const val compose_compiler = "1.4.8" + const val compose_compiler = "1.5.8" object AndroidX { const val activityCompose = "1.7.2" From 13ee3dfb4fdf9a9fb97d8ffdfecf2d8e547f158f Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Thu, 10 Aug 2023 18:51:42 +0300 Subject: [PATCH 20/51] Bug 1847999 - Upgrade Room to latest version. --- .../plugins/dependencies/src/main/java/DependenciesPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt index 878bea815397..18dcb3366171 100644 --- a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt +++ b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt @@ -74,7 +74,7 @@ object Versions { const val test_ext = "1.1.5" const val test_runner = "1.5.2" const val espresso = "3.5.1" - const val room = "2.5.2" + const val room = "2.6.1" const val savedstate = "1.2.1" const val paging = "3.2.1" const val palette = "1.0.0" From 433bd7adbd35207595b4e884ef8ebcff0ab18b6b Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Thu, 10 Aug 2023 18:53:03 +0300 Subject: [PATCH 21/51] Bug 1847999 - Switch to generating Kotlin code for Room. --- android-components/components/feature/addons/build.gradle | 1 + android-components/components/feature/containers/build.gradle | 1 + android-components/components/feature/downloads/build.gradle | 1 + android-components/components/feature/logins/build.gradle | 1 + android-components/components/feature/pwa/build.gradle | 1 + .../components/feature/recentlyclosed/build.gradle | 1 + android-components/components/feature/share/build.gradle | 1 + .../components/feature/sitepermissions/build.gradle | 1 + .../components/feature/tab-collections/build.gradle | 1 + android-components/components/feature/top-sites/build.gradle | 1 + android-components/components/service/pocket/build.gradle | 1 + 11 files changed, 11 insertions(+) diff --git a/android-components/components/feature/addons/build.gradle b/android-components/components/feature/addons/build.gradle index 48dacf68b8b9..b6bd5641cd3b 100644 --- a/android-components/components/feature/addons/build.gradle +++ b/android-components/components/feature/addons/build.gradle @@ -18,6 +18,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/feature/containers/build.gradle b/android-components/components/feature/containers/build.gradle index f035e5dc27bf..9ebb3289dbd5 100644 --- a/android-components/components/feature/containers/build.gradle +++ b/android-components/components/feature/containers/build.gradle @@ -15,6 +15,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/feature/downloads/build.gradle b/android-components/components/feature/downloads/build.gradle index 4519d283ee72..1072c051b14f 100644 --- a/android-components/components/feature/downloads/build.gradle +++ b/android-components/components/feature/downloads/build.gradle @@ -19,6 +19,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } } diff --git a/android-components/components/feature/logins/build.gradle b/android-components/components/feature/logins/build.gradle index 9e3cb034301d..fd4febbe3264 100644 --- a/android-components/components/feature/logins/build.gradle +++ b/android-components/components/feature/logins/build.gradle @@ -15,6 +15,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } } diff --git a/android-components/components/feature/pwa/build.gradle b/android-components/components/feature/pwa/build.gradle index 0920617b1486..5d8b90b313fe 100644 --- a/android-components/components/feature/pwa/build.gradle +++ b/android-components/components/feature/pwa/build.gradle @@ -17,6 +17,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/feature/recentlyclosed/build.gradle b/android-components/components/feature/recentlyclosed/build.gradle index 8258b9471420..586afb1edc84 100644 --- a/android-components/components/feature/recentlyclosed/build.gradle +++ b/android-components/components/feature/recentlyclosed/build.gradle @@ -15,6 +15,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/feature/share/build.gradle b/android-components/components/feature/share/build.gradle index 103693cc6b99..a44df774e16c 100644 --- a/android-components/components/feature/share/build.gradle +++ b/android-components/components/feature/share/build.gradle @@ -15,6 +15,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/feature/sitepermissions/build.gradle b/android-components/components/feature/sitepermissions/build.gradle index 0215b84542cf..06fa58246b87 100644 --- a/android-components/components/feature/sitepermissions/build.gradle +++ b/android-components/components/feature/sitepermissions/build.gradle @@ -19,6 +19,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/feature/tab-collections/build.gradle b/android-components/components/feature/tab-collections/build.gradle index 9ad2d6f74384..74cd5c76b720 100644 --- a/android-components/components/feature/tab-collections/build.gradle +++ b/android-components/components/feature/tab-collections/build.gradle @@ -15,6 +15,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/feature/top-sites/build.gradle b/android-components/components/feature/top-sites/build.gradle index 0dbac23deef4..236137605152 100644 --- a/android-components/components/feature/top-sites/build.gradle +++ b/android-components/components/feature/top-sites/build.gradle @@ -15,6 +15,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } javaCompileOptions { diff --git a/android-components/components/service/pocket/build.gradle b/android-components/components/service/pocket/build.gradle index 416ddaf8741f..2835723a988b 100644 --- a/android-components/components/service/pocket/build.gradle +++ b/android-components/components/service/pocket/build.gradle @@ -15,6 +15,7 @@ android { ksp { arg("room.schemaLocation", "$projectDir/schemas".toString()) + arg("room.generateKotlin", "true") } } From cadfde47b4a9729734b06fa9331ce62cc7edc2b5 Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Thu, 10 Aug 2023 18:58:30 +0300 Subject: [PATCH 22/51] Bug 1847999 - Rename param to match supertype. The supertype param was changed in Room 2.6.0 --- .../feature/downloads/db/DownloadsDatabase.kt | 18 ++++---- .../feature/pwa/db/ManifestDatabase.kt | 18 ++++---- .../feature/share/db/RecentAppsDatabase.kt | 6 +-- .../db/SitePermissionsDatabase.kt | 46 +++++++++---------- .../feature/top/sites/db/TopSiteDatabase.kt | 18 ++++---- .../db/PocketRecommendationsDatabase.kt | 32 ++++++------- 6 files changed, 69 insertions(+), 69 deletions(-) diff --git a/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/db/DownloadsDatabase.kt b/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/db/DownloadsDatabase.kt index 16405ef2c67f..9adabfe9cdb1 100644 --- a/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/db/DownloadsDatabase.kt +++ b/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/db/DownloadsDatabase.kt @@ -48,29 +48,29 @@ internal abstract class DownloadsDatabase : RoomDatabase() { @Suppress("MaxLineLength", "MagicNumber") internal object Migrations { val migration_1_2 = object : Migration(1, 2) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL( + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL( "ALTER TABLE downloads ADD COLUMN is_private INTEGER NOT NULL DEFAULT 0", ) } } val migration_2_3 = object : Migration(2, 3) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Create a temporal table - database.execSQL("CREATE TABLE temp_downloads (`id` TEXT NOT NULL, `url` TEXT NOT NULL, `file_name` TEXT, `content_type` TEXT, `content_length` INTEGER, `status` INTEGER NOT NULL, `destination_directory` TEXT NOT NULL, `created_at` INTEGER NOT NULL, PRIMARY KEY(`id`))") + db.execSQL("CREATE TABLE temp_downloads (`id` TEXT NOT NULL, `url` TEXT NOT NULL, `file_name` TEXT, `content_type` TEXT, `content_length` INTEGER, `status` INTEGER NOT NULL, `destination_directory` TEXT NOT NULL, `created_at` INTEGER NOT NULL, PRIMARY KEY(`id`))") // Copy the data - database.execSQL("INSERT INTO temp_downloads (id,url,file_name,content_type,content_length,status,destination_directory,created_at) SELECT id,url,file_name,content_type,content_length,status,destination_directory,created_at FROM downloads where is_private = 0") + db.execSQL("INSERT INTO temp_downloads (id,url,file_name,content_type,content_length,status,destination_directory,created_at) SELECT id,url,file_name,content_type,content_length,status,destination_directory,created_at FROM downloads where is_private = 0") // Remove the old table - database.execSQL("DROP TABLE downloads") + db.execSQL("DROP TABLE downloads") // Rename the table name to the correct one - database.execSQL("ALTER TABLE temp_downloads RENAME TO downloads") + db.execSQL("ALTER TABLE temp_downloads RENAME TO downloads") } } val migration_3_4 = object : Migration(3, 4) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Clear any data urls. - database.execSQL("UPDATE downloads SET url='' WHERE url LIKE 'data:%' ") + db.execSQL("UPDATE downloads SET url='' WHERE url LIKE 'data:%' ") } } } diff --git a/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/db/ManifestDatabase.kt b/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/db/ManifestDatabase.kt index f47670c876b7..fdf36d57346b 100644 --- a/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/db/ManifestDatabase.kt +++ b/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/db/ManifestDatabase.kt @@ -27,28 +27,28 @@ internal abstract class ManifestDatabase : RoomDatabase() { @VisibleForTesting internal val MIGRATION_1_2: Migration = object : Migration(1, 2) { - override fun migrate(database: SupportSQLiteDatabase) { - val cursor = database.query("SELECT * FROM manifests LIMIT 0,1") + override fun migrate(db: SupportSQLiteDatabase) { + val cursor = db.query("SELECT * FROM manifests LIMIT 0,1") if (cursor.getColumnIndex("used_at") < 0) { - database.execSQL("ALTER TABLE manifests ADD COLUMN used_at INTEGER NOT NULL DEFAULT 0") + db.execSQL("ALTER TABLE manifests ADD COLUMN used_at INTEGER NOT NULL DEFAULT 0") } if (cursor.getColumnIndex("scope") < 0) { - database.execSQL("ALTER TABLE manifests ADD COLUMN scope TEXT") + db.execSQL("ALTER TABLE manifests ADD COLUMN scope TEXT") } - database.execSQL("CREATE INDEX IF NOT EXISTS index_manifests_scope ON manifests (scope)") - database.execSQL("UPDATE manifests SET used_at = updated_at WHERE used_at = 0") + db.execSQL("CREATE INDEX IF NOT EXISTS index_manifests_scope ON manifests (scope)") + db.execSQL("UPDATE manifests SET used_at = updated_at WHERE used_at = 0") } } @VisibleForTesting internal val MIGRATION_2_3: Migration = object : Migration(2, 3) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("ALTER TABLE manifests ADD COLUMN has_share_targets INTEGER NOT NULL DEFAULT 0") + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL("ALTER TABLE manifests ADD COLUMN has_share_targets INTEGER NOT NULL DEFAULT 0") - database.execSQL( + db.execSQL( "CREATE INDEX IF NOT EXISTS index_manifests_has_share_targets ON manifests (has_share_targets)", ) } diff --git a/android-components/components/feature/share/src/main/java/mozilla/components/feature/share/db/RecentAppsDatabase.kt b/android-components/components/feature/share/src/main/java/mozilla/components/feature/share/db/RecentAppsDatabase.kt index bf648220a4fc..d554bd320986 100644 --- a/android-components/components/feature/share/src/main/java/mozilla/components/feature/share/db/RecentAppsDatabase.kt +++ b/android-components/components/feature/share/src/main/java/mozilla/components/feature/share/db/RecentAppsDatabase.kt @@ -45,9 +45,9 @@ internal abstract class RecentAppsDatabase : RoomDatabase() { internal object Migrations { val migration_1_2 = object : Migration(1, 2) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL("DROP TABLE RECENT_APPS_TABLE") - database.execSQL( + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL("DROP TABLE RECENT_APPS_TABLE") + db.execSQL( "CREATE TABLE IF NOT EXISTS " + RECENT_APPS_TABLE + "(" + "`activityName` TEXT NOT NULL, " + diff --git a/android-components/components/feature/sitepermissions/src/main/java/mozilla/components/feature/sitepermissions/db/SitePermissionsDatabase.kt b/android-components/components/feature/sitepermissions/src/main/java/mozilla/components/feature/sitepermissions/db/SitePermissionsDatabase.kt index ab474c763353..bdf82b53e53a 100644 --- a/android-components/components/feature/sitepermissions/src/main/java/mozilla/components/feature/sitepermissions/db/SitePermissionsDatabase.kt +++ b/android-components/components/feature/sitepermissions/src/main/java/mozilla/components/feature/sitepermissions/db/SitePermissionsDatabase.kt @@ -82,12 +82,12 @@ internal class StatusConverter { internal object Migrations { val migration_1_2 = object : Migration(1, 2) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Version 1 is used in Nightly builds of Fenix, but not in production. Let's just skip actually migrating // anything and let's re-create the "site_permissions" table. - database.execSQL("DROP TABLE site_permissions") - database.execSQL( + db.execSQL("DROP TABLE site_permissions") + db.execSQL( "CREATE TABLE IF NOT EXISTS `site_permissions` (" + "`origin` TEXT NOT NULL, " + "`location` INTEGER NOT NULL, " + @@ -104,19 +104,19 @@ internal object Migrations { @Suppress("MagicNumber") val migration_2_3 = object : Migration(2, 3) { - override fun migrate(database: SupportSQLiteDatabase) { - val haveAutoPlayColumns = database.query("SELECT * FROM site_permissions").columnCount == 10 + override fun migrate(db: SupportSQLiteDatabase) { + val haveAutoPlayColumns = db.query("SELECT * FROM site_permissions").columnCount == 10 // We just want to apply this migration for user that do not have // the new autoplay fields autoplay_audible and autoplay_inaudible if (!haveAutoPlayColumns) { - database.execSQL( + db.execSQL( "ALTER TABLE site_permissions ADD COLUMN autoplay_audible INTEGER NOT NULL DEFAULT ''", ) - database.execSQL( + db.execSQL( "ALTER TABLE site_permissions ADD COLUMN autoplay_inaudible INTEGER NOT NULL DEFAULT ''", ) - database.execSQL( + db.execSQL( " UPDATE site_permissions" + " SET autoplay_audible = -1, " + // BLOCKED by default " `autoplay_inaudible` = 1", // ALLOWED by default @@ -127,33 +127,33 @@ internal object Migrations { @Suppress("MagicNumber") val migration_3_4 = object : Migration(3, 4) { - override fun migrate(database: SupportSQLiteDatabase) { - val hasEmeColumn = database.query("SELECT * FROM site_permissions").columnCount == 11 + override fun migrate(db: SupportSQLiteDatabase) { + val hasEmeColumn = db.query("SELECT * FROM site_permissions").columnCount == 11 if (!hasEmeColumn) { - database.execSQL( + db.execSQL( "ALTER TABLE site_permissions ADD COLUMN media_key_system_access INTEGER NOT NULL DEFAULT 0", ) // default is NO_DECISION - database.execSQL("UPDATE site_permissions SET media_key_system_access = 0") + db.execSQL("UPDATE site_permissions SET media_key_system_access = 0") } } } @Suppress("MagicNumber") val migration_4_5 = object : Migration(4, 5) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Updating any previous autoplay sites with 0 (NO_DECISION) with the supported values // Autoplay permission doesn't support 0 (NO_DECISION), // it only supports 1 (ALLOWED) or -1 (BLOCKED) - database.execSQL("UPDATE site_permissions SET autoplay_audible = -1 WHERE autoplay_audible = 0 ") - database.execSQL("UPDATE site_permissions SET autoplay_inaudible = 1 WHERE autoplay_inaudible = 0 ") + db.execSQL("UPDATE site_permissions SET autoplay_audible = -1 WHERE autoplay_audible = 0 ") + db.execSQL("UPDATE site_permissions SET autoplay_inaudible = 1 WHERE autoplay_inaudible = 0 ") } } @Suppress("MagicNumber") val migration_5_6 = object : Migration(5, 6) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL( + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL( "UPDATE site_permissions SET origin = 'https://'||origin||':443'", ) } @@ -161,12 +161,12 @@ internal object Migrations { @Suppress("MagicNumber") val migration_6_7 = object : Migration(6, 7) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Update any site with our previous default value (block audio and video) to block audio only. // autoplay_audible BLOCKED (-1) and autoplay_inaudible BLOCKED (-1) to // autoplay_audible BLOCKED (-1) and autoplay_inaudible ALLOWED (1) // This match the default value of desktop block audio only. - database.execSQL( + db.execSQL( "UPDATE site_permissions SET autoplay_audible = -1, autoplay_inaudible= 1 " + "WHERE autoplay_audible = -1 AND autoplay_inaudible = -1", ) @@ -175,14 +175,14 @@ internal object Migrations { @Suppress("MagicNumber") val migration_7_8 = object : Migration(7, 8) { - override fun migrate(database: SupportSQLiteDatabase) { - val hasCrossOriginStorageAccessColumn = database.query("SELECT * FROM site_permissions").columnCount == 12 + override fun migrate(db: SupportSQLiteDatabase) { + val hasCrossOriginStorageAccessColumn = db.query("SELECT * FROM site_permissions").columnCount == 12 if (!hasCrossOriginStorageAccessColumn) { - database.execSQL( + db.execSQL( "ALTER TABLE site_permissions ADD COLUMN cross_origin_storage_access INTEGER NOT NULL DEFAULT 0", ) // default is NO_DECISION - database.execSQL("UPDATE site_permissions SET cross_origin_storage_access = 0") + db.execSQL("UPDATE site_permissions SET cross_origin_storage_access = 0") } } } diff --git a/android-components/components/feature/top-sites/src/main/java/mozilla/components/feature/top/sites/db/TopSiteDatabase.kt b/android-components/components/feature/top-sites/src/main/java/mozilla/components/feature/top/sites/db/TopSiteDatabase.kt index 78202bcf6097..59aa469f5463 100644 --- a/android-components/components/feature/top-sites/src/main/java/mozilla/components/feature/top/sites/db/TopSiteDatabase.kt +++ b/android-components/components/feature/top-sites/src/main/java/mozilla/components/feature/top/sites/db/TopSiteDatabase.kt @@ -43,15 +43,15 @@ internal abstract class TopSiteDatabase : RoomDatabase() { internal object Migrations { val migration_1_2 = object : Migration(1, 2) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Add the new is_default column and set is_default to 0 (false) for every entry. - database.execSQL( + db.execSQL( "ALTER TABLE top_sites ADD COLUMN is_default INTEGER NOT NULL DEFAULT 0", ) // Prior to version 2, pocket top sites, wikipedia and youtube were added as default // sites in Fenix. Look for these entries and set is_default to 1 (true). - database.execSQL( + db.execSQL( "UPDATE top_sites " + "SET is_default = 1 " + "WHERE url IN " + @@ -64,9 +64,9 @@ internal object Migrations { @Suppress("MagicNumber") val migration_2_3 = object : Migration(2, 3) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Create a temporary top sites table of version 1. - database.execSQL( + db.execSQL( "CREATE TABLE IF NOT EXISTS `top_sites_temp` (" + "`id` INTEGER PRIMARY KEY AUTOINCREMENT, " + "`title` TEXT NOT NULL, " + @@ -76,25 +76,25 @@ internal object Migrations { ) // Insert every entry from the old table into the temporary top sites table. - database.execSQL( + db.execSQL( "INSERT INTO top_sites_temp (title, url, created_at, is_default) " + "SELECT title, url, created_at, 0 FROM top_sites", ) // Assume there are consumers of version 2 with the mismatched isDefault and is_default // column name. Drop the old table. - database.execSQL( + db.execSQL( "DROP TABLE top_sites", ) // Rename the temporary table to top_sites. - database.execSQL( + db.execSQL( "ALTER TABLE top_sites_temp RENAME TO top_sites", ) // Prior to version 2, pocket top sites, wikipedia and youtube were added as default // sites in Fenix. Look for these entries and set isDefault to 1 (true). - database.execSQL( + db.execSQL( "UPDATE top_sites " + "SET is_default = 1 " + "WHERE url IN " + diff --git a/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabase.kt b/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabase.kt index 7f37091d5d2b..5a3e4f0efee4 100644 --- a/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabase.kt +++ b/android-components/components/service/pocket/src/main/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabase.kt @@ -62,8 +62,8 @@ internal abstract class PocketRecommendationsDatabase : RoomDatabase() { internal object Migrations { val migration_1_2 = object : Migration(1, 2) { - override fun migrate(database: SupportSQLiteDatabase) { - database.execSQL( + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL( "CREATE TABLE IF NOT EXISTS " + "`${PocketRecommendationsDatabase.TABLE_NAME_SPOCS}` (" + "`url` TEXT NOT NULL, " + @@ -82,15 +82,15 @@ internal object Migrations { * Migration for when adding support for pacing sponsored stories. */ val migration_2_3 = object : Migration(2, 3) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // There are many new columns added. Drop the old table allowing to start fresh. // This migration is expected to only be needed in debug builds // with the feature not being live in any Fenix release. - database.execSQL( + db.execSQL( "DROP TABLE ${PocketRecommendationsDatabase.TABLE_NAME_SPOCS}", ) - database.createNewSpocsTables() + db.createNewSpocsTables() } } @@ -98,8 +98,8 @@ internal object Migrations { * Migration for when adding sponsored stories along with pacing support. */ val migration_1_3 = object : Migration(1, 3) { - override fun migrate(database: SupportSQLiteDatabase) { - database.createNewSpocsTables() + override fun migrate(db: SupportSQLiteDatabase) { + db.createNewSpocsTables() } } @@ -107,26 +107,26 @@ internal object Migrations { * Migration for when adding a new index to the spoc impression entity. */ val migration_3_4 = object : Migration(3, 4) { - override fun migrate(database: SupportSQLiteDatabase) { + override fun migrate(db: SupportSQLiteDatabase) { // Rename the old tables to allow creating new ones - database.execSQL( + db.execSQL( "ALTER TABLE `${PocketRecommendationsDatabase.TABLE_NAME_SPOCS}` " + "RENAME TO temp_spocs", ) - database.execSQL( + db.execSQL( "ALTER TABLE `${PocketRecommendationsDatabase.TABLE_NAME_SPOCS_IMPRESSIONS}` " + "RENAME TO temp_spocs_impressions", ) // Create new tables with the new schema - database.createNewSpocsTables() - database.execSQL( + db.createNewSpocsTables() + db.execSQL( "CREATE INDEX IF NOT EXISTS `index_spocs_impressions_spocId` " + "ON `${PocketRecommendationsDatabase.TABLE_NAME_SPOCS_IMPRESSIONS}` (`spocId`)", ) // Copy the old data to the new tables - database.execSQL( + db.execSQL( "INSERT INTO " + "'${PocketRecommendationsDatabase.TABLE_NAME_SPOCS}' (" + "id, url, title, imageUrl, sponsor, clickShim, impressionShim, " + @@ -136,7 +136,7 @@ internal object Migrations { "priority, lifetimeCapCount, flightCapCount, flightCapPeriod " + "FROM temp_spocs", ) - database.execSQL( + db.execSQL( "INSERT INTO " + "'${PocketRecommendationsDatabase.TABLE_NAME_SPOCS_IMPRESSIONS}' (" + "spocId, impressionId, impressionDateInSeconds" + @@ -146,8 +146,8 @@ internal object Migrations { ) // Cleanup - database.execSQL("DROP TABLE temp_spocs") - database.execSQL("DROP TABLE temp_spocs_impressions") + db.execSQL("DROP TABLE temp_spocs") + db.execSQL("DROP TABLE temp_spocs_impressions") } } From ad0a5144729b4f9823814681e6555b2df0f55666 Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Thu, 10 Aug 2023 20:40:46 +0300 Subject: [PATCH 23/51] Bug 1847999 - Switch to using non-deprecated constructor for MigrationTestHelper. --- .../feature/downloads/OnDeviceDownloadStorageTest.kt | 5 +---- .../components/feature/logins/LoginExceptionStorageTest.kt | 5 +---- .../feature/pwa/db/ManifestDatabaseMigrationTest.kt | 5 +---- .../sitepermissions/db/OnDeviceSitePermissionsStorageTest.kt | 5 +---- .../feature/top/sites/OnDevicePinnedSitesStorageTest.kt | 5 +---- .../pocket/stories/db/PocketRecommendationsDatabaseTest.kt | 5 +---- 6 files changed, 6 insertions(+), 24 deletions(-) diff --git a/android-components/components/feature/downloads/src/androidTest/java/mozilla/components/feature/downloads/OnDeviceDownloadStorageTest.kt b/android-components/components/feature/downloads/src/androidTest/java/mozilla/components/feature/downloads/OnDeviceDownloadStorageTest.kt index bcfd2577f2ed..e7c689b4f032 100644 --- a/android-components/components/feature/downloads/src/androidTest/java/mozilla/components/feature/downloads/OnDeviceDownloadStorageTest.kt +++ b/android-components/components/feature/downloads/src/androidTest/java/mozilla/components/feature/downloads/OnDeviceDownloadStorageTest.kt @@ -7,7 +7,6 @@ package mozilla.components.feature.downloads import android.content.Context import androidx.room.Room import androidx.room.testing.MigrationTestHelper -import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.core.app.ApplicationProvider import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -32,11 +31,9 @@ class OnDeviceDownloadStorageTest { private lateinit var database: DownloadsDatabase @get:Rule - @Suppress("DEPRECATION") val helper: MigrationTestHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), - DownloadsDatabase::class.java.canonicalName, - FrameworkSQLiteOpenHelperFactory(), + DownloadsDatabase::class.java, ) @Before diff --git a/android-components/components/feature/logins/src/androidTest/java/mozilla/components/feature/logins/LoginExceptionStorageTest.kt b/android-components/components/feature/logins/src/androidTest/java/mozilla/components/feature/logins/LoginExceptionStorageTest.kt index 6ee5a3566b70..749ee0b82f15 100644 --- a/android-components/components/feature/logins/src/androidTest/java/mozilla/components/feature/logins/LoginExceptionStorageTest.kt +++ b/android-components/components/feature/logins/src/androidTest/java/mozilla/components/feature/logins/LoginExceptionStorageTest.kt @@ -8,7 +8,6 @@ import android.content.Context import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.room.Room import androidx.room.testing.MigrationTestHelper -import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.core.app.ApplicationProvider import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.flow.first @@ -37,11 +36,9 @@ class LoginExceptionStorageTest { var instantTaskExecutorRule = InstantTaskExecutorRule() @get:Rule - @Suppress("DEPRECATION") val helper: MigrationTestHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), - LoginExceptionStorage::class.java.canonicalName, - FrameworkSQLiteOpenHelperFactory(), + LoginExceptionDatabase::class.java, ) @Before diff --git a/android-components/components/feature/pwa/src/androidTest/java/mozilla/components/feature/pwa/db/ManifestDatabaseMigrationTest.kt b/android-components/components/feature/pwa/src/androidTest/java/mozilla/components/feature/pwa/db/ManifestDatabaseMigrationTest.kt index 7bfcfab6f528..00659e3af23d 100644 --- a/android-components/components/feature/pwa/src/androidTest/java/mozilla/components/feature/pwa/db/ManifestDatabaseMigrationTest.kt +++ b/android-components/components/feature/pwa/src/androidTest/java/mozilla/components/feature/pwa/db/ManifestDatabaseMigrationTest.kt @@ -6,7 +6,6 @@ package mozilla.components.feature.pwa.db import androidx.core.database.getStringOrNull import androidx.room.testing.MigrationTestHelper -import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.platform.app.InstrumentationRegistry import org.junit.Assert.assertEquals import org.junit.Assert.assertNull @@ -20,11 +19,9 @@ class ManifestDatabaseMigrationTest { @Rule @JvmField - @Suppress("DEPRECATION") val helper: MigrationTestHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), - ManifestDatabase::class.java.canonicalName, - FrameworkSQLiteOpenHelperFactory(), + ManifestDatabase::class.java, ) @Test diff --git a/android-components/components/feature/sitepermissions/src/androidTest/java/mozilla/components/feature/sitepermissions/db/OnDeviceSitePermissionsStorageTest.kt b/android-components/components/feature/sitepermissions/src/androidTest/java/mozilla/components/feature/sitepermissions/db/OnDeviceSitePermissionsStorageTest.kt index cb057593b446..83b2a5a04250 100644 --- a/android-components/components/feature/sitepermissions/src/androidTest/java/mozilla/components/feature/sitepermissions/db/OnDeviceSitePermissionsStorageTest.kt +++ b/android-components/components/feature/sitepermissions/src/androidTest/java/mozilla/components/feature/sitepermissions/db/OnDeviceSitePermissionsStorageTest.kt @@ -8,7 +8,6 @@ import android.content.Context import androidx.core.net.toUri import androidx.room.Room import androidx.room.testing.MigrationTestHelper -import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.core.app.ApplicationProvider import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.test.runTest @@ -34,11 +33,9 @@ class OnDeviceSitePermissionsStorageTest { private lateinit var database: SitePermissionsDatabase @get:Rule - @Suppress("DEPRECATION") val helper: MigrationTestHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), - SitePermissionsDatabase::class.java.canonicalName, - FrameworkSQLiteOpenHelperFactory(), + SitePermissionsDatabase::class.java, ) @Before diff --git a/android-components/components/feature/top-sites/src/androidTest/java/mozilla/components/feature/top/sites/OnDevicePinnedSitesStorageTest.kt b/android-components/components/feature/top-sites/src/androidTest/java/mozilla/components/feature/top/sites/OnDevicePinnedSitesStorageTest.kt index a4d15b3c2742..ac5563190d6b 100644 --- a/android-components/components/feature/top-sites/src/androidTest/java/mozilla/components/feature/top/sites/OnDevicePinnedSitesStorageTest.kt +++ b/android-components/components/feature/top-sites/src/androidTest/java/mozilla/components/feature/top/sites/OnDevicePinnedSitesStorageTest.kt @@ -8,7 +8,6 @@ import android.content.Context import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.room.Room import androidx.room.testing.MigrationTestHelper -import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.core.app.ApplicationProvider import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -38,11 +37,9 @@ class OnDevicePinnedSitesStorageTest { var instantTaskExecutorRule = InstantTaskExecutorRule() @get:Rule - @Suppress("DEPRECATION") val helper: MigrationTestHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), - TopSiteDatabase::class.java.canonicalName, - FrameworkSQLiteOpenHelperFactory(), + TopSiteDatabase::class.java, ) @Before diff --git a/android-components/components/service/pocket/src/androidTest/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabaseTest.kt b/android-components/components/service/pocket/src/androidTest/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabaseTest.kt index fed7f5ff6831..f31f41a31899 100644 --- a/android-components/components/service/pocket/src/androidTest/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabaseTest.kt +++ b/android-components/components/service/pocket/src/androidTest/java/mozilla/components/service/pocket/stories/db/PocketRecommendationsDatabaseTest.kt @@ -8,7 +8,6 @@ import android.content.Context import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.room.Room import androidx.room.testing.MigrationTestHelper -import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory import androidx.test.core.app.ApplicationProvider import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.runBlocking @@ -31,11 +30,9 @@ class PocketRecommendationsDatabaseTest { private lateinit var database: PocketRecommendationsDatabase @get:Rule - @Suppress("DEPRECATION") val helper: MigrationTestHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), - PocketRecommendationsDatabase::class.java.canonicalName, - FrameworkSQLiteOpenHelperFactory(), + PocketRecommendationsDatabase::class.java, ) @get:Rule From 2917efdabbad9e4840b58ba3d248e8f433b0c20c Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 15:14:40 +0200 Subject: [PATCH 24/51] Bug 1879539 - Remove redundant assertion functions from LibrarySubMenusMultipleSelectionToolbarRobot --- ...rySubMenusMultipleSelectionToolbarRobot.kt | 93 +++++++------------ 1 file changed, 31 insertions(+), 62 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt index a86f8802efab..3c675bf05e8b 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt @@ -34,27 +34,46 @@ import org.mozilla.fenix.tabstray.TabsTrayTestTag */ class LibrarySubMenusMultipleSelectionToolbarRobot { - fun verifyMultiSelectionCheckmark() = assertMultiSelectionCheckmark() - - fun verifyMultiSelectionCheckmark(url: Uri) = assertMultiSelectionCheckmark(url) + fun verifyMultiSelectionCheckmark() = onView(withId(R.id.checkmark)).check(matches(isDisplayed())) + + fun verifyMultiSelectionCheckmark(url: Uri) = + onView( + allOf( + withId(R.id.checkmark), + withParent(withParent(withChild(allOf(withId(R.id.url), withText(url.toString()))))), + + // This is used as part of the `multiSelectionToolbarItemsTest` test. Somehow, in the view hierarchy, + // the match above is finding two checkmark views - one visible, one hidden, which is throwing off + // the matcher. This 'isDisplayed' check is a hacky workaround for this, we're explicitly ignoring + // the hidden one. Why are there two to begin with, though? + isDisplayed(), + ), + ).check(matches(isDisplayed())) - fun verifyMultiSelectionCounter() = assertMultiSelectionCounter() + fun verifyMultiSelectionCounter() = onView(withText("1 selected")).check(matches(isDisplayed())) - fun verifyShareHistoryButton() = assertShareHistoryButton() + fun verifyShareHistoryButton() = shareHistoryButton().check(matches(isDisplayed())) - fun verifyShareBookmarksButton() = assertShareBookmarksButton() + fun verifyShareBookmarksButton() = shareBookmarksButton().check(matches(isDisplayed())) - fun verifyShareOverlay() = assertShareOverlay() + fun verifyShareOverlay() = onView(withId(R.id.shareWrapper)).check(matches(isDisplayed())) - fun verifyShareAppsLayout() = assertShareAppsLayout() + fun verifyShareAppsLayout() { + val sendToDeviceTitle = mDevice.findObject( + UiSelector() + .instance(0) + .className(TextView::class.java), + ) + sendToDeviceTitle.waitForExists(TestAssetHelper.waitingTime) + } - fun verifyShareTabFavicon() = assertShareTabFavicon() + fun verifyShareTabFavicon() = onView(withId(R.id.share_tab_favicon)).check(matches(isDisplayed())) - fun verifyShareTabTitle() = assertShareTabTitle() + fun verifyShareTabTitle() = onView(withId(R.id.share_tab_title)).check(matches(isDisplayed())) - fun verifyShareTabUrl() = assertShareTabUrl() + fun verifyShareTabUrl() = onView(withId(R.id.share_tab_url)) - fun verifyCloseToolbarButton() = assertCloseToolbarButton() + fun verifyCloseToolbarButton() = closeToolbarButton().check(matches(isDisplayed())) fun clickShareHistoryButton() { shareHistoryButton().click() @@ -157,53 +176,3 @@ private fun openInNewTabButton() = onView(withText("Open in new tab")) private fun openInPrivateTabButton() = onView(withText("Open in private tab")) private fun deleteButton() = onView(withText("Delete")) - -private fun assertMultiSelectionCheckmark() = - onView(withId(R.id.checkmark)) - .check(matches(isDisplayed())) - -private fun assertMultiSelectionCheckmark(url: Uri) = - onView( - allOf( - withId(R.id.checkmark), - withParent(withParent(withChild(allOf(withId(R.id.url), withText(url.toString()))))), - - // This is used as part of the `multiSelectionToolbarItemsTest` test. Somehow, in the view hierarchy, - // the match above is finding two checkmark views - one visible, one hidden, which is throwing off - // the matcher. This 'isDisplayed' check is a hacky workaround for this, we're explicitly ignoring - // the hidden one. Why are there two to begin with, though? - isDisplayed(), - ), - ) - .check(matches(isDisplayed())) - -private fun assertMultiSelectionCounter() = - onView(withText("1 selected")).check(matches(isDisplayed())) - -private fun assertShareHistoryButton() = - shareHistoryButton().check(matches(isDisplayed())) - -private fun assertShareBookmarksButton() = - shareBookmarksButton().check(matches(isDisplayed())) - -private fun assertShareOverlay() = - onView(withId(R.id.shareWrapper)).check(matches(isDisplayed())) - -private fun assertShareAppsLayout() = { - val sendToDeviceTitle = mDevice.findObject( - UiSelector() - .instance(0) - .className(TextView::class.java), - ) - sendToDeviceTitle.waitForExists(TestAssetHelper.waitingTime) -} - -private fun assertShareTabTitle() = - onView(withId(R.id.share_tab_title)).check(matches(isDisplayed())) - -private fun assertShareTabFavicon() = - onView(withId(R.id.share_tab_favicon)).check(matches(isDisplayed())) - -private fun assertShareTabUrl() = onView(withId(R.id.share_tab_url)) - -private fun assertCloseToolbarButton() = closeToolbarButton().check(matches(isDisplayed())) From 0a504515ce8e3d2ae66bf1933e1a92f0582cdfec Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 15:41:26 +0200 Subject: [PATCH 25/51] Bug 1879539 - Add test logs to LibrarySubMenusMultipleSelectionToolbarRobot --- ...rySubMenusMultipleSelectionToolbarRobot.kt | 94 ++++++++++++++++--- 1 file changed, 83 insertions(+), 11 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt index 3c675bf05e8b..1e65807a09cb 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.ui.robots import android.net.Uri +import android.util.Log import android.widget.TextView import androidx.compose.ui.test.onNodeWithTag import androidx.test.espresso.Espresso.onView @@ -20,6 +21,8 @@ import androidx.test.uiautomator.UiSelector import androidx.test.uiautomator.Until import org.hamcrest.Matchers.allOf import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.Constants +import org.mozilla.fenix.helpers.Constants.TAG import org.mozilla.fenix.helpers.HomeActivityComposeTestRule import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime @@ -34,13 +37,27 @@ import org.mozilla.fenix.tabstray.TabsTrayTestTag */ class LibrarySubMenusMultipleSelectionToolbarRobot { - fun verifyMultiSelectionCheckmark() = onView(withId(R.id.checkmark)).check(matches(isDisplayed())) + fun verifyMultiSelectionCheckmark() { + Log.i(TAG, "verifyMultiSelectionCheckmark: Trying to verify that the multi-selection checkmark is displayed") + onView(withId(R.id.checkmark)).check(matches(isDisplayed())) + Log.i(TAG, "verifyMultiSelectionCheckmark: Verified that the multi-selection checkmark is displayed") + } - fun verifyMultiSelectionCheckmark(url: Uri) = + fun verifyMultiSelectionCheckmark(url: Uri) { + Log.i(TAG, "verifyMultiSelectionCheckmark: Trying to verify that the multi-selection checkmark for item with url: $url is displayed") onView( allOf( withId(R.id.checkmark), - withParent(withParent(withChild(allOf(withId(R.id.url), withText(url.toString()))))), + withParent( + withParent( + withChild( + allOf( + withId(R.id.url), + withText(url.toString()), + ), + ), + ), + ), // This is used as part of the `multiSelectionToolbarItemsTest` test. Somehow, in the view hierarchy, // the match above is finding two checkmark views - one visible, one hidden, which is throwing off @@ -49,14 +66,32 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { isDisplayed(), ), ).check(matches(isDisplayed())) + Log.i(Constants.TAG, "verifyMultiSelectionCheckmark: Verified that the multi-selection checkmark for item with url: $url is displayed") + } - fun verifyMultiSelectionCounter() = onView(withText("1 selected")).check(matches(isDisplayed())) + fun verifyMultiSelectionCounter() { + Log.i(TAG, "verifyMultiSelectionCounter: Trying to verify that the multi-selection toolbar containing: \"1 selected\" is displayed") + onView(withText("1 selected")).check(matches(isDisplayed())) + Log.i(TAG, "verifyMultiSelectionCounter: Verified that the multi-selection toolbar containing: \"1 selected\" is displayed") + } - fun verifyShareHistoryButton() = shareHistoryButton().check(matches(isDisplayed())) + fun verifyShareHistoryButton() { + Log.i(TAG, "verifyShareHistoryButton: Trying to verify that the multi-selection share history button is displayed") + shareHistoryButton().check(matches(isDisplayed())) + Log.i(TAG, "verifyShareHistoryButton: Verified that the multi-selection share history button is displayed") + } - fun verifyShareBookmarksButton() = shareBookmarksButton().check(matches(isDisplayed())) + fun verifyShareBookmarksButton() { + Log.i(TAG, "verifyShareBookmarksButton: Trying to verify that the multi-selection share bookmarks button is displayed") + shareBookmarksButton().check(matches(isDisplayed())) + Log.i(TAG, "verifyShareBookmarksButton: Verified that the multi-selection share bookmarks button is displayed") + } - fun verifyShareOverlay() = onView(withId(R.id.shareWrapper)).check(matches(isDisplayed())) + fun verifyShareOverlay() { + Log.i(TAG, "verifyShareOverlay: Trying to verify that the share overlay is displayed") + onView(withId(R.id.shareWrapper)).check(matches(isDisplayed())) + Log.i(TAG, "verifyShareOverlay: Verified that the share overlay is displayed") + } fun verifyShareAppsLayout() { val sendToDeviceTitle = mDevice.findObject( @@ -67,16 +102,34 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { sendToDeviceTitle.waitForExists(TestAssetHelper.waitingTime) } - fun verifyShareTabFavicon() = onView(withId(R.id.share_tab_favicon)).check(matches(isDisplayed())) + fun verifyShareTabFavicon() { + Log.i(TAG, "verifyShareTabFavicon: Trying to verify that the shared tab favicon is displayed") + onView(withId(R.id.share_tab_favicon)).check(matches(isDisplayed())) + Log.i(TAG, "verifyShareTabFavicon: Verified that the shared tab favicon is displayed") + } - fun verifyShareTabTitle() = onView(withId(R.id.share_tab_title)).check(matches(isDisplayed())) + fun verifyShareTabTitle() { + Log.i(TAG, "verifyShareTabTitle: Trying to verify that the shared tab title is displayed") + onView(withId(R.id.share_tab_title)).check(matches(isDisplayed())) + Log.i(TAG, "verifyShareTabTitle: Verified that the shared tab title is displayed") + } - fun verifyShareTabUrl() = onView(withId(R.id.share_tab_url)) + fun verifyShareTabUrl() { + Log.i(TAG, "verifyShareTabUrl: Trying to verify that the shared tab url is displayed") + onView(withId(R.id.share_tab_url)).check(matches(isDisplayed())) + Log.i(TAG, "verifyShareTabUrl: Verified that the shared tab url is displayed") + } - fun verifyCloseToolbarButton() = closeToolbarButton().check(matches(isDisplayed())) + fun verifyCloseToolbarButton() { + Log.i(TAG, "verifyCloseToolbarButton: Trying to verify that the navigate up toolbar button is displayed") + closeToolbarButton().check(matches(isDisplayed())) + Log.i(TAG, "verifyCloseToolbarButton: Verified that the navigate up toolbar button is displayed") + } fun clickShareHistoryButton() { + Log.i(TAG, "clickShareHistoryButton: Trying to click the multi-selection share history button") shareHistoryButton().click() + Log.i(TAG, "clickShareHistoryButton: Clicked the multi-selection share history button") mDevice.waitNotNull( Until.findObject( @@ -87,7 +140,9 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { } fun clickShareBookmarksButton() { + Log.i(TAG, "clickShareBookmarksButton: Trying to click the multi-selection share bookmarks button") shareBookmarksButton().click() + Log.i(TAG, "clickShareBookmarksButton: Clicked the multi-selection share bookmarks button") mDevice.waitNotNull( Until.findObject( @@ -98,7 +153,9 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { } fun clickMultiSelectionDelete() { + Log.i(TAG, "clickMultiSelectionDelete: Trying to click the multi-selection delete button") deleteButton().click() + Log.i(TAG, "clickMultiSelectionDelete: Clicked the multi-selection delete button") } class Transition { @@ -108,21 +165,28 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { } fun closeToolbarReturnToHistory(interact: HistoryRobot.() -> Unit): HistoryRobot.Transition { + Log.i(TAG, "closeToolbarReturnToHistory: Trying to click the navigate up toolbar button") closeToolbarButton().click() + Log.i(TAG, "closeToolbarReturnToHistory: Clicked the navigate up toolbar button") HistoryRobot().interact() return HistoryRobot.Transition() } fun closeToolbarReturnToBookmarks(interact: BookmarksRobot.() -> Unit): BookmarksRobot.Transition { + Log.i(TAG, "closeToolbarReturnToBookmarks: Trying to click the navigate up toolbar button") closeToolbarButton().click() + Log.i(TAG, "closeToolbarReturnToBookmarks: Clicked the navigate up toolbar button") BookmarksRobot().interact() return BookmarksRobot.Transition() } fun clickOpenNewTab(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { + Log.i(TAG, "clickOpenNewTab: Trying to click the multi-select \"Open in a new tab\" context menu button") openInNewTabButton().click() + Log.i(TAG, "clickOpenNewTab: Clicked the multi-select \"Open in a new tab\" context menu button") + mDevice.waitNotNull( Until.findObject(By.res("$packageName:id/tab_layout")), waitingTime, @@ -133,15 +197,21 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { } fun clickOpenNewTab(composeTestRule: HomeActivityComposeTestRule, interact: ComposeTabDrawerRobot.() -> Unit): ComposeTabDrawerRobot.Transition { + Log.i(TAG, "clickOpenNewTab: Trying to click the multi-select \"Open in a new tab\" context menu button") openInNewTabButton().click() + Log.i(TAG, "clickOpenNewTab: Clicked the multi-select \"Open in a new tab\" context menu button") + Log.i(TAG, "clickOpenNewTab: Trying to verify that the tabs tray exists") composeTestRule.onNodeWithTag(TabsTrayTestTag.tabsTray).assertExists() + Log.i(TAG, "clickOpenNewTab: Verified that the tabs tray exists") ComposeTabDrawerRobot(composeTestRule).interact() return ComposeTabDrawerRobot.Transition(composeTestRule) } fun clickOpenPrivateTab(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { + Log.i(TAG, "clickOpenPrivateTab: Trying to click the multi-select \"Open in a private tab\" context menu button") openInPrivateTabButton().click() + Log.i(TAG, "clickOpenPrivateTab: Clicked the multi-select \"Open in a private tab\" context menu button") mDevice.waitNotNull( Until.findObject(By.res("$packageName:id/tab_layout")), waitingTime, @@ -152,7 +222,9 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { } fun clickOpenPrivateTab(composeTestRule: HomeActivityComposeTestRule, interact: ComposeTabDrawerRobot.() -> Unit): ComposeTabDrawerRobot.Transition { + Log.i(TAG, "clickOpenPrivateTab: Trying to click the multi-select \"Open in a private tab\" context menu button") openInPrivateTabButton().click() + Log.i(TAG, "clickOpenPrivateTab: Clicked the multi-select \"Open in a private tab\" context menu button") ComposeTabDrawerRobot(composeTestRule).interact() return ComposeTabDrawerRobot.Transition(composeTestRule) From 95e9fa455f10bdc2bcc31ee99bf6a9b0fdb521f9 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 15:42:54 +0200 Subject: [PATCH 26/51] Bug 1879539 - Remove unused functions from LibrarySubMenusMultipleSelectionToolbarRobot --- ...rarySubMenusMultipleSelectionToolbarRobot.kt | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt index 1e65807a09cb..b3b3d395c8ac 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt @@ -6,7 +6,6 @@ package org.mozilla.fenix.ui.robots import android.net.Uri import android.util.Log -import android.widget.TextView import androidx.compose.ui.test.onNodeWithTag import androidx.test.espresso.Espresso.onView import androidx.test.espresso.assertion.ViewAssertions.matches @@ -17,14 +16,12 @@ import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withParent import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.uiautomator.By -import androidx.test.uiautomator.UiSelector import androidx.test.uiautomator.Until import org.hamcrest.Matchers.allOf import org.mozilla.fenix.R import org.mozilla.fenix.helpers.Constants import org.mozilla.fenix.helpers.Constants.TAG import org.mozilla.fenix.helpers.HomeActivityComposeTestRule -import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.TestHelper.mDevice import org.mozilla.fenix.helpers.TestHelper.packageName @@ -93,15 +90,6 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { Log.i(TAG, "verifyShareOverlay: Verified that the share overlay is displayed") } - fun verifyShareAppsLayout() { - val sendToDeviceTitle = mDevice.findObject( - UiSelector() - .instance(0) - .className(TextView::class.java), - ) - sendToDeviceTitle.waitForExists(TestAssetHelper.waitingTime) - } - fun verifyShareTabFavicon() { Log.i(TAG, "verifyShareTabFavicon: Trying to verify that the shared tab favicon is displayed") onView(withId(R.id.share_tab_favicon)).check(matches(isDisplayed())) @@ -159,11 +147,6 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { } class Transition { - fun closeShareDialogReturnToPage(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { - BrowserRobot().interact() - return BrowserRobot.Transition() - } - fun closeToolbarReturnToHistory(interact: HistoryRobot.() -> Unit): HistoryRobot.Transition { Log.i(TAG, "closeToolbarReturnToHistory: Trying to click the navigate up toolbar button") closeToolbarButton().click() From 9beaef6d805a0f286984b004d47c7d295cf5b0d4 Mon Sep 17 00:00:00 2001 From: William Durand Date: Mon, 12 Feb 2024 11:56:50 +0100 Subject: [PATCH 27/51] Bug 1879819 - Improve rating description in list of add-ons --- .../feature/addons/ui/AddonsManagerAdapter.kt | 2 +- .../addons/src/main/res/values/strings.xml | 4 +++- .../feature/addons/ui/AddonsManagerAdapterTest.kt | 2 +- .../fenix/addons/AddonDetailsBindingDelegate.kt | 15 +++++++++------ .../addons/AddonDetailsBindingDelegateTest.kt | 11 +++++++---- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/AddonsManagerAdapter.kt b/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/AddonsManagerAdapter.kt index 64c4df655d26..2b0ed6ed0225 100644 --- a/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/AddonsManagerAdapter.kt +++ b/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/AddonsManagerAdapter.kt @@ -260,7 +260,7 @@ class AddonsManagerAdapter( val reviewCount = context.getString(R.string.mozac_feature_addons_user_rating_count_2) val ratingContentDescription = String.format( - context.getString(R.string.mozac_feature_addons_rating_content_description), + context.getString(R.string.mozac_feature_addons_rating_content_description_2), it.average, ) holder.ratingView.contentDescription = ratingContentDescription diff --git a/android-components/components/feature/addons/src/main/res/values/strings.xml b/android-components/components/feature/addons/src/main/res/values/strings.xml index dc1c822e25ae..1a2efc89a0ac 100644 --- a/android-components/components/feature/addons/src/main/res/values/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values/strings.xml @@ -148,7 +148,9 @@ Reviews: %1$s - %1$.02f/5 + %1$.02f/5 + + Rating: %1$.02f out of 5 Add-ons diff --git a/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/AddonsManagerAdapterTest.kt b/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/AddonsManagerAdapterTest.kt index 41b8370cd0e1..6dac9c9f69df 100644 --- a/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/AddonsManagerAdapterTest.kt +++ b/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/AddonsManagerAdapterTest.kt @@ -170,7 +170,7 @@ class AddonsManagerAdapterTest { adapter.bindAddon(addonViewHolder, addon, appName, appVersion) - verify(ratingAccessibleView).setText("4.50/5") + verify(ratingAccessibleView).setText("Rating: 4.50 out of 5") verify(titleView).setText("name") verify(titleView).setTextColor(ContextCompat.getColor(testContext, style.addonNameTextColor!!)) verify(summaryView).setText("summary") diff --git a/fenix/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt b/fenix/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt index fef044b050c4..3cfcc9575c0f 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegate.kt @@ -64,9 +64,13 @@ class AddonDetailsBindingDelegate( private fun bindRating(addon: Addon) { addon.rating?.let { rating -> val resources = binding.root.resources - val ratingContentDescription = resources.getString(R.string.mozac_feature_addons_rating_content_description) + val ratingContentDescription = + resources.getString(R.string.mozac_feature_addons_rating_content_description_2) + binding.ratingLabel.contentDescription = String.format(ratingContentDescription, rating.average) binding.ratingView.rating = rating.average + val reviewCount = resources.getString(R.string.mozac_feature_addons_user_rating_count_2) + binding.reviewCount.contentDescription = String.format(reviewCount, numberFormatter.format(rating.reviews)) binding.reviewCount.text = numberFormatter.format(rating.reviews) if (addon.ratingUrl.isNotBlank()) { @@ -76,7 +80,6 @@ class AddonDetailsBindingDelegate( interactor.openWebsite(addon.ratingUrl.toUri()) } } - binding.ratingLabel.joinContextDescriptions(String.format(ratingContentDescription, rating.average)) } } @@ -103,7 +106,7 @@ class AddonDetailsBindingDelegate( val formattedDate = dateFormatter.format(addon.updatedAtDate) binding.lastUpdatedText.text = formattedDate - binding.lastUpdatedLabel.joinContextDescriptions(formattedDate) + binding.lastUpdatedLabel.joinContentDescriptions(formattedDate) } private fun bindVersion(addon: Addon) { @@ -121,7 +124,7 @@ class AddonDetailsBindingDelegate( } else { binding.versionText.setOnLongClickListener(null) } - binding.versionLabel.joinContextDescriptions(version) + binding.versionLabel.joinContentDescriptions(version) } private fun bindAuthor(addon: Addon) { @@ -142,7 +145,7 @@ class AddonDetailsBindingDelegate( interactor.openWebsite(author.url.toUri()) } } - binding.authorLabel.joinContextDescriptions(author.name) + binding.authorLabel.joinContentDescriptions(author.name) } private fun bindDetails(addon: Addon) { @@ -192,7 +195,7 @@ class AddonDetailsBindingDelegate( } @VisibleForTesting - internal fun TextView.joinContextDescriptions(text: String) { + internal fun TextView.joinContentDescriptions(text: String) { this.contentDescription = "${this.text} $text" } } diff --git a/fenix/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt b/fenix/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt index 91f27b9e9e7f..ca27f28c9bb0 100644 --- a/fenix/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt +++ b/fenix/app/src/test/java/org/mozilla/fenix/addons/AddonDetailsBindingDelegateTest.kt @@ -69,12 +69,15 @@ class AddonDetailsBindingDelegateTest { ) assertEquals(4.5f, binding.ratingView.rating) assertEquals("100", binding.reviewCount.text) - val ratingContentDescription = testContext.getString(R.string.mozac_feature_addons_rating_content_description) - val formattedRatting = String.format(ratingContentDescription, 4.3f) - val expectedContentDescription = binding.ratingLabel.text.toString() + " " + formattedRatting - assertEquals(expectedContentDescription, binding.ratingLabel.contentDescription) + val ratingContentDescription = testContext.getString(R.string.mozac_feature_addons_rating_content_description_2) + var formattedRatting = String.format(ratingContentDescription, 4.3f) + assertEquals(formattedRatting, binding.ratingLabel.contentDescription) assertEquals(IMPORTANT_FOR_ACCESSIBILITY_NO, binding.ratingView.importantForAccessibility) + + val reviewContentDescription = testContext.getString(R.string.mozac_feature_addons_user_rating_count_2) + formattedRatting = String.format(reviewContentDescription, 100) + assertEquals(formattedRatting, binding.reviewCount.contentDescription) } @Test From a26e21ee3b090843ed2bed110eb5e8529eb79149 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Wed, 31 Jan 2024 17:25:08 -0500 Subject: [PATCH 28/51] Bug 1868469 - Update the url immediately for existing engineSession When we have an existing `engineSession` we use an optimized route to load the url without needing to dispatch the load action. This is still a valid performance improvement to make page loads faster. However, in this code path we do not end up update the url in the state until we get back a response from the Engine. This gives a perceived performance loss of slow browsing. Updating the url gives UI components an immediate update which reflects a change that would have been entered by the user. It was considered if we should do this in a middleware, but since this is an optimized route, we should not wait for the middleware to process the action before we perform the state update. --- .../mozilla/components/feature/session/SessionUseCases.kt | 8 ++++++++ .../components/feature/session/SessionUseCasesTest.kt | 4 ++++ docs/changelog.md | 5 ++++- .../java/org/mozilla/fenix/ui/CrashReportingTest.kt | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt b/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt index 4c53f0d22f75..565ba3463218 100644 --- a/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt +++ b/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt @@ -4,6 +4,7 @@ package mozilla.components.feature.session +import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.action.CrashAction import mozilla.components.browser.state.action.EngineAction import mozilla.components.browser.state.action.LastAccessAction @@ -99,6 +100,13 @@ class SessionUseCases( flags = flags, additionalHeaders = additionalHeaders, ) + // Update the url in content immediately until the engine updates with any new changes to the state. + store.dispatch( + ContentAction.UpdateUrlAction( + loadSessionId, + url, + ), + ) store.dispatch( EngineAction.OptimizedLoadUrlTriggeredAction( loadSessionId, diff --git a/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt b/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt index 16a5fd3d626f..4461577d2595 100644 --- a/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt +++ b/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt @@ -11,6 +11,7 @@ import mozilla.components.browser.state.action.EngineAction import mozilla.components.browser.state.action.TabListAction import mozilla.components.browser.state.engine.EngineMiddleware import mozilla.components.browser.state.selector.findTab +import mozilla.components.browser.state.selector.selectedTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.state.createCustomTab @@ -80,6 +81,7 @@ class SessionUseCasesTest { assertEquals("mozilla", action.tabId) assertEquals("https://getpocket.com", action.url) } + assertEquals("https://getpocket.com", store.state.selectedTab?.content?.url) useCases.loadUrl("https://www.mozilla.org", LoadUrlFlags.select(LoadUrlFlags.EXTERNAL)) store.waitUntilIdle() @@ -93,6 +95,7 @@ class SessionUseCasesTest { assertEquals("https://www.mozilla.org", action.url) assertEquals(LoadUrlFlags.select(LoadUrlFlags.EXTERNAL), action.flags) } + assertEquals("https://www.mozilla.org", store.state.selectedTab?.content?.url) useCases.loadUrl("https://firefox.com", store.state.selectedTabId) store.waitUntilIdle() @@ -102,6 +105,7 @@ class SessionUseCasesTest { assertEquals("mozilla", action.tabId) assertEquals("https://firefox.com", action.url) } + assertEquals("https://firefox.com", store.state.selectedTab?.content?.url) useCases.loadUrl.invoke( "https://developer.mozilla.org", diff --git a/docs/changelog.md b/docs/changelog.md index 06a453a17cc4..c3de6235c869 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -19,7 +19,7 @@ permalink: /changelog/ * **all components** * All new usages of the `concept-fetch` component to make fetch requests now have conservative-mode off by default. Current features will continue to use conservative mode until individually updated. - + * **browser-toolbar** * Add `showMenuButton` and `hideMenuButton` API to `BrowserToolbar` and `DisplayToolbar` to allow hiding and showing of the menu button in the `BrowserToolbar` [Bug 1864760](https://bugzilla.mozilla.org/show_bug.cgi?id=1864760) @@ -27,6 +27,9 @@ permalink: /changelog/ * **feature-customtabs** * Fallback behaviour when failing to open a new window in custom tab will now be loading the URL directly in the same custom tab. [Bug 1832357](https://bugzilla.mozilla.org/show_bug.cgi?id=1832357) +* **feature-session** + * Update URL in the store immediately when using the optimized load URL code path. + # 123.0 * [Commits](https://github.com/mozilla-mobile/firefox-android/compare/releases_v122..releases_v123) * [Dependencies](https://github.com/mozilla-mobile/firefox-android/blob/releases_v123/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/CrashReportingTest.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/CrashReportingTest.kt index 84083e014ddf..be99ebe8af54 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/CrashReportingTest.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/CrashReportingTest.kt @@ -85,7 +85,7 @@ class CrashReportingTest : TestSetup() { verifyPageContent(tabCrashMessage) }.openTabDrawer { verifyExistingOpenTabs(firstWebPage.title) - verifyExistingOpenTabs(secondWebPage.title) + verifyExistingOpenTabs("about:crashcontent") }.closeTabDrawer { }.goToHomescreen { verifyExistingTopSitesList() From 5c0e0cacd88794befdb11d5a5898eac0d217a7f6 Mon Sep 17 00:00:00 2001 From: Ben Dean-Kawamura Date: Thu, 1 Feb 2024 16:57:01 -0500 Subject: [PATCH 29/51] Revert "Bug 1875294 - Record breadbcrumbs before crashing with UnsatsisfiedLinkError" This reverts commit 6fb061ce5efc1a3fb11dace06b826382e0b56736. These didn't work out in practice. The file lists were always empty, I think it might be a difference in permissions for release builds vs the debug builds that I was testing with. The package installer name was useful, but I realized there's Sentry tag for that which is even more useful. --- .../org/mozilla/fenix/FenixApplication.kt | 76 ++----------------- 1 file changed, 5 insertions(+), 71 deletions(-) diff --git a/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index b4f37a0af4db..6dfd7a06951f 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -112,11 +112,8 @@ import org.mozilla.fenix.session.VisibilityLifecycleCallback import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.Settings.Companion.TOP_SITES_PROVIDER_MAX_THRESHOLD import org.mozilla.fenix.wallpapers.Wallpaper -import java.io.File -import java.io.FileInputStream import java.util.UUID import java.util.concurrent.TimeUnit -import java.util.zip.ZipInputStream import kotlin.math.roundToLong private const val RAM_THRESHOLD_MEGABYTES = 1024 @@ -525,76 +522,13 @@ open class FenixApplication : LocaleAwareApplication(), Provider { * thread, early in the app startup sequence. */ private fun beginSetupMegazord() { - try { - // Note: Megazord.init() must be called as soon as possible ... - Megazord.init() - - initializeRustErrors(components.analytics.crashReporter) - // ... but RustHttpConfig.setClient() and RustLog.enable() can be called later. + // Note: Megazord.init() must be called as soon as possible ... + Megazord.init() - RustLog.enable() - } catch (e: UnsatisfiedLinkError) { - @Suppress("TooGenericExceptionCaught") - try { - reportUnsatisfiedLinkErrorBreadcrumbs() - } catch (e: Throwable) { - // This shouldn't happen, but if it does it's better to ignore the exception from - // the breadcrumb code and rethrow the initial exception. - } - throw e - } - } + initializeRustErrors(components.analytics.crashReporter) + // ... but RustHttpConfig.setClient() and RustLog.enable() can be called later. - private fun reportUnsatisfiedLinkErrorBreadcrumbs() { - val breadcrumbStrings = mutableListOf() - val apkPath = applicationContext.getApplicationInfo().sourceDir - breadcrumbStrings.add("APK: $apkPath") - val apkDir = File(apkPath).getParentFile() - val installSourcePackage = if (SDK_INT >= Build.VERSION_CODES.R) { - packageManager.getInstallSourceInfo(packageName).installingPackageName - } else { - @Suppress("DEPRECATION") - packageManager.getInstallerPackageName(packageName) - } - breadcrumbStrings.add("Installer package name: $installSourcePackage") - - val installDirFileSet = if (apkDir != null) { - apkDir.walk() - .filter { it != apkDir && !it.isDirectory() } - .map { it.relativeTo(apkDir).toString() } - .filter { it.startsWith("lib/") } - .toHashSet() - } else { - HashSet() - } - val apkFileSet = ZipInputStream(FileInputStream(apkPath)).use { - generateSequence { it.nextEntry } - .map { it.name } - .filter { it.startsWith("lib/") } - .toHashSet() - } - fun formatFileSet(filenames: Set) = if (filenames.size > 0) { - filenames.joinToString(", ") - } else { - "" - } - val installDirOnly = formatFileSet(installDirFileSet - apkFileSet) - val apkFileOnly = formatFileSet(apkFileSet - installDirFileSet) - val both = formatFileSet(installDirFileSet union apkFileSet) - - breadcrumbStrings.add("Files only inside lib/ dir: $installDirOnly") - breadcrumbStrings.add("Files only inside APK lib/ dir: $apkFileOnly") - breadcrumbStrings.add("Files inside both lib/ dirs: $both") - - for (breadcrumbString in breadcrumbStrings) { - components.analytics.crashReporter.recordCrashBreadcrumb( - Breadcrumb( - category = "Startup", - message = breadcrumbString, - level = Breadcrumb.Level.INFO, - ), - ) - } + RustLog.enable() } @OptIn(DelicateCoroutinesApi::class) // GlobalScope usage From ab7cc9543b11710f8b7262d00d18f3f346089a39 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 12 Feb 2024 14:15:25 -0500 Subject: [PATCH 30/51] Bug 1873486 - Update mockk to version 1.13.9 --- .../fenixdependencies/src/main/java/FenixDependenciesPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt b/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt index e4a769a07c2a..efc00ff779f4 100644 --- a/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt +++ b/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt @@ -32,7 +32,7 @@ object FenixVersions { const val installreferrer = "2.2" const val junit = "5.9.3" - const val mockk = "1.13.8" + const val mockk = "1.13.9" const val google_ads_id_version = "16.0.0" From 82da77452ed8f24c1fdc164cb193877b353085ec Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 13 Feb 2024 00:03:47 +0000 Subject: [PATCH 31/51] Import translations from android-l10n --- .../addons/src/main/res/values-eu/strings.xml | 4 +- .../media/src/main/res/values-eu/strings.xml | 11 +- .../src/main/res/values-eu/strings.xml | 36 ++++ fenix/app/src/main/res/values-azb/strings.xml | 56 +++++++ fenix/app/src/main/res/values-eu/strings.xml | 154 +++++++++++++----- .../app/src/main/res/values-iw/strings.xml | 15 ++ 6 files changed, 230 insertions(+), 46 deletions(-) diff --git a/android-components/components/feature/addons/src/main/res/values-eu/strings.xml b/android-components/components/feature/addons/src/main/res/values-eu/strings.xml index 56985171df47..8c06d98ceeb5 100644 --- a/android-components/components/feature/addons/src/main/res/values-eu/strings.xml +++ b/android-components/components/feature/addons/src/main/res/values-eu/strings.xml @@ -22,6 +22,8 @@ then we will show another collapsed entry saying "Access your data on 2 other domains". This entry it's for the plural case, when the add-on is accessing more than one extra domain. %1$d will be replaced by an integer indicating the number of additional domains for which this web extension is requesting permission. --> Beste %1$d domeinutan zure datuak atzitzea + + %1$s, %2$d of %3$d Nabigatzailearen fitxak atzitzea @@ -75,7 +77,7 @@ Egilea - Egileak + Egileak Azken eguneraketa diff --git a/android-components/components/feature/media/src/main/res/values-eu/strings.xml b/android-components/components/feature/media/src/main/res/values-eu/strings.xml index f61dc91a9ca2..12d9fb39a8a2 100644 --- a/android-components/components/feature/media/src/main/res/values-eu/strings.xml +++ b/android-components/components/feature/media/src/main/res/values-eu/strings.xml @@ -1,5 +1,5 @@ - + Media @@ -21,9 +21,14 @@ Gogorarazlea: %1$s zure kamera ari da erabiltzen oraindik. Sakatu fitxa irekitzeko. - Gogorarazlea: %1$s zure mikrofonoa ari da erabiltzen oraindik. Sakatu fitxa irekitzeko + Gogorarazlea: %1$s zure mikrofonoa ari da erabiltzen oraindik. Sakatu fitxa irekitzeko + + Gogorarazlea: %1$s zure mikrofonoa ari da erabiltzen oraindik. Sakatu fitxa irekitzeko. + + Gogorarazlea: %1$s zure mikrofono eta kamera ari da erabiltzen oraindik. Sakatu fitxa irekitzeko + - Gogorarazlea: %1$s zure mikrofono eta kamera ari da erabiltzen oraindik. Sakatu fitxa irekitzeko + Gogorarazlea: %1$s zure mikrofono eta kamera ari da erabiltzen oraindik. Sakatu fitxa irekitzeko. Erreproduzitu diff --git a/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml b/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml index 95a210e5c1fd..3782fee0a216 100644 --- a/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml +++ b/android-components/components/feature/prompts/src/main/res/values-eu/strings.xml @@ -18,6 +18,8 @@ Pasahitza Ez gorde + + Une honetan ez Ez gorde inoiz @@ -26,16 +28,26 @@ Gorde Ez eguneratu + + Une honetan ez Eguneratu Pasahitzaren eremuak ezin du hutsik egon + Idatzi pasahitz bat + Ezin da saio-hasiera gorde + + Ezin da pasahitza gorde Gorde saio-hasiera hau? + + Gorde pasahitza? Eguneratu saio-hasiera hau? + + Eguneratu pasahitza? Gehitu erabiltzaile-izena gordetako pasahitzari? @@ -85,13 +97,22 @@ Ezarri denbora Kudeatu saio-hasierak + + Kudeatu pasahitzak Zabaldu iradokitako saio-hasierak + + Zabaldu gordetako pasahitzak Tolestu iradokitako saio-hasierak + + Tolestu gordetako pasahitzak Iradokitako saio-hasierak + + Gordetako pasahitzak + Gomendatu pasahitz sendoa @@ -110,12 +131,20 @@ Hautatu kreditu-txartela + + Erabili gordetako txartela Zabaldu iradokitako kreditu-txartelak + + Zabaldu gordetako txartelak Tolestu iradokitako kreditu-txartelak + + Tolestu gordetako txartelak Kudeatu kreditu-txartelak + + Kudeatu txartelak Gorde txartela modu seguruan? @@ -123,13 +152,20 @@ Txartel-zenbakia zifratu egingo da. Segurtasun-kodea ez da gordeko. + + %s(e)k zure txartel-zenbakia zifratzen du. Zure segurtasun-kodea ez da gordeko. + Hautatu helbidea Zabaldu iradokitako helbideak + + Zabaldu gordetako helbideak Tolestu iradokitako helbideak + + Tolestu gordetako helbideak Kudeatu helbideak diff --git a/fenix/app/src/main/res/values-azb/strings.xml b/fenix/app/src/main/res/values-azb/strings.xml index 1c5e4b0c8767..796ef13cfb87 100644 --- a/fenix/app/src/main/res/values-azb/strings.xml +++ b/fenix/app/src/main/res/values-azb/strings.xml @@ -611,9 +611,16 @@ خاریجی یئندیرمه موْدیری. + + Gecko قیدلرینی گوجلندیر + + دگیشمه‌لری یئرینه سالماق اوچون اپلیکیشن‌دن چیْخیلیر... + تاخیلان‌لار + + تاخیلانیْ فایل‌دان قوْش بیلدیریش‌لر @@ -621,11 +628,30 @@ ایجازه وئریلمه‌دی + + + اؤزل تاخیْلان مجموعه‌سی تامام لغو + + مجموعه آدیْ + + مجموعه صاحیبی (قوللانیجیْ آیدی‌سی) + + تاخیْلان مجموعه‌‌سی ایصلاح اوْلدوُ. دگیشمه‌لری یئرینه سالماق اوچون اپلیکیشن‌دن چیْخیلیر... + + + + قاباقکی تاغ‌لارا قاییت + + سوْن بوکمارک‌لار + + سون باخیلان‌لار + آرتیق بیلین @@ -671,6 +697,36 @@ بوُکمارک‌لار + + گئچمیش + + یئنی تاغ + + تنظیم‌‎لر + + باغلا + + + + تاغ‌لار + + لیست + + هئچ زامان + + + آنایارپاق + + + + قالدیر + + + + لغو + + دوزه‌لیش + diff --git a/fenix/app/src/main/res/values-eu/strings.xml b/fenix/app/src/main/res/values-eu/strings.xml index ea6c22134a79..7f70955c968d 100644 --- a/fenix/app/src/main/res/values-eu/strings.xml +++ b/fenix/app/src/main/res/values-eu/strings.xml @@ -245,6 +245,7 @@ Pertsonalizatu hasiera-orria + Hasiera-pantaila @@ -252,6 +253,9 @@ Ezabatu nabigatze-historia + + Itzuli orria + Hautatutako hizkuntza @@ -263,8 +267,6 @@ Eskaneatu - - Bilaketa-motorra Bilaketa-motorren ezarpenak @@ -320,25 +322,30 @@ - Jakinarazpenek %s(r)i zuku gehiago ateratzen laguntzen dute + Jakinarazpenek %s(r)i zuku gehiago ateratzen laguntzen dute - Sinkronizatu zure fitxak gailuen artean, kudeatu deskargak, jaso aholkuak %s(r)en pribatutasun-babesari zuku gehien ateratzeko, eta gehiago. + Sinkronizatu zure fitxak gailuen artean, kudeatu deskargak, jaso aholkuak %s(r)en pribatutasun-babesari zuku gehien ateratzeko, eta gehiago. - Jarraitu + Jarraitu - Une honetan ez + Une honetan ez + + Firefoxen pribatutasun-oharra + Zu seguru mantentzea dugu xede - Irabazi asmorik gabeko erakundeak babestutako gure nabigatzaileak laguntzen du + Irabazi asmorik gabeko erakundeak babestutako gure nabigatzaileak laguntzen du eragozten enpresek zure webeko jarraipena sekretupean egin dezaten. + + Irabazi asmorik gabeko erakundeak babestutako gure nabigatzaileak laguntzen du eragozten enpresek zure webeko jarraipena sekretupean egin dezaten.\n\n Argibide gehiago gure pribatutasun-oharrean. - pribatutasun-oharrean + pribatutasun-oharrean Ezarri nabigatzaile lehenetsi gisa @@ -443,22 +450,11 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. HTTPS-Only modua - - Cookie iragarki-banden murrizpena Cookie iragarki-banden blokeatzailea Cookie iragarki-banden blokeatzailea nabigatze pribatuan - - Murriztu cookie iragarki-bandak - - Desaktibatuta - - Aktibatuta - - - Cookie iragarki-bandetako eskaerak automatikoki ukatzen saiatzen da %1$s. Desaktibatuta gune honetarako @@ -476,35 +472,16 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Une honetan gune honetarako euskarririk ez - Aktibatu cookie iragarki-banden murrizpena %1$s gunerako? - Aktibatu cookie iragarki-banden blokeatzailea %1$s gunerako? - Desaktibatu cookie iragarki-banden murrizpena %1$s gunerako? - Desaktibatu cookie iragarki-banden blokeatzailea %1$s gunerako? %1$s(e)k ezin ditu cookie-eskaerak automatikoki baztertu gune honetan. Etorkizunean gune honetarako euskarria gehitzeko eskaera bidal dezakezu. - - %1$s(e)k gune honetako cookieak garbitu eta orria berrituko du. Cookie guztiak garbitzean, saioak amaitu edo erosketa-orgak hustu litezke. Desaktibatu eta %1$s(e)k gune honetako cookieak garbitu eta orria berrituko du. Saioa amaitu edo erosketa-orgak hustu litezke. - Cookie eskaerak automatikoki ukatzen saiatzen da %1$s. - Aktibatu eta %1$s gune honetako cookie iragarki-bandak automatikoki ukatzen saiatuko da. - - Baimendu %1$s(r)i cookie iragarki-bandak ukatzen? - - %1$s(e)k automatikoki uka ditzake cookie iragarki-bandetako eskaerak. - - Une honetan ez - - Cookie eskaera gutxiago ikusiko dituzu - - - Baimendu %1$s(e)k cookieak ukatu ditu zure partez @@ -721,6 +698,8 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Laster-markak Saio-hasierak + + Pasahitzak Irekitako fitxak @@ -748,6 +727,8 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Kreditu-txartelak + + Ordainketa metodoak Helbideak @@ -1290,8 +1271,6 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Baztertu - Ezin da inprimatu - Ezin da orria inprimatu Inprimatu @@ -1697,8 +1676,12 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Saio-hasierak eta pasahitzak + + Pasahitzak Gorde saio-hasierak eta pasahitzak + + Gorde pasahitzak Galdetu gorde aurretik @@ -1715,26 +1698,46 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Gehitu saio-hasiera + + Gehitu pasahitza + Sinkronizatu saio-hasierak + + Sinkronizatu pasahitzak Sinkronizatu saio-hasierak gailuen artean + + Sinkronizatu pasahitzak gailuen artean Gordetako saio-hasierak + + Gordetako pasahitzak %s(e)n gordetzen edo sinkronizatzen dituzun saio-hasierak hemen agertuko dira. + + %s(e)n gordetzen edo sinkronizatzen dituzun pasahitzak hemen agertuko dira. Gordetzen dituzun pasahitz guztiak zifratuta daude. + Sinkronizazioari buruzko argibide gehiago. + + Sinkronizazioari buruzko argibide gehiago Salbuespenak Gorde gabeko saio-hasiera eta pasahitzak hemen erakutsiko dira. + + %s(e)k ez du pasahitzik gordeko hemen zerrendatutako guneetarako. Gune hauetarako ez da saio-hasiera eta pasahitzik gordeko. + + %s(e)k ez du pasahitzik gordeko gune hauetarako. Ezabatu salbuespen guztiak Bilatu saio-hasierak + + Bilatu pasahitzak Gunea @@ -1763,10 +1766,16 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Ezkutatu pasahitza Desblokeatu gordetako saio-hasierak ikusteko + + Desblokeatu gordetako pasahitzak ikusteko Lortu zure saio-hasierak eta pasahitzak + + Bermatu gordetako zure pasahitzak Konfiguratu gailua blokeatzeko patroia, PINa edo pasahitza zure saio-hasierak eta pasahitzak babesteko zure gailua beste norbaitek izango balu. + + Konfiguratu gailua blokeatzeko patroia, PINa edo pasahitza zure gordetako pasahitzak babesteko zure gailua beste norbaitek izango balu. Geroago @@ -1786,6 +1795,9 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Ordenatu saio-hasieren menua + + Ordenatu pasahitzen menua + Betetze automatikoa @@ -1793,10 +1805,16 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Helbideak Kreditu-txartelak + + Ordainketa metodoak Gorde eta osatu automatikoki kreditu-txartelak + + Gorde eta bete ordainketa metodoak Datuak zifratuta daude + + Gordetzen dituzun ordainketa metodo guztiak zifratzen ditu %s(e)k Sinkronizatu txartelak gailuen artean @@ -1804,8 +1822,12 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Gehitu kreditu-txartela + + Gehitu txartela Kudeatu gordetako txartelak + + Kudeatu txartelak Gehitu helbidea @@ -1813,9 +1835,14 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Gorde eta osatu automatikoki helbideak + + Gorde eta osatu helbideak Kontuan izan zenbakiak, helbide elektronikoak eta bidalketa-helbideak + + Telefono zenbakiak eta helbide elektronikoak ere baditu + Gehitu txartela @@ -1836,6 +1863,8 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Ezabatu txartela Ziur zaude kreditu-txartel hau ezabatu nahi duzula? + + Ezabatu txartela? Ezabatu @@ -1849,15 +1878,23 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Idatzi baliozko kreditu-txartel zenbakia + + Idatzi baliozko txartel-zenbakia Bete eremu hau mesedez + + Gehitu izena Desblokeatu gordetako txartelak ikusteko Bermatu zure kreditu-txartelak + + Bermatu gordetako zure ordainketa metodoak Konfiguratu gailua blokeatzeko patroia, PINa edo pasahitza zure gordetako kreditu-txartelak babesteko zure gailua beste norbaitek izango balu. + + Konfiguratu gailua blokeatzeko patroia, PINa edo pasahitza gordetako zure ordainketa metodoak babesteko zure gailua beste norbaitek izango balu. Konfiguratu orain @@ -1867,6 +1904,8 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Desblokeatu gordetako kreditu txartelaren informazioa erabiltzeko + + Desblokeatu gordetako ordainketa metodoak erabiltzeko Gehitu helbidea @@ -1903,6 +1942,8 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Ezabatu helbidea Ziur zaude helbide hau ezabatu nahi duzula? + + Ezabatu helbidea? Ezabatu @@ -2001,30 +2042,52 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Editatu Ziur zaude saio-hasiera hau ezabatu nahi duzula? + + Ziur zaude pasahitz hau ezabatu nahi duzula? Ezabatu Utzi Saio-hasieren aukerak + + Pasahitzaren aukerak Saio-hasieraren web helbiderako testu-eremu editagarria. + + Webgunearen helbidearen testu-eremu editagarria. Saio-hasieraren erabiltzaile-izenerako testu-eremu editagarria. + + Erabiltzaile-izenaren testu-eremu editagarria. Saio-hasieraren pasahitzerako testu-eremu editagarria. + + Pasahitzaren testu-eremu editagarria. Gorde saio-hasieraren aldaketak. + + Gorde aldaketak. Editatu + + Editatu pasahitza Gehitu saio-hasiera berria + + Gehitu pasahitza Pasahitza behar da + + Idatzi pasahitz bat Erabiltzaile-izena behar da + + Idatzi erabiltzaile-izen bat Ostalari-izena behar da + + Idatzi web helbide bat Ahots bidezko bilaketa @@ -2121,6 +2184,9 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. %s bilaketa + + Aldatu zure nabigatzaile lehenetsia + Ireki webgune, posta elektroniko eta mezuetako loturak Firefoxen automatikoki. @@ -2195,8 +2261,6 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Nabarmentzekoak %s(e)ko azken 80 egunetan fidagarriak direla uste ditugun balorazioak dira.]]> Argibide gehiago %s(r)i buruz. - - Mozillaren %s(e)k nola antzematen duen balorazioen kalitatea Nola antzematen duen %s(e)k balorazioen kalitatea @@ -2381,6 +2445,8 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Itzulpena burutzen + + Aukeratu hizkuntza Arazo bat gertatu da itzultzean. Saiatu berriro mesedez. @@ -2402,6 +2468,10 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du. Inoiz ez itzuli %1$s Inoiz ez itzuli gune hau + + Beste ezarpen guztiak baliogabetzen ditu + + Itzultzeko eskaintzak baliogabetzen ditu Itzulpenen ezarpenak diff --git a/focus-android/app/src/main/res/values-iw/strings.xml b/focus-android/app/src/main/res/values-iw/strings.xml index 0a1cf34e3a68..404587cd5062 100644 --- a/focus-android/app/src/main/res/values-iw/strings.xml +++ b/focus-android/app/src/main/res/values-iw/strings.xml @@ -724,6 +724,21 @@ ‏%1$s יכול לנסות לדחות באופן אוטומטי בקשות כרזות עוגיות. + + ביטול + + + בקשת תמיכה + + + הבקשה לתמיכה באתר הוגשה. + + + הבקשה לתמיכה באתר הוגשה. + + + הגדרות + ניגון אוטומטי From 0b277f1659452e08393e0394db6d9e73e911bc1a Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 13 Feb 2024 01:40:40 +0000 Subject: [PATCH 32/51] Update GeckoView (Nightly) to 124.0.20240212214644. --- android-components/plugins/dependencies/src/main/java/Gecko.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/Gecko.kt b/android-components/plugins/dependencies/src/main/java/Gecko.kt index 1d336b896ce4..61f2182a2445 100644 --- a/android-components/plugins/dependencies/src/main/java/Gecko.kt +++ b/android-components/plugins/dependencies/src/main/java/Gecko.kt @@ -9,7 +9,7 @@ object Gecko { /** * GeckoView Version. */ - const val version = "124.0.20240211213657" + const val version = "124.0.20240212214644" /** * GeckoView channel From 5648ec974f9d0f89ffb26e41addedcf4a9dc095d Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 13 Feb 2024 05:34:18 +0000 Subject: [PATCH 33/51] Update A-S to 124.20240213050313. --- .../plugins/dependencies/src/main/java/ApplicationServices.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt b/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt index 188a9b88fdf8..2ceca30e0b13 100644 --- a/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt +++ b/android-components/plugins/dependencies/src/main/java/ApplicationServices.kt @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // These lines are generated by android-components/automation/application-services-nightly-bump.py -val VERSION = "124.20240210050349" +val VERSION = "124.20240213050313" val CHANNEL = ApplicationServicesChannel.NIGHTLY object ApplicationServicesConfig { From 20b21b1fcb334cb95b313453427085ef8879d201 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 16:13:15 +0200 Subject: [PATCH 34/51] Bug 1879886 - Remove unused functions from NavigationToolbarRobot --- .../fenix/ui/robots/NavigationToolbarRobot.kt | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt index 2cb5403242f2..51b4656f185c 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt @@ -61,16 +61,11 @@ class NavigationToolbarRobot { fun verifyUrl(url: String) = onView(withId(R.id.mozac_browser_toolbar_url_view)).check(matches(withText(url))) - fun verifyNoHistoryBookmarks() = assertNoHistoryBookmarks() - fun verifyTabButtonShortcutMenuItems() = assertTabButtonShortcutMenuItems() fun verifyReaderViewDetected(visible: Boolean = false) = assertReaderViewDetected(visible) - fun verifyCloseReaderViewDetected(visible: Boolean = false) = - assertCloseReaderViewDetected(visible) - fun toggleReaderView() { mDevice.findObject( UiSelector() @@ -379,13 +374,6 @@ fun openEditURLView() { Log.i(TAG, "openEditURLView: Edit URL bar displayed.") } -private fun assertNoHistoryBookmarks() { - onView(withId(R.id.container)) - .check(matches(not(hasDescendant(withText("Test_Page_1"))))) - .check(matches(not(hasDescendant(withText("Test_Page_2"))))) - .check(matches(not(hasDescendant(withText("Test_Page_3"))))) -} - private fun assertTabButtonShortcutMenuItems() { onView(withId(R.id.mozac_browser_menu_recyclerView)) .check(matches(hasDescendant(withText("Close tab")))) @@ -425,27 +413,6 @@ private fun assertReaderViewDetected(visible: Boolean) { ) } -private fun assertCloseReaderViewDetected(visible: Boolean) { - mDevice.findObject( - UiSelector() - .description("Close reader view"), - ) - .waitForExists(waitingTime) - - onView( - allOf( - withParent(withId(R.id.mozac_browser_toolbar_page_actions)), - withContentDescription("Close reader view"), - ), - ).check( - if (visible) { - matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)) - } else { - ViewAssertions.doesNotExist() - }, - ) -} - private val searchSelectorButton = mDevice.findObject(UiSelector().resourceId("$packageName:id/search_selector")) From 49d7033e145a740d63fca193545177733240a6ff Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 16:15:03 +0200 Subject: [PATCH 35/51] Bug 1879886 - Convert private variables to functions so they don't get initialized --- .../org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt index 51b4656f185c..94af51d9ea85 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt @@ -114,7 +114,7 @@ class NavigationToolbarRobot { // New unified search UI selector fun verifyDefaultSearchEngine(engineName: String) = assertUIObjectExists( - searchSelectorButton.getChild(UiSelector().description(engineName)), + searchSelectorButton().getChild(UiSelector().description(engineName)), ) fun verifyTextSelectionOptions(vararg textSelectionOptions: String) { @@ -352,8 +352,8 @@ class NavigationToolbarRobot { } fun clickSearchSelectorButton(interact: SearchRobot.() -> Unit): SearchRobot.Transition { - searchSelectorButton.waitForExists(waitingTime) - searchSelectorButton.click() + searchSelectorButton().waitForExists(waitingTime) + searchSelectorButton().click() SearchRobot().interact() return SearchRobot.Transition() @@ -413,7 +413,7 @@ private fun assertReaderViewDetected(visible: Boolean) { ) } -private val searchSelectorButton = +private fun searchSelectorButton() = mDevice.findObject(UiSelector().resourceId("$packageName:id/search_selector")) inline fun runWithIdleRes(ir: IdlingResource?, pendingCheck: () -> Unit) { From 0a67838b6003eba618da0f132ec357abfdaac8f5 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 9 Feb 2024 16:18:33 +0200 Subject: [PATCH 36/51] Bug 1879886 - Remove redundant assertion functions from NavigationToolbarRobot --- .../fenix/ui/robots/NavigationToolbarRobot.kt | 57 +++++++++---------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt index 94af51d9ea85..2b2914e3ebe7 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt @@ -61,10 +61,33 @@ class NavigationToolbarRobot { fun verifyUrl(url: String) = onView(withId(R.id.mozac_browser_toolbar_url_view)).check(matches(withText(url))) - fun verifyTabButtonShortcutMenuItems() = assertTabButtonShortcutMenuItems() + fun verifyTabButtonShortcutMenuItems() { + onView(withId(R.id.mozac_browser_menu_recyclerView)) + .check(matches(hasDescendant(withText("Close tab")))) + .check(matches(hasDescendant(withText("New private tab")))) + .check(matches(hasDescendant(withText("New tab")))) + } - fun verifyReaderViewDetected(visible: Boolean = false) = - assertReaderViewDetected(visible) + fun verifyReaderViewDetected(visible: Boolean = false) { + mDevice.findObject( + UiSelector() + .description("Reader view"), + ) + .waitForExists(waitingTime) + + onView( + allOf( + withParent(withId(R.id.mozac_browser_toolbar_page_actions)), + withContentDescription("Reader view"), + ), + ).check( + if (visible) { + matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)) + } else { + ViewAssertions.doesNotExist() + }, + ) + } fun toggleReaderView() { mDevice.findObject( @@ -374,13 +397,6 @@ fun openEditURLView() { Log.i(TAG, "openEditURLView: Edit URL bar displayed.") } -private fun assertTabButtonShortcutMenuItems() { - onView(withId(R.id.mozac_browser_menu_recyclerView)) - .check(matches(hasDescendant(withText("Close tab")))) - .check(matches(hasDescendant(withText("New private tab")))) - .check(matches(hasDescendant(withText("New tab")))) -} - private fun urlBar() = mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar")) private fun awesomeBar() = mDevice.findObject(UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_edit_url_view")) @@ -392,27 +408,6 @@ private fun clearAddressBarButton() = itemWithResId("$packageName:id/mozac_brows private fun readerViewToggle() = onView(withParent(withId(R.id.mozac_browser_toolbar_page_actions))) -private fun assertReaderViewDetected(visible: Boolean) { - mDevice.findObject( - UiSelector() - .description("Reader view"), - ) - .waitForExists(waitingTime) - - onView( - allOf( - withParent(withId(R.id.mozac_browser_toolbar_page_actions)), - withContentDescription("Reader view"), - ), - ).check( - if (visible) { - matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)) - } else { - ViewAssertions.doesNotExist() - }, - ) -} - private fun searchSelectorButton() = mDevice.findObject(UiSelector().resourceId("$packageName:id/search_selector")) From 7b5032183f7472c3f4395e16a3a15677e9e06812 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Mon, 12 Feb 2024 12:04:33 +0200 Subject: [PATCH 37/51] Bug 1879886 - Add test logs to NavigationToolbarRobot --- .../fenix/ui/robots/NavigationToolbarRobot.kt | 143 +++++++++++++----- 1 file changed, 109 insertions(+), 34 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt index 2b2914e3ebe7..cb6a8495639e 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt @@ -31,7 +31,6 @@ import androidx.test.uiautomator.By.textContains import androidx.test.uiautomator.UiSelector import androidx.test.uiautomator.Until import org.hamcrest.CoreMatchers.allOf -import org.hamcrest.CoreMatchers.not import org.junit.Assert.assertTrue import org.mozilla.fenix.R import org.mozilla.fenix.helpers.Constants @@ -58,23 +57,29 @@ import org.mozilla.fenix.tabstray.TabsTrayTestTag * Implementation of Robot Pattern for the URL toolbar. */ class NavigationToolbarRobot { - fun verifyUrl(url: String) = + fun verifyUrl(url: String) { + Log.i(TAG, "verifyUrl: Trying to verify toolbar text matches $url") onView(withId(R.id.mozac_browser_toolbar_url_view)).check(matches(withText(url))) + Log.i(TAG, "verifyUrl: Verified toolbar text matches $url") + } fun verifyTabButtonShortcutMenuItems() { + Log.i(TAG, "verifyTabButtonShortcutMenuItems: Trying to verify tab counter shortcut options") onView(withId(R.id.mozac_browser_menu_recyclerView)) .check(matches(hasDescendant(withText("Close tab")))) .check(matches(hasDescendant(withText("New private tab")))) .check(matches(hasDescendant(withText("New tab")))) + Log.i(TAG, "verifyTabButtonShortcutMenuItems: Verified tab counter shortcut options") } fun verifyReaderViewDetected(visible: Boolean = false) { + Log.i(TAG, "verifyReaderViewDetected: Waiting for $waitingTime ms for reader view button to exist") mDevice.findObject( UiSelector() .description("Reader view"), - ) - .waitForExists(waitingTime) - + ).waitForExists(waitingTime) + Log.i(TAG, "verifyReaderViewDetected: Waited for $waitingTime ms for reader view button to exist") + Log.i(TAG, "verifyReaderViewDetected: Trying to verify that the reader view button is visible") onView( allOf( withParent(withId(R.id.mozac_browser_toolbar_page_actions)), @@ -87,16 +92,20 @@ class NavigationToolbarRobot { ViewAssertions.doesNotExist() }, ) + Log.i(TAG, "verifyReaderViewDetected: Verified that the reader view button is visible") } fun toggleReaderView() { + Log.i(TAG, "toggleReaderView: Waiting for $waitingTime ms for reader view button to exist") mDevice.findObject( UiSelector() .resourceId("$packageName:id/mozac_browser_toolbar_page_actions"), ) .waitForExists(waitingTime) - + Log.i(TAG, "toggleReaderView: Waited for $waitingTime ms for reader view button to exist") + Log.i(TAG, "toggleReaderView: Trying to click the reader view button") readerViewToggle().click() + Log.i(TAG, "toggleReaderView: Clicked the reader view button") } fun verifyClipboardSuggestionsAreDisplayed(link: String = "", shouldBeDisplayed: Boolean) = @@ -109,28 +118,42 @@ class NavigationToolbarRobot { exists = shouldBeDisplayed, ) - fun longClickEditModeToolbar() = - mDevice.findObject(By.res("$packageName:id/mozac_browser_toolbar_edit_url_view")).click(LONG_CLICK_DURATION) + fun longClickEditModeToolbar() { + Log.i(TAG, "longClickEditModeToolbar: Trying to long click the edit mode toolbar") + mDevice.findObject(By.res("$packageName:id/mozac_browser_toolbar_edit_url_view")) + .click(LONG_CLICK_DURATION) + Log.i(TAG, "longClickEditModeToolbar: Long clicked the edit mode toolbar") + } fun clickContextMenuItem(item: String) { mDevice.waitNotNull( Until.findObject(By.text(item)), waitingTime, ) + Log.i(TAG, "clickContextMenuItem: Trying click context menu item: $item") mDevice.findObject(By.text(item)).click() + Log.i(TAG, "clickContextMenuItem: Clicked context menu item: $item") } - fun clickClearToolbarButton() = clearAddressBarButton().click() + fun clickClearToolbarButton() { + Log.i(TAG, "clickClearToolbarButton: Trying click the clear address button") + clearAddressBarButton().click() + Log.i(TAG, "clickClearToolbarButton: Clicked the clear address button") + } fun verifyToolbarIsEmpty() = - itemWithResIdContainingText( - "$packageName:id/mozac_browser_toolbar_edit_url_view", - getStringResource(R.string.search_hint), + assertUIObjectExists( + itemWithResIdContainingText( + "$packageName:id/mozac_browser_toolbar_edit_url_view", + getStringResource(R.string.search_hint), + ), ) // New unified search UI selector fun verifySearchBarPlaceholder(text: String) { + Log.i(TAG, "verifySearchBarPlaceholder: Waiting for $waitingTime ms for the toolbar to exist") urlBar().waitForExists(waitingTime) + Log.i(TAG, "verifySearchBarPlaceholder: Waited for $waitingTime ms for the toolbar to exist") assertItemTextEquals(urlBar(), expectedText = text) } @@ -156,19 +179,21 @@ class NavigationToolbarRobot { sessionLoadedIdlingResource = SessionLoadedIdlingResource() openEditURLView() - Log.i(TAG, "enterURLAndEnterToBrowser: Opened edit mode URL view") - + Log.i(TAG, "enterURLAndEnterToBrowser: Trying to set toolbar text to: $url") awesomeBar().setText(url.toString()) - Log.i(TAG, "enterURLAndEnterToBrowser: Set toolbar text to: $url") + Log.i(TAG, "enterURLAndEnterToBrowser: Toolbar text was set to: $url") + Log.i(TAG, "enterURLAndEnterToBrowser: Trying to press device enter button") mDevice.pressEnter() - Log.i(TAG, "enterURLAndEnterToBrowser: Clicked enter on keyboard, submitted query") + Log.i(TAG, "enterURLAndEnterToBrowser: Pressed device enter button") runWithIdleRes(sessionLoadedIdlingResource) { + Log.i(TAG, "enterURLAndEnterToBrowser: Trying to assert that home screen layout or download button or the total cookie protection contextual hint exist") assertTrue( itemWithResId("$packageName:id/browserLayout").waitForExists(waitingTime) || itemWithResId("$packageName:id/download_button").waitForExists(waitingTime) || itemWithResId("cfr.dismiss").waitForExists(waitingTime), ) + Log.i(TAG, "enterURLAndEnterToBrowser: Asserted that home screen layout or download button or the total cookie protection contextual hint exist") } BrowserRobot().interact() @@ -180,9 +205,12 @@ class NavigationToolbarRobot { interact: BrowserRobot.() -> Unit, ): BrowserRobot.Transition { openEditURLView() - + Log.i(TAG, "enterURLAndEnterToBrowserForTCPCFR: Trying to set toolbar text to: $url") awesomeBar().setText(url.toString()) + Log.i(TAG, "enterURLAndEnterToBrowserForTCPCFR: Toolbar text was set to: $url") + Log.i(TAG, "enterURLAndEnterToBrowserForTCPCFR: Trying to press device enter button") mDevice.pressEnter() + Log.i(TAG, "enterURLAndEnterToBrowserForTCPCFR: Pressed device enter button") BrowserRobot().interact() return BrowserRobot.Transition() @@ -194,12 +222,17 @@ class NavigationToolbarRobot { sessionLoadedIdlingResource = SessionLoadedIdlingResource() openEditURLView() - + Log.i(TAG, "openTabCrashReporter: Trying to set toolbar text to: $crashUrl") awesomeBar().setText(crashUrl) + Log.i(TAG, "openTabCrashReporter: Toolbar text was set to: $crashUrl") + Log.i(TAG, "openTabCrashReporter: Trying to press device enter button") mDevice.pressEnter() + Log.i(TAG, "openTabCrashReporter: Pressed device enter button") runWithIdleRes(sessionLoadedIdlingResource) { + Log.i(TAG, "openTabCrashReporter: Trying to find the tab crasher image") mDevice.findObject(UiSelector().resourceId("$packageName:id/crash_tab_image")) + Log.i(TAG, "openTabCrashReporter: Found the tab crasher image") } BrowserRobot().interact() @@ -208,15 +241,21 @@ class NavigationToolbarRobot { fun openThreeDotMenu(interact: ThreeDotMenuMainRobot.() -> Unit): ThreeDotMenuMainRobot.Transition { mDevice.waitNotNull(Until.findObject(By.res("$packageName:id/mozac_browser_toolbar_menu")), waitingTime) + Log.i(TAG, "openThreeDotMenu: Trying to click the main menu button") threeDotButton().click() + Log.i(TAG, "openThreeDotMenu: Clicked the main menu button") ThreeDotMenuMainRobot().interact() return ThreeDotMenuMainRobot.Transition() } fun openTabTray(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { + Log.i(TAG, "openTabTray: Waiting for device to be idle for $waitingTime ms") mDevice.waitForIdle(waitingTime) + Log.i(TAG, "openTabTray: Waited for device to be idle for $waitingTime ms") + Log.i(TAG, "openTabTray: Trying to click the tabs tray button") tabTrayButton().click() + Log.i(TAG, "openTabTray: Clicked the tabs tray button") mDevice.waitNotNull( Until.findObject(By.res("$packageName:id/tab_layout")), waitingTime, @@ -229,6 +268,7 @@ class NavigationToolbarRobot { fun openComposeTabDrawer(composeTestRule: HomeActivityComposeTestRule, interact: ComposeTabDrawerRobot.() -> Unit): ComposeTabDrawerRobot.Transition { for (i in 1..Constants.RETRY_COUNT) { try { + Log.i(TAG, "openComposeTabDrawer: Started try #$i") mDevice.waitForObjects( mDevice.findObject( UiSelector() @@ -236,30 +276,40 @@ class NavigationToolbarRobot { ), waitingTime, ) - + Log.i(TAG, "openComposeTabDrawer: Trying to click the tabs tray button") tabTrayButton().click() - + Log.i(TAG, "openComposeTabDrawer: Clicked the tabs tray button") + Log.i(TAG, "openComposeTabDrawer: Trying to verify that the tabs tray exists") composeTestRule.onNodeWithTag(TabsTrayTestTag.tabsTray).assertExists() + Log.i(TAG, "openComposeTabDrawer: Verified that the tabs tray exists") break } catch (e: AssertionError) { + Log.i(TAG, "openComposeTabDrawer: AssertionError caught, executing fallback methods") if (i == Constants.RETRY_COUNT) { throw e } else { + Log.i(TAG, "openComposeTabDrawer: Waiting for device to be idle") mDevice.waitForIdle() + Log.i(TAG, "openComposeTabDrawer: Waited for device to be idle") } } } - + Log.i(TAG, "openComposeTabDrawer: Trying to verify the tabs tray new tab FAB button exists") composeTestRule.onNodeWithTag(TabsTrayTestTag.fab).assertExists() + Log.i(TAG, "openComposeTabDrawer: Verified the tabs tray new tab FAB button exists") ComposeTabDrawerRobot(composeTestRule).interact() return ComposeTabDrawerRobot.Transition(composeTestRule) } fun visitLinkFromClipboard(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + Log.i(TAG, "visitLinkFromClipboard: Waiting for $waitingTimeShort ms for clear address button to exist") if (clearAddressBarButton().waitForExists(waitingTimeShort)) { + Log.i(TAG, "visitLinkFromClipboard: Waited for $waitingTimeShort ms for clear address button to exist") + Log.i(TAG, "visitLinkFromClipboard: Trying to click the clear address button") clearAddressBarButton().click() + Log.i(TAG, "visitLinkFromClipboard: Clicked the clear address button") } mDevice.waitNotNull( @@ -275,26 +325,33 @@ class NavigationToolbarRobot { waitingTime, ) } - + Log.i(TAG, "visitLinkFromClipboard: Trying to click the fill link from clipboard button") fillLinkButton().click() + Log.i(TAG, "visitLinkFromClipboard: Clicked the fill link from clipboard button") BrowserRobot().interact() return BrowserRobot.Transition() } fun goBackToHomeScreen(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { + Log.i(TAG, "goBackToHomeScreen: Trying to click the device back button") mDevice.pressBack() + Log.i(TAG, "goBackToHomeScreen: Clicked the device back button") + Log.i(TAG, "goBackToHomeScreen: Waiting for $waitingTimeShort ms for $packageName window to be updated") mDevice.waitForWindowUpdate(packageName, waitingTimeShort) + Log.i(TAG, "goBackToHomeScreen: Waited for $waitingTimeShort ms for $packageName window to be updated") HomeScreenRobot().interact() return HomeScreenRobot.Transition() } fun goBackToBrowserScreen(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + Log.i(TAG, "goBackToBrowserScreen: Trying to click the device back button") mDevice.pressBack() - Log.i(TAG, "goBackToBrowserScreen: Dismiss awesome bar using device back button") + Log.i(TAG, "goBackToBrowserScreen: Clicked the device back button") + Log.i(TAG, "goBackToBrowserScreen: Waiting for $waitingTimeShort ms for $packageName window to be updated") mDevice.waitForWindowUpdate(packageName, waitingTimeShort) - Log.i(TAG, "goBackToBrowserScreen: Waited $waitingTimeShort for window update") + Log.i(TAG, "goBackToBrowserScreen: Waited for $waitingTimeShort ms for $packageName window to be updated") BrowserRobot().interact() return BrowserRobot.Transition() @@ -302,16 +359,19 @@ class NavigationToolbarRobot { fun openTabButtonShortcutsMenu(interact: NavigationToolbarRobot.() -> Unit): Transition { mDevice.waitNotNull(Until.findObject(By.res("$packageName:id/counter_root"))) + Log.i(TAG, "openTabButtonShortcutsMenu: Trying to long click the tab counter button") tabsCounter().perform(longClick()) - Log.i(TAG, "Tabs counter long-click successful.") + Log.i(TAG, "openTabButtonShortcutsMenu: Long clicked the tab counter button") NavigationToolbarRobot().interact() return Transition() } fun closeTabFromShortcutsMenu(interact: NavigationToolbarRobot.() -> Unit): Transition { + Log.i(TAG, "closeTabFromShortcutsMenu: Waiting for device to be idle for $waitingTime ms") mDevice.waitForIdle(waitingTime) - + Log.i(TAG, "closeTabFromShortcutsMenu: Waited for device to be idle for $waitingTime ms") + Log.i(TAG, "closeTabFromShortcutsMenu: Trying to click the \"Close tab\" button") onView(withId(R.id.mozac_browser_menu_recyclerView)) .perform( RecyclerViewActions.actionOnItem( @@ -321,15 +381,17 @@ class NavigationToolbarRobot { ViewActions.click(), ), ) - Log.i(TAG, "Clicked the tab shortcut Close tab button.") + Log.i(TAG, "closeTabFromShortcutsMenu: Clicked the \"Close tab\" button") NavigationToolbarRobot().interact() return Transition() } fun openNewTabFromShortcutsMenu(interact: SearchRobot.() -> Unit): SearchRobot.Transition { + Log.i(TAG, "openNewTabFromShortcutsMenu: Waiting for device to be idle for $waitingTime ms") mDevice.waitForIdle(waitingTime) - Log.i(TAG, "Looking for tab shortcut New tab button.") + Log.i(TAG, "openNewTabFromShortcutsMenu: Waited for device to be idle for $waitingTime ms") + Log.i(TAG, "openNewTabFromShortcutsMenu: Trying to click the \"New tab\" button") onView(withId(R.id.mozac_browser_menu_recyclerView)) .perform( RecyclerViewActions.actionOnItem( @@ -339,15 +401,17 @@ class NavigationToolbarRobot { ViewActions.click(), ), ) - Log.i(TAG, "Clicked the tab shortcut New tab button.") + Log.i(TAG, "openNewTabFromShortcutsMenu: Clicked the \"New tab\" button") SearchRobot().interact() return SearchRobot.Transition() } fun openNewPrivateTabFromShortcutsMenu(interact: SearchRobot.() -> Unit): SearchRobot.Transition { + Log.i(TAG, "openNewPrivateTabFromShortcutsMenu: Waiting for device to be idle for $waitingTime ms") mDevice.waitForIdle(waitingTime) - Log.i(TAG, "Looking for tab shortcut New private tab button.") + Log.i(TAG, "openNewPrivateTabFromShortcutsMenu: Waited for device to be idle for $waitingTime ms") + Log.i(TAG, "openNewPrivateTabFromShortcutsMenu: Trying to click the \"New private tab\" button") onView(withId(R.id.mozac_browser_menu_recyclerView)) .perform( RecyclerViewActions.actionOnItem( @@ -357,26 +421,33 @@ class NavigationToolbarRobot { ViewActions.click(), ), ) - Log.i(TAG, "Clicked the tab shortcut New private tab button.") + Log.i(TAG, "openNewPrivateTabFromShortcutsMenu: Clicked the \"New private tab\" button") SearchRobot().interact() return SearchRobot.Transition() } fun clickUrlbar(interact: SearchRobot.() -> Unit): SearchRobot.Transition { + Log.i(TAG, "clickUrlbar: Trying to click the toolbar") urlBar().click() - + Log.i(TAG, "clickUrlbar: Clicked the toolbar") + Log.i(TAG, "clickUrlbar: Waiting for $waitingTime ms for the edit mode toolbar to exist") mDevice.findObject( UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_edit_url_view"), ).waitForExists(waitingTime) + Log.i(TAG, "clickUrlbar: Waited for $waitingTime ms for the edit mode toolbar to exist") SearchRobot().interact() return SearchRobot.Transition() } fun clickSearchSelectorButton(interact: SearchRobot.() -> Unit): SearchRobot.Transition { + Log.i(TAG, "clickSearchSelectorButton: Waiting for $waitingTime ms for the search selector button to exist") searchSelectorButton().waitForExists(waitingTime) + Log.i(TAG, "clickSearchSelectorButton: Waited for $waitingTime ms for the search selector button to exist") + Log.i(TAG, "clickSearchSelectorButton: Trying to click the search selector button") searchSelectorButton().click() + Log.i(TAG, "clickSearchSelectorButton: Clicked the search selector button") SearchRobot().interact() return SearchRobot.Transition() @@ -390,11 +461,15 @@ fun navigationToolbar(interact: NavigationToolbarRobot.() -> Unit): NavigationTo } fun openEditURLView() { + Log.i(TAG, "openEditURLView: Waiting for $waitingTime ms for the toolbar to exist") urlBar().waitForExists(waitingTime) + Log.i(TAG, "openEditURLView: Waited for $waitingTime ms for the toolbar to exist") + Log.i(TAG, "openEditURLView: Trying to click the toolbar") urlBar().click() - Log.i(TAG, "openEditURLView: URL bar clicked.") + Log.i(TAG, "openEditURLView: Clicked the toolbar") + Log.i(TAG, "openEditURLView: Waiting for $waitingTime ms for the edit mode toolbar to exist") itemWithResId("$packageName:id/mozac_browser_toolbar_edit_url_view").waitForExists(waitingTime) - Log.i(TAG, "openEditURLView: Edit URL bar displayed.") + Log.i(TAG, "openEditURLView: Waited for $waitingTime ms for the edit mode toolbar to exist") } private fun urlBar() = mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar")) From 11348a2e7f08e43e7aadd093c4e94309b18f4e09 Mon Sep 17 00:00:00 2001 From: DreVla Date: Wed, 10 Jan 2024 16:28:38 +0200 Subject: [PATCH 38/51] Bug 1870701 - Review Checker opt-in privacy policy link and text update Updated the Privacy Policy links and text to clearly explain the minimal nature of data that's collected and processed during Review Checker use in Firefox. --- .../middleware/ReviewQualityCheckNavigationMiddleware.kt | 3 ++- .../shopping/ui/ReviewQualityCheckContextualOnboarding.kt | 7 ++++--- fenix/app/src/main/res/values/strings.xml | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/fenix/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNavigationMiddleware.kt b/fenix/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNavigationMiddleware.kt index 91b846fcebc4..aaa1c4673cfb 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNavigationMiddleware.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/shopping/middleware/ReviewQualityCheckNavigationMiddleware.kt @@ -13,7 +13,8 @@ import org.mozilla.fenix.shopping.store.ReviewQualityCheckState private const val POWERED_BY_URL = "https://www.fakespot.com/review-checker?utm_source=review-checker" + "&utm_campaign=fakespot-by-mozilla&utm_medium=inproduct&utm_term=core-sheet" -private const val PRIVACY_POLICY_URL = "https://www.fakespot.com/privacy-policy" +private const val PRIVACY_POLICY_URL = "https://www.mozilla.org/en-US/privacy/firefox/#review-checker" + + "?utm_source=review-checker&utm_campaign=privacy-policy&utm_medium=in-product&utm_term=opt-in-screen" private const val TERMS_OF_USE_URL = "https://www.fakespot.com/terms" /** diff --git a/fenix/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt b/fenix/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt index e5c53777b7d0..afa4da62dd4e 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt @@ -61,7 +61,7 @@ fun ReviewQualityCheckContextualOnboarding( val learnMoreText = stringResource(id = R.string.review_quality_check_contextual_onboarding_learn_more_link) val privacyPolicyText = - stringResource(id = R.string.review_quality_check_contextual_onboarding_privacy_policy) + stringResource(id = R.string.review_quality_check_contextual_onboarding_privacy_policy_3) val termsOfUseText = stringResource(id = R.string.review_quality_check_contextual_onboarding_terms_use) val titleContentDescription = @@ -113,9 +113,10 @@ fun ReviewQualityCheckContextualOnboarding( LinkText( text = stringResource( - id = R.string.review_quality_check_contextual_onboarding_caption, - stringResource(id = R.string.shopping_product_name), + id = R.string.review_quality_check_contextual_onboarding_caption_3, + stringResource(id = R.string.firefox), privacyPolicyText, + stringResource(id = R.string.shopping_product_name), termsOfUseText, ), linkTextStates = listOf( diff --git a/fenix/app/src/main/res/values/strings.xml b/fenix/app/src/main/res/values/strings.xml index 1796126135be..38148a49f80e 100644 --- a/fenix/app/src/main/res/values/strings.xml +++ b/fenix/app/src/main/res/values/strings.xml @@ -2247,13 +2247,17 @@ Learn more - By selecting “Yes, try it” you agree to %1$s by Mozilla’s %2$s and %3$s. + By selecting “Yes, try it” you agree to %1$s by Mozilla’s %2$s and %3$s. By selecting “Yes, try it” you agree to the following from %1$s: + + By selecting “Yes, try it” you agree to %1$s\'s %2$s and %3$s\'s %4$s. - privacy policy + privacy policy Privacy policy + + privacy notice terms of use From 1659b3bd1097e3a09dc52090e8538cfa56ff4728 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 13 Feb 2024 13:18:55 +0000 Subject: [PATCH 39/51] Update GeckoView (Nightly) to 124.0.20240213093751. --- android-components/plugins/dependencies/src/main/java/Gecko.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/Gecko.kt b/android-components/plugins/dependencies/src/main/java/Gecko.kt index 61f2182a2445..63d33d2f3a30 100644 --- a/android-components/plugins/dependencies/src/main/java/Gecko.kt +++ b/android-components/plugins/dependencies/src/main/java/Gecko.kt @@ -9,7 +9,7 @@ object Gecko { /** * GeckoView Version. */ - const val version = "124.0.20240212214644" + const val version = "124.0.20240213093751" /** * GeckoView channel From 7658c557554fd9c31c987ae5b2de4aea33de87c5 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 12 Feb 2024 15:04:48 -0500 Subject: [PATCH 40/51] Bug 1879944 - Update Compose Compiler to version 1.5.9 --- .../plugins/dependencies/src/main/java/DependenciesPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt index 18dcb3366171..f1daa633fbf8 100644 --- a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt +++ b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt @@ -53,7 +53,7 @@ object Versions { // see https://android-developers.googleblog.com/2022/06/independent-versioning-of-Jetpack-Compose-libraries.html // for Jetpack Compose libraries versioning const val compose_version = "1.5.4" - const val compose_compiler = "1.5.8" + const val compose_compiler = "1.5.9" object AndroidX { const val activityCompose = "1.7.2" From 0c2a6aab6a678ae75a2195daf6734f24883be2cd Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Tue, 13 Feb 2024 13:31:12 +0200 Subject: [PATCH 41/51] Bug 1880047 - Add missing pairs of logs to NotificationRobot --- .../fenix/ui/robots/NotificationRobot.kt | 83 ++++++++++++------- 1 file changed, 54 insertions(+), 29 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt index 7398746e95c3..5a6acc9cbeac 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt @@ -29,10 +29,10 @@ class NotificationRobot { var notificationFound = mDevice.findObject(notification).waitForExists(waitingTime) while (!notificationFound) { + Log.i(TAG, "verifySystemNotificationExists: Waiting for $waitingTime ms for notification: $notification to exist") scrollToEnd() - Log.i(TAG, "verifySystemNotificationExists: Scrolling to the end of the notification tray") - Log.i(TAG, "verifySystemNotificationExists: Looking for $notificationMessage notification") notificationFound = mDevice.findObject(notification).waitForExists(waitingTime) + Log.i(TAG, "verifySystemNotificationExists: Waited for $waitingTime ms for notification: $notification to exist") } assertUIObjectExists(itemWithText(notificationMessage)) @@ -40,33 +40,37 @@ class NotificationRobot { fun clearNotifications() { if (clearButton.exists()) { - Log.i(TAG, "clearNotifications: Verified that clear notifications button exists") + Log.i(TAG, "clearNotifications:The clear notifications button exists") + Log.i(TAG, "clearNotifications: Trying to click the clear notifications button") clearButton.click() - Log.i(TAG, "clearNotifications: Clicked clear notifications button") + Log.i(TAG, "clearNotifications: Clicked the clear notifications button") } else { scrollToEnd() - Log.i(TAG, "clearNotifications: Scrolled to end of notifications tray") if (clearButton.exists()) { - Log.i(TAG, "clearNotifications: Verified that clear notifications button exists") + Log.i(TAG, "clearNotifications:The clear notifications button exists") + Log.i(TAG, "clearNotifications: Trying to click the clear notifications button") clearButton.click() - Log.i(TAG, "clearNotifications: Clicked clear notifications button") + Log.i(TAG, "clearNotifications: Clicked the clear notifications button") } else if (notificationTray().exists()) { + Log.i(TAG, "clearNotifications: The notifications tray is still displayed") + Log.i(TAG, "clearNotifications: Trying to click device back button") mDevice.pressBack() - Log.i(TAG, "clearNotifications: Dismiss notifications tray by clicking device back button") + Log.i(TAG, "clearNotifications: Clicked device back button") } } } fun cancelAllShownNotifications() { + Log.i(TAG, "cancelAllShownNotifications: Trying to cancel all system notifications") cancelAll() Log.i(TAG, "cancelAllShownNotifications: Canceled all system notifications") } fun verifySystemNotificationDoesNotExist(notificationMessage: String) { - Log.i(TAG, "verifySystemNotificationDoesNotExist: Waiting for $notificationMessage notification to be gone") + Log.i(TAG, "verifySystemNotificationDoesNotExist: Waiting for $waitingTime ms for notification: $notificationMessage to be gone") mDevice.findObject(UiSelector().textContains(notificationMessage)).waitUntilGone(waitingTime) + Log.i(TAG, "verifySystemNotificationDoesNotExist: Waited for $waitingTime ms for notification: $notificationMessage to be gone") assertUIObjectExists(itemContainingText(notificationMessage), exists = false) - Log.i(TAG, "verifySystemNotificationDoesNotExist: Verified that $notificationMessage notification does not exist") } fun verifyPrivateTabsNotification() { @@ -75,17 +79,22 @@ class NotificationRobot { } fun clickMediaNotificationControlButton(action: String) { + Log.i(TAG, "clickMediaNotificationControlButton: Waiting for $waitingTime ms for the system media control button: $action to exist") mediaSystemNotificationButton(action).waitForExists(waitingTime) + Log.i(TAG, "clickMediaNotificationControlButton: Waited for $waitingTime ms for the system media control button: $action to exist") + Log.i(TAG, "clickMediaNotificationControlButton: Trying to click the system media control button: $action") mediaSystemNotificationButton(action).click() + Log.i(TAG, "clickMediaNotificationControlButton: Clicked the system media control button: $action") } fun clickDownloadNotificationControlButton(action: String) { for (i in 1..RETRY_COUNT) { - Log.i(TAG, "clickPageObject: For loop i = $i") + Log.i(TAG, "clickDownloadNotificationControlButton: Started try #$i") try { assertUIObjectExists(downloadSystemNotificationButton(action)) + Log.i(TAG, "clickDownloadNotificationControlButton: Trying to click the download system notification: $action button and wait for $waitingTimeShort ms for a new window") downloadSystemNotificationButton(action).clickAndWaitForNewWindow(waitingTimeShort) - Log.i(TAG, "clickDownloadNotificationControlButton: Clicked app notification $action button and waits for a new window for $waitingTimeShort ms") + Log.i(TAG, "clickDownloadNotificationControlButton: Clicked the download system notification: $action button and waited for $waitingTimeShort ms for a new window") assertUIObjectExists( downloadSystemNotificationButton(action), exists = false, @@ -93,12 +102,13 @@ class NotificationRobot { break } catch (e: AssertionError) { - Log.i(TAG, "clickDownloadNotificationControlButton: Catch block") + Log.i(TAG, "clickDownloadNotificationControlButton: AssertionError caught, executing fallback methods") if (i == RETRY_COUNT) { throw e } + Log.i(TAG, "clickDownloadNotificationControlButton: Waiting for $waitingTimeShort ms for $packageName window to be updated") mDevice.waitForWindowUpdate(packageName, waitingTimeShort) - Log.i(TAG, "clickDownloadNotificationControlButton: Waited $waitingTimeShort ms for window update") + Log.i(TAG, "clickDownloadNotificationControlButton: Waited for $waitingTimeShort ms for $packageName window to be updated") } } } @@ -108,14 +118,16 @@ class NotificationRobot { fun expandNotificationMessage() { while (!notificationHeader.exists()) { + Log.i(TAG, "expandNotificationMessage: Waiting for $appName notification to exist") scrollToEnd() - Log.i(TAG, "expandNotificationMessage: Scrolled to end of notification tray") } if (notificationHeader.exists()) { + Log.i(TAG, "expandNotificationMessage: $appName notification exists") // expand the notification + Log.i(TAG, "expandNotificationMessage: Trying to click $appName notification") notificationHeader.click() - Log.i(TAG, "expandNotificationMessage: Clicked the app notification") + Log.i(TAG, "expandNotificationMessage: Clicked $appName notification") // double check if notification actions are viewable by checking for action existence; otherwise scroll again while (!mDevice.findObject(UiSelector().resourceId("android:id/action0")).exists() && @@ -123,7 +135,6 @@ class NotificationRobot { ) { Log.i(TAG, "expandNotificationMessage: App notification action buttons do not exist") scrollToEnd() - Log.i(TAG, "expandNotificationMessage: Scrolled to end of notification tray") } } } @@ -136,41 +147,46 @@ class NotificationRobot { ) { // In case it fails, retry max 3x the swipe action on download system notifications for (i in 1..RETRY_COUNT) { - Log.i(TAG, "swipeDownloadNotification: For loop i = $i") + Log.i(TAG, "swipeDownloadNotification: Started try #$i") try { - Log.i(TAG, "swipeDownloadNotification: Try block") var retries = 0 while (itemContainingText(appName).exists() && retries++ < 3) { - Log.i(TAG, "swipeDownloadNotification: While loop retries = $retries") // Swipe left the download system notification if (direction == "Left") { itemContainingText(appName) .also { + Log.i(TAG, "swipeDownloadNotification: Waiting for $waitingTime ms for $appName notification to exist") it.waitForExists(waitingTime) + Log.i(TAG, "swipeDownloadNotification: Waited for $waitingTime ms for $appName notification to exist") + Log.i(TAG, "swipeDownloadNotification: Trying to perform swipe left action on $appName notification") it.swipeLeft(3) + Log.i(TAG, "swipeDownloadNotification: Performed swipe left action on $appName notification") } - Log.i(TAG, "swipeDownloadNotification: Swiped left download notification") } else { // Swipe right the download system notification itemContainingText(appName) .also { + Log.i(TAG, "swipeDownloadNotification: Waiting for $waitingTime ms for $appName notification to exist") it.waitForExists(waitingTime) + Log.i(TAG, "swipeDownloadNotification: Waited for $waitingTime ms for $appName notification to exist") + Log.i(TAG, "swipeDownloadNotification: Trying to perform swipe right action on $appName notification") it.swipeRight(3) + Log.i(TAG, "swipeDownloadNotification: Performed swipe right action on $appName notification") } - Log.i(TAG, "swipeDownloadNotification: Swiped right download notification") } } // Not all download related system notifications can be dismissed if (shouldDismissNotification) { + Log.i(TAG, "swipeDownloadNotification: $appName notification can't be dismissed: $shouldDismissNotification") assertUIObjectExists(itemContainingText(appName), exists = false) } else { + Log.i(TAG, "swipeDownloadNotification: $appName notification can be dismissed: $shouldDismissNotification") assertUIObjectExists(itemContainingText(appName)) - Log.i(TAG, "swipeDownloadNotification: Verified that $appName notification exist") } break } catch (e: AssertionError) { - Log.i(TAG, "swipeDownloadNotification: Catch block") + Log.i(TAG, "swipeDownloadNotification: AssertionError caught, executing fallback methods") if (i == RETRY_COUNT) { throw e } else { @@ -179,11 +195,12 @@ class NotificationRobot { }.openNotificationShade { // The download complete system notification can't be expanded if (canExpandNotification) { + Log.i(TAG, "swipeDownloadNotification: $appName notification can be expanded: $canExpandNotification") // In all cases the download system notification title will be the app name verifySystemNotificationExists(appName) - Log.i(TAG, "swipeDownloadNotification: Verified that $appName notification exist") expandNotificationMessage() } else { + Log.i(TAG, "swipeDownloadNotification: $appName notification can't be expanded: $canExpandNotification") // Using the download completed system notification summary to bring in to view an properly verify it verifySystemNotificationExists("Download completed") } @@ -194,10 +211,12 @@ class NotificationRobot { } fun clickNotification(notificationMessage: String) { - Log.i(TAG, "clickNotification: Looking for $notificationMessage notification") + Log.i(TAG, "clickNotification: Waiting for $waitingTime ms for $notificationMessage notification to exist") mDevice.findObject(UiSelector().text(notificationMessage)).waitForExists(waitingTime) + Log.i(TAG, "clickNotification: Waited for $waitingTime ms for $notificationMessage notification to exist") + Log.i(TAG, "clickNotification: Trying to click the $notificationMessage notification and wait for $waitingTimeShort ms for a new window") mDevice.findObject(UiSelector().text(notificationMessage)).clickAndWaitForNewWindow(waitingTimeShort) - Log.i(TAG, "clickNotification: Clicked $notificationMessage notification and waiting for $waitingTimeShort ms for a new window") + Log.i(TAG, "clickNotification: Clicked the $notificationMessage notification and waited for $waitingTimeShort ms for a new window") } class Transition { @@ -206,18 +225,22 @@ class NotificationRobot { try { assertUIObjectExists(closePrivateTabsNotification()) } catch (e: AssertionError) { + Log.i(TAG, "clickClosePrivateTabsNotification: Trying to perform fling action to the end of the notification tray") notificationTray().flingToEnd(1) + Log.i(TAG, "clickClosePrivateTabsNotification: Performed fling action to the end of the notification tray") } - + Log.i(TAG, "clickClosePrivateTabsNotification: Trying to click the close private tabs notification") closePrivateTabsNotification().click() + Log.i(TAG, "clickClosePrivateTabsNotification: Clicked the close private tabs notification") HomeScreenRobot().interact() return HomeScreenRobot.Transition() } fun closeNotificationTray(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + Log.i(TAG, "closeNotificationTray: Trying to click device back button") mDevice.pressBack() - Log.i(TAG, "closeNotificationTray: Closed notification tray using device back button") + Log.i(TAG, "closeNotificationTray: Clicked device back button") BrowserRobot().interact() return BrowserRobot.Transition() @@ -259,7 +282,9 @@ private val notificationHeader = ) private fun scrollToEnd() { + Log.i(TAG, "scrollToEnd: Trying to perform scroll to the end of the notification tray action") notificationTray().scrollToEnd(1) + Log.i(TAG, "scrollToEnd: Performed scroll to the end of the notification tray action") } private val clearButton = mDevice.findObject(UiSelector().resourceId("com.android.systemui:id/dismiss_text")) From d947b10eaf6fbb4b761bc8d95460ceb4017586d4 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Tue, 13 Feb 2024 16:02:48 +0200 Subject: [PATCH 42/51] Bug 1880047 - Convert private variables to functions so they don't get initialised --- .../fenix/ui/robots/NotificationRobot.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt index 5a6acc9cbeac..99cbbf9a6906 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt @@ -39,17 +39,17 @@ class NotificationRobot { } fun clearNotifications() { - if (clearButton.exists()) { + if (clearButton().exists()) { Log.i(TAG, "clearNotifications:The clear notifications button exists") Log.i(TAG, "clearNotifications: Trying to click the clear notifications button") - clearButton.click() + clearButton().click() Log.i(TAG, "clearNotifications: Clicked the clear notifications button") } else { scrollToEnd() - if (clearButton.exists()) { + if (clearButton().exists()) { Log.i(TAG, "clearNotifications:The clear notifications button exists") Log.i(TAG, "clearNotifications: Trying to click the clear notifications button") - clearButton.click() + clearButton().click() Log.i(TAG, "clearNotifications: Clicked the clear notifications button") } else if (notificationTray().exists()) { Log.i(TAG, "clearNotifications: The notifications tray is still displayed") @@ -117,16 +117,16 @@ class NotificationRobot { assertUIObjectExists(mediaSystemNotificationButton(action)) fun expandNotificationMessage() { - while (!notificationHeader.exists()) { + while (!notificationHeader().exists()) { Log.i(TAG, "expandNotificationMessage: Waiting for $appName notification to exist") scrollToEnd() } - if (notificationHeader.exists()) { + if (notificationHeader().exists()) { Log.i(TAG, "expandNotificationMessage: $appName notification exists") // expand the notification Log.i(TAG, "expandNotificationMessage: Trying to click $appName notification") - notificationHeader.click() + notificationHeader().click() Log.i(TAG, "expandNotificationMessage: Clicked $appName notification") // double check if notification actions are viewable by checking for action existence; otherwise scroll again @@ -274,7 +274,7 @@ private fun notificationTray() = UiScrollable( UiSelector().resourceId("com.android.systemui:id/notification_stack_scroller"), ).setAsVerticalList() -private val notificationHeader = +private fun notificationHeader() = mDevice.findObject( UiSelector() .resourceId("android:id/app_name_text") @@ -287,7 +287,7 @@ private fun scrollToEnd() { Log.i(TAG, "scrollToEnd: Performed scroll to the end of the notification tray action") } -private val clearButton = mDevice.findObject(UiSelector().resourceId("com.android.systemui:id/dismiss_text")) +private fun clearButton() = mDevice.findObject(UiSelector().resourceId("com.android.systemui:id/dismiss_text")) private fun cancelAll() { val notificationManager: NotificationManager = From ed17a80811b9cba9902c015021f54c71d48d46bc Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Tue, 13 Feb 2024 14:21:00 +0200 Subject: [PATCH 43/51] Bug 1880064 - Add logs to PwaRobot --- .../java/org/mozilla/fenix/ui/robots/PwaRobot.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt index f9e050526cd4..0de5dc465a3c 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt @@ -4,24 +4,32 @@ package org.mozilla.fenix.ui.robots +import android.util.Log import androidx.test.uiautomator.UiSelector import org.junit.Assert.assertTrue import org.mozilla.fenix.helpers.AppAndSystemHelper.isExternalAppBrowserActivityInCurrentTask +import org.mozilla.fenix.helpers.Constants +import org.mozilla.fenix.helpers.Constants.TAG import org.mozilla.fenix.helpers.MatcherHelper.assertUIObjectExists +import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId import org.mozilla.fenix.helpers.TestHelper.mDevice import org.mozilla.fenix.helpers.TestHelper.packageName class PwaRobot { - fun verifyCustomTabToolbarIsNotDisplayed() = assertUIObjectExists(customTabToolbar(), exists = false) - fun verifyPwaActivityInCurrentTask() = assertTrue(isExternalAppBrowserActivityInCurrentTask()) + fun verifyCustomTabToolbarIsNotDisplayed() = assertUIObjectExists(itemWithResId("$packageName:id/toolbar"), exists = false) + fun verifyPwaActivityInCurrentTask() { + Log.i(TAG, "Trying to verify that the latest activity of the application is used for custom tabs or PWAs") + assertTrue(isExternalAppBrowserActivityInCurrentTask()) + Log.i(TAG, "Verified that the latest activity of the application is used for custom tabs or PWAs") + } class Transition } fun pwaScreen(interact: PwaRobot.() -> Unit): PwaRobot.Transition { + Log.i(TAG, "pwaScreen: Trying to find the engine view") mDevice.findObject(UiSelector().resourceId("$packageName:id/engineView")) + Log.i(Constants.TAG, "pwaScreen: Found the engine view") PwaRobot().interact() return PwaRobot.Transition() } - -private fun customTabToolbar() = mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar")) From 2763c7f3d8eec8e825e7a0e90cf70a37823d6f1b Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Tue, 13 Feb 2024 14:30:48 +0200 Subject: [PATCH 44/51] Bug 1880064 - Remove redundant assertion functions from ReaderViewRobot --- .../fenix/ui/robots/ReaderViewRobot.kt | 117 +++++++----------- 1 file changed, 45 insertions(+), 72 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt index 89bd934fbe1b..910dd846e9a1 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt @@ -25,31 +25,67 @@ import org.mozilla.fenix.helpers.click class ReaderViewRobot { fun verifyAppearanceFontGroup(visible: Boolean = false): ViewInteraction = - assertAppearanceFontGroup(visible) + onView( + withId(R.id.mozac_feature_readerview_font_group), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceFontSansSerif(visible: Boolean = false): ViewInteraction = - assertAppearanceFontSansSerif(visible) + onView( + withId(R.id.mozac_feature_readerview_font_sans_serif), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceFontSerif(visible: Boolean = false): ViewInteraction = - assertAppearanceFontSerif(visible) + onView( + withId(R.id.mozac_feature_readerview_font_serif), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceFontDecrease(visible: Boolean = false): ViewInteraction = - assertAppearanceFontDecrease(visible) + onView( + withId(R.id.mozac_feature_readerview_font_size_decrease), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceFontIncrease(visible: Boolean = false): ViewInteraction = - assertAppearanceFontIncrease(visible) + onView( + withId(R.id.mozac_feature_readerview_font_size_increase), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceColorGroup(visible: Boolean = false): ViewInteraction = - assertAppearanceColorGroup(visible) + onView( + withId(R.id.mozac_feature_readerview_color_scheme_group), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceColorSepia(visible: Boolean = false): ViewInteraction = - assertAppearanceColorSepia(visible) + onView( + withId(R.id.mozac_feature_readerview_color_sepia), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceColorDark(visible: Boolean = false): ViewInteraction = - assertAppearanceColorDark(visible) + onView( + withId(R.id.mozac_feature_readerview_color_dark), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceColorLight(visible: Boolean = false): ViewInteraction = - assertAppearanceColorLight(visible) + onView( + withId(R.id.mozac_feature_readerview_color_light), + ).check( + matches(withEffectiveVisibility(visibleOrGone(visible))), + ) fun verifyAppearanceFontIsActive(fontType: String) { val fontTypeKey: String = "mozac-readerview-fonttype" @@ -189,68 +225,5 @@ fun readerViewRobot(interact: ReaderViewRobot.() -> Unit): ReaderViewRobot.Trans return ReaderViewRobot.Transition() } -private fun assertAppearanceFontGroup(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_font_group), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceFontSansSerif(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_font_sans_serif), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceFontSerif(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_font_serif), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceFontDecrease(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_font_size_decrease), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceFontIncrease(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_font_size_increase), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceColorDark(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_color_dark), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceColorLight(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_color_light), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceColorSepia(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_color_sepia), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - -private fun assertAppearanceColorGroup(visible: Boolean) = - onView( - withId(R.id.mozac_feature_readerview_color_scheme_group), - ).check( - matches(withEffectiveVisibility(visibleOrGone(visible))), - ) - private fun visibleOrGone(visibility: Boolean) = if (visibility) ViewMatchers.Visibility.VISIBLE else ViewMatchers.Visibility.GONE From 529d1ac674a8fb2e5d555e1f5aab37fc78329864 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Tue, 13 Feb 2024 15:01:48 +0200 Subject: [PATCH 45/51] Bug 1880064 - Add logs to ReaderViewRobot --- .../fenix/helpers/AppAndSystemHelper.kt | 1 + .../org/mozilla/fenix/ui/robots/PwaRobot.kt | 4 +- .../fenix/ui/robots/ReaderViewRobot.kt | 82 ++++++++++++++----- 3 files changed, 62 insertions(+), 25 deletions(-) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt index f9b95a2dc478..e3c4e532f164 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt @@ -226,6 +226,7 @@ object AppAndSystemHelper { * @return Boolean value that helps us know if the current activity supports custom tabs or PWAs. */ fun isExternalAppBrowserActivityInCurrentTask(): Boolean { + Log.i(TAG, "Trying to verify that the latest activity of the application is used for custom tabs or PWAs") val activityManager = TestHelper.appContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager mDevice.waitForIdle(TestAssetHelper.waitingTimeShort) diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt index 0de5dc465a3c..cd31c2fc8628 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/PwaRobot.kt @@ -18,9 +18,7 @@ import org.mozilla.fenix.helpers.TestHelper.packageName class PwaRobot { fun verifyCustomTabToolbarIsNotDisplayed() = assertUIObjectExists(itemWithResId("$packageName:id/toolbar"), exists = false) fun verifyPwaActivityInCurrentTask() { - Log.i(TAG, "Trying to verify that the latest activity of the application is used for custom tabs or PWAs") - assertTrue(isExternalAppBrowserActivityInCurrentTask()) - Log.i(TAG, "Verified that the latest activity of the application is used for custom tabs or PWAs") + assertTrue("$TAG: The latest activity of the application is not used for custom tabs or PWAs", isExternalAppBrowserActivityInCurrentTask()) } class Transition diff --git a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt index 910dd846e9a1..30d87d72c985 100644 --- a/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt +++ b/fenix/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ReaderViewRobot.kt @@ -7,8 +7,8 @@ package org.mozilla.fenix.ui.robots import android.content.Context +import android.util.Log import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.ViewInteraction import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility @@ -16,6 +16,7 @@ import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.platform.app.InstrumentationRegistry import org.junit.Assert.assertEquals import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.Constants.TAG import org.mozilla.fenix.helpers.TestHelper.mDevice import org.mozilla.fenix.helpers.click @@ -24,70 +25,98 @@ import org.mozilla.fenix.helpers.click */ class ReaderViewRobot { - fun verifyAppearanceFontGroup(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceFontGroup(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceFontGroup: Trying to verify that the font group buttons are visible: $visible") onView( withId(R.id.mozac_feature_readerview_font_group), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceFontGroup: Verified that the font group buttons are visible: $visible") + } - fun verifyAppearanceFontSansSerif(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceFontSansSerif(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceFontSansSerif: Trying to verify that the sans serif font button is visible: $visible") onView( withId(R.id.mozac_feature_readerview_font_sans_serif), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceFontSansSerif: Verified that the sans serif font button is visible: $visible") + } - fun verifyAppearanceFontSerif(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceFontSerif(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceFontSerif: Trying to verify that the serif font button is visible: $visible") onView( withId(R.id.mozac_feature_readerview_font_serif), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceFontSerif: Verified that the serif font button is visible: $visible") + } - fun verifyAppearanceFontDecrease(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceFontDecrease(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceFontDecrease: Trying to verify that the decrease font button is visible: $visible") onView( withId(R.id.mozac_feature_readerview_font_size_decrease), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceFontDecrease: Verified that the decrease font button is visible: $visible") + } - fun verifyAppearanceFontIncrease(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceFontIncrease(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceFontIncrease: Trying to verify that the increase font button is visible: $visible") onView( withId(R.id.mozac_feature_readerview_font_size_increase), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceFontIncrease: Verified that the increase font button is visible: $visible") + } - fun verifyAppearanceColorGroup(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceColorGroup(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceColorGroup: Trying to verify that the color group buttons are visible: $visible") onView( withId(R.id.mozac_feature_readerview_color_scheme_group), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceColorGroup: Verified that the color group buttons are visible: $visible") + } - fun verifyAppearanceColorSepia(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceColorSepia(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceColorSepia: Trying to verify that the sepia color button is visible: $visible") onView( withId(R.id.mozac_feature_readerview_color_sepia), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceColorSepia: Verified that the sepia color button is visible: $visible") + } - fun verifyAppearanceColorDark(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceColorDark(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceColorDark: Trying to verify that the dark color button is visible: $visible") onView( withId(R.id.mozac_feature_readerview_color_dark), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceColorDark: Verified that the dark color button is visible: $visible") + } - fun verifyAppearanceColorLight(visible: Boolean = false): ViewInteraction = + fun verifyAppearanceColorLight(visible: Boolean = false) { + Log.i(TAG, "verifyAppearanceColorLight: Trying to verify that the light color button is visible: $visible") onView( withId(R.id.mozac_feature_readerview_color_light), ).check( matches(withEffectiveVisibility(visibleOrGone(visible))), ) + Log.i(TAG, "verifyAppearanceColorLight: Verified that the light color button is visible: $visible") + } fun verifyAppearanceFontIsActive(fontType: String) { + Log.i(TAG, "verifyAppearanceFontIsActive: Trying to verify that the font type is: $fontType") val fontTypeKey: String = "mozac-readerview-fonttype" val prefs = InstrumentationRegistry.getInstrumentation() @@ -97,9 +126,11 @@ class ReaderViewRobot { ) assertEquals(fontType, prefs.getString(fontTypeKey, "")) + Log.i(TAG, "verifyAppearanceFontIsActive: Verified that the font type is: $fontType") } fun verifyAppearanceFontSize(expectedFontSize: Int) { + Log.i(TAG, "verifyAppearanceFontSize: Trying to verify that the font size is: $expectedFontSize") val fontSizeKey: String = "mozac-readerview-fontsize" val prefs = InstrumentationRegistry.getInstrumentation() @@ -111,9 +142,11 @@ class ReaderViewRobot { val fontSizeKeyValue = prefs.getInt(fontSizeKey, 3) assertEquals(expectedFontSize, fontSizeKeyValue) + Log.i(TAG, "verifyAppearanceFontSize: Verified that the font size is: $expectedFontSize") } fun verifyAppearanceColorSchemeChange(expectedColorScheme: String) { + Log.i(TAG, "verifyAppearanceColorSchemeChange: Trying to verify that the color scheme is: $expectedColorScheme") val colorSchemeKey: String = "mozac-readerview-colorscheme" val prefs = InstrumentationRegistry.getInstrumentation() @@ -123,12 +156,15 @@ class ReaderViewRobot { ) assertEquals(expectedColorScheme, prefs.getString(colorSchemeKey, "")) + Log.i(TAG, "verifyAppearanceColorSchemeChange: Verified that the color scheme is: $expectedColorScheme") } class Transition { fun closeAppearanceMenu(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + Log.i(TAG, "closeAppearanceMenu: Trying to click device back button") mDevice.pressBack() + Log.i(TAG, "closeAppearanceMenu: Clicked device back button") BrowserRobot().interact() return BrowserRobot.Transition() @@ -139,8 +175,9 @@ class ReaderViewRobot { onView( withId(R.id.mozac_feature_readerview_font_sans_serif), ) - + Log.i(TAG, "toggleSansSerif: Trying to click sans serif button") sansSerifButton().click() + Log.i(TAG, "toggleSansSerif: Clicked sans serif button") ReaderViewRobot().interact() return Transition() @@ -151,8 +188,9 @@ class ReaderViewRobot { onView( withId(R.id.mozac_feature_readerview_font_serif), ) - + Log.i(TAG, "toggleSerif: Trying to click serif button") serifButton().click() + Log.i(TAG, "toggleSerif: Clicked serif button") ReaderViewRobot().interact() return Transition() @@ -163,8 +201,9 @@ class ReaderViewRobot { onView( withId(R.id.mozac_feature_readerview_font_size_decrease), ) - + Log.i(TAG, "toggleFontSizeDecrease: Trying to click the decrease font button") fontSizeDecrease().click() + Log.i(TAG, "toggleFontSizeDecrease: Clicked the decrease font button") ReaderViewRobot().interact() return Transition() @@ -175,8 +214,9 @@ class ReaderViewRobot { onView( withId(R.id.mozac_feature_readerview_font_size_increase), ) - + Log.i(TAG, "toggleFontSizeIncrease: Trying to click the increase font button") fontSizeIncrease().click() + Log.i(TAG, "toggleFontSizeIncrease: Clicked the increase font button") ReaderViewRobot().interact() return Transition() @@ -187,8 +227,9 @@ class ReaderViewRobot { onView( withId(R.id.mozac_feature_readerview_color_light), ) - + Log.i(TAG, "toggleColorSchemeChangeLight: Trying to click the light color button") toggleLightColorSchemeButton().click() + Log.i(TAG, "toggleColorSchemeChangeLight: Clicked the light color button") ReaderViewRobot().interact() return Transition() @@ -199,8 +240,9 @@ class ReaderViewRobot { onView( withId(R.id.mozac_feature_readerview_color_dark), ) - + Log.i(TAG, "toggleColorSchemeChangeDark: Trying to click the dark color button") toggleDarkColorSchemeButton().click() + Log.i(TAG, "toggleColorSchemeChangeDark: Clicked the dark color button") ReaderViewRobot().interact() return Transition() @@ -211,8 +253,9 @@ class ReaderViewRobot { onView( withId(R.id.mozac_feature_readerview_color_sepia), ) - + Log.i(TAG, "toggleColorSchemeChangeSepia: Trying to click the sepia color button") toggleSepiaColorSchemeButton().click() + Log.i(TAG, "toggleColorSchemeChangeSepia: Clicked the sepia color button") ReaderViewRobot().interact() return Transition() @@ -220,10 +263,5 @@ class ReaderViewRobot { } } -fun readerViewRobot(interact: ReaderViewRobot.() -> Unit): ReaderViewRobot.Transition { - ReaderViewRobot().interact() - return ReaderViewRobot.Transition() -} - private fun visibleOrGone(visibility: Boolean) = if (visibility) ViewMatchers.Visibility.VISIBLE else ViewMatchers.Visibility.GONE From 27fdbc45b0120f82cfff0e1106ba39768ef9ef94 Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Wed, 30 Aug 2023 08:57:38 +0300 Subject: [PATCH 46/51] Bug 1850316 - Update androidx navigation. --- .../plugins/dependencies/src/main/java/DependenciesPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt index f1daa633fbf8..6d5ceb48b655 100644 --- a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt +++ b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt @@ -81,7 +81,7 @@ object Versions { const val preferences = "1.2.1" const val lifecycle = "2.7.0" const val media = "1.7.0" - const val navigation = "2.5.3" + const val navigation = "2.7.7" const val work = "2.7.1" const val arch = "2.2.0" const val uiautomator = "2.2.0" From d79a60ca88841d208ba36b6768e2411cf44afdf6 Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Thu, 27 Jul 2023 13:30:14 +0300 Subject: [PATCH 47/51] Bug 1850316 - Remove navigation library duplication from FenixDependencies. --- .../plugins/dependencies/src/main/java/DependenciesPlugin.kt | 3 +++ fenix/app/build.gradle | 4 ++-- fenix/build.gradle | 2 +- .../src/main/java/FenixDependenciesPlugin.kt | 2 ++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt index 6d5ceb48b655..ceb34e7696c2 100644 --- a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt +++ b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt @@ -129,6 +129,9 @@ object ComponentsDependencies { const val androidx_compose_foundation = "androidx.compose.foundation:foundation:${Versions.AndroidX.compose}" const val androidx_compose_material = "androidx.compose.material:material:${Versions.AndroidX.compose}" const val androidx_compose_runtime_livedata = "androidx.compose.runtime:runtime-livedata:${Versions.AndroidX.compose}" + const val androidx_safeargs = "androidx.navigation:navigation-safe-args-gradle-plugin:${Versions.AndroidX.navigation}" + const val androidx_navigation_fragment = "androidx.navigation:navigation-fragment-ktx:${Versions.AndroidX.navigation}" + const val androidx_navigation_ui = "androidx.navigation:navigation-ui:$${Versions.AndroidX.navigation}" const val androidx_compose_navigation = "androidx.navigation:navigation-compose:${Versions.AndroidX.navigation}" const val androidx_constraintlayout = "androidx.constraintlayout:constraintlayout:${Versions.AndroidX.constraintlayout}" const val androidx_core = "androidx.core:core:${Versions.AndroidX.core}" diff --git a/fenix/app/build.gradle b/fenix/app/build.gradle index bacca971143b..4a689a89a7ab 100644 --- a/fenix/app/build.gradle +++ b/fenix/app/build.gradle @@ -640,8 +640,8 @@ dependencies { implementation ComponentsDependencies.androidx_paging implementation ComponentsDependencies.androidx_preferences implementation ComponentsDependencies.androidx_fragment - implementation FenixDependencies.androidx_navigation_fragment - implementation FenixDependencies.androidx_navigation_ui + implementation ComponentsDependencies.androidx_navigation_fragment + implementation ComponentsDependencies.androidx_navigation_ui implementation ComponentsDependencies.androidx_compose_navigation implementation ComponentsDependencies.androidx_recyclerview diff --git a/fenix/build.gradle b/fenix/build.gradle index cb9ff542e225..bd002d017909 100644 --- a/fenix/build.gradle +++ b/fenix/build.gradle @@ -78,7 +78,7 @@ buildscript { classpath ComponentsDependencies.tools_androidgradle classpath ComponentsDependencies.tools_kotlingradle classpath FenixDependencies.tools_benchmarkgradle - classpath FenixDependencies.androidx_safeargs + classpath ComponentsDependencies.androidx_safeargs classpath FenixDependencies.osslicenses_plugin classpath "org.mozilla.telemetry:glean-gradle-plugin:${Versions.mozilla_glean}" classpath "${ApplicationServicesConfig.groupId}:tooling-nimbus-gradle:${ApplicationServicesConfig.version}" diff --git a/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt b/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt index efc00ff779f4..a8657de948a8 100644 --- a/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt +++ b/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt @@ -22,6 +22,7 @@ object FenixVersions { const val androidx_benchmark = "1.2.2" const val androidx_profileinstaller = "1.3.1" const val androidx_legacy = "1.0.0" + const val androidx_lifecycle = "2.6.1" const val androidx_navigation = "2.5.3" const val androidx_splash_screen = "1.0.1" const val androidx_transition = "1.4.1" @@ -55,6 +56,7 @@ object FenixDependencies { const val androidx_profileinstaller = "androidx.profileinstaller:profileinstaller:${FenixVersions.androidx_profileinstaller}" const val androidx_activity_ktx = "androidx.activity:activity-ktx:${FenixVersions.androidx_activity}" const val androidx_legacy = "androidx.legacy:legacy-support-v4:${FenixVersions.androidx_legacy}" + const val androidx_lifecycle_common = "androidx.lifecycle:lifecycle-common:${FenixVersions.androidx_lifecycle}" const val androidx_safeargs = "androidx.navigation:navigation-safe-args-gradle-plugin:${FenixVersions.androidx_navigation}" const val androidx_navigation_fragment = "androidx.navigation:navigation-fragment-ktx:${FenixVersions.androidx_navigation}" const val androidx_navigation_ui = "androidx.navigation:navigation-ui:${FenixVersions.androidx_navigation}" From 9df75c1ca170796d5cb9df47d175059902934135 Mon Sep 17 00:00:00 2001 From: mcarare <48995920+mcarare@users.noreply.github.com> Date: Thu, 27 Jul 2023 15:01:57 +0300 Subject: [PATCH 48/51] Bug 1850316 - Use alternative ways to get backQueue elements. backQueue is now private in NavController. --- .../src/main/java/org/mozilla/fenix/ext/NavController.kt | 2 +- .../java/org/mozilla/fenix/search/SearchDialogFragment.kt | 2 +- .../org/mozilla/fenix/search/SearchDialogFragmentTest.kt | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fenix/app/src/main/java/org/mozilla/fenix/ext/NavController.kt b/fenix/app/src/main/java/org/mozilla/fenix/ext/NavController.kt index 07e9713b98d8..e768d72f2a13 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/ext/NavController.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/ext/NavController.kt @@ -68,7 +68,7 @@ fun NavController.navigateWithBreadcrumb( */ @SuppressLint("RestrictedApi") fun NavController.hasTopDestination(fragmentClassName: String): Boolean { - return this.backQueue.lastOrNull()?.destination?.displayName?.contains( + return this.currentBackStackEntry?.destination?.displayName?.contains( fragmentClassName, true, ) == true diff --git a/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt index f6fd7de78d38..c41d5ea4c2af 100644 --- a/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/fenix/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -959,7 +959,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { internal fun getPreviousDestination(): NavBackStackEntry? { // This duplicates the platform functionality for "previousBackStackEntry" but additionally skips this entry. - val descendingEntries = findNavController().backQueue.reversed().iterator() + val descendingEntries = findNavController().currentBackStack.value.reversed().iterator() // Throw the topmost destination away. if (descendingEntries.hasNext()) { descendingEntries.next() diff --git a/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogFragmentTest.kt b/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogFragmentTest.kt index c7aa3e72bbe1..ff71df0ff1cd 100644 --- a/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogFragmentTest.kt +++ b/fenix/app/src/test/java/org/mozilla/fenix/search/SearchDialogFragmentTest.kt @@ -50,14 +50,14 @@ internal class SearchDialogFragmentTest { @Test fun `GIVEN this is the only visible fragment WHEN asking for the previous destination THEN return null`() { - every { navController.backQueue } returns ArrayDeque(listOf(getDestination(fragmentName))) + every { navController.currentBackStack.value } returns ArrayDeque(listOf(getDestination(fragmentName))) assertNull(fragment.getPreviousDestination()) } @Test fun `GIVEN this and FragmentB on top of this are visible WHEN asking for the previous destination THEN return null`() { - every { navController.backQueue } returns ArrayDeque( + every { navController.currentBackStack.value } returns ArrayDeque( listOf( getDestination(fragmentName), getDestination("FragmentB"), @@ -70,7 +70,7 @@ internal class SearchDialogFragmentTest { @Test fun `GIVEN FragmentA, this and FragmentB are visible WHEN asking for the previous destination THEN return FragmentA`() { val fragmentADestination = getDestination("FragmentA") - every { navController.backQueue } returns ArrayDeque( + every { navController.currentBackStack.value } returns ArrayDeque( listOf( fragmentADestination, getDestination(fragmentName), @@ -84,7 +84,7 @@ internal class SearchDialogFragmentTest { @Test fun `GIVEN FragmentA and this on top of it are visible WHEN asking for the previous destination THEN return FragmentA`() { val fragmentADestination = getDestination("FragmentA") - every { navController.backQueue } returns ArrayDeque( + every { navController.currentBackStack.value } returns ArrayDeque( listOf( fragmentADestination, getDestination(fragmentName), From 7f7b326157a6174c3befd126b94543067e440479 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 12 Feb 2024 09:59:46 -0500 Subject: [PATCH 49/51] Bug 1851947 - Update Google Accompanist to version 0.32.0 --- .../fenixdependencies/src/main/java/FenixDependenciesPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt b/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt index a8657de948a8..6cce2f427b86 100644 --- a/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt +++ b/fenix/plugins/fenixdependencies/src/main/java/FenixDependenciesPlugin.kt @@ -27,7 +27,7 @@ object FenixVersions { const val androidx_splash_screen = "1.0.1" const val androidx_transition = "1.4.1" const val androidx_datastore = "1.0.0" - const val google_accompanist = "0.30.1" + const val google_accompanist = "0.32.0" const val adjust = "4.35.1" const val installreferrer = "2.2" From 65efb284ebc1bd1ca01ec8076aed7ddd6ad5e336 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Fri, 5 Jan 2024 16:13:11 -0500 Subject: [PATCH 50/51] Bug 1879912 - Update OkHttp to version 4.12.0 --- .../plugins/dependencies/src/main/java/DependenciesPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt index ceb34e7696c2..39153acc4594 100644 --- a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt +++ b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt @@ -24,7 +24,7 @@ object Versions { const val mockito = "5.10.0" const val maven_ant_tasks = "2.1.3" const val jacoco = "0.8.11" - const val okhttp = "4.11.0" + const val okhttp = "4.12.0" const val okio = "3.6.0" const val coil = "2.4.0" From 0df7d35a691c1a73d14a5dc7f3b6d71717e59c92 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Mon, 12 Feb 2024 12:36:47 -0500 Subject: [PATCH 51/51] Bug 1879912 - Update Okio to version 3.8.0 --- .../plugins/dependencies/src/main/java/DependenciesPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt index 39153acc4594..964a5cab5c44 100644 --- a/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt +++ b/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt @@ -25,7 +25,7 @@ object Versions { const val maven_ant_tasks = "2.1.3" const val jacoco = "0.8.11" const val okhttp = "4.12.0" - const val okio = "3.6.0" + const val okio = "3.8.0" const val coil = "2.4.0" const val android_gradle_plugin = "8.2.2"