From 74ff3f4c51d019598b923b3cb5939699fb428d31 Mon Sep 17 00:00:00 2001 From: dsmithpadilla <88508950+dsmithpadilla@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:41:53 -0500 Subject: [PATCH 001/218] Update version.txt to 109.0b1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index f9917e586..0dd464a04 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -108.0b1 \ No newline at end of file +109.0b1 From 7c4050eb083c4eb86bccd7587fb1be392c553a16 Mon Sep 17 00:00:00 2001 From: mike a Date: Wed, 9 Nov 2022 11:27:29 -0800 Subject: [PATCH 002/218] Closes #25809: tapping on search engine triggers engine selection --- .../org/mozilla/fenix/home/HomeFragment.kt | 76 +++++++++++++++++-- .../SessionControlController.kt | 30 ++++++++ .../SessionControlInteractor.kt | 9 ++- .../fenix/search/SearchDialogController.kt | 3 +- .../fenix/search/SearchDialogFragment.kt | 3 + .../fenix/search/SearchFragmentStore.kt | 10 ++- .../fenix/search/toolbar/SearchSelector.kt | 15 +++- .../toolbar/SearchSelectorInteractor.kt | 19 +++++ .../search/toolbar/SearchSelectorMenu.kt | 2 +- .../toolbar/SearchSelectorToolbarAction.kt | 1 + .../fenix/search/toolbar/ToolbarView.kt | 9 +-- app/src/main/res/layout/fragment_home.xml | 13 +++- app/src/main/res/layout/search_selector.xml | 2 - app/src/main/res/navigation/nav_graph.xml | 5 ++ app/src/main/res/values/dimens.xml | 1 + .../DefaultSessionControlControllerTest.kt | 30 ++++++++ 16 files changed, 204 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorInteractor.kt diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 0b13281aa..c33db9d45 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -28,6 +28,8 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID import androidx.constraintlayout.widget.ConstraintSet.TOP import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toDrawable +import androidx.core.view.isGone import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment @@ -49,12 +51,17 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import mozilla.components.browser.menu.view.MenuButton +import mozilla.components.browser.state.search.SearchEngine import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.selector.normalTabs import mozilla.components.browser.state.selector.privateTabs import mozilla.components.browser.state.state.BrowserState +import mozilla.components.browser.state.state.searchEngines import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.concept.menu.Orientation +import mozilla.components.concept.menu.candidate.DrawableMenuIcon +import mozilla.components.concept.menu.candidate.TextMenuCandidate import mozilla.components.concept.storage.FrecencyThresholdOption import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AuthType @@ -73,6 +80,7 @@ import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged import org.mozilla.fenix.Config import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.HomeScreen +import org.mozilla.fenix.GleanMetrics.UnifiedSearch import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.addons.showSnackBar @@ -114,6 +122,7 @@ import org.mozilla.fenix.nimbus.FxNimbus import org.mozilla.fenix.onboarding.FenixOnboarding import org.mozilla.fenix.perf.MarkersFragmentLifecycleCallbacks import org.mozilla.fenix.perf.runBlockingIncrement +import org.mozilla.fenix.search.toolbar.SearchSelectorMenu import org.mozilla.fenix.tabstray.TabsTrayAccessPoint import org.mozilla.fenix.utils.Settings.Companion.TOP_SITES_PROVIDER_MAX_THRESHOLD import org.mozilla.fenix.utils.ToolbarPopupWindow @@ -142,6 +151,13 @@ class HomeFragment : Fragment() { ToolbarPosition.TOP -> null } + private val searchSelectorMenu by lazy { + SearchSelectorMenu( + context = requireContext(), + interactor = sessionControlInteractor, + ) + } + private val browsingModeManager get() = (activity as HomeActivity).browsingModeManager private val collectionStorageObserver = object : TabCollectionStorage.Observer { @@ -330,6 +346,24 @@ class HomeFragment : Fragment() { ) } + requireContext().settings().showUnifiedSearchFeature.let { + binding.searchSelector.isVisible = it + binding.searchEngineIcon.isGone = it + } + + binding.searchSelector.apply { + setOnClickListener { + val orientation = if (context.settings().shouldUseBottomToolbar) { + Orientation.UP + } else { + Orientation.DOWN + } + + UnifiedSearch.searchMenuTapped.record(NoExtras()) + searchSelectorMenu.menuController.show(anchor = it, orientation = orientation, forceOrientation = true) + } + } + _sessionControlInteractor = SessionControlInteractor( controller = DefaultSessionControlController( activity = activity, @@ -594,6 +628,14 @@ class HomeFragment : Fragment() { } } + consumeFlow(requireComponents.core.store) { flow -> + flow.map { state -> state.search } + .ifChanged() + .collect { search -> + updateSearchSelectorMenu(search.searchEngines) + } + } + // DO NOT MOVE ANYTHING BELOW THIS addMarker CALL! requireComponents.core.engine.profiler?.addMarker( MarkersFragmentLifecycleCallbacks.MARKER_NAME, @@ -602,20 +644,42 @@ class HomeFragment : Fragment() { ) } + private fun updateSearchSelectorMenu(searchEngines: List) { + val searchEngineList = searchEngines + .map { + TextMenuCandidate( + text = it.name, + start = DrawableMenuIcon( + drawable = it.icon.toDrawable(resources), + ), + ) { + sessionControlInteractor.onMenuItemTapped(SearchSelectorMenu.Item.SearchEngine(it)) + } + } + + searchSelectorMenu.menuController.submitList(searchSelectorMenu.menuItems(searchEngineList)) + } + private fun observeSearchEngineChanges() { consumeFlow(store) { flow -> flow.map { state -> state.search.selectedOrDefaultSearchEngine } .ifChanged() .collect { searchEngine -> - if (searchEngine != null) { + val name = searchEngine?.name + val icon = searchEngine?.let { + // Changing dimensions doesn't not affect the icon size, not sure what the + // code is doing: https://github.com/mozilla-mobile/fenix/issues/27763 val iconSize = requireContext().resources.getDimensionPixelSize(R.dimen.preference_icon_drawable_size) - val searchIcon = - BitmapDrawable(requireContext().resources, searchEngine.icon) - searchIcon.setBounds(0, 0, iconSize, iconSize) - binding.searchEngineIcon.setImageDrawable(searchIcon) + BitmapDrawable(requireContext().resources, searchEngine.icon).apply { + setBounds(0, 0, iconSize, iconSize) + } + } + + if (requireContext().settings().showUnifiedSearchFeature) { + binding.searchSelector.setIcon(icon, name) } else { - binding.searchEngineIcon.setImageDrawable(null) + binding.searchEngineIcon.setImageDrawable(icon) } } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt index 1b768d44d..b58db17dd 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt @@ -40,6 +40,7 @@ import org.mozilla.fenix.GleanMetrics.RecentTabs import org.mozilla.fenix.GleanMetrics.TopSites import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R +import org.mozilla.fenix.browser.BrowserAnimator import org.mozilla.fenix.browser.BrowserFragmentDirections import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.collections.SaveCollectionStep @@ -57,6 +58,8 @@ import org.mozilla.fenix.home.HomeFragment import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.Mode import org.mozilla.fenix.onboarding.WallpaperOnboardingDialogFragment.Companion.THUMBNAILS_SELECTION_COUNT +import org.mozilla.fenix.search.toolbar.SearchSelectorInteractor +import org.mozilla.fenix.search.toolbar.SearchSelectorMenu import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.SupportUtils.SumoTopic.PRIVATE_BROWSING_MYTHS import org.mozilla.fenix.utils.Settings @@ -209,6 +212,11 @@ interface SessionControlController { * @see [SessionControlInteractor.reportSessionMetrics] */ fun handleReportSessionMetrics(state: AppState) + + /** + * @see [SearchSelectorInteractor.onMenuItemTapped] + */ + fun handleMenuItemTapped(item: SearchSelectorMenu.Item) } @Suppress("TooManyFunctions", "LargeClass", "LongParameterList") @@ -660,4 +668,26 @@ class DefaultSessionControlController( RecentBookmarks.recentBookmarksCount.set(state.recentBookmarks.size.toLong()) } + + override fun handleMenuItemTapped(item: SearchSelectorMenu.Item) { + when (item) { + SearchSelectorMenu.Item.SearchSettings -> { + navController.nav( + R.id.homeFragment, + HomeFragmentDirections.actionGlobalSearchEngineFragment(), + ) + } + is SearchSelectorMenu.Item.SearchEngine -> { + val directions = HomeFragmentDirections.actionGlobalSearchDialog( + sessionId = null, + searchEngine = item.searchEngine.id, + ) + navController.nav( + R.id.homeFragment, + directions, + BrowserAnimator.getToolbarNavOptions(activity), + ) + } + } + } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt index e7da4ed80..f2dbdbce1 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt @@ -27,6 +27,8 @@ import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem.RecentHistoryGrou import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem.RecentHistoryHighlight import org.mozilla.fenix.home.recentvisits.controller.RecentVisitsController import org.mozilla.fenix.home.recentvisits.interactor.RecentVisitsInteractor +import org.mozilla.fenix.search.toolbar.SearchSelectorInteractor +import org.mozilla.fenix.search.toolbar.SearchSelectorMenu import org.mozilla.fenix.wallpapers.WallpaperState /** @@ -270,7 +272,8 @@ class SessionControlInteractor( RecentBookmarksInteractor, RecentVisitsInteractor, CustomizeHomeIteractor, - PocketStoriesInteractor { + PocketStoriesInteractor, + SearchSelectorInteractor { override fun onCollectionAddTabTapped(collection: TabCollection) { controller.handleCollectionAddTabTapped(collection) @@ -485,4 +488,8 @@ class SessionControlInteractor( override fun onMessageClosedClicked(message: Message) { controller.handleMessageClosed(message) } + + override fun onMenuItemTapped(item: SearchSelectorMenu.Item) { + controller.handleMenuItemTapped(item) + } } diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt index b7babc74f..763561886 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt @@ -32,6 +32,7 @@ import org.mozilla.fenix.components.metrics.MetricsUtils import org.mozilla.fenix.crashes.CrashListActivity import org.mozilla.fenix.ext.navigateSafe import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.search.toolbar.SearchSelectorInteractor import org.mozilla.fenix.search.toolbar.SearchSelectorMenu import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.utils.Settings @@ -54,7 +55,7 @@ interface SearchController { fun handleSearchEngineSuggestionClicked(searchEngine: SearchEngine) /** - * @see [ToolbarInteractor.onMenuItemTapped] + * @see [SearchSelectorInteractor.onMenuItemTapped] */ fun handleMenuItemTapped(item: SearchSelectorMenu.Item) } diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt index f600d74c2..9e452be31 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -178,6 +178,9 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { tabId = args.sessionId, pastedText = args.pastedText, searchAccessPoint = args.searchAccessPoint, + searchEngine = requireComponents.core.store.state.search.searchEngines.firstOrNull { + it.id == args.searchEngine + }, ), ) diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt index 6c7c81bce..e204d4e2f 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt @@ -117,12 +117,14 @@ data class SearchFragmentState( /** * Creates the initial state for the search fragment. */ +@Suppress("LongParameterList") fun createInitialSearchFragmentState( activity: HomeActivity, components: Components, tabId: String?, pastedText: String?, searchAccessPoint: MetricsUtils.Source, + searchEngine: SearchEngine? = null, ): SearchFragmentState { val settings = components.settings val tab = tabId?.let { components.core.store.state.findTab(it) } @@ -134,11 +136,17 @@ fun createInitialSearchFragmentState( settings.shouldShowSearchSuggestions && settings.shouldShowSearchSuggestionsInPrivate } + val searchEngineSource = if (searchEngine != null) { + SearchEngineSource.Shortcut(searchEngine) + } else { + SearchEngineSource.None + } + return SearchFragmentState( query = url, url = url, searchTerms = tab?.content?.searchTerms.orEmpty(), - searchEngineSource = SearchEngineSource.None, + searchEngineSource = searchEngineSource, defaultEngine = null, showSearchSuggestions = shouldShowSearchSuggestions, showSearchSuggestionsHint = false, diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelector.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelector.kt index 0630aebc4..d3fef7e32 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelector.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelector.kt @@ -8,6 +8,7 @@ import android.content.Context import android.graphics.drawable.Drawable import android.util.AttributeSet import android.view.LayoutInflater +import android.view.ViewGroup import android.widget.RelativeLayout import org.mozilla.fenix.databinding.SearchSelectorBinding @@ -21,9 +22,21 @@ internal class SearchSelector @JvmOverloads constructor( ) : RelativeLayout(context, attrs, defStyle) { private val binding = SearchSelectorBinding.inflate(LayoutInflater.from(context), this) + private var marginTop: Int = 0 - fun setIcon(icon: Drawable, contentDescription: String) { + override fun setLayoutParams(params: ViewGroup.LayoutParams?) { + if (params is MarginLayoutParams) { + params.topMargin = marginTop + } + super.setLayoutParams(params) + } + + fun setIcon(icon: Drawable?, contentDescription: String?) { binding.icon.setImageDrawable(icon) binding.icon.contentDescription = contentDescription } + + fun setTopMargin(margin: Int) { + marginTop = margin + } } diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorInteractor.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorInteractor.kt new file mode 100644 index 000000000..c01ec4b92 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorInteractor.kt @@ -0,0 +1,19 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.search.toolbar + +/** + * Interface for search selector menu. This interface is implemented by objects that want + * to respond to user interaction with items inside [SearchSelectorMenu]. + */ +interface SearchSelectorInteractor { + + /** + * Called when an user taps on a search selector menu item. + * + * @param item The [SearchSelectorMenu.Item] that was tapped. + */ + fun onMenuItemTapped(item: SearchSelectorMenu.Item) +} diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt index 3152c05dc..88eb7d3a2 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt @@ -26,7 +26,7 @@ typealias MozSearchEngine = SearchEngine */ class SearchSelectorMenu( private val context: Context, - private val interactor: ToolbarInteractor, + private val interactor: SearchSelectorInteractor, ) { /** diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarAction.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarAction.kt index bd955d810..b8f7c76dc 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarAction.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorToolbarAction.kt @@ -55,6 +55,7 @@ class SearchSelectorToolbarAction( menu.menuController.show(anchor = it, orientation = orientation, forceOrientation = true) } + setTopMargin(resources.getDimensionPixelSize(R.dimen.search_engine_engine_icon_top_margin)) setBackgroundResource( context.theme.resolveAttribute(android.R.attr.selectableItemBackgroundBorderless), ) diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt index 0fc4828dc..07d7a2649 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt @@ -24,7 +24,7 @@ import org.mozilla.fenix.utils.Settings * Interface for the Toolbar Interactor. This interface is implemented by objects that want * to respond to user interaction on the [ToolbarView]. */ -interface ToolbarInteractor { +interface ToolbarInteractor : SearchSelectorInteractor { /** * Called when a user hits the return key while [ToolbarView] has focus. @@ -45,13 +45,6 @@ interface ToolbarInteractor { * @param text The current text displayed by [ToolbarView]. */ fun onTextChanged(text: String) - - /** - * Called when an user taps on a search selector menu item. - * - * @param item The [SearchSelectorMenu.Item] that was tapped. - */ - fun onMenuItemTapped(item: SearchSelectorMenu.Item) } /** diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index a73fa091a..651fa00f8 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -119,7 +119,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> - + + - + + 12dp 28dp 12dp + 14dp 48dp 24dp 16dp diff --git a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt index cfd43fd8c..e26da0a41 100644 --- a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.home import androidx.navigation.NavController import androidx.navigation.NavDirections +import androidx.navigation.NavOptions import io.mockk.Runs import io.mockk.every import io.mockk.just @@ -72,6 +73,7 @@ import org.mozilla.fenix.home.recentbookmarks.RecentBookmark import org.mozilla.fenix.home.recenttabs.RecentTab import org.mozilla.fenix.home.sessioncontrol.DefaultSessionControlController import org.mozilla.fenix.onboarding.WallpaperOnboardingDialogFragment.Companion.THUMBNAILS_SELECTION_COUNT +import org.mozilla.fenix.search.toolbar.SearchSelectorMenu import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.wallpapers.Wallpaper @@ -1304,6 +1306,34 @@ class DefaultSessionControlControllerTest { } } + @Test + fun `WHEN handleMenuItemTapped is called with SearchSettings item THEN navigate to SearchEngineFragment`() { + createController().handleMenuItemTapped(SearchSelectorMenu.Item.SearchSettings) + + verify { + navController.navigate( + match { it.actionId == R.id.action_global_searchEngineFragment }, + null, + ) + } + } + + @Test + fun `WHEN handleMenuItemTapped is called with SearchEngine item THEN navigate to SearchDialogFragment`() { + val item = mockk() + every { item.searchEngine.id } returns "DuckDuckGo" + + createController().handleMenuItemTapped(item) + + val expectedDirections = HomeFragmentDirections.actionGlobalSearchDialog( + sessionId = null, + searchEngine = item.searchEngine.id, + ) + verify { + navController.navigate(expectedDirections, any()) + } + } + private fun createController( hideOnboarding: () -> Unit = { }, registerCollectionStorageObserver: () -> Unit = { }, From d5459de3b5b0af93acf9fa31061df3d3a3a3c3e9 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Mon, 14 Nov 2022 19:31:58 +0000 Subject: [PATCH 003/218] Update to Android-Components 108.0.20221114190357. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index ddc16724c..e3b72a43d 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "108.0.20221114143121" + const val VERSION = "108.0.20221114190357" } From 20b396e0cd82757e70531253acec25db93f26d9d Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Sat, 22 Oct 2022 13:01:24 -0400 Subject: [PATCH 004/218] For #26475 - Remove unnecessary features flags --- .../java/org/mozilla/fenix/FeatureFlags.kt | 50 ------------------- .../org/mozilla/fenix/FenixApplication.kt | 2 +- .../fenix/gleanplumb/MessagingFeature.kt | 5 +- .../fenix/settings/HomeSettingsFragment.kt | 2 - .../fenix/settings/TabsSettingsFragment.kt | 2 - .../java/org/mozilla/fenix/utils/Settings.kt | 24 ++++----- app/src/main/res/xml/home_preferences.xml | 6 +-- app/src/main/res/xml/tabs_preferences.xml | 3 +- 8 files changed, 15 insertions(+), 79 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index ebba96913..9ae76c423 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -31,41 +31,11 @@ object FeatureFlags { */ const val syncAddressesFeature = false - /** - * Enables the onboarding sync CFR on the home screen. - */ - const val showSynCFR = true - - /** - * Enables the onboarding jump back in CFR on the home screen. - */ - const val showJumpBackInCFR = true - - /** - * Enables the first run onboarding updates. - */ - const val showFirstRunOnboardingUpdates = false - - /** - * Enables the "recent" tabs feature in the home screen. - */ - const val showRecentTabsFeature = true - /** * Enables UI features based on history metadata. */ const val historyMetadataUIFeature = true - /** - * Enables the recently saved bookmarks feature in the home screen. - */ - const val recentBookmarksFeature = true - - /** - * Identifies and separates the tabs list with a secondary section containing least used tabs. - */ - const val inactiveTabs = true - /** * Show Pocket recommended stories on home. */ @@ -82,36 +52,16 @@ object FeatureFlags { return isPocketRecommendationsFeatureEnabled(context) && Config.channel.isDebug } - /** - * Enables showing the homescreen onboarding card. - */ - const val showHomeOnboarding = true - - /** - * Enables the Task Continuity enhancements. - */ - const val taskContinuityFeature = true - /** * Enables the Unified Search feature. */ val unifiedSearchFeature = Config.channel.isNightlyOrDebug - /** - * Enables receiving from the messaging framework. - */ - const val messagingFeature = true - /** * Enables compose on the tabs tray items. */ val composeTabsTray = Config.channel.isDebug - /** - * Enables the wallpaper onboarding. - */ - const val wallpaperOnboardingEnabled = true - /** * Enables the wallpaper v2 enhancements. */ diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index a8e47bd95..b2672d6fa 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -467,7 +467,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { components.core.trackingProtectionPolicyFactory.createTrackingProtectionPolicy() val settings = settings() - if (FeatureFlags.messagingFeature && settings.isExperimentationEnabled) { + if (settings.isExperimentationEnabled) { components.appStore.dispatch(AppAction.MessagingAction.Restore) } reportHomeScreenSectionMetrics(settings) diff --git a/app/src/main/java/org/mozilla/fenix/gleanplumb/MessagingFeature.kt b/app/src/main/java/org/mozilla/fenix/gleanplumb/MessagingFeature.kt index 9a27bb159..947fbdb4d 100644 --- a/app/src/main/java/org/mozilla/fenix/gleanplumb/MessagingFeature.kt +++ b/app/src/main/java/org/mozilla/fenix/gleanplumb/MessagingFeature.kt @@ -5,7 +5,6 @@ package org.mozilla.fenix.gleanplumb import mozilla.components.support.base.feature.LifecycleAwareFeature -import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction.MessagingAction @@ -15,9 +14,7 @@ import org.mozilla.fenix.components.appstate.AppAction.MessagingAction class MessagingFeature(val appStore: AppStore) : LifecycleAwareFeature { override fun start() { - if (FeatureFlags.messagingFeature) { - appStore.dispatch(MessagingAction.Evaluate) - } + appStore.dispatch(MessagingAction.Evaluate) } override fun stop() = Unit diff --git a/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt index 80ea4a8e3..1c0d980d9 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt @@ -68,7 +68,6 @@ class HomeSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_recent_tabs).apply { - isVisible = FeatureFlags.showRecentTabsFeature isChecked = context.settings().showRecentTabsFeature onPreferenceChangeListener = object : SharedPreferenceUpdater() { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { @@ -85,7 +84,6 @@ class HomeSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_recent_bookmarks).apply { - isVisible = FeatureFlags.recentBookmarksFeature isChecked = context.settings().showRecentBookmarksFeature onPreferenceChangeListener = object : SharedPreferenceUpdater() { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { diff --git a/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt index ab2b3b990..2aeb6cb93 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt @@ -10,7 +10,6 @@ import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import mozilla.telemetry.glean.private.NoExtras -import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.Tabs import org.mozilla.fenix.R @@ -67,7 +66,6 @@ class TabsSettingsFragment : PreferenceFragmentCompat() { } inactiveTabsCategory = requirePreference(R.string.pref_key_inactive_tabs_category).also { - it.isVisible = FeatureFlags.inactiveTabs it.isEnabled = !(it.context.settings().closeTabsAfterOneDay || it.context.settings().closeTabsAfterOneWeek) } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index fd7b0a4c4..8a9698794 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -238,7 +238,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { */ var showWallpaperOnboarding by lazyFeatureFlagPreference( key = appContext.getPreferenceKey(R.string.pref_key_wallpapers_onboarding), - featureFlag = FeatureFlags.wallpaperOnboardingEnabled, + featureFlag = true, default = { mr2022Sections[Mr2022Section.WALLPAPERS_SELECTION_TOOL] == true }, ) @@ -450,10 +450,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if the user has enabled the inactive tabs feature. */ - var inactiveTabsAreEnabled by featureFlagPreference( + var inactiveTabsAreEnabled by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_inactive_tabs), - default = FeatureFlags.inactiveTabs, - featureFlag = FeatureFlags.inactiveTabs, + default = true, ) @VisibleForTesting @@ -910,7 +909,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { */ var shouldShowJumpBackInCFR by lazyFeatureFlagPreference( appContext.getPreferenceKey(R.string.pref_key_should_show_jump_back_in_tabs_popup), - featureFlag = FeatureFlags.showJumpBackInCFR, + featureFlag = true, default = { mr2022Sections[Mr2022Section.JUMP_BACK_IN_CFR] == true }, ) @@ -1271,7 +1270,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { */ var showSyncCFR by lazyFeatureFlagPreference( appContext.getPreferenceKey(R.string.pref_key_should_show_sync_cfr), - featureFlag = FeatureFlags.showSynCFR, + featureFlag = true, default = { mr2022Sections[Mr2022Section.SYNC_CFR] == true }, ) @@ -1280,28 +1279,26 @@ class Settings(private val appContext: Context) : PreferencesHolder { */ var showHomeOnboardingDialog by lazyFeatureFlagPreference( appContext.getPreferenceKey(R.string.pref_key_should_show_home_onboarding_dialog), - featureFlag = FeatureFlags.showHomeOnboarding, + featureFlag = true, default = { mr2022Sections[Mr2022Section.HOME_ONBOARDING_DIALOG_EXISTING_USERS] == true }, ) /** * Indicates if the recent tabs functionality should be visible. - * Returns true if the [FeatureFlags.showRecentTabsFeature] and [R.string.pref_key_recent_tabs] are true. */ var showRecentTabsFeature by lazyFeatureFlagPreference( appContext.getPreferenceKey(R.string.pref_key_recent_tabs), - featureFlag = FeatureFlags.showRecentTabsFeature, + featureFlag = true, default = { homescreenSections[HomeScreenSection.JUMP_BACK_IN] == true }, ) /** * Indicates if the recent saved bookmarks functionality should be visible. - * Returns true if the [FeatureFlags.showRecentTabsFeature] and [R.string.pref_key_recent_bookmarks] are true. */ var showRecentBookmarksFeature by lazyFeatureFlagPreference( appContext.getPreferenceKey(R.string.pref_key_recent_bookmarks), default = { homescreenSections[HomeScreenSection.RECENTLY_SAVED] == true }, - featureFlag = FeatureFlags.recentBookmarksFeature, + featureFlag = true, ) /** @@ -1378,10 +1375,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { /** * Indicates if the Task Continuity enhancements are enabled. */ - var enableTaskContinuityEnhancements by featureFlagPreference( + var enableTaskContinuityEnhancements by booleanPreference( key = appContext.getPreferenceKey(R.string.pref_key_enable_task_continuity), - default = FeatureFlags.taskContinuityFeature, - featureFlag = FeatureFlags.taskContinuityFeature, + default = true, ) /** diff --git a/app/src/main/res/xml/home_preferences.xml b/app/src/main/res/xml/home_preferences.xml index 87d829368..1511a4b14 100644 --- a/app/src/main/res/xml/home_preferences.xml +++ b/app/src/main/res/xml/home_preferences.xml @@ -17,13 +17,11 @@ + android:title="@string/customize_toggle_jump_back_in" /> + android:title="@string/customize_toggle_recent_bookmarks" /> + app:iconSpaceReserved="false"> Date: Thu, 10 Nov 2022 11:03:11 -0500 Subject: [PATCH 005/218] Close #27795: Add metrics ping to see if user allows notifications --- app/metrics.yaml | 34 +++++++++++++++++++ .../org/mozilla/fenix/FenixApplication.kt | 10 ++++++ .../DefaultBrowserNotificationWorker.kt | 22 +++++++++--- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 9a4bc75dc..afc6256d4 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -211,6 +211,22 @@ events: notification_emails: - android-probes@mozilla.com expires: 122 + marketing_notification_allowed: + type: boolean + description: | + True if marketing notifications are allowed, otherwise false. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/27795 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/27797 + data_sensitivity: + - technical + notification_emails: + - android-probes@mozilla.com + expires: 122 + metadata: + tags: + - Notifications toolbar_menu_visible: type: event description: | @@ -1752,6 +1768,24 @@ metrics: metadata: tags: - Wallpapers + notifications_allowed: + type: boolean + description: | + True if notifications are allowed, otherwise false. + send_in_pings: + - metrics + bugs: + - https://github.com/mozilla-mobile/fenix/issues/27795 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/27797 + data_sensitivity: + - technical + notification_emails: + - android-probes@mozilla.com + expires: 122 + metadata: + tags: + - Notifications customize_home: most_visited_sites: diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index b2672d6fa..1c547ad16 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -14,6 +14,7 @@ import android.util.Log.INFO import androidx.annotation.CallSuper import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AppCompatDelegate +import androidx.core.app.NotificationManagerCompat import androidx.core.content.getSystemService import androidx.lifecycle.ProcessLifecycleOwner import androidx.work.Configuration.Builder @@ -714,6 +715,15 @@ open class FenixApplication : LocaleAwareApplication(), Provider { Wallpaper.nameIsDefault(settings.currentWallpaperName) defaultWallpaper.set(isDefaultTheCurrentWallpaper) + + @Suppress("TooGenericExceptionCaught") + try { + notificationsAllowed.set( + NotificationManagerCompat.from(applicationContext).areNotificationsEnabled(), + ) + } catch (e: Exception) { + Logger.warn("Failed to check if notifications are enabled", e) + } } with(AndroidAutofill) { diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt b/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt index a6b58ca66..55493ffac 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt @@ -22,6 +22,7 @@ import androidx.work.WorkerParameters import mozilla.components.service.glean.private.NoExtras import mozilla.components.support.base.ids.SharedIdsHelper import org.mozilla.fenix.GleanMetrics.Events +import org.mozilla.fenix.GleanMetrics.Events.marketingNotificationAllowed import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.settings @@ -35,9 +36,9 @@ class DefaultBrowserNotificationWorker( ) : Worker(context, workerParameters) { override fun doWork(): Result { - ensureChannelExists() + val channelId = ensureChannelExists() NotificationManagerCompat.from(applicationContext) - .notify(NOTIFICATION_TAG, NOTIFICATION_ID, buildNotification()) + .notify(NOTIFICATION_TAG, NOTIFICATION_ID, buildNotification(channelId)) Events.defaultBrowserNotifShown.record(NoExtras()) // default browser notification should only happen once @@ -49,8 +50,7 @@ class DefaultBrowserNotificationWorker( /** * Build the default browser notification. */ - private fun buildNotification(): Notification { - val channelId = ensureChannelExists() + private fun buildNotification(channelId: String): Notification { val intent = Intent(applicationContext, HomeActivity::class.java) intent.putExtra(INTENT_DEFAULT_BROWSER_NOTIFICATION, true) @@ -87,6 +87,7 @@ class DefaultBrowserNotificationWorker( * Returns the channel id to be used for notifications. */ private fun ensureChannelExists(): String { + var channelEnabled = true if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val notificationManager: NotificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager @@ -98,8 +99,21 @@ class DefaultBrowserNotificationWorker( ) notificationManager.createNotificationChannel(channel) + + val existingChannel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID) + channelEnabled = + existingChannel != null && existingChannel.importance != NotificationManager.IMPORTANCE_NONE } + @Suppress("TooGenericExceptionCaught") + val notificationsEnabled = try { + NotificationManagerCompat.from(applicationContext).areNotificationsEnabled() + } catch (e: Exception) { + false + } + + marketingNotificationAllowed.set(notificationsEnabled && channelEnabled) + return NOTIFICATION_CHANNEL_ID } From b2c89763f1b916f3863e3746017d974d5c5109fa Mon Sep 17 00:00:00 2001 From: MatthewTighe Date: Mon, 14 Nov 2022 13:48:42 -0800 Subject: [PATCH 006/218] Remove all unused strings marked moz:removedIn <= 106 --- app/src/main/res/values/strings.xml | 44 ----------------------------- 1 file changed, 44 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6efcc8e40..de9e8d6db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,8 +45,6 @@ - Recent bookmarks - Recently saved Show all saved bookmarks @@ -249,35 +247,13 @@ This time search: - - What’s new in %1$s - - It’s now easier to pick back up where you left off. - - Personalized %1$s homepage - - Jump to your open tabs, bookmarks, and browsing history. - - Clean, organized tabs - - Clear away tab clutter with improved layout and auto-closing tabs. - - Recent searches - - Revisit your latest searches from your homepage and tabs. - - Your personalized Firefox homepage now makes it easier to pick up where you left off. Find your recent tabs, bookmarks, and search results. Meet your personalized homepage. Recent tabs, bookmarks, and search results will appear here. - Welcome to an independent internet - Welcome to a more personal internet More colors. Better privacy. Same commitment to people over profits. - Hop from phone to laptop and back - Switching screens is easier than ever Pick up where you left off with tabs from other devices now on your homepage. @@ -1207,33 +1183,20 @@ Group deleted - - Welcome to %s! Welcome to a better internet A browser built for people, not profits. - - Sync Firefox between devices Pick up where you left off - - Bring bookmarks, history, and passwords to %1$s on this device. Sync tabs and passwords across devices for seamless screen-switching. - - Sign up Sign in Sync is on - - Always-on privacy Privacy protection by default - - %1$s automatically stops companies from secretly following you around the web. Featuring Total Cookie Protection to stop trackers from using cookies to stalk you across sites. @@ -1246,17 +1209,10 @@ Blocks more trackers so pages load faster, but some on-page functionality may break. Pick your toolbar placement - - Put the toolbar within easy reach. Keep it on the bottom, or move it to the top. Keep it on the bottom, or move it to the top. - - Your privacy You control your data - - We’ve designed %s to give you control over what you share online and what you share with us. Firefox gives you control over what you share online and what you share with us. From 76159bcbba98893b3f6eefb2f71740db8ede2536 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Tue, 15 Nov 2022 02:08:35 +0100 Subject: [PATCH 007/218] Import l10n. (#27835) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- app/src/main/res/values-cy/strings.xml | 67 ++++++++++++++------------ app/src/main/res/values-da/strings.xml | 2 + app/src/main/res/values-es/strings.xml | 2 + app/src/main/res/values-gn/strings.xml | 11 +++++ app/src/main/res/values-ka/strings.xml | 4 +- app/src/main/res/values-su/strings.xml | 2 + app/src/main/res/values-th/strings.xml | 8 +++ app/src/main/res/values-uz/strings.xml | 66 +++++++++++++++++++++++++ 8 files changed, 130 insertions(+), 32 deletions(-) diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index bcba4c597..c9a4f5299 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -14,6 +14,12 @@ Analluogi pori preifat Chwilio neu gyfeiriad gwe + + Hanes chwilio + + Chwilio’r nodau tudalen + + Chwilio’r tabiau Rhowch dermau chwilio @@ -130,13 +136,6 @@ Dangos botwm bob tab diweddar - - Eich chwilio am \"%1$s\" - - - %d gwefan Gweld pob tab wedi’i gydweddu @@ -257,6 +256,9 @@ Gosodiadau chwilio + + Chwiliad y tro yma: + Beth sy’n newydd yn %1$s @@ -461,8 +463,12 @@ a section where users see a list of tabs that they have visited in the past few days --> Ymwelwyd yn ddiweddar - Pocket + Pocket + + Straeon sy’n procio’r meddwl + + Erthyglau wedi’u pweru gan %s Straeon wedi’u noddi @@ -485,12 +491,6 @@ Methu newid papur wal Dysgu rhagor - - Newidiwch y papur wal trwy dapio logo tudalen hafan Firefox - - - Logo Firefox - newid y papur wal, pwyso’r botwm %s clasurol @@ -646,6 +646,17 @@ Cau + + Agor %d tab? + + Gall agor y nifer yma o dabiau arafu %s tra bod y tudalennau’n llwytho. Ydych chi’n siŵr eich bod am barhau? + + Agor tabiau + + Diddymu + %d gwefan @@ -675,10 +686,6 @@ Rhestr Grid - - Chwilio grwpiau - - Casglu gwefannau cysylltiedig ynghyd Cau tabiau @@ -831,18 +838,6 @@ Dim hanes yma - - Cydweddwyd o ddyfeisiau eraill - - O ddyfeisiau eraill - - - Mewngofnodwch i weld hanes wedi’i gydweddu o’ch dyfeisiau eraill. - - Mewngofnodi - - Neu creu cyfrif Firefox i ddechrau cydweddu]]> - Llwythi Wedi’u Tynnu @@ -893,6 +888,10 @@ Agor mewn tab newydd Agor mewn tab preifat + + Agor y cyfan mewn tabiau newydd + + Agor y cyfan mewn tabiau preifat Dileu @@ -1072,6 +1071,8 @@ Rhannu Cadw fel PDF + + Methu cynhyrchu PDF Anfon i ddyfais @@ -1932,7 +1933,9 @@ Darganfod rhagor - Wedi’i bweru gan Pocket. + Wedi’i bweru gan Pocket. + + Wedi’i bweru gan %s. Rhan o deulu Firefox. %s @@ -1954,4 +1957,6 @@ ehangu agorwch y ddolen i ddysgu rhagor am y casgliad hwn + + darllen yr erthygl diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index dd44c635d..bf87c5dd4 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -1946,4 +1946,6 @@ udvide åbne link for at læse mere om denne samling + + læse artiklen diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1d121e546..7feff5281 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1998,4 +1998,6 @@ expandir abrir enlace para saber más sobre esta colección + + leer el artículo diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml index 820843e0f..df3d705c2 100644 --- a/app/src/main/res/values-gn/strings.xml +++ b/app/src/main/res/values-gn/strings.xml @@ -658,6 +658,9 @@ Mboty + + ¿Embojuruja %d tendayke? Embojuruja tendayke @@ -1278,6 +1281,8 @@ Eku’ejey eheja haguégui Egueru techaukaha, tembiasakue ha ñe’ẽñemi %1$s-pe ko mba’e’okápe. + + Embojuehe tendayke ha ñe’ẽñemi mba’e’oka pa’ũme emoambue hag̃ua mba’erechaha oso’ỹre. Eñemboheraguapy @@ -1304,6 +1309,8 @@ Eiporavo tembipuru renda oĩha Emoĩ tembipuru renda nde ykére. Eguereko yvy gotyo, térã emongu’e yvate gotyo. + + Ereko yvy gotyo térã emogu’e yvate gotyo. Ne ñemigua @@ -1312,9 +1319,13 @@ Rojapo %s eñangareko hag̃ua emoherakuãva ñandutípe rehe ha emoherakuãva orendive avei. + + Firefox ome’ẽ ndéve pokatu emoherakuãva ñandutípe rehe ha emoherakuãva orendive avei. Emoñe’ẽ ore marandu’i ñemigua + + ¿Embojurujakuaáma ñanduti oikoitéva? Eñepyrũ eikundaha diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 9ea828b72..292b3f5d5 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -252,7 +252,7 @@ ძიების პარამეტრები - ამჯერად გამოიყენეთ: + საძიებოდ გამოიყენეთ: @@ -1961,4 +1961,6 @@ გაშლა გახსენით ბმული და იხილეთ ვრცლად ამ კრებულზე + + სტატიის წაკითხვა diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index 7ed5859a0..8a8ffdc78 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -1976,4 +1976,6 @@ batek buka tutumbu pikeun leuwih teleb ngeunaan ieu koléksi + + baca artikel diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 970d3005a..5a1138c7d 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -468,6 +468,8 @@ เรื่องราวที่จุดประกายความคิด + + บทความขับเคลื่อนโดย %s เรื่องราวที่ได้รับการสนับสนุน @@ -1064,6 +1066,8 @@ แบ่งปัน บันทึกเป็น PDF + + ไม่สามารถสร้าง PDF ส่งไปยังอุปกรณ์ @@ -1275,6 +1279,8 @@ เลือกตำแหน่งแถบเครื่องมือของคุณ วางแถบเครื่องมือไว้ใกล้ ๆ เก็บไว้ที่ด้านล่างหรือย้ายไปด้านบน + + เก็บไว้ด้านล่างหรือย้ายไปด้านบน ความเป็นส่วนตัวของคุณ @@ -1919,6 +1925,8 @@ ค้นพบสิ่งอื่น ขับเคลื่อนโดย Pocket + + ขับเคลื่อนโดย %s ส่วนหนึ่งของตระกูล Firefox %s diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index b99175892..c6d6b3aef 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -1294,10 +1294,23 @@ Sahifalar tezroq yuklanishi uchun koʻproq kuzatuvchilarni bloklaydi, lekin baʼzi sahifalar toʻgʻri ishlamasligi mumkin. Asboblar paneli joylashuvini tanlang + + Asboblar paneliga oson kirishni taʼminlang. Uni pastki qismda qoldiring yoki yuqoriga koʻchiring. + + Uni pastki qismida qoldiring yoki yuqoriga koʻchiring. Sizning maxfiyligingiz + + Maʼlumotlaringizni oʻzingiz boshqaring + + Maʼlumotlaringizni onlayn va biz bilan ulashishingizni nazorat qilish uchun %sni yaratdik. + + Firefox sizga nimalarni onlayn va nimalarni bizga ulashishingiz uchun nazoratni sizga taqdim etadi. Maxfiylik toʻgʻrisidagi bildirishnomamizni oʻqing + + Qiziqarli internetni kashf etish uchun tayyormisiz? Koʻrishni boshlash @@ -1305,6 +1318,8 @@ Mavzungizni tanlang + + Qorongʻi mavzu bilan batareya quvvati va koʻrish qobiliyatingizni asrang. Avtomatik @@ -1333,6 +1348,57 @@ Buning oʻrniga e-pochtadan foydalaning + + Unda yangisini yarating va Firefoxni qurilmalararo sinxronlang.]]> + + %s hisobingiz bilan sinxronlashni toʻxtatadi, ammo qurilmangizdagi brauzer tarixini oʻchirmaydi. + + Aloqani uzish + + Bekor qilish + + Standart jildlarni tahrirlash mumkin emas + + + + Himoya sozlamalari + + Takomillashtirilgan kuzatuvdan himoya + + Internetda iz qoldirmay kezing + + Maʼlumotlaringizni oʻzingiz uchun saqlang. Internetda sizni taqib qiladigan koʻplab kuzatuvchilardan %s himoya qiladi. + + + Batafsil + + Standart + + Maxfiylik va samaradorlikning eng yaxshi muvozanatini taʼminlaydi. Sahifalar normal yuklanadi. + + Standart kuzatuv muhofazasi orqali nimalar bloklangan? + + Qatʼiy + + Sahifalar tezroq yuklanishi uchun koʻproq kuzatuvchilarni bloklaydi, lekin baʼzi sahifalar toʻgʻri ishlamasligi mumkin. + + Qatʼiy kuzatuvdan himoya bilan nima bloklangan + + Boshqa + + Qaysi kuzatuvchilar va skriptlarni bloklashni tanlang. + + Maxsus kuzatuv vositasi bilan nimalar bloklangan + + + Cookie fayllar + + Saytlararo va ijtimoiy tarmoqlarning kuzatuvchilari + + Tashrif buyurilmagan saytlardan olingan cookie fayllar + + Barcha uchinchi tomon cookie fayllar (saytlarning buzilishiga olib kelishi mumkin) + Barcha veb-saytlarni kattalashtirish From be7c0ba4019e07b92f8d9ecbf18cce5754bc2b24 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Mon, 14 Nov 2022 23:34:00 +0000 Subject: [PATCH 008/218] Update to Android-Components 109.0.20221114224659. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index e3b72a43d..825b1d98c 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "108.0.20221114190357" + const val VERSION = "109.0.20221114224659" } From c67bbb3e03620bfc5456580f8e61ed608792103d Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 2 Nov 2022 20:04:28 +0200 Subject: [PATCH 009/218] For #27538: Return null for clipboard text longer than MAX_URI_LENGTH. This avoids extra processing of large text that is unlikely to be an URL. --- .../main/java/org/mozilla/fenix/utils/ClipboardHandler.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/utils/ClipboardHandler.kt b/app/src/main/java/org/mozilla/fenix/utils/ClipboardHandler.kt index e9c0d1846..17ec1771e 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/ClipboardHandler.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/ClipboardHandler.kt @@ -11,6 +11,7 @@ import android.os.Build import android.view.textclassifier.TextClassifier import androidx.annotation.VisibleForTesting import androidx.core.content.getSystemService +import mozilla.components.support.ktx.kotlin.MAX_URI_LENGTH import mozilla.components.support.utils.SafeUrl import mozilla.components.support.utils.WebURLFinder import org.mozilla.fenix.perf.Performance.logger @@ -58,6 +59,10 @@ class ClipboardHandler(val context: Context) { */ fun extractURL(): String? { return text?.let { + if (it.length > MAX_URI_LENGTH) { + return null + } + val finder = WebURLFinder(it) finder.bestWebURL() } From 48288f0198394b4e57d14549682f4d22a04ea30e Mon Sep 17 00:00:00 2001 From: Alexander Gramiak Date: Sun, 16 Oct 2022 14:34:18 -0600 Subject: [PATCH 010/218] For #21414: Use MenuProvider and MenuHost interface methods onPrepareOptionsMenu was not being called on invalidateOptionsMenu, which led to the saveButton being left enabled even with invalid hostnames, usersnames, and passwords. --- .../fenix/settings/logins/fragment/AddLoginFragment.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt index c84583afc..9e26aaada 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt @@ -331,14 +331,16 @@ class AddLoginFragment : Fragment(R.layout.fragment_add_login), MenuProvider { } private fun setSaveButtonState() { - activity?.invalidateOptionsMenu() + activity?.invalidateMenu() } override fun onCreateMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.login_save, menu) } - override fun onPrepareOptionsMenu(menu: Menu) { + override fun onPrepareMenu(menu: Menu) { + super.onPrepareMenu(menu) + val saveButton = menu.findItem(R.id.save_login_button) val changesMadeWithNoErrors = validHostname && validUsername && validPassword saveButton.isEnabled = changesMadeWithNoErrors From 1a5443167d99d8174c476beb08d4cb955530a40d Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 15 Nov 2022 15:47:07 +0000 Subject: [PATCH 011/218] Update to Android-Components 109.0.20221115143228. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 825b1d98c..b5cec8a4a 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221114224659" + const val VERSION = "109.0.20221115143228" } From c87589bef2ba087c0656ef2867195efc2b824861 Mon Sep 17 00:00:00 2001 From: kl3jvi Date: Wed, 9 Nov 2022 23:28:10 +0100 Subject: [PATCH 012/218] For #27575: Add String.toHexColor extension --- .../main/java/org/mozilla/fenix/utils/Colors.kt | 10 ++++++++++ .../fenix/wallpapers/LegacyWallpaperMigration.kt | 11 ++++++----- .../fenix/wallpapers/WallpaperMetadataFetcher.kt | 14 ++++++++------ .../wallpapers/LegacyWallpaperMigrationTest.kt | 11 ++++++----- .../fenix/wallpapers/WallpapersUseCasesTest.kt | 7 ++++--- 5 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/utils/Colors.kt diff --git a/app/src/main/java/org/mozilla/fenix/utils/Colors.kt b/app/src/main/java/org/mozilla/fenix/utils/Colors.kt new file mode 100644 index 000000000..a1901aada --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/utils/Colors.kt @@ -0,0 +1,10 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.utils + +/** + * Converts a string of hexadecimal characters to a Long color value. + */ +fun String.toHexColor() = toLong(radix = 16) diff --git a/app/src/main/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigration.kt b/app/src/main/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigration.kt index bbb3fa4e0..e3ab62e79 100644 --- a/app/src/main/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigration.kt +++ b/app/src/main/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigration.kt @@ -8,6 +8,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import mozilla.components.support.base.log.logger.Logger import org.mozilla.fenix.utils.Settings +import org.mozilla.fenix.utils.toHexColor import org.mozilla.fenix.wallpapers.Wallpaper.Companion.amethystName import org.mozilla.fenix.wallpapers.Wallpaper.Companion.beachVibeName import org.mozilla.fenix.wallpapers.Wallpaper.Companion.ceruleanName @@ -93,7 +94,7 @@ class LegacyWallpaperMigration( // If an expired Turning Red wallpaper is successfully migrated if (wallpaperName == TURNING_RED_MEI_WALLPAPER_NAME || wallpaperName == TURNING_RED_PANDA_WALLPAPER_NAME) { - settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toLong(radix = 16) + settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toHexColor() } } catch (e: IOException) { Logger.error("Failed to migrate legacy wallpaper", e) @@ -119,15 +120,15 @@ class LegacyWallpaperMigration( when (settings.currentWallpaperName) { TURNING_RED_MEI_WALLPAPER_NAME -> { settings.currentWallpaperCardColorLight = - TURNING_RED_MEI_WALLPAPER_CARD_COLOR_LIGHT.toLong(radix = 16) + TURNING_RED_MEI_WALLPAPER_CARD_COLOR_LIGHT.toHexColor() settings.currentWallpaperCardColorDark = - TURNING_RED_MEI_WALLPAPER_CARD_COLOR_DARK.toLong(radix = 16) + TURNING_RED_MEI_WALLPAPER_CARD_COLOR_DARK.toHexColor() } TURNING_RED_PANDA_WALLPAPER_NAME -> { settings.currentWallpaperCardColorLight = - TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_LIGHT.toLong(radix = 16) + TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_LIGHT.toHexColor() settings.currentWallpaperCardColorDark = - TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_DARK.toLong(radix = 16) + TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_DARK.toHexColor() } } } diff --git a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperMetadataFetcher.kt b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperMetadataFetcher.kt index 781773daa..d16d89472 100644 --- a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperMetadataFetcher.kt +++ b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperMetadataFetcher.kt @@ -11,6 +11,7 @@ import mozilla.components.concept.fetch.Request import org.json.JSONArray import org.json.JSONObject import org.mozilla.fenix.BuildConfig +import org.mozilla.fenix.utils.toHexColor import java.text.SimpleDateFormat import java.util.Date import java.util.Locale @@ -40,11 +41,12 @@ class WallpaperMetadataFetcher( }.getOrElse { listOf() } } - private fun JSONObject.parseAsWallpapers(): List = with(getJSONArray("collections")) { - (0 until length()).map { index -> - getJSONObject(index).toCollectionOfWallpapers() - }.flatten() - } + private fun JSONObject.parseAsWallpapers(): List = + with(getJSONArray("collections")) { + (0 until length()).map { index -> + getJSONObject(index).toCollectionOfWallpapers() + }.flatten() + } private fun JSONObject.toCollectionOfWallpapers(): List { val collectionId = getString("id") @@ -105,7 +107,7 @@ class WallpaperMetadataFetcher( * listed in the metadata. */ private fun JSONObject.getArgbValueAsLong(propName: String): Long = "FF${getString(propName)}" - .toLong(radix = 16) + .toHexColor() companion object { internal const val currentJsonVersion = 1 diff --git a/app/src/test/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigrationTest.kt b/app/src/test/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigrationTest.kt index b18eec88b..d326798bf 100644 --- a/app/src/test/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigrationTest.kt +++ b/app/src/test/java/org/mozilla/fenix/wallpapers/LegacyWallpaperMigrationTest.kt @@ -11,6 +11,7 @@ import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder import org.mozilla.fenix.utils.Settings +import org.mozilla.fenix.utils.toHexColor import org.mozilla.fenix.wallpapers.LegacyWallpaperMigration.Companion.TURNING_RED_MEI_WALLPAPER_NAME import org.mozilla.fenix.wallpapers.LegacyWallpaperMigration.Companion.TURNING_RED_PANDA_WALLPAPER_NAME import org.mozilla.fenix.wallpapers.LegacyWallpaperMigration.Companion.TURNING_RED_WALLPAPER_TEXT_COLOR @@ -103,14 +104,14 @@ class LegacyWallpaperMigrationTest { migrationHelper.migrateLegacyWallpaper(TURNING_RED_MEI_WALLPAPER_NAME) assertTrue(getAllFiles(TURNING_RED_MEI_WALLPAPER_NAME).all { it.exists() }) verify(exactly = 1) { - settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toLong(radix = 16) + settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toHexColor() } createAllLegacyFiles(TURNING_RED_PANDA_WALLPAPER_NAME) migrationHelper.migrateLegacyWallpaper(TURNING_RED_PANDA_WALLPAPER_NAME) assertTrue(getAllFiles(TURNING_RED_PANDA_WALLPAPER_NAME).all { it.exists() }) verify(exactly = 2) { - settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toLong(radix = 16) + settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toHexColor() } } } @@ -124,7 +125,7 @@ class LegacyWallpaperMigrationTest { assertFalse(getAllFiles(TURNING_RED_MEI_WALLPAPER_NAME).all { it.exists() }) assertFalse(getAllFiles(TURNING_RED_PANDA_WALLPAPER_NAME).all { it.exists() }) verify(exactly = 0) { - settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toLong(radix = 16) + settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toHexColor() } } } @@ -138,14 +139,14 @@ class LegacyWallpaperMigrationTest { migrationHelper.migrateLegacyWallpaper(wallpaper1) assertFalse(getAllFiles(wallpaper1).all { it.exists() }) verify(exactly = 0) { - settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toLong(radix = 16) + settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toHexColor() } createAllLegacyFiles(wallpaper2) migrationHelper.migrateLegacyWallpaper(wallpaper2) assertTrue(getAllFiles(wallpaper2).all { it.exists() }) verify(exactly = 0) { - settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toLong(radix = 16) + settings.currentWallpaperTextColor = TURNING_RED_WALLPAPER_TEXT_COLOR.toHexColor() } } } diff --git a/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt b/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt index 08d87edd2..d8beb224b 100644 --- a/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt +++ b/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt @@ -25,6 +25,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.utils.Settings +import org.mozilla.fenix.utils.toHexColor import org.mozilla.fenix.wallpapers.LegacyWallpaperMigration.Companion.TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_DARK import org.mozilla.fenix.wallpapers.LegacyWallpaperMigration.Companion.TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_LIGHT import org.mozilla.fenix.wallpapers.LegacyWallpaperMigration.Companion.TURNING_RED_PANDA_WALLPAPER_NAME @@ -382,7 +383,7 @@ class WallpapersUseCasesTest { val allWallpapers = listOf(expiredWallpaper) + fakeRemoteWallpapers every { mockSettings.currentWallpaperName } returns TURNING_RED_PANDA_WALLPAPER_NAME every { mockSettings.shouldMigrateLegacyWallpaperCardColors } returns true - every { mockSettings.currentWallpaperTextColor } returns TURNING_RED_WALLPAPER_TEXT_COLOR.toLong(radix = 16) + every { mockSettings.currentWallpaperTextColor } returns TURNING_RED_WALLPAPER_TEXT_COLOR.toHexColor() coEvery { mockFileManager.lookupExpiredWallpaper(any()) } returns expiredWallpaper coEvery { mockMetadataFetcher.downloadWallpaperList() } returns allWallpapers coEvery { mockDownloader.downloadThumbnail(any()) } returns Wallpaper.ImageFileState.Downloaded @@ -400,8 +401,8 @@ class WallpapersUseCasesTest { appStore.waitUntilIdle() verify { mockMigrationHelper.migrateExpiredWallpaperCardColors() } - verify { mockSettings.currentWallpaperCardColorLight = TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_LIGHT.toLong(radix = 16) } - verify { mockSettings.currentWallpaperCardColorDark = TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_DARK.toLong(radix = 16) } + verify { mockSettings.currentWallpaperCardColorLight = TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_LIGHT.toHexColor() } + verify { mockSettings.currentWallpaperCardColorDark = TURNING_RED_PANDA_WALLPAPER_CARD_COLOR_DARK.toHexColor() } } @Test From 8589aec0a0c0c4ac5d8aeb1bde61e96460b504c5 Mon Sep 17 00:00:00 2001 From: owlishDeveloper Date: Wed, 26 Oct 2022 15:25:18 -0700 Subject: [PATCH 013/218] Bug 1796146 - Add UI for the Cookie Banner preferences --- .experimenter.yaml | 8 +++ app/metrics.yaml | 39 ++++++++++++ .../java/org/mozilla/fenix/components/Core.kt | 2 + .../fenix/settings/CookieBannersFragment.kt | 61 +++++++++++++++++++ .../fenix/settings/SettingsFragment.kt | 8 +++ .../java/org/mozilla/fenix/utils/Settings.kt | 25 ++++++++ app/src/main/res/navigation/nav_graph.xml | 11 ++++ app/src/main/res/values/preference_keys.xml | 4 ++ app/src/main/res/values/strings.xml | 8 +++ .../res/xml/cookie_banner_preferences.xml | 10 +++ app/src/main/res/xml/preferences.xml | 6 ++ nimbus.fml.yaml | 33 ++++++++++ 12 files changed, 215 insertions(+) create mode 100644 app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt create mode 100644 app/src/main/res/xml/cookie_banner_preferences.xml diff --git a/.experimenter.yaml b/.experimenter.yaml index d1790ace8..04d51d391 100644 --- a/.experimenter.yaml +++ b/.experimenter.yaml @@ -1,4 +1,12 @@ --- +cookie-banners: + description: Features for cookie banner handling. + hasExposure: true + exposureDescription: "" + variables: + sections-enabled: + type: json + description: This property provides a lookup table of whether or not the given section should be enabled. growth-data: description: A feature measuring campaign growth data hasExposure: true diff --git a/app/metrics.yaml b/app/metrics.yaml index afc6256d4..0a670792b 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -6795,6 +6795,45 @@ autoplay: tags: - SitePermissions +cookie_banners: + visited_setting: + type: event + description: A user visited the cookie banner handling screen + bugs: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1796146 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/27561 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: 118 + metadata: + tags: + - Privacy&Security + setting_changed: + type: event + description: | + A user changed their setting. + extra_keys: + cookie_banner_setting: + description: | + The new setting for cookie banners: disabled,reject_all, + or reject_or_accept_all. + type: string + bugs: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1796146 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/27561 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: 118 + metadata: + tags: + - Privacy&Security + site_permissions: prompt_shown: type: event diff --git a/app/src/main/java/org/mozilla/fenix/components/Core.kt b/app/src/main/java/org/mozilla/fenix/components/Core.kt index 8ef188e3f..a92775a8e 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -132,6 +132,8 @@ class Core( R.color.fx_mobile_layer_color_1, ), httpsOnlyMode = context.settings().getHttpsOnlyMode(), + cookieBannerHandlingModePrivateBrowsing = context.settings().getCookieBannerHandling(), + cookieBannerHandlingMode = context.settings().getCookieBannerHandling(), ) GeckoEngine( diff --git a/app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt new file mode 100644 index 000000000..d9c5d3beb --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt @@ -0,0 +1,61 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.settings + +import android.os.Bundle +import androidx.preference.Preference +import androidx.preference.PreferenceFragmentCompat +import androidx.preference.SwitchPreference +import mozilla.components.concept.engine.EngineSession.CookieBannerHandlingMode.DISABLED +import mozilla.components.concept.engine.EngineSession.CookieBannerHandlingMode.REJECT_OR_ACCEPT_ALL +import mozilla.components.concept.engine.Settings +import org.mozilla.fenix.GleanMetrics.CookieBanners +import org.mozilla.fenix.R +import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.ext.showToolbar + +/** + * Lets the user set up the cookie banners handling preferences. + */ +class CookieBannersFragment : PreferenceFragmentCompat() { + + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.cookie_banner_preferences, rootKey) + setupPreferences() + } + + override fun onResume() { + super.onResume() + showToolbar(getString(R.string.preferences_cookie_banner_reduction)) + } + + private fun getEngineSettings(): Settings { + return requireContext().components.core.engine.settings + } + + private fun setupPreferences() { + requirePreference(R.string.pref_key_cookie_banner).apply { + onPreferenceChangeListener = object : SharedPreferenceUpdater() { + override fun onPreferenceChange( + preference: Preference, + newValue: Any?, + ): Boolean { + val (mode, metricTag) = if (newValue == true) { + REJECT_OR_ACCEPT_ALL to "reject_or_accept_all" + } else { + DISABLED to "disabled" + } + requireContext().settings().shouldUseCookieBanner = newValue as Boolean + getEngineSettings().cookieBannerHandlingModePrivateBrowsing = mode + getEngineSettings().cookieBannerHandlingMode = mode + CookieBanners.settingChanged.record(CookieBanners.SettingChangedExtra(metricTag)) + requireContext().components.useCases.sessionUseCases.reload() + return super.onPreferenceChange(preference, newValue) + } + } + } + } +} diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt index efb867854..c77b3976f 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -40,6 +40,7 @@ import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.Config import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.GleanMetrics.Addons +import org.mozilla.fenix.GleanMetrics.CookieBanners import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.TrackingProtection import org.mozilla.fenix.HomeActivity @@ -279,6 +280,10 @@ class SettingsFragment : PreferenceFragmentCompat() { resources.getString(R.string.pref_key_https_only_settings) -> { SettingsFragmentDirections.actionSettingsFragmentToHttpsOnlyFragment() } + resources.getString(R.string.pref_key_cookie_banner_settings) -> { + CookieBanners.visitedSetting.record(mozilla.components.service.glean.private.NoExtras()) + SettingsFragmentDirections.actionSettingsFragmentToCookieBannerFragment() + } resources.getString(R.string.pref_key_accessibility) -> { SettingsFragmentDirections.actionSettingsFragmentToAccessibilityFragment() } @@ -436,6 +441,7 @@ class SettingsFragment : PreferenceFragmentCompat() { val preferenceOpenLinksInExternalApp = findPreference(getPreferenceKey(R.string.pref_key_open_links_in_external_app)) + if (!Config.channel.isReleased) { preferenceLeakCanary?.setOnPreferenceChangeListener { _, newValue -> val isEnabled = newValue == true @@ -464,6 +470,8 @@ class SettingsFragment : PreferenceFragmentCompat() { findPreference(getPreferenceKey(R.string.pref_key_start_profiler)) with(requireContext().settings()) { + findPreference(getPreferenceKey(R.string.pref_key_cookie_banner_settings)) + ?.isVisible = shouldShowCookieBannerUI findPreference( getPreferenceKey(R.string.pref_key_nimbus_experiments), )?.isVisible = showSecretDebugMenuThisSession diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 8a9698794..82e7fa45b 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -16,6 +16,7 @@ import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting.Companion.PRIVATE import androidx.lifecycle.LifecycleOwner import mozilla.components.concept.engine.Engine.HttpsOnlyMode +import mozilla.components.concept.engine.EngineSession.CookieBannerHandlingMode import mozilla.components.feature.sitepermissions.SitePermissionsRules import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action import mozilla.components.feature.sitepermissions.SitePermissionsRules.AutoplayAction @@ -40,6 +41,7 @@ import org.mozilla.fenix.components.settings.lazyFeatureFlagPreference import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.getPreferenceKey +import org.mozilla.fenix.nimbus.CookieBannersSection import org.mozilla.fenix.nimbus.FxNimbus import org.mozilla.fenix.nimbus.HomeScreenSection import org.mozilla.fenix.nimbus.Mr2022Section @@ -535,6 +537,15 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = true, ) + var shouldUseCookieBanner by lazyFeatureFlagPreference( + appContext.getPreferenceKey(R.string.pref_key_cookie_banner), + featureFlag = true, + default = { cookieBannersSection[CookieBannersSection.FEATURE_SETTING_VALUE] == true }, + ) + + val shouldShowCookieBannerUI: Boolean + get() = cookieBannersSection[CookieBannersSection.FEATURE_UI] == true + /** * Declared as a function for performance purposes. This could be declared as a variable using * booleanPreference like other members of this class. However, doing so will make it so it will @@ -1255,6 +1266,10 @@ class Settings(private val appContext: Context) : PreferencesHolder { get() = FxNimbus.features.mr2022.value().sectionsEnabled + private val cookieBannersSection: Map + get() = + FxNimbus.features.cookieBanners.value().sectionsEnabled + private val homescreenSections: Map get() = FxNimbus.features.homescreen.value().sectionsEnabled @@ -1410,6 +1425,16 @@ class Settings(private val appContext: Context) : PreferencesHolder { } } + /** + * Get the current mode for cookie banner handling + */ + fun getCookieBannerHandling(): CookieBannerHandlingMode { + return when (shouldUseCookieBanner) { + true -> CookieBannerHandlingMode.REJECT_OR_ACCEPT_ALL + false -> CookieBannerHandlingMode.DISABLED + } + } + var setAsDefaultGrowthSent by booleanPreference( key = appContext.getPreferenceKey(R.string.pref_key_growth_set_as_default), default = false, diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index c5c5a0f7e..d11fec016 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -603,6 +603,13 @@ app:exitAnim="@anim/slide_out_left" app:popEnterAnim="@anim/slide_in_left" app:popExitAnim="@anim/slide_out_right" /> + + diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index cff61b0e5..d7f16fc76 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -147,6 +147,10 @@ pref_key_https_only_in_all_tabs pref_key_https_only_in_private_tabs + + pref_key_cookie_banner_settings + pref_key_cookie_banner + pref_key_etp_learn_more pref_key_tracking_protection_settings diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index de9e8d6db..8dfc37071 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -316,6 +316,14 @@ Add private browsing shortcut HTTPS-Only Mode + + + Cookie Banner Reduction + + Reduce cookie banners + + Firefox automatically tries to reject cookie requests on cookie banners. If a reject option isn’t available, Firefox may accept all cookies to dismiss the banner. + Automatically attempts to connect to sites using HTTPS encryption protocol for increased security. diff --git a/app/src/main/res/xml/cookie_banner_preferences.xml b/app/src/main/res/xml/cookie_banner_preferences.xml new file mode 100644 index 000000000..4076d31f9 --- /dev/null +++ b/app/src/main/res/xml/cookie_banner_preferences.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 01c1bd7ff..7b4958abe 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -102,6 +102,12 @@ app:iconSpaceReserved="false" android:title="@string/preferences_https_only_title" /> + + + default: + { + "feature-ui": false, + "feature-setting-value": false, + } + defaults: + - channel: developer + value: { + "sections-enabled": { + "feature-ui": true, + "feature-setting-value": true, + } + } + - channel: nightly + value: { + "sections-enabled": { + "feature-ui": true, + "feature-setting-value": true, + } + } unified-search: description: A feature allowing user to easily search for specified results directly in the search bar. variables: @@ -344,3 +370,10 @@ types: description: CFR for the first time you use the browse with Total Cookie Protection on the browser screen. tcp-feature: description: Controls the Total Cookie Protection feature. + CookieBannersSection: + description: The identifiers for the sections of the MR 2022. + variants: + feature-ui: + description: Indicates if the user interfaces should be visible. + feature-setting-value: + description: Indicates if the cookie handling setting should be enabled. From a343d60478c8ff4f29afe319c40e9851b5c953f3 Mon Sep 17 00:00:00 2001 From: Michelle Goossens Date: Wed, 9 Nov 2022 16:41:41 +0100 Subject: [PATCH 014/218] Bug 1799910 - Migrate fenix from AWS to GCP --- .taskcluster.yml | 2 +- taskcluster/ci/config.yml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.taskcluster.yml b/.taskcluster.yml index e803a2845..f1fd7be3e 100644 --- a/.taskcluster.yml +++ b/.taskcluster.yml @@ -122,7 +122,7 @@ tasks: name: "Decision Task for cron job ${cron.job_name}" description: 'Created by a [cron task](https://firefox-ci-tc.services.mozilla.com/tasks/${cron.task_id})' provisionerId: "${trustDomain}-${level}" - workerType: "decision" + workerType: "decision-gcp" tags: $if: 'tasks_for in ["github-push", "github-pull-request"]' then: diff --git a/taskcluster/ci/config.yml b/taskcluster/ci/config.yml index 7ee596bbe..e85935549 100644 --- a/taskcluster/ci/config.yml +++ b/taskcluster/ci/config.yml @@ -40,17 +40,17 @@ workers: provisioner: 'mobile-{level}' implementation: docker-worker os: linux - worker-type: b-linux + worker-type: b-linux-gcp b-android-large: provisioner: 'mobile-{level}' implementation: docker-worker os: linux - worker-type: b-linux-large + worker-type: b-linux-large-gcp b-android-xlarge: provisioner: 'mobile-{level}' implementation: docker-worker os: linux - worker-type: b-linux-xlarge + worker-type: b-linux-xlarge-gcp beetmover: provisioner: scriptworker-k8s implementation: scriptworker-beetmover @@ -71,13 +71,13 @@ workers: provisioner: 'mobile-{level}' implementation: docker-worker os: linux - worker-type: 'images' + worker-type: 'images-gcp' # misc is used by taskgraph to generate tasks with more than 10 routes misc: provisioner: 'mobile-{level}' implementation: docker-worker os: linux - worker-type: 'b-linux' + worker-type: 'b-linux-gcp' push-apk: provisioner: scriptworker-k8s implementation: scriptworker-pushapk From 840c91d9e801cdfc14889ece0f46a7af79c21069 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Tue, 15 Nov 2022 15:52:41 -0500 Subject: [PATCH 015/218] Close #26475: Remove more feature flags --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 5 ----- .../org/mozilla/fenix/settings/HomeSettingsFragment.kt | 1 - app/src/main/java/org/mozilla/fenix/utils/Settings.kt | 7 +------ app/src/main/res/xml/home_preferences.xml | 3 +-- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index 9ae76c423..6e95842d4 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -31,11 +31,6 @@ object FeatureFlags { */ const val syncAddressesFeature = false - /** - * Enables UI features based on history metadata. - */ - const val historyMetadataUIFeature = true - /** * Show Pocket recommended stories on home. */ diff --git a/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt index 1c0d980d9..c6e6a0ff3 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt @@ -143,7 +143,6 @@ class HomeSettingsFragment : PreferenceFragmentCompat() { } requirePreference(R.string.pref_key_history_metadata_feature).apply { - isVisible = FeatureFlags.historyMetadataUIFeature isChecked = context.settings().historyMetadataUIFeature onPreferenceChangeListener = object : SharedPreferenceUpdater() { override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean { diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 82e7fa45b..7f93500a6 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -1257,11 +1257,6 @@ class Settings(private val appContext: Context) : PreferencesHolder { ).contains(langTag) } - private var isHistoryMetadataEnabled by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature), - default = false, - ) - private val mr2022Sections: Map get() = FxNimbus.features.mr2022.value().sectionsEnabled @@ -1277,7 +1272,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { var historyMetadataUIFeature by lazyFeatureFlagPreference( appContext.getPreferenceKey(R.string.pref_key_history_metadata_feature), default = { homescreenSections[HomeScreenSection.RECENT_EXPLORATIONS] == true }, - featureFlag = FeatureFlags.historyMetadataUIFeature || isHistoryMetadataEnabled, + featureFlag = true, ) /** diff --git a/app/src/main/res/xml/home_preferences.xml b/app/src/main/res/xml/home_preferences.xml index 1511a4b14..f377a862d 100644 --- a/app/src/main/res/xml/home_preferences.xml +++ b/app/src/main/res/xml/home_preferences.xml @@ -25,8 +25,7 @@ + android:title="@string/customize_toggle_recently_visited" /> Date: Wed, 16 Nov 2022 01:34:30 +0100 Subject: [PATCH 016/218] Import l10n. (#27856) --- app/src/main/res/values-gn/strings.xml | 5 +++ app/src/main/res/values-oc/strings.xml | 50 ++------------------------ 2 files changed, 7 insertions(+), 48 deletions(-) diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml index df3d705c2..149fc64bc 100644 --- a/app/src/main/res/values-gn/strings.xml +++ b/app/src/main/res/values-gn/strings.xml @@ -661,6 +661,9 @@ ¿Embojuruja %d tendayke? + + Embojurujávo heta tendayke omombeguekuaa %s henyhẽnguévo umi kuatiarogue. ¿Añetehápepa rehoseve hese? Embojuruja tendayke @@ -1443,6 +1446,8 @@ Kookie tenda ojuasáva Ejoko kookie oipurúva ñanduti marandugua ha mba’apohaguasu mba’ekuaarã resa’ỹijoha ombyatýva kundahára mba’ekuaarã oikévo tendápe. + + Ñemo’ãmbaite kookie rovake oreko kookie tenda reimehápe g̃uarã, avei tapykuehoha ndojepurukuaái ohapykueho hag̃ua tendakuéra pa’ũme. Criptominero diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index 876727007..a7863c35a 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -45,9 +45,6 @@ Seleccionat - - Marcats recentament - Salvats recentament @@ -261,38 +258,13 @@ Aqueste còp cercar : - - Qué de nòu dins %1$s - - Ara es mai facil de contunhar d’ont aviatz arrestat. - - Acuèlh personalizat de %1$s - - Accedissètz a vòstres onglets dobèrts, vòstres marcapaginas e vòstre istoric de navegacion. - - Onglets clars e organizats - - Eliminatz lo bazar amb un agençament melhorat e d’onglets que se tampan solets. - - Recèrcas recentas - - - Revisitatz vòstras darrièras recèrcas a partir de la pagina d’acuèlh e vòstres onglets. - - - L’acuèlh personalizat de Firefox permet ara de tornar mai facilament ont èretz. Trapatz vòstres onglets, marcapaginas e recèrcas recentas. - Fasètz coneissença amb vòstra pagina d’acuèlh personalizada. Onglets recents, marcapaginas e resultats de recèrca apreissaràn aicí. - La benvenguda a Internet independent - Benvengut dins un Internet mai personal Mai de colors. Melhora confidencialitat. Meteis engatjament per las personas abans lo profièch. - Basculatz del mobil a l’ordenador e invèrsament - Bascular d’ecran es mai facil que jamai Tornatz ont èretz amb los onglets d’autres aparelhs que figuran ara per la pagina d’acuèlh. @@ -1268,33 +1240,20 @@ Grop suprimit - - La benvenguda a %s ! Benvengut dins un Internet melhor Un navegador concebut per las gents, pas per far de profièches. - - Sincronizar Firefox entre vòstres aparelhs Tornatz ont èretz - - Importatz vòstres marcapaginas, vòstre istoric e vòstres senhals dins %1$s sus aqueste aparelh. Sincronizacion d’onglets e de senhals demest aparelhs per passar d’un ecran a l’autre sens relambi. - - Se connectar Connexion Sincro. activada - - Confidencialitat totjorn renfortida Proteccion de la vida privada per defaut - - %1$s empacha automaticament las entrepresas de vos pistar secrètament pel web. Embarcant una proteccion totala contra los cookies per empachar los traçadors d’utilizar de cookies per vos pistar de site en site. @@ -1307,17 +1266,10 @@ Bloca mai de traçadors, accelèra la cargament de las paginas mas d’unas pòdon quitar de foncionar. Causissètz ont conhar la barra d’aisinas - - Plaçatz la barra d’aisinas a portada de man. Daissatz-la enbàs o ennaut. Gardatz-la enbàs o desplaçatz-la ennaut. - - Vòstra vida privada Contrarotlatz vòstras donadas - - Concebèrem %s per vos donar lo contraròtle de çò que partejatz en linha e çò que partejatz amb nosautres. Firefox vos dòna lo contraròtle de çò que partejatz en linha e çò que partejatz amb nosautres. @@ -1993,4 +1945,6 @@ desplegar dobrir lo ligam per ne saber mai tocant aquesta colleccion + + legir l’article From fd716ddbe3577bf6e7180f7551783483cdb06070 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 15 Nov 2022 11:14:07 +0800 Subject: [PATCH 017/218] Add distribution_id in baseline ping --- app/metrics.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/metrics.yaml b/app/metrics.yaml index 0a670792b..366853f34 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -1105,6 +1105,7 @@ metrics: to identify installs from Mozilla Online. send_in_pings: - metrics + - baseline bugs: - https://github.com/mozilla-mobile/fenix/issues/16075 data_reviews: @@ -1116,6 +1117,8 @@ metrics: - android-probes@mozilla.com - kbrosnan@mozilla.com expires: never + no_lint: + - BASELINE_PING metadata: tags: - China From 9a47aa3ac94d338602a0bfada37b3ffec606c10f Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 16 Nov 2022 00:36:39 +0000 Subject: [PATCH 018/218] Update to Android-Components 109.0.20221115235215. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index b5cec8a4a..83a888fb3 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221115143228" + const val VERSION = "109.0.20221115235215" } From cca309e0e6b624bee8c680fb4b39b4e52dffa35d Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Tue, 15 Nov 2022 20:40:15 -0500 Subject: [PATCH 019/218] Improve site permissions --- .../fenix/browser/BaseBrowserFragment.kt | 2 +- .../fenix/components/PermissionStorage.kt | 48 +++++++++++++++---- .../quicksettings/QuickSettingsController.kt | 5 +- ...itePermissionsDetailsExceptionsFragment.kt | 7 ++- ...onsManageExceptionsPhoneFeatureFragment.kt | 10 +++- .../fenix/components/PermissionStorageTest.kt | 14 +++--- .../DefaultQuickSettingsControllerTest.kt | 2 +- 7 files changed, 67 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 1be9447b3..024c7557e 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -1251,7 +1251,7 @@ abstract class BaseBrowserFragment : viewLifecycleOwner.lifecycleScope.launch(Main) { val sitePermissions: SitePermissions? = tab.content.url.getOrigin()?.let { origin -> val storage = requireComponents.core.permissionStorage - storage.findSitePermissionsBy(origin) + storage.findSitePermissionsBy(origin, tab.content.private) } view?.let { diff --git a/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt b/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt index 5a5efcaf4..cbc70d0e8 100644 --- a/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt +++ b/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt @@ -20,26 +20,58 @@ class PermissionStorage( context.components.core.geckoSitePermissionsStorage, ) { + /** + * Persists the [sitePermissions] provided as a parameter. + * @param sitePermissions the [sitePermissions] to be stored. + */ suspend fun add(sitePermissions: SitePermissions) = withContext(dispatcher) { - permissionsStorage.save(sitePermissions) + permissionsStorage.save(sitePermissions, private = false) } - suspend fun findSitePermissionsBy(origin: String): SitePermissions? = withContext(dispatcher) { - permissionsStorage.findSitePermissionsBy(origin) - } + /** + * Finds all SitePermissions that match the [origin]. + * @param origin the site to be used as filter in the search. + * @param private indicates if the [origin] belongs to a private session. + */ + suspend fun findSitePermissionsBy(origin: String, private: Boolean): SitePermissions? = + withContext(dispatcher) { + permissionsStorage.findSitePermissionsBy(origin, private = private) + } - suspend fun updateSitePermissions(sitePermissions: SitePermissions) = withContext(dispatcher) { - permissionsStorage.update(sitePermissions) - } + /** + * Replaces an existing SitePermissions with the values of [sitePermissions] provided as a parameter. + * @param sitePermissions the sitePermissions to be updated. + * @param private indicates if the [SitePermissions] belongs to a private session. + */ + suspend fun updateSitePermissions(sitePermissions: SitePermissions, private: Boolean) = + withContext(dispatcher) { + permissionsStorage.update(sitePermissions, private = private) + } + /** + * Returns all saved [SitePermissions] instances as a [DataSource.Factory]. + * + * A consuming app can transform the data source into a `LiveData` of when using RxJava2 into a + * `Flowable` or `Observable`, that can be observed. + * + * - https://developer.android.com/topic/libraries/architecture/paging/data + * - https://developer.android.com/topic/libraries/architecture/paging/ui + */ suspend fun getSitePermissionsPaged(): DataSource.Factory { return permissionsStorage.getSitePermissionsPaged() } + /** + * Deletes all sitePermissions that match the sitePermissions provided as a parameter. + * @param sitePermissions the sitePermissions to be deleted from the storage. + */ suspend fun deleteSitePermissions(sitePermissions: SitePermissions) = withContext(dispatcher) { - permissionsStorage.remove(sitePermissions) + permissionsStorage.remove(sitePermissions, private = false) } + /** + * Deletes all sitePermissions sitePermissions. + */ suspend fun deleteAllSitePermissions() = withContext(dispatcher) { permissionsStorage.removeAll() } diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt index ffb244419..98dba9fad 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/QuickSettingsController.kt @@ -263,8 +263,11 @@ class DefaultQuickSettingsController( */ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) fun handlePermissionsChange(updatedPermissions: SitePermissions) { + val tab = requireNotNull(browserStore.state.findTabOrCustomTab(sessionId)) { + "A session is required to update permission" + } ioScope.launch { - permissionStorage.updateSitePermissions(updatedPermissions) + permissionStorage.updateSitePermissions(updatedPermissions, tab.content.private) reload(sessionId) } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt index c55705e2e..9b7dbc997 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsDetailsExceptionsFragment.kt @@ -59,7 +59,12 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() { showToolbar(sitePermissions.origin.stripDefaultPort()) viewLifecycleOwner.lifecycleScope.launch(Main) { sitePermissions = - requireNotNull(requireComponents.core.permissionStorage.findSitePermissionsBy(sitePermissions.origin)) + requireNotNull( + requireComponents.core.permissionStorage.findSitePermissionsBy( + sitePermissions.origin, + private = false, + ), + ) bindCategoryPhoneFeatures() } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsManageExceptionsPhoneFeatureFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsManageExceptionsPhoneFeatureFragment.kt index e364e9e11..739b7eb62 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsManageExceptionsPhoneFeatureFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsManageExceptionsPhoneFeatureFragment.kt @@ -224,7 +224,10 @@ class SitePermissionsManageExceptionsPhoneFeatureFragment : Fragment() { private fun updatedSitePermissions(status: SitePermissions.Status) { val updatedSitePermissions = getSitePermission().update(getFeature(), status) viewLifecycleOwner.lifecycleScope.launch(Main) { - requireComponents.core.permissionStorage.updateSitePermissions(updatedSitePermissions) + requireComponents.core.permissionStorage.updateSitePermissions( + sitePermissions = updatedSitePermissions, + private = false, + ) requireComponents.tryReloadTabBy(updatedSitePermissions.origin) } } @@ -233,7 +236,10 @@ class SitePermissionsManageExceptionsPhoneFeatureFragment : Fragment() { internal fun updatedSitePermissions(autoplayValue: AutoplayValue) { val updatedSitePermissions = autoplayValue.updateSitePermissions(getSitePermission()) viewLifecycleOwner.lifecycleScope.launch(Main) { - requireComponents.core.permissionStorage.updateSitePermissions(updatedSitePermissions) + requireComponents.core.permissionStorage.updateSitePermissions( + sitePermissions = updatedSitePermissions, + private = false, + ) requireComponents.tryReloadTabBy(updatedSitePermissions.origin) } } diff --git a/app/src/test/java/org/mozilla/fenix/components/PermissionStorageTest.kt b/app/src/test/java/org/mozilla/fenix/components/PermissionStorageTest.kt index e18ab0f7e..645dc8b00 100644 --- a/app/src/test/java/org/mozilla/fenix/components/PermissionStorageTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/PermissionStorageTest.kt @@ -30,7 +30,7 @@ class PermissionStorageTest { storage.add(sitePermissions) - coVerify { sitePermissionsStorage.save(sitePermissions) } + coVerify { sitePermissionsStorage.save(sitePermissions, private = false) } } @Test @@ -39,11 +39,11 @@ class PermissionStorageTest { val sitePermissionsStorage: SitePermissionsStorage = mockk(relaxed = true) val storage = PermissionStorage(testContext, this.coroutineContext, sitePermissionsStorage) - coEvery { sitePermissionsStorage.findSitePermissionsBy(any()) } returns sitePermissions + coEvery { sitePermissionsStorage.findSitePermissionsBy(any(), any(), any()) } returns sitePermissions - val result = storage.findSitePermissionsBy("origin") + val result = storage.findSitePermissionsBy("origin", false) - coVerify { sitePermissionsStorage.findSitePermissionsBy("origin") } + coVerify { sitePermissionsStorage.findSitePermissionsBy("origin", private = false) } assertEquals(sitePermissions, result) } @@ -54,9 +54,9 @@ class PermissionStorageTest { val sitePermissionsStorage: SitePermissionsStorage = mockk(relaxed = true) val storage = PermissionStorage(testContext, this.coroutineContext, sitePermissionsStorage) - storage.updateSitePermissions(sitePermissions) + storage.updateSitePermissions(sitePermissions, private = false) - coVerify { sitePermissionsStorage.update(sitePermissions) } + coVerify { sitePermissionsStorage.update(sitePermissions, private = false) } } @Test @@ -82,7 +82,7 @@ class PermissionStorageTest { storage.deleteSitePermissions(sitePermissions) - coVerify { sitePermissionsStorage.remove(sitePermissions) } + coVerify { sitePermissionsStorage.remove(sitePermissions, private = false) } } @Test diff --git a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt index faf035f61..947f03852 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt @@ -284,7 +284,7 @@ class DefaultQuickSettingsControllerTest { advanceUntilIdle() coVerifyOrder { - permissionStorage.updateSitePermissions(testPermissions) + permissionStorage.updateSitePermissions(testPermissions, tab.content.private) reload(tab.id) } } From 537c296f639add867625943fc523bf6a185cc6a0 Mon Sep 17 00:00:00 2001 From: "oana.horvath" Date: Tue, 15 Nov 2022 12:39:38 +0200 Subject: [PATCH 020/218] For #27220: replaces manually deleting a file with deleting storage programmatically. --- .../org/mozilla/fenix/helpers/TestHelper.kt | 37 +++++------ .../java/org/mozilla/fenix/ui/DownloadTest.kt | 63 +++++++++---------- 2 files changed, 48 insertions(+), 52 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt index 368cd8244..81e4d522a 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt @@ -20,8 +20,12 @@ import android.graphics.Canvas import android.graphics.Color import android.net.Uri import android.os.Build +import android.os.storage.StorageManager +import android.os.storage.StorageVolume import android.provider.Settings +import android.util.Log import android.view.View +import androidx.annotation.RequiresApi import androidx.browser.customtabs.CustomTabsIntent import androidx.test.espresso.Espresso import androidx.test.espresso.Espresso.onView @@ -41,7 +45,6 @@ import androidx.test.rule.ActivityTestRule import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiObject -import androidx.test.uiautomator.UiObjectNotFoundException import androidx.test.uiautomator.UiScrollable import androidx.test.uiautomator.UiSelector import androidx.test.uiautomator.Until @@ -52,12 +55,12 @@ import org.hamcrest.CoreMatchers import org.hamcrest.CoreMatchers.allOf import org.hamcrest.Matcher import org.junit.Assert +import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity import org.mozilla.fenix.ext.components -import org.mozilla.fenix.helpers.Constants.PackageName.GOOGLE_APPS_PHOTOS import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeShort import org.mozilla.fenix.helpers.ext.waitNotNull @@ -65,6 +68,7 @@ import org.mozilla.fenix.helpers.idlingresource.NetworkConnectionIdlingResource import org.mozilla.fenix.ui.robots.BrowserRobot import org.mozilla.fenix.utils.IntentUtils import org.mozilla.gecko.util.ThreadUtils +import java.io.File import java.util.Locale import java.util.regex.Pattern @@ -147,24 +151,21 @@ object TestHelper { } } - // Remove test file from Google Photos (AOSP) on Firebase - fun deleteDownloadFromStorage() { - val deleteButton = mDevice.findObject(UiSelector().resourceId("$GOOGLE_APPS_PHOTOS:id/trash")) - deleteButton.waitForExists(waitingTime) - deleteButton.click() - - // Sometimes there's a secondary confirmation + @RequiresApi(Build.VERSION_CODES.R) + fun deleteDownloadedFileOnStorage(fileName: String) { + val storageManager: StorageManager? = appContext.getSystemService(Context.STORAGE_SERVICE) as StorageManager? + val storageVolumes = storageManager!!.storageVolumes + val storageVolume: StorageVolume = storageVolumes[0] + val file = File(storageVolume.directory!!.path + "/Download/" + fileName) try { - val deleteConfirm = mDevice.findObject(UiSelector().text("Got it")) - deleteConfirm.waitForExists(waitingTime) - deleteConfirm.click() - } catch (e: UiObjectNotFoundException) { - // Do nothing + file.delete() + Log.d("TestLog", "File delete try 1") + assertFalse("The file was not deleted", file.exists()) + } catch (e: AssertionError) { + file.delete() + Log.d("TestLog", "File delete retried") + assertFalse("The file was not deleted", file.exists()) } - - val trashIt = mDevice.findObject(UiSelector().resourceId("$GOOGLE_APPS_PHOTOS:id/move_to_trash")) - trashIt.waitForExists(waitingTime) - trashIt.click() } fun setNetworkEnabled(enabled: Boolean) { diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/DownloadTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/DownloadTest.kt index d71c2b089..7678aa973 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/DownloadTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/DownloadTest.kt @@ -5,20 +5,14 @@ package org.mozilla.fenix.ui import androidx.core.net.toUri -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.runner.permission.PermissionRequester -import androidx.test.uiautomator.UiDevice import org.junit.After import org.junit.Before -import org.junit.Ignore import org.junit.Rule import org.junit.Test -import org.junit.rules.TestRule -import org.junit.rules.TestWatcher -import org.junit.runner.Description import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.helpers.HomeActivityIntentTestRule -import org.mozilla.fenix.helpers.TestHelper.deleteDownloadFromStorage +import org.mozilla.fenix.helpers.TestHelper.deleteDownloadedFileOnStorage +import org.mozilla.fenix.helpers.TestHelper.mDevice import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.downloadRobot import org.mozilla.fenix.ui.robots.navigationToolbar @@ -33,8 +27,6 @@ import org.mozilla.fenix.ui.robots.notificationShade * - Verifies managing downloads inside the Downloads listing. **/ class DownloadTest { - private lateinit var mDevice: UiDevice - /* Remote test page managed by Mozilla Mobile QA team at https://github.com/mozilla-mobile/testapp */ private val downloadTestPage = "https://storage.googleapis.com/mobile_test_assets/test_app/downloads.html" private var downloadFile: String = "" @@ -42,25 +34,8 @@ class DownloadTest { @get:Rule val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides() - // Making sure to grant storage access for this test running on API 28 - @get: Rule - var watcher: TestRule = object : TestWatcher() { - override fun starting(description: Description) { - if (description.methodName == "pauseResumeCancelDownloadTest") { - PermissionRequester().apply { - addPermissions( - android.Manifest.permission.WRITE_EXTERNAL_STORAGE, - android.Manifest.permission.READ_EXTERNAL_STORAGE, - ) - requestPermissions() - } - } - } - } - @Before fun setUp() { - mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) // clear all existing notifications notificationShade { mDevice.openNotification() @@ -157,13 +132,13 @@ class DownloadTest { /* Verifies downloads in the Downloads Menu: - downloads appear in the list - deleting a download from device storage, removes it from the Downloads Menu too - */ - @Ignore("Failing, see: https://github.com/mozilla-mobile/fenix/issues/27220") + */ @SmokeTest @Test fun manageDownloadsInDownloadsMenuTest() { // a long filename to verify it's correctly displayed on the prompt and in the Downloads menu - downloadFile = "tAJwqaWjJsXS8AhzSninBMCfIZbHBGgcc001lx5DIdDwIcfEgQ6vE5Gb5VgAled17DFZ2A7ZDOHA0NpQPHXXFt.svg" + downloadFile = + "tAJwqaWjJsXS8AhzSninBMCfIZbHBGgcc001lx5DIdDwIcfEgQ6vE5Gb5VgAled17DFZ2A7ZDOHA0NpQPHXXFt.svg" navigationToolbar { }.enterURLAndEnterToBrowser(downloadTestPage.toUri()) { @@ -179,14 +154,34 @@ class DownloadTest { waitForDownloadsListToExist() verifyDownloadedFileName(downloadFile) verifyDownloadedFileIcon() - openDownloadedFile(downloadFile) - verifyPhotosAppOpens() - deleteDownloadFromStorage() - waitForDownloadsListToExist() + deleteDownloadedFileOnStorage(downloadFile) }.exitDownloadsManagerToBrowser { }.openThreeDotMenu { }.openDownloadsManager { verifyEmptyDownloadsList() } } + + @SmokeTest + @Test + fun openDownloadedFileTest() { + downloadFile = "web_icon.png" + + navigationToolbar { + }.enterURLAndEnterToBrowser(downloadTestPage.toUri()) { + waitForPageToLoad() + }.clickDownloadLink(downloadFile) { + verifyDownloadPrompt(downloadFile) + }.clickDownload { + verifyDownloadNotificationPopup() + } + browserScreen { + }.openThreeDotMenu { + }.openDownloadsManager { + verifyDownloadedFileName(downloadFile) + openDownloadedFile(downloadFile) + verifyPhotosAppOpens() + mDevice.pressBack() + } + } } From a71aad1702f99e3443b02d78356ebf7874f8586f Mon Sep 17 00:00:00 2001 From: Mugurell Date: Tue, 15 Nov 2022 16:20:52 +0200 Subject: [PATCH 021/218] For #26826 - Add test tags allowing to differentiate Pocket stories --- .../home/pocket/PocketStoriesComposables.kt | 57 +++++++++++-------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt index 4e58288c6..1bf47f832 100644 --- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt +++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt @@ -279,32 +279,43 @@ fun PocketStories( itemsIndexed(storiesToShow) { columnIndex, columnItems -> Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { columnItems.forEachIndexed { rowIndex, story -> - if (story == placeholderStory) { - ListItemTabLargePlaceholder(stringResource(R.string.pocket_stories_placeholder_text)) { - onDiscoverMoreClicked("https://getpocket.com/explore?$POCKET_FEATURE_UTM_KEY_VALUE") - } - } else if (story is PocketRecommendedStory) { - PocketStory( - story = story, - backgroundColor = backgroundColor, - ) { - val uri = Uri.parse(story.url) - .buildUpon() - .appendQueryParameter(URI_PARAM_UTM_KEY, POCKET_STORIES_UTM_VALUE) - .build().toString() - onStoryClicked(it.copy(url = uri), rowIndex to columnIndex) - } - } else if (story is PocketSponsoredStory) { - Box( - modifier = Modifier.onShown(0.5f) { - onStoryShown(story, rowIndex to columnIndex) - }, - ) { - PocketSponsoredStory( + Box( + modifier = Modifier.semantics { + testTagsAsResourceId = true + testTag = when (story) { + placeholderStory -> "pocket.discover.more.story" + is PocketRecommendedStory -> "pocket.recommended.story" + else -> "pocket.sponsored.story" + } + }, + ) { + if (story == placeholderStory) { + ListItemTabLargePlaceholder(stringResource(R.string.pocket_stories_placeholder_text)) { + onDiscoverMoreClicked("https://getpocket.com/explore?$POCKET_FEATURE_UTM_KEY_VALUE") + } + } else if (story is PocketRecommendedStory) { + PocketStory( story = story, backgroundColor = backgroundColor, ) { - onStoryClicked(story, rowIndex to columnIndex) + val uri = Uri.parse(story.url) + .buildUpon() + .appendQueryParameter(URI_PARAM_UTM_KEY, POCKET_STORIES_UTM_VALUE) + .build().toString() + onStoryClicked(it.copy(url = uri), rowIndex to columnIndex) + } + } else if (story is PocketSponsoredStory) { + Box( + modifier = Modifier.onShown(0.5f) { + onStoryShown(story, rowIndex to columnIndex) + }, + ) { + PocketSponsoredStory( + story = story, + backgroundColor = backgroundColor, + ) { + onStoryClicked(story, rowIndex to columnIndex) + } } } } From ef96a08a553256b1e1ea0eba96b5ea3b81e12364 Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 17:39:20 +0300 Subject: [PATCH 022/218] For #25808: Build with compileSdkVersion for Android 13 / API 33. --- buildSrc/src/main/java/Config.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index cbcdefd9e..c07d60078 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -11,7 +11,7 @@ import java.util.Locale object Config { // Synchronized build configuration for all modules - const val compileSdkVersion = 32 + const val compileSdkVersion = 33 const val minSdkVersion = 21 const val targetSdkVersion = 32 From c947fa07bf9e0eede3b5b1a1628a59f69cc2fc8d Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 17:43:40 +0300 Subject: [PATCH 023/218] For #25808: Fix smart cast exception. --- .../mozilla/fenix/addons/AddonsManagementFragment.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt index bbef7bec9..92fb54c36 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt @@ -341,10 +341,12 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management) binding?.addonProgressOverlay?.overlayCardView?.onInitializeAccessibilityEvent(event) event.text.add(announcementText) event.contentDescription = null - binding?.addonProgressOverlay?.overlayCardView?.parent?.requestSendAccessibilityEvent( - binding?.addonProgressOverlay?.overlayCardView, - event, - ) + binding?.addonProgressOverlay?.overlayCardView?.let { + it.parent?.requestSendAccessibilityEvent( + it, + event, + ) + } } companion object { From 8638fa3ba39ceb7fa896297291ba9c9301f781e9 Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 17:49:41 +0300 Subject: [PATCH 024/218] For #25808: Update method signature for View.AccessibilityDelegate. --- .../main/java/org/mozilla/fenix/ext/View.kt | 18 +++++++++--------- .../TextPercentageSeekBarPreference.kt | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/ext/View.kt b/app/src/main/java/org/mozilla/fenix/ext/View.kt index f8891e35f..53ff50e74 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/View.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/View.kt @@ -43,11 +43,11 @@ fun View.removeTouchDelegate() { fun View.setNewAccessibilityParent(newParent: View) { this.accessibilityDelegate = object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( - host: View?, - info: AccessibilityNodeInfo?, + host: View, + info: AccessibilityNodeInfo, ) { super.onInitializeAccessibilityNodeInfo(host, info) - info?.setParent(newParent) + info.setParent(newParent) } } } @@ -64,11 +64,11 @@ fun View.updateAccessibilityCollectionItemInfo( ) { this.accessibilityDelegate = object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( - host: View?, - info: AccessibilityNodeInfo?, + host: View, + info: AccessibilityNodeInfo, ) { super.onInitializeAccessibilityNodeInfo(host, info) - info?.collectionItemInfo = + info.collectionItemInfo = AccessibilityNodeInfo.CollectionItemInfo.obtain( rowIndex, rowSpan, @@ -90,11 +90,11 @@ fun View.updateAccessibilityCollectionInfo( ) { this.accessibilityDelegate = object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( - host: View?, - info: AccessibilityNodeInfo?, + host: View, + info: AccessibilityNodeInfo, ) { super.onInitializeAccessibilityNodeInfo(host, info) - info?.collectionInfo = AccessibilityNodeInfo.CollectionInfo.obtain( + info.collectionInfo = AccessibilityNodeInfo.CollectionInfo.obtain( rowCount, columnCount, false, diff --git a/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt index 5beb96143..26aa94a7a 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt @@ -363,12 +363,12 @@ class TextPercentageSeekBarPreference @JvmOverloads constructor( object : View.AccessibilityDelegate() { override fun onInitializeAccessibilityNodeInfo( - host: View?, - info: AccessibilityNodeInfo?, + host: View, + info: AccessibilityNodeInfo, ) { super.onInitializeAccessibilityNodeInfo(host, info) - val initialInfo = info?.rangeInfo - info?.rangeInfo = initialInfo?.let { + val initialInfo = info.rangeInfo + info.rangeInfo = initialInfo?.let { AccessibilityNodeInfo.RangeInfo.obtain( RANGE_TYPE_PERCENT, MIN_VALUE.toFloat(), From 0189958bff33ab5e91ff4aa43728c1450a44d06c Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 17:56:16 +0300 Subject: [PATCH 025/218] For #25808: Handle a11y obtain() methods deprecations. --- .../fenix/addons/AddonsManagementFragment.kt | 9 +++-- .../main/java/org/mozilla/fenix/ext/View.kt | 33 +++++++++++++++---- .../TextPercentageSeekBarPreference.kt | 23 +++++++++---- 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt index 92fb54c36..c34c21487 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt @@ -334,9 +334,12 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management) } private fun announceForAccessibility(announcementText: CharSequence) { - val event = AccessibilityEvent.obtain( - AccessibilityEvent.TYPE_ANNOUNCEMENT, - ) + val event = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + AccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT) + } else { + @Suppress("DEPRECATION") + AccessibilityEvent.obtain(AccessibilityEvent.TYPE_ANNOUNCEMENT) + } binding?.addonProgressOverlay?.overlayCardView?.onInitializeAccessibilityEvent(event) event.text.add(announcementText) diff --git a/app/src/main/java/org/mozilla/fenix/ext/View.kt b/app/src/main/java/org/mozilla/fenix/ext/View.kt index 53ff50e74..83a02b7c1 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/View.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/View.kt @@ -68,7 +68,18 @@ fun View.updateAccessibilityCollectionItemInfo( info: AccessibilityNodeInfo, ) { super.onInitializeAccessibilityNodeInfo(host, info) - info.collectionItemInfo = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + info.collectionItemInfo = + AccessibilityNodeInfo.CollectionItemInfo( + rowIndex, + rowSpan, + columnIndex, + columnSpan, + false, + isSelected, + ) + } else { + @Suppress("DEPRECATION") AccessibilityNodeInfo.CollectionItemInfo.obtain( rowIndex, rowSpan, @@ -77,6 +88,7 @@ fun View.updateAccessibilityCollectionItemInfo( false, isSelected, ) + } } } } @@ -94,11 +106,20 @@ fun View.updateAccessibilityCollectionInfo( info: AccessibilityNodeInfo, ) { super.onInitializeAccessibilityNodeInfo(host, info) - info.collectionInfo = AccessibilityNodeInfo.CollectionInfo.obtain( - rowCount, - columnCount, - false, - ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + info.collectionInfo = AccessibilityNodeInfo.CollectionInfo( + rowCount, + columnCount, + false, + ) + } else { + @Suppress("DEPRECATION") + info.collectionInfo = AccessibilityNodeInfo.CollectionInfo.obtain( + rowCount, + columnCount, + false, + ) + } } } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt index 26aa94a7a..f34322c5a 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/TextPercentageSeekBarPreference.kt @@ -22,6 +22,7 @@ package org.mozilla.fenix.settings import android.content.Context import android.content.res.TypedArray +import android.os.Build import android.os.Parcel import android.os.Parcelable import android.util.AttributeSet @@ -369,12 +370,22 @@ class TextPercentageSeekBarPreference @JvmOverloads constructor( super.onInitializeAccessibilityNodeInfo(host, info) val initialInfo = info.rangeInfo info.rangeInfo = initialInfo?.let { - AccessibilityNodeInfo.RangeInfo.obtain( - RANGE_TYPE_PERCENT, - MIN_VALUE.toFloat(), - SEEK_BAR_MAX.toFloat(), - convertCurrentValue(it.current), - ) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + AccessibilityNodeInfo.RangeInfo( + RANGE_TYPE_PERCENT, + MIN_VALUE.toFloat(), + SEEK_BAR_MAX.toFloat(), + convertCurrentValue(it.current), + ) + } else { + @Suppress("DEPRECATION") + AccessibilityNodeInfo.RangeInfo.obtain( + RANGE_TYPE_PERCENT, + MIN_VALUE.toFloat(), + SEEK_BAR_MAX.toFloat(), + convertCurrentValue(it.current), + ) + } } } }, From 40fbcb6e9e534a5443841e74ea877ea5682a0638 Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 17:57:40 +0300 Subject: [PATCH 026/218] For #25808: Update method signatures for View.OnAttachStateChangeListener --- .../org/mozilla/fenix/components/toolbar/MenuPresenter.kt | 4 ++-- .../org/mozilla/fenix/utils/view/LifecycleViewProvider.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/MenuPresenter.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/MenuPresenter.kt index 80b12d786..522d03df8 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/MenuPresenter.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/MenuPresenter.kt @@ -49,11 +49,11 @@ class MenuPresenter( menuToolbar.invalidateActions() } - override fun onViewDetachedFromWindow(v: View?) { + override fun onViewDetachedFromWindow(v: View) { menuToolbar.onStop() } - override fun onViewAttachedToWindow(v: View?) { + override fun onViewAttachedToWindow(v: View) { // no-op } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/view/LifecycleViewProvider.kt b/app/src/main/java/org/mozilla/fenix/utils/view/LifecycleViewProvider.kt index 75d94cd22..50e1aae6e 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/view/LifecycleViewProvider.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/view/LifecycleViewProvider.kt @@ -35,11 +35,11 @@ class LifecycleViewProvider(view: View) : LifecycleOwner { internal class ViewBinding( private val registry: LifecycleRegistry, ) : View.OnAttachStateChangeListener { - override fun onViewAttachedToWindow(v: View?) { + override fun onViewAttachedToWindow(v: View) { registry.currentState = State.RESUMED } - override fun onViewDetachedFromWindow(v: View?) { + override fun onViewDetachedFromWindow(v: View) { registry.currentState = State.DESTROYED } } From 5feedd38c21d92c9d75174789b9b94657403980d Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 17:58:22 +0300 Subject: [PATCH 027/218] For #25808: Update method signature for AnimatorListenerAdapter. --- .../java/org/mozilla/fenix/browser/ToolbarGestureHandler.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/ToolbarGestureHandler.kt b/app/src/main/java/org/mozilla/fenix/browser/ToolbarGestureHandler.kt index ef5cedf52..6cde3be55 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/ToolbarGestureHandler.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/ToolbarGestureHandler.kt @@ -258,7 +258,7 @@ class ToolbarGestureHandler( .setDuration(shortAnimationDuration.toLong()) .setListener( object : AnimatorListenerAdapter() { - override fun onAnimationEnd(animation: Animator?) { + override fun onAnimationEnd(animation: Animator) { tabPreview.isVisible = false } }, From 8c0c9af65b6b8167ad6efe04c095131598a08da7 Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 18:02:28 +0300 Subject: [PATCH 028/218] For #25808: Update method signature for GestureDetector.SimpleOnGestureListener --- .../mozilla/fenix/browser/SwipeGestureLayout.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt b/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt index c34279ed1..40cd5d2d3 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt @@ -57,18 +57,18 @@ class SwipeGestureLayout @JvmOverloads constructor( ) : FrameLayout(context, attrs, defStyleAttr) { private val gestureListener = object : GestureDetector.SimpleOnGestureListener() { - override fun onDown(e: MotionEvent?): Boolean { + override fun onDown(e: MotionEvent): Boolean { return true } override fun onScroll( - e1: MotionEvent?, - e2: MotionEvent?, + e1: MotionEvent, + e2: MotionEvent, distanceX: Float, distanceY: Float, ): Boolean { - val start = e1?.let { event -> PointF(event.rawX, event.rawY) } ?: return false - val next = e2?.let { event -> PointF(event.rawX, event.rawY) } ?: return false + val start = e1.let { event -> PointF(event.rawX, event.rawY) } + val next = e2.let { event -> PointF(event.rawX, event.rawY) } if (activeListener == null && !handledInitialScroll) { activeListener = listeners.firstOrNull { listener -> @@ -81,8 +81,8 @@ class SwipeGestureLayout @JvmOverloads constructor( } override fun onFling( - e1: MotionEvent?, - e2: MotionEvent?, + e1: MotionEvent, + e2: MotionEvent, velocityX: Float, velocityY: Float, ): Boolean { From e057bb451494a54fa6684e3933205a047042f57d Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 18:16:02 +0300 Subject: [PATCH 029/218] For #25808: Link only URLs in library descriptions. Linkify.ALL is deprecated. --- .../org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt index 8799af6fb..897582238 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutLibrariesFragment.kt @@ -101,7 +101,7 @@ class AboutLibrariesFragment : Fragment(R.layout.fragment_about_libraries) { dialog.show() val textView = dialog.findViewById(android.R.id.message)!! - Linkify.addLinks(textView, Linkify.ALL) + Linkify.addLinks(textView, Linkify.WEB_URLS) textView.linksClickable = true textView.textSize = LICENSE_TEXT_SIZE textView.typeface = Typeface.MONOSPACE From 87ed4e4c5650c78b86c4bf37e53c27b6f8bcb56e Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 4 Jul 2022 18:20:02 +0300 Subject: [PATCH 030/218] For #25808: Handle onBackPressed() deprecation. --- app/src/main/java/org/mozilla/fenix/HomeActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 9f849d6f5..36da2108d 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -618,7 +618,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { return } } - super.onBackPressed() + super.getOnBackPressedDispatcher().onBackPressed() } @Suppress("DEPRECATION") From c5af10fac06ae3abcb0b0b3a95662b9c2ba71da6 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 6 Jul 2022 15:21:31 +0300 Subject: [PATCH 031/218] For #25808: Remove unnecessary elvis operator. --- app/src/main/java/org/mozilla/fenix/whatsnew/WhatsNewVersion.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/whatsnew/WhatsNewVersion.kt b/app/src/main/java/org/mozilla/fenix/whatsnew/WhatsNewVersion.kt index 20180f2bb..433321a1e 100644 --- a/app/src/main/java/org/mozilla/fenix/whatsnew/WhatsNewVersion.kt +++ b/app/src/main/java/org/mozilla/fenix/whatsnew/WhatsNewVersion.kt @@ -36,5 +36,5 @@ open class WhatsNewVersion(internal open val version: String) { data class ContextWhatsNewVersion(private val context: Context) : WhatsNewVersion("") { override val version: String - get() = context.appVersionName ?: "" + get() = context.appVersionName } From a4b858e90f0b507240c82887499dda9aff12b65c Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 6 Jul 2022 15:22:06 +0300 Subject: [PATCH 032/218] For #25808: Update URLStringUtils package path. --- .../org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt index d16b57285..244a6239b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt @@ -22,7 +22,7 @@ import mozilla.components.browser.state.state.ExternalAppType import mozilla.components.browser.toolbar.BrowserToolbar import mozilla.components.browser.toolbar.behavior.BrowserToolbarBehavior import mozilla.components.browser.toolbar.display.DisplayToolbar -import mozilla.components.support.utils.URLStringUtils +import mozilla.components.support.ktx.util.URLStringUtils import org.mozilla.fenix.R import org.mozilla.fenix.components.toolbar.interactor.BrowserToolbarInteractor import org.mozilla.fenix.customtabs.CustomTabToolbarIntegration From 324b29cca72c21f98d54a09165a94c17237efc72 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 6 Jul 2022 15:23:07 +0300 Subject: [PATCH 033/218] For #25808: Handle get(String) deprecation. --- .../main/java/org/mozilla/fenix/widget/VoiceSearchActivity.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/widget/VoiceSearchActivity.kt b/app/src/main/java/org/mozilla/fenix/widget/VoiceSearchActivity.kt index dfb57d5b4..56a780695 100644 --- a/app/src/main/java/org/mozilla/fenix/widget/VoiceSearchActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/widget/VoiceSearchActivity.kt @@ -11,6 +11,7 @@ import android.os.StrictMode import android.speech.RecognizerIntent import androidx.appcompat.app.AppCompatActivity import mozilla.components.support.locale.LocaleManager +import mozilla.components.support.utils.ext.getParcelableCompat import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.SearchWidget import org.mozilla.fenix.HomeActivity @@ -42,7 +43,7 @@ class VoiceSearchActivity : AppCompatActivity() { } // Retrieve the previous intent from the saved state - previousIntent = savedInstanceState?.get(PREVIOUS_INTENT) as Intent? + previousIntent = savedInstanceState?.getParcelableCompat(PREVIOUS_INTENT, Intent::class.java) if (previousIntent.isForSpeechProcessing()) { // Don't reopen the speech recognizer return From 0b2fe605cecbd56858d9d3f981865d6410ab223c Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 6 Jul 2022 15:23:44 +0300 Subject: [PATCH 034/218] For #25808: Handle PackageManager methods deprecation. --- app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt | 3 ++- .../org/mozilla/fenix/components/metrics/MetricsStorage.kt | 3 ++- .../mozilla/fenix/components/metrics/MozillaProductDetector.kt | 3 ++- .../java/org/mozilla/fenix/settings/about/AboutFragment.kt | 3 ++- app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt index d633d3160..33af4e1eb 100644 --- a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt @@ -15,6 +15,7 @@ import mozilla.components.feature.intent.ext.sanitize import mozilla.components.feature.intent.processing.IntentProcessor import mozilla.components.support.utils.EXTRA_ACTIVITY_REFERRER_CATEGORY import mozilla.components.support.utils.EXTRA_ACTIVITY_REFERRER_PACKAGE +import mozilla.components.support.utils.ext.getApplicationInfoCompat import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.HomeActivity.Companion.PRIVATE_BROWSING_MODE import org.mozilla.fenix.components.IntentProcessorType @@ -125,7 +126,7 @@ class IntentReceiverActivity : Activity() { // Category is supported for API>=26. r.host?.let { host -> try { - val category = packageManager.getApplicationInfo(host, 0).category + val category = packageManager.getApplicationInfoCompat(host, 0).category intent.putExtra(EXTRA_ACTIVITY_REFERRER_CATEGORY, category) } catch (e: PackageManager.NameNotFoundException) { // At least we tried. diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt index e0777df7b..c8f56491d 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt @@ -8,6 +8,7 @@ import android.content.Context import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import mozilla.components.support.utils.ext.getPackageInfoCompat import org.mozilla.fenix.ext.settings import org.mozilla.fenix.nimbus.FxNimbus import org.mozilla.fenix.utils.Settings @@ -76,7 +77,7 @@ internal class DefaultMetricsStorage( fun shouldSendGenerally(context: Context): Boolean { val installedTime = context.packageManager - .getPackageInfo(context.packageName, 0) + .getPackageInfoCompat(context.packageName, 0) .firstInstallTime val timeDifference = System.currentTimeMillis() - installedTime val withinWindow = timeDifference in windowStartMillis..windowEndMillis diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MozillaProductDetector.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MozillaProductDetector.kt index 388b0e01a..fc42937b7 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MozillaProductDetector.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MozillaProductDetector.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.components.metrics import android.content.Context import android.content.pm.PackageManager +import mozilla.components.support.utils.ext.getPackageInfoCompat import org.mozilla.fenix.utils.BrowsersCache object MozillaProductDetector { @@ -45,7 +46,7 @@ object MozillaProductDetector { fun packageIsInstalled(context: Context, packageName: String): Boolean { try { - context.packageManager.getPackageInfo(packageName, 0) + context.packageManager.getPackageInfoCompat(packageName, 0) } catch (e: PackageManager.NameNotFoundException) { return false } diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt index 242f007c9..5eae0d639 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt @@ -15,6 +15,7 @@ import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration import mozilla.components.service.glean.private.NoExtras +import mozilla.components.support.utils.ext.getPackageInfoCompat import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.GleanMetrics.Events @@ -96,7 +97,7 @@ class AboutFragment : Fragment(), AboutPageListener { private fun populateAboutHeader() { val aboutText = try { val packageInfo = - requireContext().packageManager.getPackageInfo(requireContext().packageName, 0) + requireContext().packageManager.getPackageInfoCompat(requireContext().packageName, 0) val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo).toString() val maybeFenixGitHash = if (BuildConfig.GIT_HASH.isNotBlank()) ", ${BuildConfig.GIT_HASH}" else "" val componentsAbbreviation = getString(R.string.components_abbreviation) diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt b/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt index cb600d81e..3d1303a74 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt @@ -24,6 +24,7 @@ import kotlinx.coroutines.launch import mozilla.components.concept.sync.DeviceCapability import mozilla.components.feature.share.RecentAppsStorage import mozilla.components.service.fxa.manager.FxaAccountManager +import mozilla.components.support.utils.ext.queryIntentActivitiesCompat import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.isOnline @@ -162,7 +163,7 @@ class ShareViewModel(application: Application) : AndroidViewModel(application) { @VisibleForTesting @WorkerThread fun getIntentActivities(shareIntent: Intent, context: Context): List? { - return context.packageManager.queryIntentActivities(shareIntent, 0) + return context.packageManager.queryIntentActivitiesCompat(shareIntent, 0) } /** From ca46f2f07e7b9a2c5f267cebbdfdccba000add11 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 6 Jul 2022 16:01:21 +0300 Subject: [PATCH 035/218] For #25808: Remove unnecessary safe call. --- app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt index ef150cafd..5d26e9891 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt @@ -71,7 +71,7 @@ object SupportUtils { ): String { val escapedTopic = getEncodedTopicUTF8(topic.topicStr) // Remove the whitespace so a search is not triggered: - val appVersion = context.appVersionName?.replace(" ", "") + val appVersion = context.appVersionName.replace(" ", "") val osTarget = "Android" val langTag = getLanguageTag(locale) return "https://support.mozilla.org/1/mobile/$appVersion/$osTarget/$langTag/$escapedTopic" From 2e9fd871d6fbdab4e1b2cc6fb54ca787bd4ef743 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 12:34:04 +0200 Subject: [PATCH 036/218] Update to Android-Components 109.0.20221116053804. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 83a888fb3..ef5e4e8ae 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221115235215" + const val VERSION = "109.0.20221116053804" } From 5ddeba154cadb8fe080f5270cc86be51b08ec09a Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 13:29:36 +0200 Subject: [PATCH 037/218] For #25808: Suppress onBackPressed deprecation. --- .../fenix/library/bookmarks/BookmarkSearchDialogFragment.kt | 1 + .../fenix/library/history/HistorySearchDialogFragment.kt | 1 + .../main/java/org/mozilla/fenix/search/SearchDialogFragment.kt | 1 + app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayDialog.kt | 1 + .../trackingprotection/TrackingProtectionPanelDialogFragment.kt | 2 ++ 5 files changed, 6 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkSearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkSearchDialogFragment.kt index 7e1237aaa..71acc1384 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkSearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkSearchDialogFragment.kt @@ -70,6 +70,7 @@ class BookmarkSearchDialogFragment : AppCompatDialogFragment(), UserInteractionH override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return object : Dialog(requireContext(), this.theme) { + @Deprecated("Deprecated in Java") override fun onBackPressed() { this@BookmarkSearchDialogFragment.onBackPressed() } diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistorySearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistorySearchDialogFragment.kt index 84b81fb06..f9785c6aa 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistorySearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistorySearchDialogFragment.kt @@ -70,6 +70,7 @@ class HistorySearchDialogFragment : AppCompatDialogFragment(), UserInteractionHa override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return object : Dialog(requireContext(), this.theme) { + @Deprecated("Deprecated in Java") override fun onBackPressed() { this@HistorySearchDialogFragment.onBackPressed() } diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt index 9e452be31..4738aaaa8 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -154,6 +154,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return object : Dialog(requireContext(), this.theme) { + @Deprecated("Deprecated in Java") override fun onBackPressed() { this@SearchDialogFragment.onBackPressed() } diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayDialog.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayDialog.kt index 7167c3b8a..a0be0c7be 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayDialog.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayDialog.kt @@ -16,6 +16,7 @@ class TabsTrayDialog( theme: Int, private val interactor: () -> BrowserTrayInteractor, ) : Dialog(context, theme) { + @Deprecated("Deprecated in Java") override fun onBackPressed() { if (interactor.invoke().onBackPressed()) { return diff --git a/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelDialogFragment.kt index 480c8f2d9..b1c0bf0b8 100644 --- a/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelDialogFragment.kt @@ -163,6 +163,7 @@ class TrackingProtectionPanelDialogFragment : AppCompatDialogFragment(), UserInt override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return if (args.gravity == Gravity.BOTTOM) { object : BottomSheetDialog(requireContext(), this.theme) { + @Deprecated("Deprecated in Java") override fun onBackPressed() { this@TrackingProtectionPanelDialogFragment.onBackPressed() } @@ -176,6 +177,7 @@ class TrackingProtectionPanelDialogFragment : AppCompatDialogFragment(), UserInt } } else { object : Dialog(requireContext()) { + @Deprecated("Deprecated in Java") override fun onBackPressed() { this@TrackingProtectionPanelDialogFragment.onBackPressed() } From 3472933c3798031d8aefadc60d9ea2c33669b21d Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 14:01:44 +0200 Subject: [PATCH 038/218] For #25808: Suppress deprecations in tests. --- .../test/java/org/mozilla/fenix/settings/SupportUtilsTest.kt | 1 + .../test/java/org/mozilla/fenix/share/ShareControllerTest.kt | 2 ++ .../test/java/org/mozilla/fenix/tabstray/TabsTrayDialogTest.kt | 1 + .../java/org/mozilla/fenix/widget/SearchWidgetProviderTest.kt | 1 + .../java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt | 1 + 5 files changed, 6 insertions(+) diff --git a/app/src/test/java/org/mozilla/fenix/settings/SupportUtilsTest.kt b/app/src/test/java/org/mozilla/fenix/settings/SupportUtilsTest.kt index 3582cd34b..8493481d8 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/SupportUtilsTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/SupportUtilsTest.kt @@ -62,6 +62,7 @@ class SupportUtilsTest { every { context.packageName } returns "org.mozilla.fenix" every { context.packageManager } returns packageManager + @Suppress("DEPRECATION") every { packageManager.getPackageInfo("org.mozilla.fenix", 0) } returns packageInfo packageInfo.versionName = versionName diff --git a/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt b/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt index bba52f217..d2db8f566 100644 --- a/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/share/ShareControllerTest.kt @@ -111,7 +111,9 @@ class ShareControllerTest { // Check that the Intent used for querying apps has the expected structure assertTrue(shareIntent.isCaptured) assertEquals(Intent.ACTION_SEND, shareIntent.captured.action) + @Suppress("DEPRECATION") assertEquals(shareSubject, shareIntent.captured.extras!![Intent.EXTRA_SUBJECT]) + @Suppress("DEPRECATION") assertEquals(textToShare, shareIntent.captured.extras!![Intent.EXTRA_TEXT]) assertEquals("text/plain", shareIntent.captured.type) assertEquals(Intent.FLAG_ACTIVITY_NEW_DOCUMENT + Intent.FLAG_ACTIVITY_MULTIPLE_TASK, shareIntent.captured.flags) diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayDialogTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayDialogTest.kt index 27263cce2..1e7f3678a 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayDialogTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/TabsTrayDialogTest.kt @@ -17,6 +17,7 @@ class TabsTrayDialogTest { val interactor = mockk(relaxed = true) val dialog = TabsTrayDialog(context, 0) { interactor } + @Suppress("DEPRECATION") dialog.onBackPressed() verify { interactor.onBackPressed() } diff --git a/app/src/test/java/org/mozilla/fenix/widget/SearchWidgetProviderTest.kt b/app/src/test/java/org/mozilla/fenix/widget/SearchWidgetProviderTest.kt index f52e07602..c5bcacf60 100644 --- a/app/src/test/java/org/mozilla/fenix/widget/SearchWidgetProviderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/widget/SearchWidgetProviderTest.kt @@ -160,6 +160,7 @@ class SearchWidgetProviderTest { assertEquals(SearchWidgetProvider::class.java.name, componentNameCaptor.captured.className) assertEquals(SearchWidgetProvider::class.java.name, intentCaptor.captured.component!!.className) assertEquals(AppWidgetManager.ACTION_APPWIDGET_UPDATE, intentCaptor.captured.action) + @Suppress("DEPRECATION") assertEquals(widgetsToUpdate, intentCaptor.captured.extras!!.get(AppWidgetManager.EXTRA_APPWIDGET_IDS)) } finally { unmockkStatic(AppWidgetManager::class) diff --git a/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt b/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt index f483aa863..743d0bdb6 100644 --- a/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt +++ b/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt @@ -122,6 +122,7 @@ class VoiceSearchActivityTest { controller.create(savedInstanceState) controller.saveInstanceState(outState) + @Suppress("DEPRECATION") assertEquals(previousIntent, outState.getParcelable(PREVIOUS_INTENT)) } From d9b2c6e5e128009b81ccb8c85958d73b05c52666 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 14:32:51 +0200 Subject: [PATCH 039/218] For #25808: Handle PackageManager methods deprecation in UI tests. --- .../org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt index e9d5c1bcd..fa57b8e05 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt @@ -23,6 +23,7 @@ import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiScrollable import androidx.test.uiautomator.UiSelector +import mozilla.components.support.utils.ext.getPackageInfoCompat import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.containsString import org.junit.Assert.assertTrue @@ -97,7 +98,7 @@ private fun assertAboutToolbar() = private fun assertVersionNumber() { val context = InstrumentationRegistry.getInstrumentation().targetContext - val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) + val packageInfo = context.packageManager.getPackageInfoCompat(context.packageName, 0) val versionCode = PackageInfoCompat.getLongVersionCode(packageInfo).toString() val buildNVersion = "${packageInfo.versionName} (Build #$versionCode)\n" From 0884a178eff7ffee48e8ed553ac8f0f505bdae5f Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 16:08:13 +0200 Subject: [PATCH 040/218] For #25808: Fix failing 'process make_default_browser deep link for API 23 and below' test. --- .../intent/HomeDeepLinkIntentProcessorTest.kt | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/app/src/test/java/org/mozilla/fenix/home/intent/HomeDeepLinkIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/home/intent/HomeDeepLinkIntentProcessorTest.kt index 6434f177b..573296b9b 100644 --- a/app/src/test/java/org/mozilla/fenix/home/intent/HomeDeepLinkIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/intent/HomeDeepLinkIntentProcessorTest.kt @@ -5,12 +5,15 @@ package org.mozilla.fenix.home.intent import android.content.Intent +import android.content.pm.PackageInfo +import android.content.pm.PackageManager import android.os.Build.VERSION_CODES.M import android.os.Build.VERSION_CODES.N import android.os.Build.VERSION_CODES.P import androidx.core.net.toUri import androidx.navigation.NavController import io.mockk.Called +import io.mockk.every import io.mockk.mockk import io.mockk.verify import mozilla.appservices.places.BookmarkRoot @@ -248,19 +251,31 @@ class HomeDeepLinkIntentProcessorTest { @Test @Config(maxSdk = M) fun `process make_default_browser deep link for API 23 and below`() { + val packageManager: PackageManager = mockk() + val packageInfo = PackageInfo() + + every { activity.packageName } returns "org.mozilla.fenix" + every { activity.packageManager } returns packageManager + @Suppress("DEPRECATION") + every { packageManager.getPackageInfo("org.mozilla.fenix", 0) } returns packageInfo + packageInfo.versionName = "versionName" + assertTrue(processorHome.process(testIntent("make_default_browser"), navController, out)) + val searchTermOrURL = SupportUtils.getSumoURLForTopic( + activity, + SupportUtils.SumoTopic.SET_AS_DEFAULT_BROWSER, + ) + verify { activity.openToBrowserAndLoad( - searchTermOrURL = SupportUtils.getSumoURLForTopic( - activity, - SupportUtils.SumoTopic.SET_AS_DEFAULT_BROWSER, - ), + searchTermOrURL = searchTermOrURL, newTab = true, from = BrowserDirection.FromGlobal, flags = EngineSession.LoadUrlFlags.external(), ) } + verify { navController wasNot Called } verify { out wasNot Called } } From de8b990e8a57c5efdef3cdb85ed81cd14f6a770e Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 12:34:04 +0200 Subject: [PATCH 041/218] Update to Android-Components 109.0.20221116143121 --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index ef5e4e8ae..e4f6dc989 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221116053804" + const val VERSION = "109.0.20221116143121" } From 9a52bbcc3d2228b5dde8a2c6f9fe7dfd1b25d192 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 18:24:41 +0200 Subject: [PATCH 042/218] For #25808: Temporary disable UI media notification tests. Locally, on some devices, these tests pass. Also, with devices on which the test fail, on mirroring the tests in real app usage the notification closes on tab close. --- .../java/org/mozilla/fenix/ui/MediaNotificationTest.kt | 3 +++ app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt | 1 + 2 files changed, 4 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt index e9d4c754e..c2a35c8d6 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt @@ -11,6 +11,7 @@ import mozilla.components.concept.engine.mediasession.MediaSession import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before +import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.mozilla.fenix.ext.components @@ -61,6 +62,7 @@ class MediaNotificationTest { mockWebServer.shutdown() } + @Ignore("Failing after SDK 33 migration. See: https://github.com/mozilla-mobile/fenix/pull/25876") @Test fun videoPlaybackSystemNotificationTest() { val videoTestPage = TestAssetHelper.getVideoPageAsset(mockWebServer) @@ -94,6 +96,7 @@ class MediaNotificationTest { mDevice.pressBack() } + @Ignore("Failing after SDK 33 migration. See: https://github.com/mozilla-mobile/fenix/pull/25876") @Test fun mediaSystemNotificationInPrivateModeTest() { val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index d0a85e27a..b2867e8b0 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -780,6 +780,7 @@ class SmokeTest { } } + @Ignore("Failing after SDK 33 migration. See: https://github.com/mozilla-mobile/fenix/pull/25876") @Test fun audioPlaybackSystemNotificationTest() { val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer) From 0609475ededa40d43eb02c92f6e95a51191aefc9 Mon Sep 17 00:00:00 2001 From: Noah Bond Date: Tue, 15 Nov 2022 13:54:12 -0800 Subject: [PATCH 043/218] For #27457 - Refactor Pocket category colors --- .../home/pocket/PocketCategoriesViewHolder.kt | 39 ++++++------- .../home/pocket/PocketStoriesComposables.kt | 56 ++++++++++++++----- 2 files changed, 59 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketCategoriesViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketCategoriesViewHolder.kt index 1e3d1a044..5e7a0d620 100644 --- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketCategoriesViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketCategoriesViewHolder.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.home.pocket +import android.content.res.Configuration import android.view.View import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Column @@ -12,7 +13,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -25,7 +25,6 @@ import org.mozilla.fenix.components.components import org.mozilla.fenix.compose.ComposeViewHolder import org.mozilla.fenix.compose.home.HomeSectionHeader import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme import org.mozilla.fenix.wallpapers.WallpaperState internal const val POCKET_CATEGORIES_SELECTED_AT_A_TIME_COUNT = 8 @@ -61,10 +60,8 @@ class PocketCategoriesViewHolder( val wallpaperState = components.appStore .observeAsComposableState { state -> state.wallpaperState }.value ?: WallpaperState.default - var selectedBackgroundColor: Color? = null - var unselectedBackgroundColor: Color? = null - var selectedTextColor: Color? = null - var unselectedTextColor: Color? = null + var (selectedBackgroundColor, unselectedBackgroundColor, selectedTextColor, unselectedTextColor) = + PocketStoriesCategoryColors.buildColors() wallpaperState.composeRunIfWallpaperCardColorsAreAvailable { cardColorLight, cardColorDark -> if (isSystemInDarkTheme()) { selectedBackgroundColor = cardColorDark @@ -79,16 +76,20 @@ class PocketCategoriesViewHolder( } } + val categoryColors = PocketStoriesCategoryColors( + selectedTextColor = selectedTextColor, + unselectedTextColor = unselectedTextColor, + selectedBackgroundColor = selectedBackgroundColor, + unselectedBackgroundColor = unselectedBackgroundColor, + ) + // See the detailed comment in PocketStoriesViewHolder for reasoning behind this change. if (!homeScreenReady) return Column { Spacer(Modifier.height(24.dp)) PocketTopics( - selectedBackgroundColor = selectedBackgroundColor, - unselectedBackgroundColor = unselectedBackgroundColor, - selectedTextColor = selectedTextColor, - unselectedTextColor = unselectedTextColor, + categoryColors = categoryColors, categories = categories ?: emptyList(), categoriesSelections = categoriesSelections ?: emptyList(), onCategoryClick = interactor::onCategoryClicked, @@ -103,12 +104,9 @@ class PocketCategoriesViewHolder( @Composable private fun PocketTopics( - selectedTextColor: Color? = null, - unselectedTextColor: Color? = null, - selectedBackgroundColor: Color? = null, - unselectedBackgroundColor: Color? = null, categories: List = emptyList(), categoriesSelections: List = emptyList(), + categoryColors: PocketStoriesCategoryColors = PocketStoriesCategoryColors.buildColors(), onCategoryClick: (PocketRecommendedStoriesCategory) -> Unit, ) { Column { @@ -121,21 +119,18 @@ private fun PocketTopics( PocketStoriesCategories( categories = categories, selections = categoriesSelections, - selectedTextColor = selectedTextColor, - unselectedTextColor = unselectedTextColor, - selectedBackgroundColor = selectedBackgroundColor, - unselectedBackgroundColor = unselectedBackgroundColor, + modifier = Modifier.fillMaxWidth(), + categoryColors = categoryColors, onCategoryClick = onCategoryClick, - modifier = Modifier - .fillMaxWidth(), ) } } @Composable -@Preview +@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) +@Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun PocketCategoriesViewHolderPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { PocketTopics( categories = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor" .split(" ") diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt index 1bf47f832..71485231a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt +++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt @@ -419,12 +419,9 @@ private fun Rect.getIntersectPercentage(realSize: IntSize, other: Rect): Float { * * @param categories The categories needed to be displayed. * @param selections List of categories currently selected. - * @param selectedTextColor Text [Color] when the category is selected. - * @param unselectedTextColor Text [Color] when the category is not selected. - * @param selectedBackgroundColor Background [Color] when the category is selected. - * @param unselectedBackgroundColor Background [Color] when the category is not selected. - * @param onCategoryClick Callback for when the user taps a category. * @param modifier [Modifier] to be applied to the layout. + * @param categoryColors The color set defined by [PocketStoriesCategoryColors] used to style Pocket categories. + * @param onCategoryClick Callback for when the user taps a category. */ @OptIn(ExperimentalComposeUiApi::class) @Suppress("LongParameterList") @@ -432,12 +429,9 @@ private fun Rect.getIntersectPercentage(realSize: IntSize, other: Rect): Float { fun PocketStoriesCategories( categories: List, selections: List, - selectedTextColor: Color? = null, - unselectedTextColor: Color? = null, - selectedBackgroundColor: Color? = null, - unselectedBackgroundColor: Color? = null, - onCategoryClick: (PocketRecommendedStoriesCategory) -> Unit, modifier: Modifier = Modifier, + categoryColors: PocketStoriesCategoryColors = PocketStoriesCategoryColors.buildColors(), + onCategoryClick: (PocketRecommendedStoriesCategory) -> Unit, ) { Box( modifier = modifier.semantics { @@ -453,10 +447,10 @@ fun PocketStoriesCategories( SelectableChip( text = category.name, isSelected = selections.map { it.name }.contains(category.name), - selectedTextColor = selectedTextColor, - unselectedTextColor = unselectedTextColor, - selectedBackgroundColor = selectedBackgroundColor, - unselectedBackgroundColor = unselectedBackgroundColor, + selectedTextColor = categoryColors.selectedTextColor, + unselectedTextColor = categoryColors.unselectedTextColor, + selectedBackgroundColor = categoryColors.selectedBackgroundColor, + unselectedBackgroundColor = categoryColors.unselectedBackgroundColor, ) { onCategoryClick(category) } @@ -465,6 +459,40 @@ fun PocketStoriesCategories( } } +/** + * Wrapper for the color parameters of [PocketStoriesCategories]. + * + * @param selectedTextColor Text [Color] when the category is selected. + * @param unselectedTextColor Text [Color] when the category is not selected. + * @param selectedBackgroundColor Background [Color] when the category is selected. + * @param unselectedBackgroundColor Background [Color] when the category is not selected. + */ +data class PocketStoriesCategoryColors( + val selectedBackgroundColor: Color, + val unselectedBackgroundColor: Color, + val selectedTextColor: Color, + val unselectedTextColor: Color, +) { + companion object { + + /** + * Builder function used to construct an instance of [PocketStoriesCategoryColors]. + */ + @Composable + fun buildColors( + selectedBackgroundColor: Color = FirefoxTheme.colors.textActionPrimary, + unselectedBackgroundColor: Color = FirefoxTheme.colors.textActionTertiary, + selectedTextColor: Color = FirefoxTheme.colors.actionPrimary, + unselectedTextColor: Color = FirefoxTheme.colors.actionTertiary, + ) = PocketStoriesCategoryColors( + selectedTextColor = selectedTextColor, + unselectedTextColor = unselectedTextColor, + selectedBackgroundColor = selectedBackgroundColor, + unselectedBackgroundColor = unselectedBackgroundColor, + ) + } +} + /** * Pocket feature section title. * Shows a default text about Pocket and offers a external link to learn more. From 3f3f508b2b578cbe2339866e2f811cd33a215662 Mon Sep 17 00:00:00 2001 From: Noah Bond Date: Tue, 15 Nov 2022 14:51:53 -0800 Subject: [PATCH 044/218] For #27457 - Refactor Pocket category colors --- .../fenix/home/pocket/PocketStoriesComposables.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt index 71485231a..3c1393b7c 100644 --- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt +++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt @@ -485,11 +485,11 @@ data class PocketStoriesCategoryColors( selectedTextColor: Color = FirefoxTheme.colors.actionPrimary, unselectedTextColor: Color = FirefoxTheme.colors.actionTertiary, ) = PocketStoriesCategoryColors( - selectedTextColor = selectedTextColor, - unselectedTextColor = unselectedTextColor, - selectedBackgroundColor = selectedBackgroundColor, - unselectedBackgroundColor = unselectedBackgroundColor, - ) + selectedBackgroundColor = selectedBackgroundColor, + unselectedBackgroundColor = unselectedBackgroundColor, + selectedTextColor = selectedTextColor, + unselectedTextColor = unselectedTextColor, + ) } } From 868a63a91aca75528aa2e6b666633b0c1e49632b Mon Sep 17 00:00:00 2001 From: DreVla Date: Tue, 15 Nov 2022 15:26:41 +0200 Subject: [PATCH 045/218] For #27801 - Update header text for the search selector menu --- .../org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt | 2 +- app/src/main/res/values/strings.xml | 4 +++- .../mozilla/fenix/search/toolbar/SearchSelectorMenuTest.kt | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt index 88eb7d3a2..205eaf7c9 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenu.kt @@ -50,7 +50,7 @@ class SearchSelectorMenu( internal fun menuItems(searchEngines: List): List { val headerCandidate = DecorativeTextMenuCandidate( - text = context.getString(R.string.search_header_menu_item), + text = context.getString(R.string.search_header_menu_item_2), ) val settingsCandidate = TextMenuCandidate( text = context.getString(R.string.search_settings_menu_item), diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8dfc37071..aa80d0dcc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -244,7 +244,9 @@ Search settings - This time search: + This time search: + + This time search in: diff --git a/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenuTest.kt b/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenuTest.kt index 38c49564d..7dafa6545 100644 --- a/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenuTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/toolbar/SearchSelectorMenuTest.kt @@ -35,7 +35,7 @@ class SearchSelectorMenuTest { lastItem.onClick() assertEquals( - testContext.getString(R.string.search_header_menu_item), + testContext.getString(R.string.search_header_menu_item_2), (items.first() as DecorativeTextMenuCandidate).text, ) assertEquals( From 4b4875adeb4bb2ed009bb877be063dd234ba2da9 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 16 Nov 2022 20:02:29 +0000 Subject: [PATCH 046/218] Update to Android-Components 109.0.20221116192746. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index e4f6dc989..415c23443 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221116143121" + const val VERSION = "109.0.20221116192746" } From 7c7028844e9560affb4d61adecd5ec34ee4e3ccc Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 16 Nov 2022 22:03:54 +0200 Subject: [PATCH 047/218] For #25808: Re-enable UI media notification tests. --- .../java/org/mozilla/fenix/ui/MediaNotificationTest.kt | 3 --- app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt | 1 - 2 files changed, 4 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt index c2a35c8d6..e9d4c754e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/MediaNotificationTest.kt @@ -11,7 +11,6 @@ import mozilla.components.concept.engine.mediasession.MediaSession import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before -import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.mozilla.fenix.ext.components @@ -62,7 +61,6 @@ class MediaNotificationTest { mockWebServer.shutdown() } - @Ignore("Failing after SDK 33 migration. See: https://github.com/mozilla-mobile/fenix/pull/25876") @Test fun videoPlaybackSystemNotificationTest() { val videoTestPage = TestAssetHelper.getVideoPageAsset(mockWebServer) @@ -96,7 +94,6 @@ class MediaNotificationTest { mDevice.pressBack() } - @Ignore("Failing after SDK 33 migration. See: https://github.com/mozilla-mobile/fenix/pull/25876") @Test fun mediaSystemNotificationInPrivateModeTest() { val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index b2867e8b0..d0a85e27a 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -780,7 +780,6 @@ class SmokeTest { } } - @Ignore("Failing after SDK 33 migration. See: https://github.com/mozilla-mobile/fenix/pull/25876") @Test fun audioPlaybackSystemNotificationTest() { val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer) From 9ff56968cb39dc900ea382721bb30890fdc9055b Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Thu, 17 Nov 2022 01:35:58 +0100 Subject: [PATCH 048/218] Import l10n. (#27871) --- app/src/main/res/values-fy-rNL/strings.xml | 50 +------------- app/src/main/res/values-nl/strings.xml | 51 +------------- app/src/main/res/values-uz/strings.xml | 78 +++++++++------------- 3 files changed, 37 insertions(+), 142 deletions(-) diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index 296dd9918..f4e43e2d2 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -45,8 +45,6 @@ - Resinte blêdwizers - Koartlyn bewarre Alle bewarre blêdwizers toane @@ -263,37 +261,13 @@ Diskear sykje yn: - - Wat is der nij yn %1$s - - It is no ienfâldiger fierder te gean wêr’t jo bleaun wiene. - - Personalisearre %1$s-startside - - Spring nei jo iepen ljepblêden, blêdwizers en navigaasjeskiednis. - - Kreaze, oardere ljepblêden - - Smyt ljepblêdrommel fuort mei in ferbettere opmaak en automatysk slutende ljepblêden. - - Resinte sykopdrachten - - Besjoch jo lêste sykopdrachten opnij fan jo startside en ljepblêden ôf. - - - Jo personalisearre Firefox-startside makket it no ienfâldiger om fierder te gean wêr’t jo bleaun wiene. Fyn jo resinte ljepblêden, blêdwizers, en sykresultaten. - Kom yn de kunde mei jo personalisearre startside. Resinte ljepblêden, blêdwizers en sykresultaten wurde hjir werjûn. - Wolkom by in ûnôfhinklik ynternet - Wolkom by in mear persoanlike ynternet Mear kleuren. Bettere privacy. Deselde ynset foar minsken boppe winst. - Ljep fan telefoan nei laptop en tebek - Fan skermen wikselje is makliker as ea Gean fan jo startside ôf fierder wêr’t jo stoppe binne mei ljepblêden fan oare apparaten. @@ -1245,33 +1219,20 @@ Groep fuortsmiten - - Wolkom by %s! Wolkom by in better ynternet In browser dy’t boud is foar minsken, net foar winst. - - Syngronisearje Firefox tusken apparaten Gean troch wêr’t jo bleaun wiene - - Bring blêdwizers, skiednis en wachtwurden nei %1$s op dit apparaat. Syngronisearje ljepblêden en wachtwurden op ferskate apparaten foar maklik wikseljen tusken skermen. - - Registrearje Oanmelde Syngronisaasje is ynskeakele - - Privacy dy’t altyd oan stiet Standert privacybeskerming - - %1$s soarget der automatysk foar dat bedriuwen jo net stikem folgje op ynternet. Mei Totale cookiebeskerming om foar te kommen dat trackers cookies brûke om jo stikem op it ynternet te folgjen. @@ -1284,19 +1245,10 @@ Blokkearret mear trackers, sadat siden rapper laden wurde, mar guon funksjonaliteit op in side wurket mooglik net. Kies jo arkbalkepleatsing - - Pleats de arkbalke binnen hânberik. Hâld him ûnderoan of ferpleats him nei boppe. Hâld him ûnderoan, of ferpleats him nei boppe. - - Jo privacy Jo beheare jo gegevens - - Wy hawwe %s ûntwurpen om jo kontrôle te jaan oer wat jo online diele en wat jo mei ús diele. - - Firefox jout jo kontrôle oer wat jo online diele en wat jo mei ús diele. @@ -1960,4 +1912,6 @@ útklappe keppeling iepenje foar mear ynfo oer dizze kolleksje + + it artikel te lêzen diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index af18ea754..55759feba 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -49,8 +49,6 @@ - Recente bladwijzers - Onlangs opgeslagen Alle opgeslagen bladwijzers tonen @@ -268,38 +266,13 @@ Deze keer zoeken met: - - Wat is er nieuw in %1$s - - Het is nu eenvoudiger om verder te gaan waar u was gebleven. - - Gepersonaliseerde %1$s-startpagina - - Spring naar uw open tabbladen, bladwijzers en navigatiegeschiedenis. - - Nette, geordende tabbladen - - Verwijder tabbladrommel met een verbeterde opmaak en automatisch sluitende tabbladen. - - Recente zoekopdrachten - - - Bekijk uw laatste zoekopdrachten opnieuw vanaf uw startpagina en tabbladen. - - - Uw gepersonaliseerde Firefox-startpagina maakt het nu eenvoudiger om verder te gaan waar u was gebleven. Vind uw recente tabbladen, bladwijzers en zoekresultaten. - Maak kennis met uw gepersonaliseerde startpagina. Recente tabbladen, bladwijzers en zoekresultaten worden hier weergegeven. - Welkom bij een onafhankelijk internet - Welkom bij een meer persoonlijk internet Meer kleuren. Betere privacy. Dezelfde toewijding aan mensen boven winst. - Spring van telefoon naar laptop en terug - Van scherm wisselen is eenvoudiger dan ooit Ga verder waar u was gebleven met tabbladen van andere apparaten nu op uw startpagina. @@ -1261,33 +1234,20 @@ Groep verwijderd - - Welkom bij %s! Welkom bij een beter internet Een browser gebouwd voor mensen, niet voor winst. - - Synchroniseer Firefox tussen apparaten Ga verder waar u was gebleven - - Breng bladwijzers, geschiedenis en wachtwoorden naar %1$s op dit apparaat. Synchroniseer tabbladen en wachtwoorden op verschillende apparaten voor naadloos schakelen tussen schermen. - - Registreren Aanmelden Synchronisatie is ingeschakeld - - Privacy die altijd aan staat Standaard privacybescherming - - %1$s zorgt er automatisch voor dat bedrijven u niet stiekem volgen op internet. Met Totale cookiebescherming om te voorkomen dat trackers cookies gebruiken om u stiekem op het internet te volgen. @@ -1300,17 +1260,10 @@ Blokkeert meer trackers, zodat pagina’s sneller worden geladen, maar sommige functionaliteit op een pagina werkt mogelijk niet. Kies uw werkbalkplaatsing - - Plaats de werkbalk binnen handbereik. Houd hem onderaan of verplaats hem naar boven. Houd hem onderaan, of verplaats hem naar boven. - - Uw privacy U beheert uw gegevens - - We hebben %s ontworpen om u controle te geven over wat u online deelt en wat u met ons deelt. Firefox geeft u controle over wat u online deelt en wat u met ons deelt. @@ -1971,4 +1924,6 @@ uitvouwen koppeling openen voor meer info over deze collectie - + + het artikel te lezen + diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index c6d6b3aef..244a58ff5 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -45,8 +45,6 @@ - Oxirgi xatchoʻplar - Yaqinda saqlangan Barcha saqlangan xatchoʻplarni koʻrsatish @@ -260,37 +258,13 @@ Bu safar qidiramiz: - - %1$sda yangiliklar - - Endi toʻxtagan joydan davom etish osonroq. - - Moslashtirilgan %1$s bosh sahifasi - - Ochiq varaqlar, xatchoʻplar va tarixiga oʻting. - - Qulay tartibli varaqlar - - Yaxshilangan tartib va avtomatik yopiladigan varaqlar yordamida tartibsizliklarni toʻgʻrilang. - - Oxirgi qidiruvlar - - Bosh sahifa va varaqlar orqali oxirgi qidiruvlarga yana tashrif buyuring. - - - Moslashtirilgan Firefox bosh sahifasi endi toʻxtagan joydan davom etishni osonlashtiradi. Oxirgi varaqlar, xatchoʻplar va qidiruv natijalarini endi osongina topasiz. - Moshlashtirilgan bosh sahifangizni kutib oling. Oxirgi varaqlar, xatchoʻplar va qidiruv natijalar shu yerda chiqadi. - Mustaqil internetga xush kelibsiz - Shaxsiy internetga xush kelibsiz Koʻplab ranglar. Yaxshiroq maxfiylik. Odamlarga foydali bir xil majburiyat. - Telefondan noutbukka yoki aksincha qayting - Ekranlarga oʻtish har doimgidan osonroq Endi bosh sahifangizda boshqa qurilmalardagi varaqlarda toʻxtagan joydan davom etasiz. @@ -1254,33 +1228,20 @@ Guruh oʻchirildi - - %sga xush kelibsiz! Yaxshiroq internetga xush kelibsiz Foyda uchun emas, insonlar uchun tuzilgan brauzer. - - Firefoxni qurilmalarga sinxronlash Qolgan joyidan davom eting - - Xatchoʻp, tarix va parollarni bu qurilmadagi %1$sga oʻtkazing. Ekranlar oʻrtasida uzluksiz oʻtish uchun yorliqlar va parollarni qurilmalar oʻrtasida sinxronlang. - - Roʻyxatdan oʻtish Kirish Sinxronizatsiya yoqilgan - - Doimiy maxfiylik Standart maxfiylik himoyasi - - Kompaniyalarning sizni onlayn kuzatishlarini %1$s avtomatik ravishda bloklaydi. Kuzatuvchilar sizni saytlar boʻylab kuzatish uchun cookie-fayllardan foydalanishiga yoʻl qoʻyilmaydi. @@ -1294,17 +1255,10 @@ Sahifalar tezroq yuklanishi uchun koʻproq kuzatuvchilarni bloklaydi, lekin baʼzi sahifalar toʻgʻri ishlamasligi mumkin. Asboblar paneli joylashuvini tanlang - - Asboblar paneliga oson kirishni taʼminlang. Uni pastki qismda qoldiring yoki yuqoriga koʻchiring. Uni pastki qismida qoldiring yoki yuqoriga koʻchiring. - - Sizning maxfiyligingiz Maʼlumotlaringizni oʻzingiz boshqaring - - Maʼlumotlaringizni onlayn va biz bilan ulashishingizni nazorat qilish uchun %sni yaratdik. Firefox sizga nimalarni onlayn va nimalarni bizga ulashishingiz uchun nazoratni sizga taqdim etadi. @@ -1399,6 +1353,38 @@ Barcha uchinchi tomon cookie fayllar (saytlarning buzilishiga olib kelishi mumkin) + + Barcha cookie fayllar (saytlar ishlashini buzadi) + + Saytlararo cookie fayllarni izolyatsiyalash + + Tarkibni kuzatish + + Barcha varaqlarda + + Faqat maxsiy varaqlarda + + Kriptomaynerlar + + Raqamli imzo yigʻuvchilar + + Tafsilotlar + + Bloklangan + + Ruxsat berilgan + + Ijtimoiy tarmoq kuzatuvchilari + + + Ijtimoiy tarmoqlarning sahifadagi brauzeringiz faoliyatini kuzatib borish imkoniyatini cheklaydi. + + Saytlararo kuzatuvchi cookie fayllar + + Saytlararo cookie fayllar + + Reklama tarmoqlari va analitik kompaniyalar koʻplab saytlarda brauzer maʼlumotlarini yigʻish uchun foydalanadigan cookie fayllarni bloklaydi. + Barcha veb-saytlarni kattalashtirish From ebfcf11f9c15413962dd32bdffddd9aa7de28671 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 17 Nov 2022 00:51:07 +0000 Subject: [PATCH 049/218] Update to Android-Components 109.0.20221117001233. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 415c23443..7ec88777b 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221116192746" + const val VERSION = "109.0.20221117001233" } From f81efb17c0f5aef2b6553eb8721905c8d2fd6a45 Mon Sep 17 00:00:00 2001 From: Mugurell Date: Tue, 11 Oct 2022 18:06:19 +0300 Subject: [PATCH 050/218] For #27346 - Disable swiping to switch tabs when fullscreen --- .../org/mozilla/fenix/browser/BaseBrowserFragment.kt | 2 ++ .../java/org/mozilla/fenix/browser/SwipeGestureLayout.kt | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 024c7557e..ec0d715fd 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -1370,6 +1370,7 @@ abstract class BaseBrowserFragment : .setText(getString(R.string.full_screen_notification)) .show() activity?.enterToImmersiveMode() + (view as? SwipeGestureLayout)?.isSwipeEnabled = false browserToolbarView.collapse() browserToolbarView.view.isVisible = false val browserEngine = binding.swipeRefresh.layoutParams as CoordinatorLayout.LayoutParams @@ -1384,6 +1385,7 @@ abstract class BaseBrowserFragment : MediaState.fullscreen.record(NoExtras()) } else { activity?.exitImmersiveMode() + (view as? SwipeGestureLayout)?.isSwipeEnabled = true (activity as? HomeActivity)?.let { activity -> activity.themeManager.applyStatusBarTheme(activity) } diff --git a/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt b/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt index 40cd5d2d3..a9ad9b7ec 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/SwipeGestureLayout.kt @@ -56,6 +56,11 @@ class SwipeGestureLayout @JvmOverloads constructor( defStyleAttr: Int = 0, ) : FrameLayout(context, attrs, defStyleAttr) { + /** + * Controls whether the swiping functionality is active or not. + */ + var isSwipeEnabled = true + private val gestureListener = object : GestureDetector.SimpleOnGestureListener() { override fun onDown(e: MotionEvent): Boolean { return true @@ -107,6 +112,10 @@ class SwipeGestureLayout @JvmOverloads constructor( } override fun onInterceptTouchEvent(event: MotionEvent): Boolean { + if (!isSwipeEnabled) { + return false + } + return when (event.actionMasked) { MotionEvent.ACTION_DOWN -> { handledInitialScroll = false From d3dfbeb1a01faccccad2705735ac639ed33a1339 Mon Sep 17 00:00:00 2001 From: "oana.horvath" Date: Thu, 17 Nov 2022 14:42:00 +0200 Subject: [PATCH 051/218] For #27704: Disable search group tests --- .../androidTest/java/org/mozilla/fenix/ui/SearchTest.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt index 28a49e45b..9a2adea03 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt @@ -160,6 +160,7 @@ class SearchTest { } } + @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704") @SmokeTest @Test fun searchGroupShowsInRecentlyVisitedTest() { @@ -194,6 +195,7 @@ class SearchTest { } } + @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704") @Test fun verifySearchGroupHistoryWithNoDuplicatesTest() { val firstPageUrl = getGenericAsset(searchMockServer, 1).url @@ -275,6 +277,7 @@ class SearchTest { } } + @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704") @SmokeTest @Test fun noSearchGroupFromPrivateBrowsingTest() { @@ -313,6 +316,7 @@ class SearchTest { } } + @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704") @SmokeTest @Test fun deleteItemsFromSearchGroupHistoryTest() { @@ -361,6 +365,7 @@ class SearchTest { } } + @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704") @Test fun deleteSearchGroupFromHistoryTest() { queryString = "test search" @@ -407,6 +412,7 @@ class SearchTest { } } + @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704") @Test fun reopenTabsFromSearchGroupTest() { val firstPageUrl = getGenericAsset(searchMockServer, 1).url @@ -460,6 +466,7 @@ class SearchTest { } } + @Ignore("Test run timing out: https://github.com/mozilla-mobile/fenix/issues/27704") @Test fun sharePageFromASearchGroupTest() { val firstPageUrl = getGenericAsset(searchMockServer, 1).url From e99d9a5ccc76be5b72a716700579a277b0f4c09b Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 17 Nov 2022 15:02:26 +0000 Subject: [PATCH 052/218] Update to Android-Components 109.0.20221117143310. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 7ec88777b..cb557ae88 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221117001233" + const val VERSION = "109.0.20221117143310" } From 79521d692b1f82b0ca87346be12945c3751f910c Mon Sep 17 00:00:00 2001 From: Noah Bond Date: Tue, 15 Nov 2022 14:19:49 -0800 Subject: [PATCH 053/218] For #27852 - Set BrowsingMode to Normal when selecting a wallpaper --- .../fenix/settings/wallpaper/WallpaperSettingsFragment.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt index f0a44ee8f..504696ca5 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettingsFragment.kt @@ -23,6 +23,7 @@ import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.GleanMetrics.Wallpapers import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R +import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.showToolbar @@ -112,6 +113,7 @@ class WallpaperSettingsFragment : Fragment() { ) .setText(view.context.getString(R.string.wallpaper_updated_snackbar_message)) .setAction(requireContext().getString(R.string.wallpaper_updated_snackbar_action)) { + (activity as HomeActivity).browsingModeManager.mode = BrowsingMode.Normal findNavController().navigate(R.id.homeFragment) } .show() From b3ec3062cc13eaa62c254112f08d6c39ac13081a Mon Sep 17 00:00:00 2001 From: James Hugman Date: Tue, 1 Nov 2022 20:42:44 +0000 Subject: [PATCH 054/218] Fixes: #26320 Reorganize Nimbus Startup --- .../perf/StartupExcessiveResourceUseTest.kt | 2 +- .../org/mozilla/fenix/FenixApplication.kt | 81 +++++++------- .../mozilla/fenix/experiments/NimbusSetup.kt | 102 +++++++++--------- .../FenixRobolectricTestApplication.kt | 2 + 4 files changed, 91 insertions(+), 96 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/perf/StartupExcessiveResourceUseTest.kt b/app/src/androidTest/java/org/mozilla/fenix/perf/StartupExcessiveResourceUseTest.kt index e2aae7321..7e8a10263 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/perf/StartupExcessiveResourceUseTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/perf/StartupExcessiveResourceUseTest.kt @@ -33,7 +33,7 @@ import org.mozilla.fenix.helpers.HomeActivityTestRule * * Say no to main thread IO! 🙅 */ -private const val EXPECTED_SUPPRESSION_COUNT = 19 +private const val EXPECTED_SUPPRESSION_COUNT = 18 /** * The number of times we call the `runBlocking` coroutine method on the main thread during this diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 1c547ad16..2c15b0633 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -50,7 +50,6 @@ import mozilla.components.service.glean.net.ConceptFetchHttpUploader import mozilla.components.support.base.facts.register import mozilla.components.support.base.log.Log import mozilla.components.support.base.log.logger.Logger -import mozilla.components.support.base.observer.Observable import mozilla.components.support.ktx.android.content.isMainProcess import mozilla.components.support.ktx.android.content.runOnlyInMainProcess import mozilla.components.support.locale.LocaleAwareApplication @@ -59,8 +58,6 @@ import mozilla.components.support.rusthttp.RustHttpConfig import mozilla.components.support.rustlog.RustLog import mozilla.components.support.utils.logElapsedTime import mozilla.components.support.webextensions.WebExtensionSupport -import org.mozilla.experiments.nimbus.NimbusInterface -import org.mozilla.experiments.nimbus.internal.EnrolledExperiment import org.mozilla.fenix.GleanMetrics.Addons import org.mozilla.fenix.GleanMetrics.AndroidAutofill import org.mozilla.fenix.GleanMetrics.CustomizeHome @@ -134,6 +131,10 @@ open class FenixApplication : LocaleAwareApplication(), Provider { return } + // We can initialize Nimbus before Glean because Glean will queue messages + // before it's initialized. + initializeNimbus() + // We need to always initialize Glean and do it early here. initializeGlean() @@ -201,7 +202,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { run { // Attention: Do not invoke any code from a-s in this scope. - val megazordSetup = setupMegazord() + val megazordSetup = finishSetupMegazord() setDayNightTheme() components.strictMode.enableStrictMode(true) @@ -222,6 +223,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { } restoreBrowserState() restoreDownloads() + restoreMessaging() // Just to make sure it is impossible for any application-services pieces // to invoke parts of itself that require complete megazord initialization @@ -415,6 +417,15 @@ open class FenixApplication : LocaleAwareApplication(), Provider { .install(this) } + protected open fun initializeNimbus() { + beginSetupMegazord() + + // This lazily constructs the Nimbus object… + val nimbus = components.analytics.experiments + // … which we then can populate the feature configuration. + FxNimbus.initialize { nimbus } + } + /** * Initiate Megazord sequence! Megazord Battle Mode! * @@ -424,54 +435,40 @@ open class FenixApplication : LocaleAwareApplication(), Provider { * Documentation on what megazords are, and why they're needed: * - https://github.com/mozilla/application-services/blob/master/docs/design/megazords.md * - https://mozilla.github.io/application-services/docs/applications/consuming-megazord-libraries.html + * + * This is the initialization of the megazord without setting up networking, i.e. needing the + * engine for networking. This should do the minimum work necessary as it is done on the main + * thread, early in the app startup sequence. */ - @OptIn(DelicateCoroutinesApi::class) // GlobalScope usage - private fun setupMegazord(): Deferred { + private fun beginSetupMegazord() { // Note: Megazord.init() must be called as soon as possible ... Megazord.init() - // Give the generated FxNimbus a closure to lazily get the Nimbus object - FxNimbus.initialize { components.analytics.experiments } + + initializeRustErrors(components.analytics.crashReporter) + // ... but RustHttpConfig.setClient() and RustLog.enable() can be called later. + + // Once application-services has switched to using the new + // error reporting system, RustLog shouldn't input a CrashReporter + // anymore. + // (https://github.com/mozilla/application-services/issues/4981). + RustLog.enable(components.analytics.crashReporter) + } + + @OptIn(DelicateCoroutinesApi::class) // GlobalScope usage + private fun finishSetupMegazord(): Deferred { return GlobalScope.async(Dispatchers.IO) { - initializeRustErrors(components.analytics.crashReporter) - // ... but RustHttpConfig.setClient() and RustLog.enable() can be called later. RustHttpConfig.setClient(lazy { components.core.client }) - // Once application-services has switched to using the new - // error reporting system, RustLog shouldn't input a CrashReporter - // anymore. - // (https://github.com/mozilla/application-services/issues/4981). - RustLog.enable(components.analytics.crashReporter) - // We want to ensure Nimbus is initialized as early as possible so we can - // experiment on features close to startup. - // But we need viaduct (the RustHttp client) to be ready before we do. - components.analytics.experiments.apply { - setupNimbusObserver(this) - } - } - } - private fun setupNimbusObserver(nimbus: Observable) { - nimbus.register( - object : NimbusInterface.Observer { - override fun onUpdatesApplied(updated: List) { - onNimbusStartupAndUpdate() - } - }, - ) + // Now viaduct (the RustHttp client) is initialized we can ask Nimbus to fetch + // experiments recipes from the server. + components.analytics.experiments.fetchExperiments() + } } - private fun onNimbusStartupAndUpdate() { - // When Nimbus has successfully started up, we can apply our engine settings experiment. - // Any previous value that was set on the engine will be overridden from those set in - // Core.Engine.DefaultSettings. - // NOTE ⚠️: Any startup experiment we want to run needs to have it's value re-applied here. - components.core.engine.settings.trackingProtectionPolicy = - components.core.trackingProtectionPolicyFactory.createTrackingProtectionPolicy() - - val settings = settings() - if (settings.isExperimentationEnabled) { + private fun restoreMessaging() { + if (settings().isExperimentationEnabled) { components.appStore.dispatch(AppAction.MessagingAction.Restore) } - reportHomeScreenSectionMetrics(settings) } override fun onTrimMemory(level: Int) { diff --git a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt index 72b9cac81..ae212b5fb 100644 --- a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt +++ b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt @@ -6,7 +6,6 @@ package org.mozilla.fenix.experiments import android.content.Context import android.net.Uri -import android.os.StrictMode import mozilla.components.service.nimbus.Nimbus import mozilla.components.service.nimbus.NimbusApi import mozilla.components.service.nimbus.NimbusAppInfo @@ -46,6 +45,9 @@ private const val TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS = 200L @Suppress("TooGenericExceptionCaught") fun createNimbus(context: Context, url: String?): NimbusApi { + // Once application-services has switched to using the new + // error reporting system, we may not need this anymore. + // https://mozilla-hub.atlassian.net/browse/EXP-2868 val errorReporter: ((String, Throwable) -> Unit) = reporter@{ message, e -> Logger.error("Nimbus error: $message", e) @@ -55,75 +57,69 @@ fun createNimbus(context: Context, url: String?): NimbusApi { context.components.analytics.crashReporter.submitCaughtException(e) } - return try { - // Eventually we'll want to use `NimbusDisabled` when we have no NIMBUS_ENDPOINT. - // but we keep this here to not mix feature flags and how we configure Nimbus. - val serverSettings = if (!url.isNullOrBlank()) { - if (context.settings().nimbusUsePreview) { - NimbusServerSettings(url = Uri.parse(url), collection = "nimbus-preview") - } else { - NimbusServerSettings(url = Uri.parse(url)) - } + // Eventually we'll want to use `NimbusDisabled` when we have no NIMBUS_ENDPOINT. + // but we keep this here to not mix feature flags and how we configure Nimbus. + val serverSettings = if (!url.isNullOrBlank()) { + if (context.settings().nimbusUsePreview) { + NimbusServerSettings(url = Uri.parse(url), collection = "nimbus-preview") } else { - null + NimbusServerSettings(url = Uri.parse(url)) } + } else { + null + } - // Global opt out state is stored in Nimbus, and shouldn't be toggled to `true` - // from the app unless the user does so from a UI control. - // However, the user may have opt-ed out of mako experiments already, so - // we should respect that setting here. - val enabled = - context.components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) { - context.settings().isExperimentationEnabled - } + val isFirstNimbusRun = context.settings().isFirstNimbusRun + if (isFirstNimbusRun) { + context.settings().isFirstNimbusRun = false + } - // The name "fenix" here corresponds to the app_name defined for the family of apps - // that encompasses all of the channels for the Fenix app. This is defined upstream in - // the telemetry system. For more context on where the app_name come from see: - // https://probeinfo.telemetry.mozilla.org/v2/glean/app-listings - // and - // https://github.com/mozilla/probe-scraper/blob/master/repositories.yaml - val appInfo = NimbusAppInfo( - appName = "fenix", - // Note: Using BuildConfig.BUILD_TYPE is important here so that it matches the value - // passed into Glean. `Config.channel.toString()` turned out to be non-deterministic - // and would mostly produce the value `Beta` and rarely would produce `beta`. - channel = BuildConfig.BUILD_TYPE, - customTargetingAttributes = mapOf( - "isFirstRun" to context.settings().isFirstNimbusRun.toString(), - ), - ) + // The name "fenix" here corresponds to the app_name defined for the family of apps + // that encompasses all of the channels for the Fenix app. This is defined upstream in + // the telemetry system. For more context on where the app_name come from see: + // https://probeinfo.telemetry.mozilla.org/v2/glean/app-listings + // and + // https://github.com/mozilla/probe-scraper/blob/master/repositories.yaml + val appInfo = NimbusAppInfo( + appName = "fenix", + // Note: Using BuildConfig.BUILD_TYPE is important here so that it matches the value + // passed into Glean. `Config.channel.toString()` turned out to be non-deterministic + // and would mostly produce the value `Beta` and rarely would produce `beta`. + channel = BuildConfig.BUILD_TYPE.let { if (it == "debug") "developer" else it }, + customTargetingAttributes = mapOf( + "isFirstRun" to isFirstNimbusRun.toString(), + ), + ) + return try { Nimbus(context, appInfo, serverSettings, errorReporter).apply { // We register our own internal observer for housekeeping the Nimbus SDK and // generated code. register(observer) - val isFirstNimbusRun = context.settings().isFirstNimbusRun + // Apply any experiment recipes we downloaded last time, or + // if this is the first time, we load the ones bundled in the res/raw + // directory. + val job = if (isFirstNimbusRun || url.isNullOrBlank()) { + applyLocalExperiments(R.raw.initial_experiments) + } else { + applyPendingExperiments() + } - // We always want `Nimbus.initialize` to happen ASAP and before any features (engine/UI) + // We always want initialize Nimbus to happen ASAP and before any features (engine/UI) // have been initialized. For that reason, we use runBlocking here to avoid // inconsistency in the experiments. - // We can safely do this because Nimbus does most of it's work on background threads, - // except for loading the initial experiments from disk. For this reason, we have a + // We can safely do this because Nimbus does most of its work on background threads, + // including the loading the initial experiments from disk. For this reason, we have a // `joinOrTimeout` to limit the blocking until TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS. runBlockingIncrement { - val job = initialize( - isFirstNimbusRun || url.isNullOrBlank(), - R.raw.initial_experiments, - ) // We only read from disk when loading first-run experiments. This is the only time // that we should join and block. Otherwise, we don't want to wait. - if (isFirstNimbusRun) { - context.settings().isFirstNimbusRun = false - job.joinOrTimeout(TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS) - } - } - - if (!enabled) { - // This opts out of nimbus experiments. It involves writing to disk, so does its - // work on the db thread. - globalUserParticipation = enabled + job.joinOrTimeout(TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS) } + // By now, on this thread, we have a fully initialized Nimbus object, ready for use: + // * we gave a 200ms timeout to the loading of a file from res/raw + // * on completion or cancellation, applyPendingExperiments or initialize was + // called, and this thread waited for that to complete. } } catch (e: Throwable) { // Something went wrong. We'd like not to, but stability of the app is more important than diff --git a/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt b/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt index 72cc5ace7..fa16108be 100644 --- a/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt +++ b/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt @@ -23,6 +23,8 @@ class FenixRobolectricTestApplication : FenixApplication() { override val components = mockk() + override fun initializeNimbus() = Unit + override fun initializeGlean() = Unit override fun setupInAllProcesses() = Unit From df500666d70129f5282919354a27f32c7ab983b8 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 17 Nov 2022 21:02:24 +0000 Subject: [PATCH 055/218] Update to Android-Components 109.0.20221117204150. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index cb557ae88..da4af1d4f 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221117143310" + const val VERSION = "109.0.20221117204150" } From 78fc99ebfbed298253e91e0f80618d9289b723f2 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Fri, 18 Nov 2022 01:36:29 +0100 Subject: [PATCH 056/218] Import l10n. (#27890) --- app/src/main/res/values-uz/strings.xml | 305 +++++++++++++++++++++++++ 1 file changed, 305 insertions(+) diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index 244a58ff5..8ff51d1ad 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -1385,14 +1385,319 @@ Reklama tarmoqlari va analitik kompaniyalar koʻplab saytlarda brauzer maʼlumotlarini yigʻish uchun foydalanadigan cookie fayllarni bloklaydi. + + Raqamli imzo yigʻuvchilar + + Qurilmangiz haqida kuzatib borish uchun ishlatilishi mumkin boʻlgan yagona aniqlanadigan maʼlumotlarni toʻplashni toʻxtatadi. + + Kontentni kuzatish + + Kuzatuv kodini oʻz ichiga olgan reklamalar, videolar va boshqa kontentni yuklashni toʻxtatadi. Baʼzi veb-saytlarning ishlashiga taʼsir qilishi mumkin. + + + Ushbu sayt uchun himoya yoqilgan + + Ushbu sayt uchun himoya oʻchirilgan + + Ushbu sayt uchun takomillashtirilgan kuzatuvdan himoya oʻchirilgan. + + Orqaga oʻting + + %sdagi yangiliklar + + %s | OSS kutubxonlari + + Qayta yoʻnaltiruvchi kuzatuvchilar + + Maʼlum kuzatuv saytlariga yoʻnaltirish orqali oʻrnatilgan cookie fayllarini oʻchiradi. + + + Quyida belgilangan ayrim kuzatuvchilar ushbu sahifada qisman ochilgan, chunki siz ular bilan muloqot qilgansiz *. + + Batafsil maʼlumot + + + Qoʻllab-quvvatlash + + Nosozliklar + + Maxfiylik eslatmalari + + Huquqlaringizni biling + + Litsenziya maʼlumotlari + + Biz foydalanadigan kutubxonalar + + Nosozliklarni tuzatish menyusi: faollashtirish uchun %1$d tugmachani bosing + Nosozliklarni tuzatish menyusi yoqilgan + + + + Nusxa olish + + Qoʻyish va oʻtish + + Qoʻyish + + URL buferga koʻchirildi + + + Bosh ekranga qoʻshish + + Bekor qilish + + Qoʻshish + + Saytga oʻting + + Yorliq nomi + + + Tez kirish uchun ushbu saytni qurilmangizning bosh ekraniga osongina qoʻshishingiz mumkin. + + + Login va parollar + + Login va parollarni saqlang + + Saqlash soʻralsin + + Hech qachon saqlanmasin + + %1$sda avtomatik toʻldirilsin + + %1$s dan foydalanganda saytlarda foydalanuvchi nomlari va parollarni toʻldiring va saqlang. + + Boshqa ilovalarda avtomatik toʻldirish + + Qurilmangizdagi boshqa ilovalarda foydalanuvchi nomlari va parollarni kiriting. + + Login qoʻshish + + + Loginlarni sinxronlash + + Loginlarni qurilmalararo sinxronlang + + Saqlangan loginlar + + Siz saqlagan yoki %s bilan sinxronlangan loginlar shu yerda koʻrinadi. + + Sinxronlash haqida batafsil maʼlumot + + Istisnolar + + Saqlanmagan login va parollar shu yerda koʻrsatiladi. + + Ushbu saytlar uchun login va parollar saqlanmaydi. + + Barcha istisnolarni oʻchirib tashlash + + Loginlarni qidirish + + Sayt + + Foydalanuvchi nomi + + Parol + + Parol buferga nusxalandi + + Foydalanuvchi nomi buferga nusxalandi + + Paroldan nusxa olish + + Parolni tozalash + + Foydalanuvchi nomidan nusxa olish + + Foydalanuvchi nomini tozalash + + Host nomini tozalash + + Saytni brauzerda ochish + + Parolni koʻrsatish + + Parolni yashirish + + Saqlangan loginlaringizni koʻrish uchun qulfni oching + + Login va parollaringizni himoya qiling + + Saqlangan login va parollaringizni kimdir qurilmangizga ega boʻlsa, ularga kirishdan himoya qilish uchun qurilmani qulflang, PIN kod yoki parol oʻrnating. + + Keyinroq + + Hoziroq sozlash + + Qurilmangizning qulfini oching Barcha veb-saytlarni kattalashtirish Bu ishorani taqiqlovchi saytlar uchun ham chimdish va kattalashtirishga ruxsat berishni yoqing. + + Nomi boʻyicha (A-Z) + + Soʻnggi foydalanilgan + + Loginlarni saralash menyusi + + + + Avtomatik toʻldirish + + Manzillar + + Kredit kartalar + + Kartalarni saqlash va avtomatik toʻldirish + + Maʼlumotlar shifrlangan + + Kartalarni qurilmalar oʻrtasida sinxronlash + + Kartalarni sinxronlash + + Kredit karta qoʻshish + + Saqlangan kartalarni boshqarish + + Manzil qoʻshish + + Manzillarni boshqarish + + Manzillarni saqlash va avtomatik toʻldirish + + Raqamlar, email va yetkazib berish manzillari kabi maʼlumotlar ham kiradi + + + Karta qoʻshish + + Kartani tahrirlash + + Karta raqami + + Muddati + + + Tugash muddati sanasi va oyi + + Tugash muddati yili + + Karta egasi nomi + + Kartani oʻchirish + + Kartani oʻchirish + + + Oʻchirish + + Saqlash + + Saqlash + + Bekor qilish + + Saqlangan kartalar + + Yaroqli kredit karta raqamini kiriting + + Ushbu maydonni toʻldiring + + Saqlangan kartalaringizni koʻrish uchun qulfni oching + + Kredit kartalaringizni himoya qiling + + Agar qurilmangiz boshqa birovda boʻlsa, saqlangan kredit kartalaringizga kirishdan himoya qilish uchun qurilmani qulflash uchun grafik kalit, PIN kod yoki parolni sozlang. + + Hozir sozlash + + Keyinroq + + Qurilmangizning qulfini oching + + Saqlangan kredit karta maʼlumotlaridan foydalanish uchun qulfni oching + + Manzil qoʻshish + + Manzilni tahrirlash + + Manzillarni boshqarish + + Ismi + + Otasining ismi + + Familiyasi + + Koʻcha manzili + + Shahar + + Shtat + + Viloyat + + Pochta indeksi + + Mamlakat yoki mintaqa + + Telefon + + Email + + Saqlash + + Bekor qilish + + Manzilni oʻchirish + + Haqiqatan ham bu manzilni oʻchirib tashlamoqchimisiz? + + Oʻchirish + + Bekor qilish + + Manzilni saqlash + + Manzilni oʻchirish + + + Qidiruv tizimini qoʻshish + + Qidiruv tizimini tahrirlash + + Qoʻshish + + Saqlash + + Tahrirlash + + Oʻchirish + + + Boshqa + + Nomi + + Foydalanish uchun qidiruv qatori Soʻrovni “%s” bilan almashtiring. Masalan:\nhttps://www.google.com/search?q=%s + + Maxsus qidiruv tizimining tafsilotlari + + + Qidiruv tizimi nomini kiriting + Ruxsat berish uchun: From 69e5ea8951c60e49055ddf529457fe1cef4e2c87 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 18 Nov 2022 15:02:39 +0000 Subject: [PATCH 057/218] Update to Android-Components 109.0.20221118143430. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index da4af1d4f..9ba894f1d 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221117204150" + const val VERSION = "109.0.20221118143430" } From 07c6a6f24e0342638a47f09dca99cf4ede8779a2 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 18 Nov 2022 19:47:01 +0000 Subject: [PATCH 058/218] Update to Android-Components 109.0.20221118190312. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 9ba894f1d..746030891 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221118143430" + const val VERSION = "109.0.20221118190312" } From 8c736129b6db4f6cf226d1e7a6bd1b758f53c9cd Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Sat, 19 Nov 2022 01:33:41 +0100 Subject: [PATCH 059/218] Import l10n. (#27904) --- app/src/main/res/values-tg/strings.xml | 61 +++------------------- app/src/main/res/values-zh-rCN/strings.xml | 52 ++---------------- 2 files changed, 10 insertions(+), 103 deletions(-) diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml index b373c83b4..206ade659 100644 --- a/app/src/main/res/values-tg/strings.xml +++ b/app/src/main/res/values-tg/strings.xml @@ -46,8 +46,6 @@ - Хатбаракҳои охирин - Иловашудаи охирин Намоиш додани ҳамаи хатбаракҳои нигоҳдошташуда @@ -263,38 +261,13 @@ Ҷустуҷӯи ин дафъа: - - Дар %1$s чӣ нав аст - - Акнун ба он сомонае, ки шумо ба қарибӣ тамошо кардаед, баргардонидан осонтар аст. - - Шахсисозии саҳифаи асосии %1$s - - Ба варақаҳои кушода, хатбаракҳо ва таърихи тамошокунӣ гузаред. - - Варакаҳои ботартиб ва соф - - Ба тартиб даровардани варақаҳо тавассути тарҳбандии беҳтаршуда ва пӯшидани варақаҳо ба таври худкор. - - Ҷустуҷӯҳои охирин - - - Ҷустуҷӯҳои охирини худро тавассути саҳифаи асосӣ ва варақаҳо боздид намоед. - - - Акнун саҳифаи асосии шахсишудаи шумо дар браузери Firefox бозгашти шуморо ба сомонаҳои охирин осон мекунад. Варақаҳо, хатбаракҳо ва натиҷаҳои ҷустуҷӯи охиринро ба даст оред. - Бо саҳифаи асосии шахсии худ шинос шавед. Варақаҳо, хатбаракҳо ва натиҷаҳои ҷустуҷӯи охирин дар ин ҷо пайдо мешаванд. - Хуш омадед ба Интернети мустақил - Хуш омадед ба Интернети хусуситар Рангҳои бештар. Махфияти беҳтар. Худи ҳамон вазифадорӣ ба одамон, на ба даромадҳо. - Аз телефон ба ноутбук ба баръакс гузаред - Табдилдиҳии экранҳо боз ҳам осонтар шудааст Ҳамаи он ҷойҳоеро, ки шумо дар варақаҳо аз дастгоҳҳои дигар дидаед, дар саҳифаи асосии худ ба даст оред. @@ -871,13 +844,13 @@ - Шумо мутмаин ҳастед, ки мехоҳед ин ҷузвадонро нест намоед? + Шумо мутмаин ҳастед, ки мехоҳед ин ҷузвдонро нест намоед? %s ҷузъҳои интихобшударо нест мекунад. Бекор кардан - Илова кардани ҷузвадон + Илова кардани ҷузвдон Хатбарак нигоҳ дошта шуд! @@ -906,19 +879,19 @@ Таҳрир кардани хатбарак - Таҳрир кардани ҷузвадон + Таҳрир кардани ҷузвдон Барои дидани хатбаракҳои ҳамоҳангшуда ворид шавед Нишонии URL - ҶУЗВАДОН + ҶУЗВДОН НОМ - Илова кардани ҷузвадон + Илова кардани ҷузвдон - Интихоб кардани ҷузвадон + Интихоб кардани ҷузвдон Бояд унвон дошта бошад @@ -932,7 +905,7 @@ Хатбаракҳо нест карда шуданд - Несткунии ҷузвадонҳои интихобшуда + Несткунии ҷузвдонҳои интихобшуда БОТИЛ КАРДАН @@ -1257,33 +1230,20 @@ Гурӯҳ нест карда шуд - - Хуш омадед ба «%s!» Хуш омадед ба Интернети беҳтар Браузере, ки барои мардум, на барои даромад сохта шудааст. - - Firefox-ро байни дастгоҳҳо ҳамоҳанг кунед Ба он ҷое, ки шумо ба қарибӣ тамошо кардаед, баргардонед - - Хатбаракҳо, таърих ва ниҳонвожаҳоро ба %1$s дар ин дастгоҳ интиқол диҳед. Барои гузариши бехалал байни экранҳои дастгоҳҳои худ, варақаҳо ва ниҳонвожаҳоро ҳамоҳанг созед. - - Бақайдгирӣ Ворид шудан Ҳамоҳангсозӣ фаъол аст - - Махфияти доимӣ Муҳофизати махфият ба таври пешфарз кор мекунад - - %1$s маъракаҳоеро, ки шуморо дар атрофи Интернет пинҳонӣ пайгирӣ мекунанд, ба таври худкор қатъ мекунад. Хусусияти «Муҳофизати пурра аз кукиҳо» васоити пайгириро аз истифодаи кукиҳо қатъ мекунад, то ки онҳо шуморо дар шабака ба таври пинҳонӣ пайгирӣ накунанд. @@ -1296,17 +1256,10 @@ Васоити пайгирии бештарро қатъ мекунад, то ки саҳифаҳо тезтар кушода шаванд, аммо баъзеи функсияҳои саҳифа метавонанд вайрон шаванд. Ҷойгиркунии навори абзорҳои худро интихоб кунед - - Навори абзорҳоро барои дастрасии осон дар наздикӣ ҷойгир намоед. Онро дар поён нигоҳ доред ё ба боло гузоред. Онро дар поён нигоҳ доред ё ба боло ҳаракат кунед. - - Махфияти шумо Шумо маълумоти худро идора мекунед - - Мо %s-ро ҳамин тавр тарҳрезӣ кардаем, ки шумо тавонед он чизҳоеро, ки дар онлайн ва бо мо мубодила мекунед, идора намоед. Браузери «Firefox» имкон медиҳад, ки шумо тавонед он чизҳоеро, ки дар онлайн ва бо мо мубодила мекунед, мустақилона идора намоед. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 4e91b17a4..9fe8d59fd 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -50,8 +50,6 @@ - 最近的书签 - 最近保存 显示所有保存书签 @@ -269,39 +267,13 @@ 这次搜索: - - %1$s 新版变化 - - 现在可以更轻松地从上次中断的地方继续浏览。 - - - 个性化的 %1$s 主页 - - 跳转到您打开的标签页、书签和浏览历史。 - - - 简洁有序的标签页 - - 改进的布局和自动关闭标签页,消除标签页混乱。 - - 最近的搜索 - - 从主页和标签页快速访问您的上次搜索。 - - - 个性化的 Firefox 主页,让您可以更轻松地从上次中断的地方继续浏览。快速找到您最近打开的标签页、书签和搜索结果。 - 认识您的个性化主页。这里将显示最近的标签页、书签和搜索结果。 - 欢迎开启不受巨头左右的互联网世界 - 欢迎进入更个性化的互联网 更靓、更保护隐私,但始终不变的是以人为本的承诺。 - 全平台快速切换 - 多屏切换更顺手 您现在从主页就可以继续浏览其他设备上的标签页。 @@ -1294,33 +1266,20 @@ 已删除分组 - - 欢迎使用 %s! 欢迎进入更美好的互联网 生为民,不谋利的浏览器。 - - 在设备之间同步 Firefox 从上次看到的地方继续 - - 将 %1$s 的书签、历史记录和密码带到此设备。 跨设备同步标签页和密码,实现无缝浏览体验。 - - 注册 登录 同步已开启 - - 隐私与您同行 默认启用隐私保护 - - %1$s 会自动阻止大公司在网上偷偷跟踪您。 “全方位 Cookie 保护”功能可阻止跟踪器借 Cookie 跨站跟踪您。 @@ -1333,17 +1292,10 @@ 拦截更多跟踪器,页面加载更快,但可能导致页面上某些功能异常。 选择您的工具栏位置 - - 将工具栏放在顺手的位置。可以留在底部,或移到顶部。 将工具栏置于底部,或移至顶部。 - - 您的隐私权 数据由自己掌控 - - %s 的设计旨在让您可以控制要在网上披露哪些内容,以及告诉我们哪些信息。 Firefox 让您可以控制要在网上披露哪些内容,以及告诉我们哪些信息。 @@ -2006,4 +1958,6 @@ 展开 访问链接了解此壁纸集的更多信息 - + + 阅读文章 + From 63a51717182d733beb5f8d3670011adee7f2acb0 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 18 Nov 2022 23:02:23 +0000 Subject: [PATCH 060/218] Update to Android-Components 109.0.20221118221738. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 746030891..14a642c1e 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221118190312" + const val VERSION = "109.0.20221118221738" } From 26361ce4f7dca9f37ef678bad2ba438725890e13 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 19 Nov 2022 15:02:11 +0000 Subject: [PATCH 061/218] Update to Android-Components 109.0.20221119143258. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 14a642c1e..a1a633d3a 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221118221738" + const val VERSION = "109.0.20221119143258" } From c3705b3b1ffe6e8b3cdb67a2de603b56eac9c980 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Sun, 20 Nov 2022 01:35:52 +0100 Subject: [PATCH 062/218] Import l10n. (#27910) --- app/src/main/res/values-co/strings.xml | 51 +------------ app/src/main/res/values-hy-rAM/strings.xml | 85 +++++++++------------- app/src/main/res/values-kk/strings.xml | 48 +----------- app/src/main/res/values-pl/strings.xml | 48 +----------- app/src/main/res/values-rm/strings.xml | 49 +------------ app/src/main/res/values-ru/strings.xml | 49 +------------ app/src/main/res/values-sl/strings.xml | 50 +------------ 7 files changed, 47 insertions(+), 333 deletions(-) diff --git a/app/src/main/res/values-co/strings.xml b/app/src/main/res/values-co/strings.xml index 6df524b6e..bd21d8a10 100644 --- a/app/src/main/res/values-co/strings.xml +++ b/app/src/main/res/values-co/strings.xml @@ -47,8 +47,6 @@ - Indette recente - Arregistrate pocu fà Affissà tutte l’indette arregistrate @@ -263,38 +261,13 @@ Sta volta, ricercà cù : - - Ciò chì hè novu in %1$s - - Ora hè più faciule di rivene induve vo avete piantatu. - - Pagina d’accolta persunalizata di %1$s - - Saltà à e vostre unghjette aperte, à l’indette è à a cronolugia di navigazione. - - Unghjette chjare è organizate - - - Sbarazzà l’unghjette cù un accunciamentu più chjaru è a so chjusura autumatica. - - Ricerche recente - - Fighjate torna l’ultime ricerche da a vostra pagina d’accolta è e vostre unghjette. - - - A vostra pagina d’accolta Firefox persunalizata vi permette avà di rivene d’una manera faciule induve vo avete lasciatu. Ci truverete l’unghjette, l’indette, è i risultati di ricerca recente. - Fate cunnuscenza cù a vostra pagina d’accolta. L’unghjette, l’indette è i risultati di riceca recente ci si trovanu. - Benvenuta in un Internet indipendente - Benvenuta in un Internet più persunale Più di culori. Una cunfidenzialità amendata. È u listessu impegnu per a ghjente piuttostu chè per i soldi. - Passate da u telefonu à l’urdinatore purtavule è vice versa - Passà d’un screnu à l’altru hè più faciule chè mai Ripigliate induve vi site piantati cù l’unghjette d’altri apparechji chì si trovanu avà nant’à a vostra pagina d’accolta. @@ -1258,33 +1231,20 @@ Gruppu squassatu - - Benvenuta in %s ! Benvenuta in un Internet più bellu Un navigatore cuncepitu per a ghjente, micca per i prufiti. - - Sincrunizate Firefox trà i vostri apparechji Ripigliate induve vi site piantati - - Impurtate e vostre indette, cronolugia è parolle d’intesa in %1$s nant’à st’apparechju. Sincrunizate l’unghjette è e parolle d’intesa trà i vostri apparechji per passà d’un screnu à l’altru senza straziu. - - Arregistrassi Cunnettesi Sincrunizazione attivata - - Cunfidenzialità sempre attiva Prutezzione attiva di a vita privata - - %1$s impedisce autumaticamente l’imprese di seguitavvi da manera sicreta nant’à u Web. A funzione di prutezzione tutale contr’à i canistrelli permette d’impedisce l’elementi di spiunagiu d’impiegà i canistrelli per seguitavvi d’un situ à l’altru. @@ -1297,17 +1257,10 @@ Bluccheghja più di perseguitatori è cusì e pagine si caricanu piu prestu, ma certi siti puderianu ùn micca funziunà currettamente. Sceglie a pusizione di a vostra barra d’attrezzi - - Piazzate a barra d’attrezzi à purtata di manu. Lasciatela quaghjò o dispiazzatela quassù. Lasciatela quaghjò o dispiazzatela quassù. - - A vostra vita privata Gardate u cuntrollu di i vostri dati - - Avemu cuncepitu %s per davvi u cuntrollu nant’à ciò chì vò spartite in linea è nant’à ciò chì vò spartite cù noi. Firefox vi dà u cuntrollu nant’à ciò chì vò spartite in linea è nant’à ciò chì vò spartite cù noi. @@ -1975,4 +1928,6 @@ allargà apre u liame per sapene di più nant’à sta cullezzione - + + leghje l’articulu + diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index 4f32aee0a..f26362123 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -15,6 +15,12 @@ Անջատել գաղտնի դիտարկումը Մուտքագրեք որոնում կամ կայք + + Որոնման պատմություն + + Որոնել էջանիշեր + + Որոնել ներդիրներ Մուտքագրեք որոնվող բառը @@ -40,8 +46,6 @@ - Վերջին Էջանիշերը - Վերջերս պահպանված Ցուցադրել բոլոր էջանիշերը @@ -250,38 +254,17 @@ Որոնման կարգավորում - - - Ինչն է նոր %1$s-ում - - Այժմ ավելի հեշտ է շարունակել այն տեղից, որտեղ կանգ եք առել: - - Անհատականացված %1$s գլխավոր էջ - - Անցեք ձեր բաց ներդիրներին, էջանիշերին և զննման պատմությանը: - - Մաքուր, կազմակերպված ներդիրներ - - Կարգի բերեք ներդիրները դասավորությունը լավարկելու և ինքնափակելու միջոցով: - - Վերջին որոնումները - - Վերանայեք ձեր վերջին որոնումները ձեր տնային էջից և ներդիրներից: - - - Ձեր անհատականացված Firefox-ի տնային էջը այժմ հեշտացնում է աշխատանքը շարունակելու այն կետից, որում կանգնել եք: Գտեք ձեր վերջին ներդիրները, էջանիշերը և որոնման արդյունքները: + + Այս անգամվա որոնում. + Դիտեք ձեր անհատականացված գլխավոր էջը: Վերջին ներդիրները, էջանիշները և որոնման արդյունքները կհայտնվեն այստեղ: - Բարի գալուստ անկախ համացանց - Բարի գալուստ ավելի անձնական համացանց Ավելի շատ գույներ: Ավելի լավ գաղտնիություն: Նույն հանձնառությունը մարդկանց նկատմամբ շահույթի նկատմամբ: - Անցեք հեռախոսից նոութբուք և հետ - Էկրանների փոխարկումն ավելի հեշտ է, քան երբևէ Շարունակեք այնտեղ, որտեղ դադարեցիք, այլ սարքերի ներդիրներով՝ այժմ ձեր գլխավոր էջում: @@ -453,8 +436,12 @@ a section where users see a list of tabs that they have visited in the past few days --> Վերջերս այցելած - Pocket + Pocket + + Մտահանգման պատմություններով + + %s-ի կողմից ստեղծված հոդվածներ Հովանավորված @@ -633,6 +620,17 @@ Փակել + + Բացե՞լ %d ներդիր: + + Այսքան ներդիրներ բացելը կարող է դանդաղեցնել %s-ը, մինչ էջերը բեռնվում են: Վստա՞հ եք, որ ցանկանում եք շարունակել: + + Բաց ներդիրներ + + Չեղարկել + %d կայք @@ -860,6 +858,10 @@ Բացել նոր ներդիր Բացել Գաղտնի ներդիրում + + Բացեք բոլորը նոր ներդիրներում + + Բացեք բոլորը մասնավոր ներդիրներում Ջնջել @@ -1042,6 +1044,8 @@ Պահել որպես PDF + + Անհնար է ստեղծել PDF Ուղարկել սարքի @@ -1216,34 +1220,20 @@ Խումբը ջնջված է - - Բարի գալուստ %s: - Բարի գալուստ ավելի լավ համացանց Զննարկիչ, որը ստեղծված է մարդկանց համար, ոչ առևտրային: - - Համաժամեցնել Firefox-ը Շարունակեք այնտեղից, որտեղ որ կանգնել էիք: - - Այս սարքում բերեք էջանիշները, պատմությունը և գաղտնաբառերը %1$s-ում: Համաժամացրեք ներդիրներն ու գաղտնաբառերը սարքերի միջև՝ էկրանն անխափան փոխելու համար: - - Գրանցվել Մուտք գործել Համաժամեցումը միացված է - - Միշտ գաղտնիություն Գաղտնիության պաշտպանություն սկզբնադիր - - %1$s-ը ինքնաշխատ կանգնեցնում է ընկերություններին՝ Ձեզ առցանց հետևելուց: Հատկանշվում է Total Cookie Protection-ը, որը թույլ չի տալիս հետագծողներին օգտագործել թխուկներ՝ կայքերում ձեզ հետապնդելու համար: @@ -1256,18 +1246,11 @@ Արգելափակում է ավելի շատ հետագծիչներ, որ էջերը արագ բեռնվեն, բայց էջի որոշ գործույթներ կարող են ընդհատվեն: Ընտրեք գործիքագոտու տեղը - - Գործիքագոտին դրեք հեշտ հասանելի տեղ: Պահեք այն ներքևում կամ տեղափոխեք վերև: Պահեք այն ներքևում կամ տեղափոխեք այն վերև: - - Ձեր գաղտնիությունը Դուք վերահսկում եք ձեր տվյալները - - Մենք պատրաստել ենք %s-ը, որպեսզի դուք կառավարեք այն, ինչ համօգտագործում եք առցանց և թե ինչով եք կիսվում մեզ հետ: Firefox-ը ձեզ հնարավորություն է տալիս վերահսկել, թե ինչ եք կիսվում առցանց և ինչ եք կիսում մեզ հետ: @@ -1902,7 +1885,9 @@ Բացահայտի՛ր ավելին - Pocket-ի կողմից: + Pocket-ի կողմից: + + Աշխատում է %s-ի կողմից: Firefox ընտանիքի մի մասը: %s @@ -1924,4 +1909,6 @@ Ընդարձակել բացեք հղումը՝ այս հավաքածուի մասին ավելին իմանալու համար + + կարդալ հոդվածը diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 3563a6e14..a6842b9c6 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -45,8 +45,6 @@ - Жуырдағы бетбелгілер - Жуырда сақталған Барлық сақталған бетбелгілерді көрсету @@ -258,37 +256,13 @@ Бұл жолы іздеу: - - %1$s ішінде не жаңалық - - Енді тоқтаған жерден жалғастыру оңайырақ. - - Жеке %1$s басты беті - - Ашық беттер, бетбелгілер және шолу тарихына өтіңіз. - - Таза, реттелген беттер - - Беттер енді жақсартылған орналастыру және автожабуды қолдану салдарынан көбірек реттелген болды. - - Жуырдағы іздеулер - - Үй беті және беттерден соңғы іздеулеріңізді қайта қараңыз. - - - Сіздің жекелендірілген Firefox үй беті енді тоқтаған жерден жалғастыруды жеңілдетеді. Соңғы беттерді, бетбелгілерді және іздеу нәтижелерін табыңыз. - Жекелендірілген басты бетпен танысыңыз. Мұнда соңғы беттер, бетбелгілер және іздеу нәтижелері көрсетілетін болады. - Тәуелсіз интернетке қош келдіңіз - Жекелігі көбірек интернетке қош келдіңіз Қосымша түстер. Жақсырақ жекелік. Табыстан гөрі адамдарға бірдей міндеттеме. - Телефоннан ноутбукке және кері өтіңіз - Экрандарды ауыстыру бұрынғыдан оңайырақ Енді басты бетте орналасқан басқа құрылғылардың беттері арқылы тоқтаған жерден жалғастырыңыз. @@ -684,7 +658,7 @@ Беттерді жабу - Қолмен + Ешқашан Бір күннен кейін @@ -1238,34 +1212,21 @@ Топ өшірілді - - %s өніміне қош келдіңіз! Жақсырақ интернетке қош келдіңіз Табыс үшін емес, адамдар үшін жасалған браузер. - - Firefox-ты құрылғылар арасында синхрондау Жұмысты қалдырған жерінен жалғастырыңыз - - Осы құрылғыдағы %1$s ішіне бетбелгілер, шолу тарихын және парольдерді әкелу. Экранды оңай ауыстыру үшін беттер мен парольдерді құрылғылар арасында синхрондаңыз. - - Тіркелу Кіру Синхрондау іске қосулы - - Үздіксіз құпиялылық Үнсіз келісім бойынша жекелікті қорғау - - %1$s компанияларды интернетте сізді жасырын түрде бақылауын автоматты түрде тоқтатады. Трекерлерге cookie файлдарын пайдаланып, сізді сайттар арасында бақылауға жол бермеу үшін Толық қорғанысты ұсынады. @@ -1278,17 +1239,10 @@ Беттерді тезірек жүктеу үшін көбірек трекерлерді блоктайды, бірақ кейбір беттер функционалдылығы бұзылуы мүмкін. Құралдар панелінің орналасуын таңдау - - Құралдар панелін қолжетімді жерге орнату. Оны төменгі жағында ұстаңыз немесе оны жоғарыға қарай жылжытыңыз. Оны төменгі жағында ұстаңыз немесе жоғарғы жағына жылжытыңыз. - - Сіздің жекелігіңіз Өз деректеріңізді өзіңіз басқарасыз - - Біз %s өнімін сіз желіде және бізбен немен бөлісетіңізді басқаруды өз қолыңызға беретіндей етіп жасадық. Firefox сіз желіде және бізбен немен бөлісетіңізді басқаруды өз қолыңызға береді. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d400aa8e5..f8214275d 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -47,8 +47,6 @@ - Ostatnio dodane zakładki - Ostatnio zachowane Wyświetl wszystkie dodane zakładki @@ -263,37 +261,13 @@ Tym razem szukaj: - - Co nowego w przeglądarce %1$s - - Teraz łatwiej jest kontynuować od miejsca, w którym skończono. - - Spersonalizowana strona startowa przeglądarki %1$s - - Szybko przejdź do otwartych kart, zakładek i historii przeglądania. - - Przejrzyste, uporządkowane karty - - Pozbądź się bałaganu w kartach dzięki ulepszonemu układowi i automatycznemu zamykaniu kart. - - Ostatnie wyszukiwania - - Wróć do swoich ostatnich wyszukiwań na stronie startowej i w kartach. - - - Spersonalizowana strona startowa Firefoksa ułatwia teraz kontynuowanie od miejsca, w którym skończono. Znajdź swoje ostatnie karty, zakładki i wyniki wyszukiwania. - Poznaj swoją spersonalizowaną stronę startową. Tutaj będą wyświetlane ostatnie karty, zakładki i wyniki wyszukiwania. - Witamy w niezależnym Internecie - Witamy w bardziej spersonalizowanym Internecie Więcej kolorów. Większa prywatność. Stawianie ludzi ponad zyski — bez zmian. - Przełączaj się z telefonu na laptopa i z powrotem - Przechodzenie między urządzeniami jest łatwiejsze niż kiedykolwiek Kontynuuj w tym samym miejscu, korzystając z kart z innych urządzeń, które teraz są na stronie startowej. @@ -1255,33 +1229,20 @@ Usunięto grupę - - Witamy w przeglądarce %s! Witamy w lepszym Internecie Przeglądarka tworzona dla ludzi, nie dla zysku. - - Synchronizuj Firefoksa między urządzeniami Kontynuuj przeglądanie - - Przenieś zakładki, historię i hasła do przeglądarki %1$s na tym urządzeniu. Synchronizuj karty i hasła między urządzeniami, aby błyskawicznie przechodzić z ekranu na ekran. - - Utwórz konto Zaloguj się Synchronizacja jest włączona - - Zawsze włączona prywatność Ochrona prywatności bez konfiguracji - - %1$s automatycznie uniemożliwia firmom potajemne śledzenie Cię w Internecie. Zawiera całkowitą ochronę ciasteczek, która uniemożliwia elementom śledzącym używanie ciasteczek do śledzenia Cię między witrynami. @@ -1294,17 +1255,10 @@ Blokuje więcej elementów śledzących, dzięki czemu strony wczytują się szybciej, ale część ich funkcji może nie działać. Wybierz położenie paska narzędzi - - Miej pasek narzędzi zawsze pod ręką. Zostaw go na dole lub przenieś na górę. Zostaw go na dole lub przenieś na górę. - - Twoja prywatność Ty kontrolujesz swoje dane - - %s został zaprojektowany tak, aby dać Ci kontrolę nad tym, co udostępniasz w sieci i czym dzielisz się z nami. Firefox daje Ci kontrolę nad tym, co udostępniasz w sieci i czym dzielisz się z nami. @@ -1964,4 +1918,6 @@ rozwinąć otworzyć odnośnik z informacjami o tej kolekcji + + przeczytać artykuł diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml index 23730d837..cbc06d72a 100644 --- a/app/src/main/res/values-rm/strings.xml +++ b/app/src/main/res/values-rm/strings.xml @@ -45,8 +45,6 @@ - Tschernì dacurt sco segnapagina - Memorisà dacurt Mussar tut ils segnapaginas memorisads @@ -257,38 +255,13 @@ Tschertgar questa giada: - - Las novaziuns en %1$s - - Ussa èsi pli simpel da cuntinuar là nua che ti has chalà. - - Pagina da partenza da %1$s persunalisada - - Siglir tar tes tabs averts, tes segnapaginas e tia cronologia da navigaziun. - - Tabs organisads e survesaivels - - - Reducescha il caos cun in layout optimà e cun tabs che sa serran automaticamain. - - Tschertgà dacurt - - Turna als resultats da tias ultimas tschertgas – directamain da la pagina da partenza e dals tabs. - - - Cun tia pagina da partenza da Firefox persunalisada èsi ussa pli simpel da cuntinuar là nua che ti has chalà. Ti chattas tes ultims tabs, segnapaginas e resultats da tschertga. - Emprenda d\'enconuscher tia pagina da partenza persunalisada. Tabs recents, segnapaginas e resultats da tschertga vegnan a cumparair qua. - Bainvegni en in internet independent - Bainvegni en in internet pli persunal Novas colurs. Dapli protecziun da datas. Ma il medem engaschi per las persunas, betg per il profit. - Mida dal telefonin al laptop ed enavos - La midada dad in visur a l\'auter è ussa pli simpla che mai Cuntinuescha là nua che ti has smess cun ils tabs dad auters apparats che figureschan ussa sin tia pagina da partenza. @@ -1242,34 +1215,21 @@ Stizzà la gruppa - - Bainvegni en %s! Bainvegni en in meglier internet In navigatur creà per persunas, betg per daners. - - Sincronisescha Firefox sin differents apparats Cuntinuescha là nua che ti has chalà - - Importescha segnapaginas, la cronologia e pleds-clav en %1$s sin quest apparat. Sincronisescha tabs e pleds-clav tranter tes apparats per midar senza interrupziun dad in visur a l\'auter. - - Sa registrar S\'annunziar Sync è activà - - Protecziun da datas franco fabrica Protecziun da la sfera privata sco standard - - %1$s impedescha automaticamain che interpresas ta persequiteschian a la zuppada en il web. Ussa cun la protecziun totala cunter cookies per impedir ch\'ils fastizaders dovrian ils cookies per ta persequitar sur pliras websites. @@ -1283,17 +1243,10 @@ Blochescha ulteriurs fastizaders, uschia che paginas chargian pli svelt, ma tschertas paginas na funcziunan eventualmain betg pli endretg. Tscherna la posiziun da la trav d\'utensils - - Plazzescha la trav d\'utensils uschia ch\'ella è cuntanschibla a moda optimala. La mantegna giusut u la plazzescha sisum. Lascha ella giusut u la sposta ensi. - - Tia sfera privata Ti controlleschas tias datas - - Nus avain creà %s per che ti possias controllar tge che ti cundividas en l\'internet e tge che ti cundividas cun nus. Firefox ta pussibilitescha da controllar tge che ti cundividas en l\'internet e tge che ti cundividas cun nus. @@ -1963,4 +1916,6 @@ extender avrir la colliaziun per vegnir a savair dapli davart questa collecziun + + leger l\'artitgel diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 786fc5070..fca4aa7d2 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -49,8 +49,6 @@ - Недавние закладки - Недавно добавленные Показать все сохраненные закладки @@ -270,38 +268,13 @@ В этот раз искать: - - Что нового в %1$s - - Теперь легче продолжить с того места, где вы остановились. - - Настраиваемая домашняя страница %1$s - - Переходите к открытым вкладкам, закладкам и истории просмотра. - - Лучшая организация вкладок - - - Вкладки стали более организованы с использованием улучшенного размещения и автоматического закрытия. - - Недавние поиски - - Вернитесь к последним поисковым запросам с домашней страницы и вкладок. - - - На настроенной вами домашней странице Firefox теперь легче продолжить с того места, где вы остановились. Найдите свои недавние вкладки, закладки и результаты поиска. - Познакомьтесь с настраиваемой домашней страницей. Здесь будут отображаться последние вкладки, закладки и результаты поиска. - Добро пожаловать в независимый интернет - Добро пожаловать в более личный Интернет Больше красок. Лучшая приватность. Обязательство перед людьми, а не погоня за прибылью. - Переходите с телефона на ноутбук и обратно - Переключение экранов стало проще, чем когда-либо Продолжайте с того места, где вы остановились, с вкладками с других устройств, которые теперь находятся на вашей домашней странице. @@ -602,7 +575,7 @@ - Синхронизация и сохранение данных + Синхронизация и сохранение Войти, чтобы подключиться снова @@ -1281,33 +1254,20 @@ Группа удалена - - Добро пожаловать в %s! Добро пожаловать в лучший Интернет Браузер, созданный для людей, а не для прибыли. - - Синхронизация Firefox между устройствами Начните с того места, на котором остановились - - Перенесите закладки, историю и пароли в %1$s на этом устройстве. Синхронизируйте вкладки и пароли между устройствами для бесшовного перехода между экранами. - - Зарегистрироваться Войти Началась синхронизация - - Постоянная приватность Защита приватности по умолчанию - - %1$s автоматически блокирует тайную слежку компаний за вами в Интернете. Представляем полную защиту от кук, не позволяющую трекерам использовать куки для отслеживания вас на разных сайтах. @@ -1320,18 +1280,11 @@ Блокирует больше трекеров, так что страницы загружаются быстрее, но некоторые страницы могут работать неправильно. Выберите размещение панели инструментов - - Обеспечьте удобный доступ к панели инструментов. Оставьте её внизу или переместите вверх. Оставьте её внизу или переместите наверх. - - Ваша приватность Вы управляете своими данными - - Мы создали %s, чтобы предоставить вам управление над тем, чем вы делитесь — как в сети, так и с нами. Firefox даёт вам управлять тем, чем вы делитесь — как в сети, так и с нами. diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 4b39bebe5..dd62f2688 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -46,9 +46,6 @@ Izbrano - - Nedavni zaznamki - Nedavno shranjeno @@ -262,38 +259,13 @@ Tokrat išči: - - Kaj je novega v %1$su - - Zdaj je lažje nadaljevati, kjer ste nazadnje končali. - - Prilagojena domača stran %1$sa - - Skočite na odprte zavihke, zaznamke in zgodovino brskanja. - - Čisti, urejeni zavihki - - Počistite nered med zavihki z izboljšano postavitvijo in samodejnim zapiranjem zavihkov. - - Nedavna iskanja - - - Znova obiščite najnovejša iskanja na domači strani in v zavihkih. - - - Prilagojena domača stran Firefoxa vam zdaj olajšuje nadaljevanje nedokončanih opravil. Poiščite svoje nedavne zavihke, zaznamke in rezultate iskanja. - Spoznajte svojo prilagojeno domačo stran. Tukaj bodo prikazani nedavni zavihki, zaznamki in zadetki iskanja. - Dobrodošli v neodvisnem internetu - Dobrodošli v bolj osebnem internetu Več barve. Večja zasebnost. Enaka zavezanost ljudem namesto dobičku. - Skočite s telefona na računalnik in nazaj - Preklapljanje med zasloni je preprostejše kot kdajkoli prej Nadaljujte tam, kjer ste končali - z zavihki iz drugih naprav, ki so zdaj na vaši domači strani. @@ -1262,33 +1234,20 @@ Skupina izbrisana - - Dobrodošli v %su! Dobrodošli v boljšem internetu Brskalnik, razvit za ljudi, ne za dobiček. - - Sinhronizirajte Firefox med napravami Nadaljujte, kjer ste končali - - Prinesite zaznamke, zgodovino in gesla v %1$s na tej napravi. Sinhronizirajte zavihke in gesla med napravami za brezhibno preklapljanje med zasloni. - - Prijava Prijava Sync je vklopljen - - Vedno vključena zasebnost Privzeta zaščita zasebnosti - - %1$s samodejno prepreči, da bi vas podjetja skrivaj spremljala po spletu. Vključuje popolno zaščito pred piškotki, ki sledilcem onemogoča, da bi vas s pomočjo piškotkov zalezovali po spletnih mestih. @@ -1301,18 +1260,11 @@ Zavrača več sledilcev in pospeši nalaganje strani, vendar deli strani lahko nehajo delovati. Izberite postavitev orodne vrstice - - Postavite si orodno vrstico na doseg roke. Naj bo na dnu ali pa jo premaknite na vrh. Naj bo na dnu ali pa jo premaknite na vrh. - - Vaša zasebnost Vaši podatki pod vašim nadzorom - - %s smo zasnovali tako, da vam omogočimo nadzor nad tem, kaj delite na spletu in kaj delite z nami. Firefox vam omogoča nadzor nad tem, kaj delite na spletu in kaj delite z nami. @@ -1984,4 +1936,6 @@ razširite odprete povezavo z več informacijami o tej zbirki + + preberete članek From 592d19f4b61d040d20bb3c8dbd17f25483b330c9 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 20 Nov 2022 19:31:57 +0000 Subject: [PATCH 063/218] Update to Android-Components 109.0.20221120190220. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index a1a633d3a..d73a6c037 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221119143258" + const val VERSION = "109.0.20221120190220" } From 43612486e42dd2f55f07cdf00a693f80af5bcc88 Mon Sep 17 00:00:00 2001 From: Alexandru2909 Date: Mon, 21 Nov 2022 12:23:08 +0200 Subject: [PATCH 064/218] For #27885 - Change default browser notification delay to 72 hours --- .../fenix/onboarding/DefaultBrowserNotificationWorker.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt b/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt index 55493ffac..746554bfe 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt @@ -124,7 +124,7 @@ class DefaultBrowserNotificationWorker( private const val INTENT_DEFAULT_BROWSER_NOTIFICATION = "org.mozilla.fenix.default.browser.intent" private const val NOTIFICATION_TAG = "org.mozilla.fenix.default.browser.tag" private const val NOTIFICATION_WORK_NAME = "org.mozilla.fenix.default.browser.work" - private const val NOTIFICATION_DELAY = Settings.ONE_DAY_MS + private const val NOTIFICATION_DELAY = Settings.THREE_DAYS_MS fun isDefaultBrowserNotificationIntent(intent: Intent) = intent.extras?.containsKey(INTENT_DEFAULT_BROWSER_NOTIFICATION) ?: false From 9671d0a63884a772fff66da73874d82d94a12923 Mon Sep 17 00:00:00 2001 From: Mugurell Date: Tue, 4 Oct 2022 17:42:28 +0300 Subject: [PATCH 065/218] For #27228 - Resume qr scanning if camera permission is changed If permissions are changed the app process is restarted with the same happening for the previously running app components. SearchDialogFragment used for searches will check if qr scanning was in progress and resume if needed. PairFragment used for signing-in will start scanning on itself. Android-Components will avoid resuming the scan functionality if the camera permission is missing and so allow to request the permission again without the camera permission related system calls causing issues. --- .../java/org/mozilla/fenix/search/SearchDialogFragment.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt index 4738aaaa8..35038acc9 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -522,6 +522,12 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { override fun onResume() { super.onResume() + qrFeature.get()?.let { + if (it.isScanInProgress) { + it.scan(binding.searchWrapper.id) + } + } + view?.post { // We delay querying the clipboard by posting this code to the main thread message queue, // because ClipboardManager will return null if the does app not have input focus yet. From e1f612285053229d53d484aca9749a63af749275 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Mon, 21 Nov 2022 15:47:42 +0000 Subject: [PATCH 066/218] Update to Android-Components 109.0.20221121143245. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index d73a6c037..cbfc50e3c 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221120190220" + const val VERSION = "109.0.20221121143245" } From fc8b6788d30d5b7fa3bc9c308991cd01dc951b39 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Mon, 21 Nov 2022 13:29:48 -0500 Subject: [PATCH 067/218] Bug 1796146 - Update l10n descriptions for Cookie Banner protection --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aa80d0dcc..412904735 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -319,9 +319,9 @@ HTTPS-Only Mode - + Cookie Banner Reduction - + Reduce cookie banners Firefox automatically tries to reject cookie requests on cookie banners. If a reject option isn’t available, Firefox may accept all cookies to dismiss the banner. From 6d9808a067d5a9f271d52da35368c62292483d5b Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Mon, 21 Nov 2022 11:20:37 -0500 Subject: [PATCH 068/218] Close #26320: Make Nimbus first-startup comments clear in FenixApplication --- .../org/mozilla/fenix/FenixApplication.kt | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 2c15b0633..60fa61bd3 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -131,16 +131,9 @@ open class FenixApplication : LocaleAwareApplication(), Provider { return } - // We can initialize Nimbus before Glean because Glean will queue messages - // before it's initialized. - initializeNimbus() - - // We need to always initialize Glean and do it early here. - initializeGlean() - + // DO NOT ADD ANYTHING ABOVE HERE. setupInMainProcessOnly() - - downloadWallpapers() + // DO NOT ADD ANYTHING UNDER HERE. // DO NOT MOVE ANYTHING BELOW THIS elapsedRealtimeNanos CALL. val stop = SystemClock.elapsedRealtimeNanos() @@ -198,9 +191,20 @@ open class FenixApplication : LocaleAwareApplication(), Provider { @CallSuper open fun setupInMainProcessOnly() { + // ⚠️ DO NOT ADD ANYTHING ABOVE THIS LINE. + // Especially references to the engine/BrowserStore which can alter the app initialization. + // See: https://github.com/mozilla-mobile/fenix/issues/26320 + // + // We can initialize Nimbus before Glean because Glean will queue messages + // before it's initialized. + initializeNimbus() + ProfilerMarkerFactProcessor.create { components.core.engine.profiler }.register() run { + // We need to always initialize Glean and do it early here. + initializeGlean() + // Attention: Do not invoke any code from a-s in this scope. val megazordSetup = finishSetupMegazord() @@ -246,6 +250,8 @@ open class FenixApplication : LocaleAwareApplication(), Provider { initVisualCompletenessQueueAndQueueTasks() ProcessLifecycleOwner.get().lifecycle.addObserver(TelemetryLifecycleObserver(components.core.store)) + + downloadWallpapers() } @OptIn(DelicateCoroutinesApi::class) // GlobalScope usage From 5d2cf6f6b66fbc5f0a1728abd24cb09590974761 Mon Sep 17 00:00:00 2001 From: James Hugman Date: Fri, 18 Nov 2022 15:30:42 +0000 Subject: [PATCH 069/218] Fixup breaking change for application-services 96.0.0 --- .../org/mozilla/fenix/experiments/NimbusSetup.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt index ae212b5fb..208079d14 100644 --- a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt +++ b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt @@ -12,6 +12,7 @@ import mozilla.components.service.nimbus.NimbusAppInfo import mozilla.components.service.nimbus.NimbusDisabled import mozilla.components.service.nimbus.NimbusServerSettings import mozilla.components.support.base.log.logger.Logger +import org.json.JSONObject import org.mozilla.experiments.nimbus.NimbusInterface import org.mozilla.experiments.nimbus.internal.EnrolledExperiment import org.mozilla.experiments.nimbus.internal.NimbusException @@ -74,6 +75,16 @@ fun createNimbus(context: Context, url: String?): NimbusApi { context.settings().isFirstNimbusRun = false } + // These values can be used in the JEXL expressions when targeting experiments. + val customTargetingAttributes = JSONObject().apply { + // By convention, we should use snake case. + put("is_first_run", isFirstNimbusRun) + + // This camelCase attribute is a boolean value represented as a string. + // This is left for backwards compatibility. + put("isFirstRun", isFirstNimbusRun.toString()) + } + // The name "fenix" here corresponds to the app_name defined for the family of apps // that encompasses all of the channels for the Fenix app. This is defined upstream in // the telemetry system. For more context on where the app_name come from see: @@ -86,9 +97,7 @@ fun createNimbus(context: Context, url: String?): NimbusApi { // passed into Glean. `Config.channel.toString()` turned out to be non-deterministic // and would mostly produce the value `Beta` and rarely would produce `beta`. channel = BuildConfig.BUILD_TYPE.let { if (it == "debug") "developer" else it }, - customTargetingAttributes = mapOf( - "isFirstRun" to isFirstNimbusRun.toString(), - ), + customTargetingAttributes = customTargetingAttributes, ) return try { Nimbus(context, appInfo, serverSettings, errorReporter).apply { From 4610fb21866a1369af2fb9e2014db48910ef3e8e Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Mon, 21 Nov 2022 15:58:28 -0500 Subject: [PATCH 070/218] Update to Android-Components 109.0.20221121201219 --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index cbfc50e3c..e6cf81c66 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221121143245" + const val VERSION = "109.0.20221121201219" } From 71bc9eb4f71143a0a5ec7586e6168b05430d918a Mon Sep 17 00:00:00 2001 From: BFadairo Date: Thu, 17 Nov 2022 13:13:46 -0800 Subject: [PATCH 071/218] Closes #27854: Remove unnecessary Theme.getTheme() calls from FirefoxTheme usages --- .../mozilla/fenix/compose/ClickableSubstringLink.kt | 3 +-- .../main/java/org/mozilla/fenix/compose/Favicon.kt | 3 +-- .../org/mozilla/fenix/compose/ListItemTabLarge.kt | 7 +++---- .../fenix/compose/ListItemTabLargePlaceholder.kt | 3 +-- .../org/mozilla/fenix/compose/SelectableChip.kt | 5 ++--- .../fenix/compose/StaggeredHorizontalGrid.kt | 3 +-- .../fenix/compose/TabSubtitleWithInterdot.kt | 3 +-- .../java/org/mozilla/fenix/compose/ThumbnailCard.kt | 3 +-- .../java/org/mozilla/fenix/compose/button/Button.kt | 3 +-- .../org/mozilla/fenix/compose/button/TextButton.kt | 3 +-- .../mozilla/fenix/compose/home/HomeSectionHeader.kt | 3 +-- .../fenix/compose/list/ExpandableListHeader.kt | 9 ++++----- .../java/org/mozilla/fenix/compose/list/ListItem.kt | 13 ++++++------- .../mozilla/fenix/compose/tabstray/MediaImage.kt | 3 +-- .../mozilla/fenix/compose/tabstray/TabListItem.kt | 5 ++--- .../fenix/home/collections/CollectionItem.kt | 3 +-- .../pocket/PocketRecommendationsHeaderViewHolder.kt | 3 +-- .../fenix/home/pocket/PocketStoriesComposables.kt | 3 +-- .../fenix/home/pocket/PocketStoriesViewHolder.kt | 3 +-- .../home/recentbookmarks/view/RecentBookmarks.kt | 3 +-- .../home/recentsyncedtabs/view/RecentSyncedTab.kt | 5 ++--- .../fenix/home/recentvisits/view/RecentlyVisited.kt | 3 +-- .../PrivateBrowsingDescriptionViewHolder.kt | 3 +-- .../fenix/settings/address/view/AddressList.kt | 3 +-- .../fenix/settings/wallpaper/WallpaperSettings.kt | 3 +-- .../fenix/tabstray/inactivetabs/InactiveTabs.kt | 5 ++--- .../mozilla/fenix/tabstray/syncedtabs/SyncedTabs.kt | 7 +++---- .../java/org/mozilla/fenix/theme/FenixTypography.kt | 2 +- .../mozilla/fenix/wallpapers/WallpaperOnboarding.kt | 3 +-- 29 files changed, 45 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/compose/ClickableSubstringLink.kt b/app/src/main/java/org/mozilla/fenix/compose/ClickableSubstringLink.kt index 33a43fa7b..9a0429702 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/ClickableSubstringLink.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/ClickableSubstringLink.kt @@ -17,7 +17,6 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.sp import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * [Text] containing a substring styled as an URL informing when this is clicked. @@ -95,7 +94,7 @@ fun ClickableSubstringLink( private fun ClickableSubstringTextPreview() { val text = "This text contains a link" - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(modifier = Modifier.background(color = FirefoxTheme.colors.layer1)) { ClickableSubstringLink( text = text, diff --git a/app/src/main/java/org/mozilla/fenix/compose/Favicon.kt b/app/src/main/java/org/mozilla/fenix/compose/Favicon.kt index 0501ee448..870440758 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/Favicon.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/Favicon.kt @@ -24,7 +24,6 @@ import mozilla.components.browser.icons.compose.Placeholder import mozilla.components.browser.icons.compose.WithIcon import org.mozilla.fenix.components.components import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Load and display the favicon of a particular website. @@ -98,7 +97,7 @@ private fun FaviconPlaceholder( @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) private fun FaviconPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { Favicon( url = "www.mozilla.com", diff --git a/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLarge.kt b/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLarge.kt index 60c2743e3..dd3f1feeb 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLarge.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLarge.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Default layout of a large tab shown in a list taking String arguments for title and caption. @@ -171,7 +170,7 @@ fun ListItemTabSurface( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun ListItemTabLargePreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { ListItemTabLarge( imageUrl = "", title = "This is a very long title for a tab but needs to be so for this preview", @@ -184,7 +183,7 @@ private fun ListItemTabLargePreview() { @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun ListItemTabSurfacePreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { ListItemTabSurface( imageUrl = "", ) { @@ -201,7 +200,7 @@ private fun ListItemTabSurfacePreview() { @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun ListItemTabSurfaceWithCustomBackgroundPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { ListItemTabSurface( imageUrl = "", backgroundColor = Color.Cyan, diff --git a/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLargePlaceholder.kt b/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLargePlaceholder.kt index 8d93032b9..31055da79 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLargePlaceholder.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/ListItemTabLargePlaceholder.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Placeholder of a [ListItemTabLarge] with the same dimensions but only a centered text. @@ -74,7 +73,7 @@ fun ListItemTabLargePlaceholder( @Composable @Preview private fun ListItemTabLargePlaceholderPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { ListItemTabLargePlaceholder(text = "Item placeholder") } } diff --git a/app/src/main/java/org/mozilla/fenix/compose/SelectableChip.kt b/app/src/main/java/org/mozilla/fenix/compose/SelectableChip.kt index ae2e04aba..fc715d55e 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/SelectableChip.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/SelectableChip.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Default layout of a selectable chip. @@ -78,7 +77,7 @@ fun SelectableChip( @Preview(uiMode = UI_MODE_NIGHT_YES) @Preview(uiMode = UI_MODE_NIGHT_NO) private fun SelectableChipPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Row( modifier = Modifier .fillMaxWidth() @@ -95,7 +94,7 @@ private fun SelectableChipPreview() { @Preview(uiMode = UI_MODE_NIGHT_YES) @Preview(uiMode = UI_MODE_NIGHT_NO) private fun SelectableChipWithCustomColorsPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Row( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/org/mozilla/fenix/compose/StaggeredHorizontalGrid.kt b/app/src/main/java/org/mozilla/fenix/compose/StaggeredHorizontalGrid.kt index f9182d295..145a5701c 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/StaggeredHorizontalGrid.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/StaggeredHorizontalGrid.kt @@ -20,7 +20,6 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Displays a list of items as a staggered horizontal grid placing them on ltr rows and continuing @@ -121,7 +120,7 @@ fun StaggeredHorizontalGrid( @Composable @Preview private fun StaggeredHorizontalGridPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer2)) { StaggeredHorizontalGrid( horizontalItemsSpacing = 8.dp, diff --git a/app/src/main/java/org/mozilla/fenix/compose/TabSubtitleWithInterdot.kt b/app/src/main/java/org/mozilla/fenix/compose/TabSubtitleWithInterdot.kt index 06fbdfd46..0ff1f1907 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/TabSubtitleWithInterdot.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/TabSubtitleWithInterdot.kt @@ -16,7 +16,6 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.sp import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Special caption text for a tab layout shown on one line. @@ -106,7 +105,7 @@ fun TabSubtitleWithInterdot( @Composable @Preview private fun TabSubtitleWithInterdotPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer2)) { TabSubtitleWithInterdot( firstText = "firstText", diff --git a/app/src/main/java/org/mozilla/fenix/compose/ThumbnailCard.kt b/app/src/main/java/org/mozilla/fenix/compose/ThumbnailCard.kt index 167460a33..722c647e7 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/ThumbnailCard.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/ThumbnailCard.kt @@ -34,7 +34,6 @@ import mozilla.components.concept.base.images.ImageLoadRequest import org.mozilla.fenix.R import org.mozilla.fenix.components.components import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Card which will display a thumbnail. If a thumbnail is not available for [url], the favicon @@ -138,7 +137,7 @@ private fun ThumbnailImage( @Preview @Composable private fun ThumbnailCardPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { ThumbnailCard( url = "https://mozilla.com", key = "123", diff --git a/app/src/main/java/org/mozilla/fenix/compose/button/Button.kt b/app/src/main/java/org/mozilla/fenix/compose/button/Button.kt index d344fb681..7a9d802df 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/button/Button.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/button/Button.kt @@ -25,7 +25,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Base component for buttons. @@ -187,7 +186,7 @@ fun DestructiveButton( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun ButtonPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Column( modifier = Modifier .background(FirefoxTheme.colors.layer1) diff --git a/app/src/main/java/org/mozilla/fenix/compose/button/TextButton.kt b/app/src/main/java/org/mozilla/fenix/compose/button/TextButton.kt index 1ba676695..78118946f 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/button/TextButton.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/button/TextButton.kt @@ -13,7 +13,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme import java.util.Locale /** @@ -48,7 +47,7 @@ fun TextButton( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun TextButtonPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { TextButton( text = "label", diff --git a/app/src/main/java/org/mozilla/fenix/compose/home/HomeSectionHeader.kt b/app/src/main/java/org/mozilla/fenix/compose/home/HomeSectionHeader.kt index 8313c17e7..cd4ee8e60 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/home/HomeSectionHeader.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/home/HomeSectionHeader.kt @@ -28,7 +28,6 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.components import org.mozilla.fenix.compose.inComposePreview import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme import org.mozilla.fenix.wallpapers.Wallpaper /** @@ -124,7 +123,7 @@ private fun HomeSectionHeaderContent( @Composable @Preview private fun HomeSectionsHeaderPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { HomeSectionHeader( headerText = stringResource(R.string.recently_saved_title), description = stringResource(R.string.recently_saved_show_all_content_description_2), diff --git a/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt b/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt index e7324ea32..2befdd624 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt @@ -25,7 +25,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Expandable header for sections of lists @@ -96,7 +95,7 @@ fun ExpandableListHeader( @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) private fun TextOnlyHeaderPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { ExpandableListHeader(headerText = "Section title") } @@ -106,7 +105,7 @@ private fun TextOnlyHeaderPreview() { @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) private fun CollapsibleHeaderPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { ExpandableListHeader( headerText = "Collapsible section title", @@ -122,7 +121,7 @@ private fun CollapsibleHeaderPreview() { @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun HeaderWithClickableIconPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { ExpandableListHeader(headerText = "Section title") { Box( @@ -145,7 +144,7 @@ private fun HeaderWithClickableIconPreview() { @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun CollapsibleHeaderWithClickableIconPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { ExpandableListHeader( headerText = "Section title", diff --git a/app/src/main/java/org/mozilla/fenix/compose/list/ListItem.kt b/app/src/main/java/org/mozilla/fenix/compose/list/ListItem.kt index 2a1afad42..af357f7ea 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/list/ListItem.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/list/ListItem.kt @@ -27,7 +27,6 @@ import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.compose.Favicon import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme private val LIST_ITEM_HEIGHT = 56.dp @@ -250,7 +249,7 @@ private fun ListItem( @Composable @Preview(name = "TextListItem", uiMode = Configuration.UI_MODE_NIGHT_YES) private fun TextListItemPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { TextListItem(label = "Label only") } @@ -260,7 +259,7 @@ private fun TextListItemPreview() { @Composable @Preview(name = "TextListItem with a description", uiMode = Configuration.UI_MODE_NIGHT_YES) private fun TextListItemWithDescriptionPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { TextListItem( label = "Label + description", @@ -273,7 +272,7 @@ private fun TextListItemWithDescriptionPreview() { @Composable @Preview(name = "TextListItem with a right icon", uiMode = Configuration.UI_MODE_NIGHT_YES) private fun TextListItemWithIconPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { TextListItem( label = "Label + right icon", @@ -288,7 +287,7 @@ private fun TextListItemWithIconPreview() { @Composable @Preview(name = "IconListItem", uiMode = Configuration.UI_MODE_NIGHT_YES) private fun IconListItemPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { IconListItem( label = "Left icon list item", @@ -305,7 +304,7 @@ private fun IconListItemPreview() { uiMode = Configuration.UI_MODE_NIGHT_YES, ) private fun IconListItemWithRightIconPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { IconListItem( label = "Left icon list item + right icon", @@ -325,7 +324,7 @@ private fun IconListItemWithRightIconPreview() { uiMode = Configuration.UI_MODE_NIGHT_YES, ) private fun FaviconListItemPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { FaviconListItem( label = "Favicon + right icon + clicks", diff --git a/app/src/main/java/org/mozilla/fenix/compose/tabstray/MediaImage.kt b/app/src/main/java/org/mozilla/fenix/compose/tabstray/MediaImage.kt index fad96153a..6ad763025 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/tabstray/MediaImage.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/tabstray/MediaImage.kt @@ -22,7 +22,6 @@ import mozilla.components.browser.state.state.createTab import mozilla.components.concept.engine.mediasession.MediaSession.PlaybackState import org.mozilla.fenix.R import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Controller buttons for the media (play/pause) state for the given [tab]. @@ -59,7 +58,7 @@ fun MediaImage( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun ImagePreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { MediaImage( tab = createTab(url = "https://mozilla.com"), onMediaIconClicked = {}, diff --git a/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt b/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt index a704d3a3d..c1b72665f 100644 --- a/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt +++ b/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt @@ -34,7 +34,6 @@ import org.mozilla.fenix.R import org.mozilla.fenix.compose.ThumbnailCard import org.mozilla.fenix.ext.toShortUrl import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * List item used to display a tab that supports clicks, @@ -172,7 +171,7 @@ private fun Thumbnail( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun TabListItemPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { TabListItem( tab = createTab(url = "www.mozilla.com", title = "Mozilla"), onCloseClick = {}, @@ -187,7 +186,7 @@ private fun TabListItemPreview() { @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun SelectedTabListItemPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { TabListItem( tab = createTab(url = "www.mozilla.com", title = "Mozilla"), onCloseClick = {}, diff --git a/app/src/main/java/org/mozilla/fenix/home/collections/CollectionItem.kt b/app/src/main/java/org/mozilla/fenix/home/collections/CollectionItem.kt index 6f363b1be..fda2c0dc1 100644 --- a/app/src/main/java/org/mozilla/fenix/home/collections/CollectionItem.kt +++ b/app/src/main/java/org/mozilla/fenix/home/collections/CollectionItem.kt @@ -46,7 +46,6 @@ import org.mozilla.fenix.R.string import org.mozilla.fenix.compose.list.FaviconListItem import org.mozilla.fenix.ext.toShortUrl import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * Rectangular shape with only right angles used to display a middle tab. @@ -195,7 +194,7 @@ private fun Modifier.clipTop() = this.then( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun TabInCollectionPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Column { Box(modifier = Modifier.height(56.dp)) { DismissedTabBackground( diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketRecommendationsHeaderViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketRecommendationsHeaderViewHolder.kt index bc0329194..9438349df 100644 --- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketRecommendationsHeaderViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketRecommendationsHeaderViewHolder.kt @@ -27,7 +27,6 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.components import org.mozilla.fenix.compose.ComposeViewHolder import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * [RecyclerView.ViewHolder] for displaying the Pocket feature header. @@ -83,7 +82,7 @@ class PocketRecommendationsHeaderViewHolder( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun PocketRecommendationsFooterViewHolderPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(modifier = Modifier.background(color = FirefoxTheme.colors.layer1)) { PoweredByPocketHeader( onLearnMoreClicked = {}, diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt index 3c1393b7c..410d9e371 100644 --- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt +++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt @@ -73,7 +73,6 @@ import org.mozilla.fenix.compose.TabSubtitleWithInterdot import org.mozilla.fenix.compose.inComposePreview import org.mozilla.fenix.ext.settings import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme import kotlin.math.max import kotlin.math.min import kotlin.math.roundToInt @@ -579,7 +578,7 @@ fun PoweredByPocketHeader( @Composable @Preview private fun PocketStoriesComposablesPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer2)) { Column { PocketStories( diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesViewHolder.kt index f8d799a38..760420ed5 100644 --- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesViewHolder.kt @@ -27,7 +27,6 @@ import org.mozilla.fenix.components.components import org.mozilla.fenix.compose.ComposeViewHolder import org.mozilla.fenix.compose.home.HomeSectionHeader import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme import org.mozilla.fenix.wallpapers.WallpaperState /** @@ -105,7 +104,7 @@ class PocketStoriesViewHolder( @Composable @Preview fun PocketStoriesViewHolderPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Column { HomeSectionHeader( headerText = stringResource(R.string.pocket_stories_header_1), diff --git a/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt b/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt index 701e2ff1a..b97beae8a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt @@ -54,7 +54,6 @@ import org.mozilla.fenix.compose.Image import org.mozilla.fenix.compose.inComposePreview import org.mozilla.fenix.home.recentbookmarks.RecentBookmark import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme private val cardShape = RoundedCornerShape(8.dp) @@ -280,7 +279,7 @@ private fun RecentBookmarksMenu( @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) private fun RecentBookmarksPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { RecentBookmarks( bookmarks = listOf( RecentBookmark( diff --git a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt index c0f8a7c14..df401b1e7 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt @@ -52,7 +52,6 @@ import org.mozilla.fenix.compose.button.SecondaryButton import org.mozilla.fenix.home.recentsyncedtabs.RecentSyncedTab import org.mozilla.fenix.home.recenttabs.RecentTab import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * A recent synced tab card. @@ -287,7 +286,7 @@ private fun LoadedRecentSyncedTab() { url = "https://mozilla.org", previewImageUrl = "https://mozilla.org", ) - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { RecentSyncedTab( tab = tab, onRecentSyncedTabClick = {}, @@ -301,7 +300,7 @@ private fun LoadedRecentSyncedTab() { @Preview @Composable private fun LoadingRecentSyncedTab() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { RecentSyncedTab( tab = null, buttonBackgroundColor = FirefoxTheme.colors.layer3, diff --git a/app/src/main/java/org/mozilla/fenix/home/recentvisits/view/RecentlyVisited.kt b/app/src/main/java/org/mozilla/fenix/home/recentvisits/view/RecentlyVisited.kt index 41baedbbf..c67ca0592 100644 --- a/app/src/main/java/org/mozilla/fenix/home/recentvisits/view/RecentlyVisited.kt +++ b/app/src/main/java/org/mozilla/fenix/home/recentvisits/view/RecentlyVisited.kt @@ -59,7 +59,6 @@ import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem.RecentHistoryGroup import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem.RecentHistoryHighlight import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme // Number of recently visited items per column. private const val VISITS_PER_COLUMN = 3 @@ -416,7 +415,7 @@ private val LazyListState.atLeastHalfVisibleItems @Composable @Preview private fun RecentlyVisitedPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { RecentlyVisited( recentVisits = listOf( RecentHistoryGroup(title = "running shoes"), diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/PrivateBrowsingDescriptionViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/PrivateBrowsingDescriptionViewHolder.kt index a85f18584..f1748ced6 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/PrivateBrowsingDescriptionViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/PrivateBrowsingDescriptionViewHolder.kt @@ -29,7 +29,6 @@ import org.mozilla.fenix.R import org.mozilla.fenix.compose.ComposeViewHolder import org.mozilla.fenix.home.sessioncontrol.TabSessionInteractor import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * View holder for a private browsing description. @@ -116,7 +115,7 @@ fun PrivateBrowsingDescription( @Composable @Preview private fun PrivateBrowsingDescriptionPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { PrivateBrowsingDescription( onLearnMoreClick = {}, ) diff --git a/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressList.kt b/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressList.kt index 4487f348d..a24d8d837 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressList.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/address/view/AddressList.kt @@ -22,7 +22,6 @@ import org.mozilla.fenix.compose.list.TextListItem import org.mozilla.fenix.settings.address.ext.getAddressLabel import org.mozilla.fenix.settings.address.ext.getFullName import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * A list of addresses. @@ -61,7 +60,7 @@ fun AddressList( @Preview @Composable private fun AddressListPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer2)) { AddressList( addresses = listOf( diff --git a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt index dcdedd429..fe9c46753 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt @@ -52,7 +52,6 @@ import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.compose.ClickableSubstringLink import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme import org.mozilla.fenix.wallpapers.Wallpaper /** @@ -330,7 +329,7 @@ private fun WallpaperThumbnailItem( @Preview @Composable private fun WallpaperThumbnailsPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { WallpaperSettings( defaultWallpaper = Wallpaper.Default, loadWallpaperResource = { null }, diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/inactivetabs/InactiveTabs.kt b/app/src/main/java/org/mozilla/fenix/tabstray/inactivetabs/InactiveTabs.kt index 264ec27a5..a9d5ba0be 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/inactivetabs/InactiveTabs.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/inactivetabs/InactiveTabs.kt @@ -43,7 +43,6 @@ import org.mozilla.fenix.compose.list.FaviconListItem import org.mozilla.fenix.ext.toShortUrl import org.mozilla.fenix.tabstray.ext.toDisplayTitle import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme private val ROUNDED_CORNER_SHAPE = RoundedCornerShape(8.dp) @@ -226,7 +225,7 @@ private fun InactiveTabsAutoClosePrompt( @Preview(name = "Auto close dialog dark", uiMode = Configuration.UI_MODE_NIGHT_YES) @Preview(name = "Auto close dialog light", uiMode = Configuration.UI_MODE_NIGHT_NO) private fun InactiveTabsAutoClosePromptPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { InactiveTabsAutoClosePrompt( onDismissClick = {}, @@ -243,7 +242,7 @@ private fun InactiveTabsListPreview() { var expanded by remember { mutableStateOf(true) } var showAutoClosePrompt by remember { mutableStateOf(true) } - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { InactiveTabsList( inactiveTabs = generateFakeInactiveTabsList(), diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/syncedtabs/SyncedTabs.kt b/app/src/main/java/org/mozilla/fenix/tabstray/syncedtabs/SyncedTabs.kt index 8ad5ee0c4..9bbf35e77 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/syncedtabs/SyncedTabs.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/syncedtabs/SyncedTabs.kt @@ -40,7 +40,6 @@ import org.mozilla.fenix.compose.ext.dashedBorder import org.mozilla.fenix.compose.list.ExpandableListHeader import org.mozilla.fenix.compose.list.FaviconListItem import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme import mozilla.components.browser.storage.sync.Tab as SyncTab private const val EXPANDED_BY_DEFAULT = true @@ -240,7 +239,7 @@ fun SyncedTabsNoTabsItem() { @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) private fun SyncedTabsListItemsPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Column(Modifier.background(FirefoxTheme.colors.layer1)) { SyncedTabsSectionHeader(headerText = "Google Pixel Pro Max +Ultra 5000") @@ -276,7 +275,7 @@ private fun SyncedTabsListItemsPreview() { @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) private fun SyncedTabsErrorPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { SyncedTabsErrorItem( errorText = stringResource(R.string.synced_tabs_no_tabs), @@ -293,7 +292,7 @@ private fun SyncedTabsErrorPreview() { @Composable @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) private fun SyncedTabsListPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { Box(Modifier.background(FirefoxTheme.colors.layer1)) { SyncedTabsList( syncedTabs = getFakeSyncedTabList(), diff --git a/app/src/main/java/org/mozilla/fenix/theme/FenixTypography.kt b/app/src/main/java/org/mozilla/fenix/theme/FenixTypography.kt index ee0ed1468..e48b1784f 100644 --- a/app/src/main/java/org/mozilla/fenix/theme/FenixTypography.kt +++ b/app/src/main/java/org/mozilla/fenix/theme/FenixTypography.kt @@ -144,7 +144,7 @@ private fun TypographyPreview() { Pair("Overline", defaultTypography.overline), ) - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { LazyColumn( modifier = Modifier .background(FirefoxTheme.colors.layer1) diff --git a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperOnboarding.kt b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperOnboarding.kt index 68c968c12..36d56da61 100644 --- a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperOnboarding.kt +++ b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpaperOnboarding.kt @@ -29,7 +29,6 @@ import androidx.compose.ui.unit.dp import org.mozilla.fenix.R import org.mozilla.fenix.settings.wallpaper.WallpaperThumbnails import org.mozilla.fenix.theme.FirefoxTheme -import org.mozilla.fenix.theme.Theme /** * A view that shows content of a WallpaperOnboarding dialog. @@ -125,7 +124,7 @@ fun WallpaperOnboarding( @ExperimentalMaterialApi @Composable private fun WallpaperSnackbarPreview() { - FirefoxTheme(theme = Theme.getTheme()) { + FirefoxTheme { WallpaperOnboarding( wallpapers = listOf(Wallpaper.Default), currentWallpaper = Wallpaper.Default, From 1a42fdd199cf443cd561a6b14be86a45b44a8724 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Tue, 22 Nov 2022 02:08:18 +0100 Subject: [PATCH 072/218] Import l10n. (#27940) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- app/src/main/res/values-be/strings.xml | 59 +++++---------------- app/src/main/res/values-en-rGB/strings.xml | 59 +++++---------------- app/src/main/res/values-fr/strings.xml | 50 +----------------- app/src/main/res/values-ia/strings.xml | 53 ++----------------- app/src/main/res/values-it/strings.xml | 54 ++----------------- app/src/main/res/values-ko/strings.xml | 59 +++++---------------- app/src/main/res/values-pt-rPT/strings.xml | 60 +++++---------------- app/src/main/res/values-sk/strings.xml | 52 ++---------------- app/src/main/res/values-sv-rSE/strings.xml | 60 +++++---------------- app/src/main/res/values-uz/strings.xml | 61 ++++++++++++++++++++++ 10 files changed, 138 insertions(+), 429 deletions(-) diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 0176913a3..15ee82d62 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -46,8 +46,6 @@ - Нядаўнія закладкі - Нядаўна захаваныя Паказаць усе захаваныя закладкі @@ -256,40 +254,19 @@ Налады пошуку - Гэтым разам шукаць: + Гэтым разам шукаць: - - - Што новага ў %1$s - - Цяпер стала прасцей працягнуць працу там, дзе вы спыніліся. - - Персаналізаваная хатняя старонка %1$s - - Пераходзьце да адкрытых картак, закладак і гісторыі аглядання. - - Лепшая арганізацыя картак - - Пазбаўцеся бязладдзя ў картках дзякуючы палепшанаму выкладу і аўтаматычнаму закрыццю картак. - - Нядаўнія пошукі - - Вяртайцеся да сваіх апошнія пошукавых запытаў з хатняй старонкі і картак. - - - Ваша персаналізаваная галоўная старонка Firefox цяпер палягчае працяг адтуль, дзе вы спыніліся. Знайдзіце свае апошнія карткі, закладкі і вынікі пошуку. + + Гэтым разам шукаць у: + Сустракайце сваю персаналізаваную хатнюю старонку. Тут будуць паказаны апошнія карткі, закладкі і вынікі пошуку. - Сардэчна запрашаем у незалежны Інтэрнэт - Сардэчна запрашаем у больш асабісты Інтэрнэт Больш колераў. Лепшая прыватнасць. Тая ж адданасць людзям, а не прыбытку. - Пераходзьце з тэлефона на ноўтбук і назад - Пераключаць экраны цяпер прасцей, чым калі-небудзь Працягвайце з таго месца, дзе спыніліся, з дапамогай картак з іншых прылад, якія зараз знаходзяцца на вашай хатняй старонцы. @@ -354,6 +331,14 @@ Дадаць ярлык прыватнага аглядання Рэжым «Толькі HTTPS» + + + Памяншэнне колькасці банераў кукі + + Памяншаць колькасць банераў кукі + + Firefox аўтаматычна спрабуе адхіліць запыты кукаў на банерах файлаў cookie. Калі выбар адхілення недаступны, Firefox можа прыняць усе кукі, каб закрыць банер. + Аўтаматычна спрабуе падключацца да сайтаў з выкарыстаннем пратаколу шыфравання HTTPS для павышэння бяспекі. @@ -1258,33 +1243,20 @@ Група выдалена - - Вітаем у %s! Сардэчна запрашаем у лепшы Інтэрнэт Браўзер, створаны для людзей, а не для прыбытку. - - Сінхранізуйце Firefox паміж прыладамі Працягвайце з таго месца, дзе спыніліся - - Перанясіце закладкі, гісторыю і паролі ў %1$s на гэтай прыладзе. Сінхранізуйце карткі і паролі на ўсіх прыладах для лёгкага пераключэння экрана. - - Зарэгістравацца Увайсці Сінхранізацыя ўключана - - Прыватнасць заўжды ўключана Прадвызначаная ахова прыватнасці - - %1$s аўтаматычна спыняе таемнае сачэнне кампаній за вамі ў Інтэрнэце. Поўная ахова кукаў перашкаджае трэкерам выкарыстоўваць файлы кукі для сачэння за вамі на розных сайтах. @@ -1297,17 +1269,10 @@ Блакуе больш трэкераў, так што старонкі атрымліваюцца хутчэй, але частка іх функцый можа парушыцца. Выберыце размяшчэнне панэлі інструментаў - - Майце панэль інструментаў пад рукой. Пакіньце яе ўнізе або перамясціце ўверх. Пакіньце яе ўнізе або перамясціце наверх. - - Ваша прыватнасць Вы распараджаецеся сваімі звесткамі - - Мы распрацавалі %s, каб даць вам кантроль над тым, чым дзяліцца ў Інтэрнэце, і тым, чым вы падзеліцеся з намі. Firefox дае вам кантроль над тым, чым вы дзеліцеся ў Інтэрнэце і чым вы дзеліцеся з намі. diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 36eeb33d0..8c75306c2 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -45,8 +45,6 @@ - Recent bookmarks - Recently saved Show all saved bookmarks @@ -256,40 +254,19 @@ Search settings - This time search: + This time search: - - - What’s new in %1$s - - It’s now easier to pick back up where you left off. - - Personalised %1$s homepage - - Jump to your open tabs, bookmarks and browsing history. - - Clean, organised tabs - - Clear away tab clutter with improved layout and auto-closing tabs. - - Recent searches - - Revisit your latest searches from your homepage and tabs. - - - Your personalised Firefox homepage now makes it easier to pick up where you left off. Find your recent tabs, bookmarks and search results. + + This time search in: + Meet your personalised homepage. Recent tabs, bookmarks, and search results will appear here. - Welcome to an independent internet - Welcome to a more personal internet More colours. Better privacy. Same commitment to people over profits. - Hop from phone to laptop and back - Switching screens is easier than ever Pick up where you left off with tabs from other devices now on your homepage. @@ -355,6 +332,14 @@ Add private browsing shortcut HTTPS-Only Mode + + + Cookie Banner Reduction + + Reduce cookie banners + + Firefox automatically tries to reject cookie requests on cookie banners. If a reject option isn’t available, Firefox may accept all cookies to dismiss the banner. + Automatically attempts to connect to sites using HTTPS encryption protocol for increased security. @@ -1242,33 +1227,20 @@ Group deleted - - Welcome to %s! Welcome to a better internet A browser built for people, not profits. - - Synchronise Firefox between devices Pick up where you left off - - Bring bookmarks, history, and passwords to %1$s on this device. Synchronise tabs and passwords across devices for seamless screen-switching. - - Sign up Sign in Sync is on - - Always-on privacy Privacy protection by default - - %1$s automatically stops companies from secretly following you around the web. Featuring Total Cookie Protection to stop trackers from using cookies to stalk you across sites. @@ -1281,17 +1253,10 @@ Blocks more trackers so pages load faster, but some on-page functionally may break. Pick your toolbar placement - - Put the toolbar within easy reach. Keep it on the bottom, or move it to the top. Keep it on the bottom, or move it to the top. - - Your privacy You control your data - - We’ve designed %s to give you control over what you share online and what you share with us. Firefox gives you control over what you share online and what you share with us. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 83358c63c..b0185b05d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -48,8 +48,6 @@ - Marque-pages récents - Récemment enregistrés Afficher tous les marque-pages enregistrés @@ -264,38 +262,13 @@ Pour cette recherche : - - Nouveautés dans %1$s - - Il est désormais plus facile de reprendre là où vous en étiez. - - Accueil personnalisé de %1$s - - Accédez à vos onglets ouverts, vos marque-pages et votre historique de navigation. - - Onglets nets et organisés - - Éliminez le fouillis d’onglets grâce à une présentation améliorée et des onglets qui se ferment automatiquement. - - Recherches récentes - - - Consultez vos dernières recherches depuis votre page d’accueil et vos onglets. - - - L’accueil personnalisé de Firefox permet désormais de reprendre plus facilement là où vous en étiez. Retrouvez vos onglets, marque-pages et résultats de recherche récents. - Découvrez votre page d’accueil personnalisée. Onglets récents, marque-pages et résultats de recherche y apparaissent. - Bienvenue sur un Internet indépendant - Bienvenue sur un Internet plus personnel Plus de couleurs. Une confidentialité améliorée. Mais toujours le même engagement pour les gens plutôt que pour les profits. - Passez du téléphone à l’ordinateur portable et vice-versa - Passer d’un écran à l’autre est plus facile que jamais Reprenez là où vous en étiez avec des onglets d’autres appareils qui figurent désormais sur votre page d’accueil. @@ -1280,35 +1253,21 @@ Groupe supprimé - - Bienvenue dans %s ! - Bienvenue dans un meilleur Internet Un navigateur conçu pour les gens, pas pour l’argent. - - Synchronisez Firefox entre vos appareils Reprenez là où vous en étiez - - Importez vos marque-pages, votre historique et vos mots de passe dans %1$s sur cet appareil. Synchronisez onglets et mots de passe entre vos appareils pour passer d’un écran à l’autre sans accroc. - - Se connecter Connexion Synchronisation activée - - Confidentialité toujours assurée Protection de la vie privée par défaut - - %1$s empêche automatiquement les entreprises de vous suivre secrètement sur le Web. La protection totale contre les cookies incluse empêche les traqueurs d’utiliser des cookies pour vous pister de site en site. @@ -1321,17 +1280,10 @@ Bloque davantage de traqueurs, accélérant le chargement des pages, mais quelques dysfonctionnements peuvent s’ensuivre. Choisissez l’emplacement de votre barre d’outils - - Placez la barre d’outils à portée de main. Laissez-la en bas ou déplacez-la en haut. Conservez-la en bas ou déplacez-la en haut. - - Votre vie privée Vous gardez le contrôle de vos données - - Nous avons conçu %s pour vous donner le contrôle de ce que vous partagez en ligne et de ce que vous partagez avec nous. Firefox vous donne le contrôle de ce que vous partagez en ligne et de ce que vous partagez avec nous. @@ -1991,4 +1943,6 @@ développer ouvrir le lien pour en savoir plus sur cette collection + + lire l’article diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index e8a0bbe98..a4a73fa2e 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -46,8 +46,6 @@ - Marcapaginas recente - Salvate recentemente Monstrar tote le marcapaginas salvate @@ -260,41 +258,19 @@ Parametros de recerca - Iste vice cercar per: + Iste vice cercar per: - - - Lo que es nove in %1$s - - Ora il es plus veloce seliger retro ubi tu abandonava. - - Pagina principal de %1$s personalisate - - Salta a tu schedas aperte, marcapaginas e chronologia de navigation. - - Schedas clar, organisate - - Elimina le disordine del schedas con le disposition meliorate e le auto-clausura. - - Recercas recente - - - Revisita tu ultime recercas ab tu pagina principal e schedas. - - - Tu pagina principal personalisate de Firefox ora simplifica reprender de ubi tu lassava. Trova tu recente schedas, marcapaginas e resultatos del recerca. + + Iste vice cercar in: + Incontra tu pagina principal personalisate. Le schedas recente, le marcapaginas e le resultatos del recerca apparera ci. - Benvenite in un internet independente - Benvenite in un internet plus personal Plus de colores. Melior confidentialitate. Mesme dedication al personas super le profitos. - Passa ab le telephono al portabile e retro - Cambiar le paginas es plus facile que mais Reprende de ubi tu exiva con le schedas de altere apparatos ora sur tu pagina principal. @@ -361,6 +337,7 @@ Adder accesso directe de navigation private Modo solo HTTPS + Automaticamente tenta de connecter se al sitos per le protocollo de cryptation HTTPS pro major securitate. @@ -1286,33 +1263,20 @@ Gruppo delete - - Benvenite a %s! Benvenite a in un internet melior Un navigator pro le gente, non pro le profitos. - - Synchronisar Firefox inter apparatos Reprende de ubi tu lassava - - Apporta marcapaginas, chronologia e contrasignos de %1$s sur iste dispositivo. Synchronisa schedas e contrasignos inter apparatos pro facilemente mutar schermo. - - Inscribe te Aperir session Sync es activate - - Confidentialitate sempre active Preconfigurate pro le vita private - - %1$s automaticamente impedi le companias de sequer secretemente tu movimentos circum le Web. Eligente le Protection total del cookies, tu stoppa le traciatores de usar le cookies pro sequer te furtivemente circum le web. @@ -1326,17 +1290,10 @@ Elige le ubication de tu barra del instrumentos - - Pone le barra del instrumentos pro attinger lo facilemente. Mantene lo fundo pagina o move lo in alto. - - Tu confidentialitate Tu controla tu datos - - Nos ha concipite %s pro dar te le controlo de lo que tu comparti in linea e lo que tu comparti con nos. Firefox te da le controlo sur lo que tu comparti in linea e lo que tu comparti con nos. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index ec66e2932..83375c545 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -48,8 +48,6 @@ - Segnalibri recenti - Aggiunti di recente Visualizza tutti i segnalibri salvati @@ -261,42 +259,19 @@ Impostazioni ricerca - Questa volta cerca con: + Questa volta cerca con: - - - Novità in %1$s - - Ora è più facile riprendere da dove avevi interrotto. - - Pagina iniziale di %1$s personalizzata - - Passa alle schede aperte, ai segnalibri e alla cronologia di navigazione. - - - Schede chiare e organizzate - - Riduci il caos generato da troppe schede aperte con un layout migliorato e chiusura automatica. - - Ricerche recenti - - - Rivedi le tue ultime ricerche effettuate dalla pagina iniziale e dalle schede. - - - La pagina iniziale personalizzata di Firefox rende più semplice riprendere da dove avevi interrotto. Puoi trovare le schede recenti, i segnalibri e i risultati delle ricerche. + + Questa volta cerca in: + Scopri la tua pagina iniziale personalizzata. Le schede recenti, i segnalibri e i risultati di ricerca verranno visualizzati qui. - Benvenuti nell’Internet indipendente - Benvenuto in un Internet più personale Più colori. Ancora più protezione per la privacy. Stesso impegno nell’anteporre le persone ai profitti. - Passa dal computer al telefono, e viceversa - Passare da uno schermo all’altro è più facile che mai Riprendi da dove avevi interrotto con le schede di altri dispositivi, ora disponibili direttamente dalla pagina iniziale. @@ -364,6 +339,7 @@ Aggiungi scorciatoia navigazione anonima Modalità solo HTTPS + Tenta automaticamente la connessione ai siti utilizzando il protocollo di crittografia HTTPS per una maggiore sicurezza. @@ -1287,34 +1263,21 @@ Gruppo eliminato - - Benvenuto in %s. Benvenuti in un Internet migliore Un browser realizzato per le persone, non per il profitto. - - Sincronizza Firefox tra vari dispositivi Riprendi da dove ti eri interrotto - - Porta segnalibri, cronologia e password di %1$s su questo dispositivo. Sincronizza le schede e le password tra i tuoi dispositivi per passare da uno schermo all’altro senza interruzioni. - - Registrati Accedi La sincronizzazione è attiva - - Privacy sempre attiva Progettato per la protezione della privacy - - %1$s blocca automaticamente le società che, di nascosto, cercano di seguire le tue attività sul Web. Ora con Protezione totale per i cookie, che impedisce l’utilizzo dei cookie per seguire le tue attività online attraverso diversi siti. @@ -1327,17 +1290,10 @@ Blocca più elementi traccianti. Le pagine verranno caricate più velocemente, ma alcune caratteristiche della pagina potrebbero non funzionare correttamente. Scegli la posizione della barra degli strumenti - - Metti la barra degli strumenti a portata di mano. Tienila in basso o spostala in alto. Tienila in basso o spostala in alto. - - La tua privacy I tuoi dati, la tua scelta - - %s è progettato per darti il pieno controllo sulle informazioni che condividi online e con noi. Firefox ti garantisce il pieno controllo sulle informazioni che condividi online e con noi. diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index f9c9cfe98..96c539345 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -50,8 +50,6 @@ - 최근 북마크 - 최근에 저장됨 저장된 북마크 모두 표시 @@ -265,40 +263,19 @@ 검색 설정 - 이번만 검색: + 이번만 검색: - - - %1$s의 새 기능 - - 이제 이전에 사용하던 부분을 쉽게 찾을 수 있습니다. - - 개인화된 %1$s 홈페이지 - - 열린 탭, 북마크 및 방문 기록으로 이동합니다. - - 깔끔하게 정리된 탭 - - 향상된 레이아웃과 자동 탭 닫기로 탭을 깔끔하게 정리하세요. - - 최근 검색 - - 홈페이지와 탭에서 최근 검색을 다시 방문하세요. - - - 이제 개인화된 Firefox 홈페이지에서 이전에 사용하던 부분을 쉽게 찾을 수 있습니다. 최근 탭, 북마크 및 검색 결과를 찾으세요. + + 이번만 검색: + 개인화된 홈페이지를 만나보세요. 최근 탭, 북마크 및 검색 결과가 여기에 표시됩니다. - 독립 인터넷에 오신 것을 환영합니다 - 나만의 인터넷에 오신 것을 환영합니다 더 많은 색상. 더 나은 개인 정보 보호. 이익보다는 사람들에 대한 헌신. - 휴대전화에서 노트북으로 왔다가 다시 돌아가기 - 더 쉬워진 화면 전환 이제 홈페이지에서 다른 기기의 탭을 가져와서 중단한 부분부터 다시 시작하세요. @@ -365,6 +342,14 @@ 사생활 보호 모드 바로 가기 추가 HTTPS 전용 모드 + + + 쿠키 배너 감소 + + 쿠키 배너 줄이기 + + Firefox는 자동으로 쿠키 배너에서 쿠키 요청을 거부하려고 시도합니다. 거부 옵션을 사용할 수 없는 경우, Firefox는 배너를 닫기 위해 모든 쿠키를 허용할 수 있습니다. + 보안 강화를 위해 HTTPS 암호화 프로토콜을 사용하여 사이트에 자동으로 연결을 시도합니다. @@ -1290,34 +1275,21 @@ 그룹 삭제됨 - - %s에 오신걸 환영합니다! 더 나은 인터넷에 오신 것을 환영합니다 이익이 아닌 사람을 위해 만들어진 브라우저. - - 기기 간에 Firefox 동기화 중단한 부분부터 다시 시작하세요 - - 이 기기의 %1$s에 북마크, 기록 및 비밀번호를 가져오세요. 원활한 화면 전환을 위해 여러 기기에서 탭과 비밀번호를 동기화합니다. - - 가입하기 로그인 동기화 켜짐 - - 상시 개인 정보 보호 기본적으로 사생활을 보호합니다 - - %1$s는 회사가 웹에서 사용자를 몰래 따라 다니는 것을 자동으로 중지합니다. 전체 쿠키 보호 기능을 통해 추적기가 쿠키를 사용하여 사이트에서 사용자를 스토킹하는 것을 방지합니다. @@ -1330,17 +1302,10 @@ 더 많은 추적기를 차단하여 페이지가 더 빨리 로드되지만, 일부 페이지의 기능이 손상될 수 있습니다. 도구 모음 위치 선택 - - 도구 모음을 쉽게 접근할 수 있는 곳에 놓으세요. 하단에 두거나 상단으로 옮기세요. 아래쪽에 두거나 위쪽으로 이동하세요. - - 개인 정보 보호 사용자가 자신의 데이터를 제어 - - 우리는 %s가 무엇을 온라인에서 공유하고 우리와 공유할지 사용자가 제어할 수 있게 만들었습니다. Firefox를 사용하면 무엇을 온라인에서 공유하고 우리와 공유할지 사용자가 제어할 수 있습니다. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 2cde02955..35c5ceff4 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -47,8 +47,6 @@ - Marcadores recentes - Recentemente guardados Mostrar todos os marcadores guardados @@ -259,40 +257,19 @@ Definições de pesquisa - Pesquisa neste momento: + Pesquisa neste momento: - - - Novidades do %s - - Agora é mais simples continuar de onde parou. - - Página inicial personalizada do %1$s - - Aceda aos seus separadores abertos, marcadores e histórico de navegação. - - Separadores limpos e organizados - - Elimine a confusão de separadores com um esquema melhorado e encerramento automático de separadores. - - Pesquisas recentes - - Revisite as suas pesquisas mais recentes na sua página inicial e separadores. - - - A sua página inicial personalizada do Firefox faz com que agora seja mais simples continuar de onde parou. Encontre os seus separadores, marcadores e resultados de pesquisa recentes. + + Desta vez pesquisar em: + Conheça a sua página inicial personalizada. Aqui vão ser apresentados separadores recentes, marcadores e resultados de pesquisas. - Bem-vindo/a a uma Internet independente - Bem-vindo a uma internet mais pessoal Mais cores. Melhor privacidade. O mesmo compromisso com as pessoas, acima dos lucros. - Alternar do telemóvel para o portátil e vice-versa - Alterar entre ecrãs é mais fácil do que nunca Continue de onde parou com os separadores de outros dispositivos agora na sua página inicial. @@ -358,6 +335,14 @@ Adicionar um atalho de navegação privada Modo apenas HTTPS + + + Redução de Faixas de Cookies + + Reduzir faixas de cookies + + O Firefox tenta rejeitar automaticamente pedidos de cookies em faixas de cookies. Se uma opção de rejeição não estiver disponível, o Firefox poderá aceitar todos os cookies para esconder a faixa. + Automaticamente tenta conectar-se a sites utilizando o protocolo de encriptação HTTPS para uma melhor segurança. @@ -1248,35 +1233,21 @@ Grupo eliminado - - Bem-vindo ao %s! - Bem-vindo a uma internet melhor Um navegador feito para as pessoas e não para os lucros. - - Sincronizar o Firefox entre dispositivos Continue de onde ficou - - Traga os marcadores, histórico e palavras-passe para o %1$s neste dispositivo. Sincronize separadores e palavras-passe entre dispositivos para uma troca transparente entre ecrãs. - - Registar Iniciar sessão A sincronização está ativada - - Privacidade sempre ativa Proteção de privacidade por predefinição - - O %1$s impede automaticamente que as empresas o sigam secretamente pela Internet. A apresentar a Proteção total de cookies para parar os rastreadores de utilizar cookies que o/a perseguem na Internet. @@ -1289,17 +1260,10 @@ Bloqueia mais rastreadores para que as páginas carreguem mais rapidamente, mas algumas funcionalidades das páginas podem ser perdidas. Escolha o posicionamento da barra de ferramentas - - Facilite o acesso à barra de ferramentas. Mantenha a mesma na parte inferior ou mova-a para cima. Manter na parte inferior ou mover para o topo. - - A sua privacidade Você controla os seus dados - - Nós desenhámos o %s para lhe dar mais controlo sobre o que partilha online e o que partilha connosco. O Firefox dá-lhe mais controlo sobre o que partilha na Internet e o que partilha connosco. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 44e718ae0..324f576ad 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -46,8 +46,6 @@ - Nedávno pridané medzi záložky - Nedávno uložené Zobraziť všetky uložené záložky @@ -261,41 +259,20 @@ Hľadať v nastaveniach - Tentokrát hľadať: + Tentokrát hľadať: - - - Novinky v aplikácii %1$s - - Teraz je jednoduchšie pokračovať tam, kde ste prestali. - - Prispôsobená domovská stránka %1$su - - Prejdite na otvorené karty, záložky a históriu prehliadania. - - Čisté a usporiadané karty - - Odstráňte neporiadok zo záložiek vďaka vylepšenému rozloženiu a automatickému zatváraniu kariet. - - Nedávne vyhľadávania - - Zopakujte svoje najnovšie vyhľadávania z domovskej stránky a kariet. - - - Vaša prispôsobená domovská stránka Firefoxu teraz uľahčuje pokračovať tam, kde ste prestali. Nájdite svoje najnovšie karty, záložky a výsledky vyhľadávania. + + Tentokrát hľadať v: + Zoznámte sa so svojou prispôsobenou domovskou stránkou. Tu sa zobrazia nedávne karty, záložky a výsledky vyhľadávania. - - Vitajte na nezávislom internete Vitajte na osobnejšom internete Viac farieb. Lepšie súkromie. Rovnaký záväzok voči ľuďom nadradený ziskom. - Preskočte z telefónu na laptop a späť - Prepínanie obrazoviek je jednoduchšie ako kedykoľvek predtým Pokračujte tam, kde ste prestali, pomocou kariet z iných zariadení teraz na vašej domovskej stránke. @@ -363,6 +340,7 @@ Pridať odkaz na súkromné prehliadanie Režim "Len HTTPS" + Automaticky sa pokúša pripojiť k stránkam pomocou šifrovacieho protokolu HTTPS na zvýšenie bezpečnosti. @@ -1259,33 +1237,20 @@ Skupina bola odstránená - - Víta vás %s! Vitajte na lepšom internete Prehliadač vytvorený pre ľudí, nie pre zisky. - - Synchronizácia Firefoxu medzi zariadeniami Pokračujte tam, kde ste prestali - - Preneste si svoje záložky, históriu a heslá do %1$su aj na toto zariadenie. Synchronizujte karty a heslá medzi zariadeniami pre bezproblémové prepínanie obrazovky. - - Prihlásiť sa Prihlásiť sa Synchronizácia je zapnutá - - Vždy zabezpečené súkromie Ochrana súkromia v predvolenom nastavení - - %1$s automaticky zabraňuje spoločnostiam tajne vás sledovať pri prehliadaní webu. Obsahuje úplnú ochranu súborov cookie, aby ste zabránili sledovačom používať súbory cookie, aby vás mohli sledovať na rôznych stránkach. @@ -1298,17 +1263,10 @@ Blokuje viac sledovacích prvkov. Stránky sa načítavajú rýchlejšie, ale niektoré funkcie na stránke môžu fungovať obmedzene. Vyberte umiestnenie panela s nástrojmi - - Umiestnite panel s nástrojmi, aby ste naň ľahko dosiahli. Ponechajte ho na spodku alebo si ho presuňte hore. Ponechajte ho dolu alebo ho presuňte nahor. - - Vaše súkromie Svoje údaje máte pod kontrolou - - %s vám dáva kontrolu nad tým, čo zdieľate na internete a čo zdieľate s nami. Firefox vám dáva kontrolu nad tým, čo zdieľate online a čo zdieľate s nami. diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 229663776..8a600c5d1 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -46,8 +46,6 @@ - Senaste bokmärken - Nyligen sparade Visa alla sparade bokmärken @@ -263,41 +261,19 @@ Sökinställningar - Denna sökning: + Denna sökning: - - - Vad är nytt i %1$s - - Det är nu enklare att fortsätta där du slutade. - - Personlig startsida för %1$s - - Hoppa till dina öppna flikar, bokmärken och surfhistorik. - - Rena, organiserade flikar - - Rensa bort röran med förbättrad layout och flikar som stängs automatiskt. - - Senaste sökningar - - - Återbesök dina senaste sökningar från din startsida och flikar. - - - Din personliga Firefox-startsida gör det nu lättare att fortsätta där du slutade. Hitta dina senaste flikar, bokmärken och sökresultat. + + Denna gång, sök med: + Möt din personliga startsida. Senaste flikar, bokmärken och sökresultat kommer att visas här. - Välkommen till ett oberoende internet - Välkommen till ett mer personligt internet Mer färger. Bättre integritet. Samma åtagande att sätta människor före vinster. - Byt från telefon till laptop och tillbaka - Att växla mellan skärmar är enklare än någonsin Fortsätt där du slutade med flikar från andra enheter, nu på din startsida. @@ -363,6 +339,14 @@ Lägg till genväg för privat surfning Endast HTTPS-läge + + + Reducering av kakbanner + + Minska kakbanners + + Firefox försöker automatiskt avvisa kak-förfrågningar på kak-banners. Om ett avvisningsalternativ inte är tillgängligt kan Firefox acceptera alla kakor för att ta bort bannern. + Försöker automatiskt ansluta till webbplatser med HTTPS-krypteringsprotokollet för ökad säkerhet. @@ -1263,34 +1247,21 @@ Grupp borttagen - - Välkommen till %s! Välkommen till ett bättre internet En webbläsare byggd för människor, inte för vinster. - - Synkronisera Firefox mellan enheter Fortsätt där du slutade - - Ta med bokmärken, historik och lösenord till %1$s på den här enheten. Synkronisera flikar och lösenord mellan enheter för smidig skärmväxling. - - Registrera dig Logga in Synkronisering är på - - Alltid med integritet Integritetsskydd som standard - - %1$s hindrar automatiskt företag från att i hemlighet följa dig på nätet. Totalt skydd mot kakor hindrar spårare från att använda kakor för att förfölja dig mellan webbplatser. @@ -1303,18 +1274,11 @@ Blockerar fler spårare så att sidor laddas snabbare, men vissa sidor kanske inte fungerar ordentligt. Välj plats för verktygsfältet - - Placera verktygsfältet inom räckhåll. Ha den på botten eller flytta den till toppen. Behåll den på botten eller flytta den till toppen. - - Din integritet Du kontrollerar din data - - Vi har utformat %s för att ge dig kontroll över vad du delar online och vad du delar med oss. Firefox ger dig kontroll över vad du delar online och vad du delar med oss. diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index 8ff51d1ad..c38e8a74a 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -1385,6 +1385,12 @@ Reklama tarmoqlari va analitik kompaniyalar koʻplab saytlarda brauzer maʼlumotlarini yigʻish uchun foydalanadigan cookie fayllarni bloklaydi. + + “Toʻliq cookie himoyasi” cookie fayllarni siz kirgan saytdan izolyatsiya qiladi, shuning uchun reklama tarmoqlari kabi kuzatuvchilar saytlarda sizni kuzatib borish uchun foydalana olmaydi. + + Kriptomaynerlar + + Raqamli valyutani yaratish uchun zararli skriptlarning qurilmangizga kirishiga yoʻl qoʻymaydi. Raqamli imzo yigʻuvchilar @@ -1597,6 +1603,8 @@ Kartani oʻchirish + + Haqiqatan ham bu kredit kartani oʻchirib tashlamoqchimisiz? Oʻchirish @@ -1698,6 +1706,22 @@ Qidiruv tizimi nomini kiriting + + Qidiruv qatorini kiriting + + Qidiruv qatorining Namuna formatiga mos kelishini tekshiring + + + “%s”ga ulanishda xatolik yuz berdi + + %s yaratildi + + + %s saqlandi + + + %s oʻchirildi + Ruxsat berish uchun: @@ -1707,6 +1731,14 @@ %1$sYONIQ ustiga bosing]]> + + Ulanish xavfsiz + + Ulanish xavfsiz emas + + Cookie va sayt maʼlumotlarini tozalash + + %s saytining barcha cookie fayllari va maʼlumotlarini oʻchirib tashlashni istaysizmi?]]> Barcha saytlarga berilgan barcha ruxsatlarni olib tashlashni xoxhlaysizmi? @@ -1717,6 +1749,10 @@ Hech qanday sayt istisnolarisiz Bu xatchoʻpni oʻchirishni xohlaysizmi? + + Yorliqlarga qoʻshish + + Yorliqlardan olib tashlash Tekshiruvchi: %1$s @@ -1728,6 +1764,8 @@ Bu loginni oʻchirishni xohlaysizmi? Oʻchirish + + Bekor qilish Login parametrlari @@ -1741,8 +1779,14 @@ Oʻzgarishlarni loginga saqlash Tahrirlash + + Yangi login qoʻshish Parol kiritish kerak + + Foydalanuvchi nomi kerak + + Host nomi kerak Ovozli qidiruv @@ -1750,6 +1794,13 @@ Shu nomdagi login oldindan bor + + https://www.example.com + + Veb manzilda "https://" yoki "http://" boʻlishi kerak + + Host nomi xatosiz kiritilishi kerak + Boshqa qurilmani ulash @@ -1764,6 +1815,16 @@ Sinxronlash uchun hisobingizga kiring + + Ochiq varaqlar yoʻq + + Sinxronlangan yorliqlar guruhini kengaytirish + + Sinxronlangan yorliqlar guruhini yigʻish + + + + Yorliqlar chekloviga yetdi OK, tushundim From 6a4cfe67771b2d147132bda1b033696ca8fd36f7 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 22 Nov 2022 15:02:34 +0000 Subject: [PATCH 073/218] Update to Android-Components 109.0.20221122143037. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index e6cf81c66..7f009c033 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221121201219" + const val VERSION = "109.0.20221122143037" } From eb9df51de6942462d9515b2fbc548aa97b2a05fd Mon Sep 17 00:00:00 2001 From: PrashantSaroj Date: Sun, 20 Nov 2022 18:30:27 +0530 Subject: [PATCH 074/218] Closes #27290 - Refactor DefaultLoadBitmapUseCase to receive orientation and files directory as argument --- .../fenix/wallpapers/WallpapersUseCases.kt | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt index 4d32e9e2a..56e33cbeb 100644 --- a/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt +++ b/app/src/main/java/org/mozilla/fenix/wallpapers/WallpapersUseCases.kt @@ -76,7 +76,10 @@ class WallpapersUseCases( } val loadBitmap: LoadBitmapUseCase by lazy { if (FeatureFlags.wallpaperV2Enabled) { - DefaultLoadBitmapUseCase(context) + DefaultLoadBitmapUseCase( + filesDir = context.filesDir, + getOrientation = { context.resources.configuration.orientation }, + ) } else { LegacyLoadBitmapUseCase(context) } @@ -372,17 +375,19 @@ class WallpapersUseCases( } @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - internal class DefaultLoadBitmapUseCase(private val context: Context) : LoadBitmapUseCase { + internal class DefaultLoadBitmapUseCase( + private val filesDir: File, + private val getOrientation: () -> Int, + ) : LoadBitmapUseCase { override suspend fun invoke(wallpaper: Wallpaper): Bitmap? = - loadWallpaperFromDisk(context, wallpaper) + loadWallpaperFromDisk(wallpaper) private suspend fun loadWallpaperFromDisk( - context: Context, wallpaper: Wallpaper, ): Bitmap? = Result.runCatching { - val path = wallpaper.getLocalPathFromContext(context) + val path = wallpaper.getLocalPathFromContext() withContext(Dispatchers.IO) { - val file = File(context.filesDir, path) + val file = File(filesDir, path) BitmapFactory.decodeStream(file.inputStream()) } }.getOrNull() @@ -391,8 +396,8 @@ class WallpapersUseCases( * Get the expected local path on disk for a wallpaper. This will differ depending * on orientation and app theme. */ - private fun Wallpaper.getLocalPathFromContext(context: Context): String { - val orientation = if (context.isLandscape()) { + private fun Wallpaper.getLocalPathFromContext(): String { + val orientation = if (isLandscape()) { Wallpaper.ImageType.Landscape } else { Wallpaper.ImageType.Portrait @@ -400,8 +405,8 @@ class WallpapersUseCases( return Wallpaper.getLocalPath(name, orientation) } - private fun Context.isLandscape(): Boolean { - return resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + private fun isLandscape(): Boolean { + return getOrientation() == Configuration.ORIENTATION_LANDSCAPE } } From 0631941e17ee0348b36da6ab0df084eb9419bc75 Mon Sep 17 00:00:00 2001 From: Jocelyne Date: Mon, 21 Nov 2022 14:49:34 +0100 Subject: [PATCH 075/218] Closes #27288: Remove glean test rule and Android test runner from WallpaperUseCasesTest --- .../mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt b/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt index d8beb224b..04f78957b 100644 --- a/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt +++ b/app/src/test/java/org/mozilla/fenix/wallpapers/WallpapersUseCasesTest.kt @@ -1,6 +1,5 @@ package org.mozilla.fenix.wallpapers -import androidx.test.ext.junit.runners.AndroidJUnit4 import io.mockk.Runs import io.mockk.coEvery import io.mockk.coVerify @@ -12,16 +11,12 @@ import io.mockk.slot import io.mockk.spyk import io.mockk.verify import kotlinx.coroutines.test.runTest -import mozilla.components.service.glean.testing.GleanTestRule import mozilla.components.support.test.libstate.ext.waitUntilIdle -import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before -import org.junit.Rule import org.junit.Test -import org.junit.runner.RunWith import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.utils.Settings @@ -34,12 +29,8 @@ import java.io.File import java.util.* import kotlin.random.Random -@RunWith(AndroidJUnit4::class) class WallpapersUseCasesTest { - @get:Rule - val gleanTestRule = GleanTestRule(testContext) - // initialize this once, so it can be shared throughout tests private val baseFakeDate = Date() private val fakeCalendar = Calendar.getInstance() From 03ca41b0a8821b33e3f7a5e47c6de05f162aea5d Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Wed, 23 Nov 2022 01:30:37 +0100 Subject: [PATCH 076/218] Import l10n. (#27954) --- app/src/main/res/values-co/strings.xml | 6 +- app/src/main/res/values-de/strings.xml | 60 ++++---------------- app/src/main/res/values-es-rCL/strings.xml | 60 ++++---------------- app/src/main/res/values-es-rMX/strings.xml | 60 ++++---------------- app/src/main/res/values-fi/strings.xml | 59 ++++--------------- app/src/main/res/values-gn/strings.xml | 61 +++++--------------- app/src/main/res/values-iw/strings.xml | 55 +++--------------- app/src/main/res/values-kk/strings.xml | 13 ++++- app/src/main/res/values-nn-rNO/strings.xml | 56 ++---------------- app/src/main/res/values-su/strings.xml | 52 ++--------------- app/src/main/res/values-tg/strings.xml | 13 ++++- app/src/main/res/values-th/strings.xml | 66 ++++++---------------- app/src/main/res/values-tr/strings.xml | 60 ++++---------------- app/src/main/res/values-uk/strings.xml | 60 ++++---------------- app/src/main/res/values-uz/strings.xml | 6 +- app/src/main/res/values-vi/strings.xml | 59 ++++--------------- app/src/main/res/values-zh-rTW/strings.xml | 59 ++++--------------- 17 files changed, 177 insertions(+), 628 deletions(-) diff --git a/app/src/main/res/values-co/strings.xml b/app/src/main/res/values-co/strings.xml index bd21d8a10..ea06928ca 100644 --- a/app/src/main/res/values-co/strings.xml +++ b/app/src/main/res/values-co/strings.xml @@ -258,7 +258,10 @@ Preferenze di ricerca - Sta volta, ricercà cù : + Sta volta, ricercà cù : + + + Sta volta, ricercà cù : @@ -334,6 +337,7 @@ Aghjunghje un accurtatoghju per a navigazione privata Modu solu HTTPS + Tentativu autumaticu di cunnessione à i siti impieghendu u protocollu di cifratura HTTPS per aumentà a sicurità. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 365383723..b77ef9e76 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -47,9 +47,6 @@ Ausgewählt - - Neueste Lesezeichen - Kürzlich gespeichert @@ -264,40 +261,19 @@ Sucheinstellungen - Dieses Mal suchen: + Dieses Mal suchen: - - - Was ist neu in %1$s - - Es ist jetzt einfacher, dort weiterzumachen, wo Sie aufgehört haben. - - Personalisierte %1$s-Startseite - - Wechseln Sie zu Ihren geöffneten Tabs, Lesezeichen und Ihrer Surf-Chronik. - - Übersichtliche, organisierte Tabs - - Dank verbessertem Layout und automatisch schließenden Tabs ist Schluss mit Unordnung. - - Letzte Suchanfragen - - Rufen Sie Ihre letzten Suchanfragen von Ihrer Startseite und Ihren Tabs aus erneut auf. - - - Ihre personalisierte Firefox-Startseite macht es jetzt einfacher, dort weiterzumachen, wo Sie aufgehört haben. Finden Sie Ihre letzten Tabs, Lesezeichen und Suchergebnisse. + + Dieses Mal suchen in: + Lernen Sie Ihre personalisierte Startseite kennen. Hier werden zuletzt verwendete Tabs, Lesezeichen und Suchergebnisse angezeigt. - Willkommen in einem unabhängigen Internet - Willkommen in einem persönlicheren Internet Mehr Farben. Bessere Privatsphäre. Gleiches Engagement für Menschen über Gewinne. - Wechseln Sie vom Handy zum Laptop und zurück - Das Wechseln zwischen Bildschirmen ist einfacher als je zuvor Machen Sie da weiter, wo Sie aufgehört haben – ab sofort finden Sie Tabs von anderen Geräten auf Ihrer Startseite. @@ -364,6 +340,14 @@ Verknüpfung zum privaten Modus hinzufügen Nur-HTTPS-Modus + + + Reduzierung von Cookie-Bannern + + Cookie-Banner reduzieren + + Firefox versucht automatisch, Cookie-Anfragen auf Cookie-Bannern abzulehnen. Wenn keine Ablehnungsoption verfügbar ist, akzeptiert Firefox möglicherweise alle Cookies, um das Banner zu schließen. + Automatisch versuchen, eine Verbindung zu Websites herzustellen, die das HTTPS-Verschlüsselungsprotokoll verwenden, um die Sicherheit zu erhöhen. @@ -1284,33 +1268,20 @@ Gruppe gelöscht - - Willkommen bei %s! Willkommen in einem besseren Internet Ein Browser für Menschen, nicht für Profit. - - Synchronisieren Sie Firefox zwischen Geräten Machen Sie da weiter, wo Sie aufgehört haben - - Übertragen Sie Lesezeichen, Chronik und Passwörter zu %1$s auf diesem Gerät. Synchronisieren Sie Tabs und Passwörter geräteübergreifend für einen nahtlosen Bildschirmwechsel. - - Registrieren Anmelden Sync ist aktiviert - - Privatsphäre ab Werk Privatsphäre-Schutz als Standard - - %1$s verhindert automatisch, dass Unternehmen heimlich Ihre Aktivitäten im Internet verfolgen. Mit vollständigem Cookie-Schutz, um Tracker daran zu hindern, Cookies zu verwenden, um Sie über Websites hinweg zu verfolgen. @@ -1323,17 +1294,10 @@ Blockiert weitere Elemente zur Aktivitätenverfolgung, sodass Seiten schneller geladen werden, aber einige Seiten funktionieren dann eventuell nicht richtig. Wählen Sie die Position für Ihre Symbolleiste - - Platzieren Sie die Symbolleiste in Reichweite. Behalten Sie sie unten oder verschieben Sie sie nach oben. Unten lassen oder nach oben verschieben. - - Ihre Privatsphäre Sie kontrollieren Ihre Daten - - Wir haben %s so konzipiert, dass Sie die Kontrolle darüber haben, was Sie im Internet und was Sie mit uns teilen. Firefox gibt Ihnen die Kontrolle darüber, was Sie im Internet preisgeben und was Sie mit uns teilen. diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 8e043e6e6..54a62a914 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -45,8 +45,6 @@ - Marcadores recientes - Guardados recientemente Mostrar todos los marcadores guardados @@ -257,40 +255,19 @@ Buscar ajustes - Esta vez buscar: + Esta vez buscar: - - - Qué hay de nuevo en %1$s - - Ahora es más fácil retomar desde donde quedaste. - - Página de inicio personalizada de %1$s - - Salta a tus pestañas abiertas, marcadores e historial de navegación. - - Pestañas limpias y organizadas - - Elimina el desorden de pestañas con un diseño mejorado y pestañas con cierre automático. - - Búsquedas recientes - - Revise tus últimas búsquedas desde tu página de inicio y pestañas. - - - Tu página de inicio personalizada de Firefox ahora hace que sea mucho más fácil continuar desde donde quedaste. Encuentra tus pestañas, marcadores y resultados de búsqueda recientes. + + Esta vez buscar en: + Conoce tu página de inicio personalizada. Las pestañas recientes, marcadores y resultados de búsqueda aparecerán aquí. - Te damos la bienvenida a un internet independiente - Te damos la bienvenida a un internet más personal Más colores. Mejor privacidad. Mismo compromiso con las personas por encima de los beneficios. - Salta del teléfono al computador y viceversa - Cambiar de pantalla es más fácil que nunca Continua donde lo dejaste con pestañas de otros dispositivos ahora en tu página de inicio. @@ -356,6 +333,14 @@ Añadir acceso directo a la navegación privada Modo solo HTTPS + + + Reducción de banner de cookies + + Reducir los banners de cookies + + Firefox intenta rechazar automáticamente las solicitudes de cookies en los banners de cookies. Si una opción de rechazo no está disponible, Firefox podría aceptar todas las cookies para cerrar el banner. + Intenta conectarse automáticamente a sitios utilizando el protocolo de cifrado HTTPS para mayor seguridad. @@ -1245,34 +1230,20 @@ Grupo eliminado - - ¡Te damos la bienvenida a %s! - Te damos la bienvenida a un mejor internet Un navegador desarrollado para las personas, no para lucrar. - - Sincroniza Firefox entre dispositivos Continúa donde quedaste - - Trae marcadores, historial y contraseñas a %1$s en este dispositivo. Sincroniza pestañas y contraseñas entre dispositivos para cambiar de pantalla de forma fluida. - - Registrarse Conectarse Sincronización activada - - Privacidad siempre activa Protección de privacidad por defecto - - %1$s automáticamente detiene a las compañías que te siguen en secreto por la web. Incluye la protección total contra cookies para evitar que los rastreadores usen cookies para seguirte entre sitios. @@ -1285,18 +1256,11 @@ Bloquea más rastreadores para que las páginas se carguen más rápido, pero algunas funcionalidades de la página pueden fallar. Elige la ubicación de la barra de herramientas - - Coloca la barra de herramientas al alcance de la mano. Mantenla en la parte inferior o muévela hacia arriba. Mantenla en la parte inferior o muévela a la parte superior. - - Tu privacidad Tu controlas tus datos - - Hemos diseñado %s para darte el control sobre lo que compartes en línea y lo que compartes con nosotros. Firefox te da control sobre lo que compartes en línea y lo que compartes con nosotros. diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 9d7b79217..9e757e1a2 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -45,8 +45,6 @@ - Marcadores recientes - Guardado recientemente Mostrar todos los marcadores guardados @@ -257,41 +255,19 @@ Ajustes de búsqueda - Busca esta vez: + Busca esta vez: - - - Qué hay de nuevo en %1$s - - Ahora es más fácil continuar donde lo dejaste. - - Página de inicio de %1$s personalizada - - Salta a tus pestañas abiertas, marcadores e historial de navegación. - - Pestañas limpias y organizadas - - Elimina el desorden de pestañas con un diseño mejorado y cierre automático. - - Búsquedas recientes - - - Revisa tus últimas búsquedas desde tú página de inicio y pestañas. - - - Tú página de inicio personalizada de Firefox ahora hace que sea más fácil continuar donde lo dejaste. Encuentra tus pestañas, marcadores y resultados de búsqueda recientes. + + Esta vez buscar en: + Conoce tu página de inicio personalizada. Las pestañas recientes, marcadores y resultados de búsqueda aparecerán aquí. - Te damos la bienvenida a un internet independiente - Te damos la bienvenida a un internet más personal Más colores. Mejor privacidad. Mismo compromiso con las personas por encima de los beneficios. - Cambia del teléfono a la computadora y viceversa - Cambiar de pantalla es más fácil que nunca Continuar donde lo dejaste con pestañas de otros dispositivos ahora en tu página de inicio. @@ -358,6 +334,14 @@ Agregar acceso directo a navegación privada Modo solo HTTPS + + + Reducción de banner de cookies + + Reducir banners de cookies + + Firefox intenta rechazar automáticamente las solicitudes de cookies en los banners de cookies. Si una opción de rechazo no está disponible, Firefox puede aceptar todas las cookies para descartar el banner. + Intentar conectarse automáticamente a sitios que utilizan el protocolo de encriptación HTTPS para mayor seguridad. @@ -1248,33 +1232,20 @@ Grupo eliminado - - ¡Te damos la bienvenida a %s! Te damos la bienvenida a un mejor internet Un navegador creado para las personas, no para las ganancias. - - Sincronizar Firefox entre dispositivos Continúa donde lo dejaste - - Lleva marcadores, historial y contraseñas a %1$s en este dispositivo. Sincroniza pestañas y contraseñas entre dispositivos para cambiar de pantalla sin problemas. - - Registrarse Iniciar sesión Sync está activado - - Privacidad siempre activada Protección a tu privacidad de forma predeterminada - - %1$s automáticamente detiene compañías que secretamente te siguen en la web. Cuenta con protección total de cookies para evitar que los rastreadores las usen para espiarte cuando navegues. @@ -1288,18 +1259,11 @@ Bloquea más rastreadores para que las páginas se carguen más rápido, pero pueden fallar algunas funcionalidades de la página. Escoge la posición de la barra de herramientas - - Coloca la barra de herramientas al alcance de la mano. Mantenla en la parte inferior o muévela hacia arriba. Manténlo en la parte inferior o muévelo a la parte superior. - - Tu privacidad Tu controlas tus datos - - Hemos diseñado %s para darte el control sobre lo que compartes en línea y lo que compartes con nosotros. Firefox te da control sobre lo que compartes en línea y lo que compartes con nosotros. diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index c4184acd2..8f0de323d 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -47,8 +47,6 @@ - Viimeisimmät kirjanmerkit - Äskettäin tallennettu Näytä kaikki tallennetut kirjanmerkit @@ -263,40 +261,19 @@ Hakuasetukset - Tällä kertaa hae: + Tällä kertaa hae: - - - Mitä uutta %1$s sisältää - - Nyt on aiempaa helpompaa jatkaa siitä, mihin jäit. - - Personoitu %1$s-kotisivu - - Siirry avoimiin välilehtiisi, kirjanmerkkeihisi ja selaushistoriaasi. - - Siistit, järjestetyt välilehdet - - Estä välilehtien sotku parannetulla asettelulla ja automaattisesti sulkeutuvilla välilehdillä. - - Viimeisimmät haut - - Palaa viimeisimpiin hakuihin etusivultasi ja välilehdiltäsi. - - - Sinulle mukautetun Firefox-kotisivun avulla on helpompi jatkaa siitä, mihin jäit. Löydä viimeisimmät välilehdet, kirjanmerkit ja hakutulokset. + + Tällä kertaa hae: + Tutustu henkilökohtaiseen kotisivuusi. Viimeisimmät välilehdet, kirjanmerkit ja hakutulokset näkyvät tässä. - Tervetuloa itsenäiseen internetiin - Tervetuloa entistä henkilökohtaisempaan internetiin Lisää värejä. Parempi yksityisyys. Ihmisiin sitoutumisen priorisointi liikevoittojen edelle. - Hyppää puhelimelta kannettavalle tietokoneelle ja takaisin - Näyttöjen vaihtaminen on helpompaa kuin koskaan Jatka siitä, mihin jäit muiden laitteidesi välilehdillä. @@ -364,6 +341,14 @@ Lisää yksityisen selauksen pikakuvake Vain HTTPS -tila + + + Evästeilmoitusten vähennys + + Vähennä evästeisiin liittyviä ilmoituksia + + Firefox yrittää automaattisesti hylätä evästeilmoituksissa olevat evästepyynnöt. Jos hylkäysvaihtoehto ei ole käytettävissä, Firefox voi hyväksyä kaikki evästeet ilmoituksen poistamiseksi näkyvistä. + Yrittää muodostaa automaattisesti yhteyden sivustoihin käyttämällä salattua HTTPS-protokollaa turvallisuuden parantamiseksi. @@ -1266,33 +1251,20 @@ Ryhmä poistettu - - Tervetuloa %siin! Tervetuloa parempaan internetiin Selain, joka on tehty ihmisiä, ei tuottoa, varten. - - Synkronoi Firefox laitteidesi välillä Jatka siitä mihin jäit - - Tuo kirjanmerkit, historia ja salasanat %1$siin tässä laitteessa. Synkronoi välilehdet ja salasanat eri laitteiden välillä, jotta laitteen vaihtaminen on saumatonta. - - Rekisteröidy Kirjaudu sisään Sync on käytössä - - Yksityisyys aina päällä Yksityisyyden suoja oletuksena - - %1$s estää automaattisesti yrityksiä seuraamasta sinua salaa ympäri verkkoa. Totaalinen evästesuoja estää seuraimia käyttämästä evästeitä vaanimiseen sivustojen välillä. @@ -1305,17 +1277,10 @@ Estää enemmän seuraimia, joten sivut latautuvat nopeammin, mutta jotkin sivujen toiminnot saattavat rikkoutua. Valitse työkalupalkin sijoitus - - Sijoita työkalupalkki helposti ulottuville. Pidä se alhaalla tai siirrä se ylös. Pidä se alhaalla tai siirrä se ylös. - - Yksityisyytesi Sinä hallitset tietojasi - - Olemme suunnitelleet %sin siten, että voit hallita mitä jaat verkossa ja mitä jaat kanssamme. Firefoxin avulla voit hallita, mitä jaat verkossa ja mitä jaat kanssamme. diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml index 149fc64bc..980355dc6 100644 --- a/app/src/main/res/values-gn/strings.xml +++ b/app/src/main/res/values-gn/strings.xml @@ -47,8 +47,6 @@ - Techaukaha ramoguáva - Oñeñongaturamóva Ehechaukapaite techaukaha ñongatupyre @@ -261,41 +259,19 @@ Mba’epytyvõrã jeheka - Eheka peteĩjey: + Eheka peteĩjey: - - - %1$s mba’epyahu - - Ko’ág̃a ndahasyive eku’ejeývo eheja haguégui. - - %1$s kuatiarogue ñepyrũgua mboavapyre - - Eike ne rendayke ijurujáva, techaukaha ha tembiasakue rembiasakue. - - Tendayke hesakã ha hendaporãva - - Emboguete tendayke oĩvaipáva oikoporãvéva ndive ha oñembotýva ha’eño. - - Ojeheka ramóva - - - Ehecha eheka ramovéva kuatiarogue ñepyrũ ha tendayke guive. - - - Nde kuatiarogue ñepyrũgua mboavapyre Firefox pegua nombohasyive eñepyrũjeývo eheja haguégui. Ejuhu ne rendayke, techaukaha ha ehekaramovéva. + + Ko’ág̃a eheka amo: + Ehecha nde kuatiarogue ñepyrũha. Umi tendayke ramovegua, techaukaha ha jeheka rapykuere oĩta ápe. - Eg̃uahẽporãite ñanduti ijeheguívape - Eg̃uahẽporãite ñanduti mba’eguáva Sa’yve. Tekorosãve. Roykekove tapichakuérape roma’ẽ’ỹre virúre. - Eva pumbyrýgui mohendahápe ha ambueháicha - Mba’erechaha ñemoambue ndahasyiete Eku’ejey eheja haguégui tendayke ambue mba’e’oka ndive nde kuatiarogue ñepyrũme. @@ -361,6 +337,15 @@ Embojuaju jeike pya’eha tendayke ñemiguáre HTTPS ayvúpe añoite + + + Kookie Banner Ñemomichĩ + + Emomichĩ kookie banner + + + Firefox omboykese ijehegui kookie mba’ejerure kookie banner ndive. Ndaipóriramo emboykekuaa hag̃ua, Firefox omoneĩkuaa opaite kookie omboyke hag̃ua pe banner. + Eñeha’ã eike hag̃ua tendakuérape eipurúvo pe taperekoite HTTPS ipapapýva tekorosãverã. @@ -1271,33 +1256,20 @@ Aty mboguepyre - - ¡Eg̃uahẽporãite %s-pe! Eg̃uahẽporãite ñanduti iporãvévape Kundahára heñóiva tapichápe g̃uarã, ndaha’éi virurã. - - Embojuehe Firefox mba’e’oka pa’ũme Eku’ejey eheja haguégui - - Egueru techaukaha, tembiasakue ha ñe’ẽñemi %1$s-pe ko mba’e’okápe. Embojuehe tendayke ha ñe’ẽñemi mba’e’oka pa’ũme emoambue hag̃ua mba’erechaha oso’ỹre. - - Eñemboheraguapy Eñepyrũ tembiapo Sync oñemyandýma - - Tekoñemi hendymeme Omo’ã ñemigua ijeheguiete - - %1$s ojoko ijehegui umi atyguasúpe ani ohapykueho ñanduti rupive kañyhápe. Ñemo’ãmbaite kookie rovake omboyke tapykuehohápe oipurúvo kookie nde rapykueho hag̃ua ñandutípe. @@ -1310,18 +1282,11 @@ Ejoko tapykuehoha kuatiarogue henyhẽ pya’évape g̃uarã, hákatu ojavykuaáva peteĩva kuatiarogue rembiapoite. Eiporavo tembipuru renda oĩha - - Emoĩ tembipuru renda nde ykére. Eguereko yvy gotyo, térã emongu’e yvate gotyo. Ereko yvy gotyo térã emogu’e yvate gotyo. - - Ne ñemigua Ehechameme ne mba’ekuaarã - - Rojapo %s eñangareko hag̃ua emoherakuãva ñandutípe rehe ha emoherakuãva orendive avei. Firefox ome’ẽ ndéve pokatu emoherakuãva ñandutípe rehe ha emoherakuãva orendive avei. diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index d53d17b6f..515fad4dd 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -46,8 +46,6 @@ - סימניות אחרונות - נשמרו לאחרונה הצגת כל הסימניות השמורות @@ -257,41 +255,19 @@ הגדרות חיפוש - הפעם לחפש את: + הפעם לחפש את: - - - מה חדש ב־%1$s - - עכשיו קל יותר לחזור למקום שבו הפסקת. - - מסך בית מותאם אישית של %1$s - - ניתן לעבור ללשוניות הפתוחות שלך, לסימניות ולהיסטוריית הגלישה שלך. - - לשוניות נקיות ומאורגנות - - ניקוי עומס הלשוניות עם פריסה משופרת ואפשרות לסגירה אוטומטית של לשוניות. - - חיפושים אחרונים - - - ניתן לבקר שוב בחיפושים האחרונים שלך ממסך הבית והלשוניות שלך. - - - כעת קל יותר להמשיך מהמקום שבו הפסקת, במסך הבית של Firefox המותאם אישית שלך. ניתן למצוא את הלשוניות האחרונות, הסימניות ותוצאות החיפוש שלך. + + הפעם לחפש ב: + הכירו את דף הבית המותאם אישית שלכם. לשוניות אחרונות, סימניות ותוצאות חיפוש יופיעו כאן. - ברוכים הבאים לאינטרנט עצמאי - ברוכים הבאים לאינטרנט אישי יותר יותר צבעים. פרטיות טובה יותר. אותה המחויבות לאנשים על פני רווחים. - לקפוץ מהטלפון למחשב הנייד ובחזרה - מעבר בין מסכים קל מאי פעם אפשר להמשיך מאיפה שעצרת עם לשוניות ממכשירים אחרים בעמוד הבית שלך. @@ -357,6 +333,7 @@ הוספת קיצור דרך לגלישה פרטית מצב HTTPS בלבד + מנסה להתחבר באופן אוטומטי לאתרים באמצעות פרוטוקול ההצפנה HTTPS לצורך אבטחה מוגברת. @@ -1241,33 +1218,20 @@ הקבוצה נמחקה - - ברוכים הבאים אל %s! ברוכים הבאים לאינטרנט טוב יותר דפדפן שנבנה לטובת בני אדם, לא למטרות רווח. - - סנכרון Firefox בין מכשירים להמשיך מאיפה שהפסקת - - משיכת הסימניות, ההיסטוריה והססמאות ל־%1$s במכשיר הזה. סנכרון לשוניות וססמאות בין מכשירים למעבר חלק בין מסכים. - - הרשמה כניסה הסנכרון פעיל - - פרטיות תמיד מופעלת הגנה על הפרטיות כברירת מחדל - - ‏%1$s מונע באופן אוטומטי מחברות לעקוב אחריך בסתר ברחבי הרשת. הגנת עוגיות מלאה מונעת מרכיבי מעקב להשתמש בעוגיות כדי לעקוב אחריך בין אתרים. @@ -1280,18 +1244,11 @@ חוסם יותר רכיבי מעקב כדי שדפים ייטענו מהר יותר, אך ייתכן שפונקציונליות בדפים מסויימים לא תעבוד. בחירת מיקום סרגל הכלים שלך - - לשים את סרגל הכלים בהישג יד. ניתן להשאיר אותו בתחתית, או להעביר אותו למעלה. אפשר להשאיר אותו למטה, או להזיז אותו למעלה. - - הפרטיות שלך הנתונים שלך בשליטתך - - עיצבנו את %s כדי להעניק לך שליטה במה שמעניין אותך לשתף ברשת ומה שמעניין אותך לשתף איתנו. ‏Firefox מעניק לך שליטה במה שמעניין אותך לשתף ברשת ומה שמעניין אותך לשתף איתנו. @@ -1952,4 +1909,6 @@ להרחיב לפתוח קישור כדי ללמוד עוד על אוסף זה + + לקרוא את המאמר diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index a6842b9c6..5d5d0f3b5 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -253,7 +253,10 @@ Іздеу баптаулары - Бұл жолы іздеу: + Бұл жолы іздеу: + + + Бұл жолы келесі жерде іздеу: @@ -328,6 +331,14 @@ Жеке шолу жарлығын қосу Тек-HTTPS режимі + + + Cookie баннерлерін азайту + + Cookie баннерлерін азайту + + Firefox cookie баннерлеріндегі cookie сұрауларын автоматты түрде қабылдамау әрекетін жасайды. Қабылдамау опциясы қол жетімді болмаса, Firefox баннерді жабу үшін барлық cookie файлдарын қабылдауы мүмкін. + Қауіпсіздікті арттыру үшін сайттарға HTTPS шифрлеу хаттамасын пайдаланып автоматты түрде қосылу әрекетін жасайды. diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index 73ae6b433..50b362350 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -49,8 +49,6 @@ - Nylege bokmerke - Nyleg lagra Vis alle lagra bokmerke @@ -261,42 +259,16 @@ Søkjeinnstillingar - Søk denne gongen med: + Søk denne gongen med: - - Kva er nytt i %1$s - - Det er no enklare å fortsetje der du slutta. - - - Tilpassa %1$s-startside - - Gå til dei opne fanene, bokmerka og nettlesarhistorikken. - - Reine, organiserte faner - - Fjern rot i fanene med forbetra layout og faner som automatisk lèt seg att. - - Nylege søk - - - Gå tilbake til dei siste søka dine frå startsida og fanene. - - - Den personlege Firefox-startsida di gjer det no lettare å fortsetje der du slutta. Finn dei siste fanene, bokmerka og søkjeresultata. - Møt den personlege heimesida di. Nylege faner, bokmerke og søkjeresultat vert viste her. - Velkomen til eit uavhengig internett - Velkomen til eit meir personleg internett Fleire fargar. Betre personvern. Same forplikting til menneske over forteneste. - Byt frå telefonen til datamaskina og tilbake - Det er enklare enn nokon gong g å byte skjerm Hald fram der du slapp med faner frå andre einingar - no på startsida di. @@ -363,6 +335,7 @@ Legg til snarveg for privat nettlesing Berre HTTPS-modus + Prøver automatisk å kople til nettstadar ved hjelp av HTTPS-krypteringsprotokollen for auka sikkerheit. @@ -1262,36 +1235,22 @@ Gruppe sletta - - Velkomen til %s! - Velkomen til eit betre internett Ein nettlesar bygd for personar, ikkje profitt. - - Synkroniser Firefox mellom einingar Hald fram der du slutta - - Ta med bokmerke, historikk og passord til %1$s på denne eininga. Synkroniser faner og passord på tvers av einingar for saumlaus byte av skjerm. - - Registrer deg Logg inn Synkronisering er på - - Alltid med personvern Personvernsikring som standard - - %1$s stoppar selskap automatisk frå å spore aktivitetane dine på nettet i det skjulte. Totalt vern mot infokapslar stoppar sporarar frå å bruke infokapslar til å forfølgje deg på tvers av nettstadar. @@ -1304,17 +1263,10 @@ Blokkerer fleire sporings-mekanismar. Sider vert leste inn raskare, men enkelte sider fungerer kanskje ikkje. Vel plassering for verktøylinja - - Plassere verktøylinja innanfor rekkjevidde. Ha henne i botn eller topp. Behald i botnen, eller flytt til toppen. - - Ditt personvern Du kontrollerer dine data - - Vi har utvikla %s for å gi deg kontroll over det du deler på nettet og kva du deler med oss. Firefox gir deg kontroll over kva du deler på nettet og kva du deler med oss. @@ -1985,4 +1937,6 @@ fald ut opne lenka for å lære meir om denne samlinga - + + les artikkelen + diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index 8a8ffdc78..cf5b30472 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -46,8 +46,6 @@ - Markah anyar - Anyar diteundeun Témbongkeun sadaya markah anu diteundeun @@ -258,40 +256,19 @@ Setélan pamaluruhan - Ayeuna paluruh: + Ayeuna paluruh: - - - Nu anyar di %1$s - - Ayeuna leuwih babari nyokot cadangan nalika anjeun ninggalkeun. - - Tepas %1$s pribadi - - Luncat ka tab muka, markah, jeung jujutan ngalanglang. - - Tab beresih tur rapih - - Singkahan tabrakan tab ku tata perenah anu leuwih hadé tur tab oto-nutup. - - Anyar nyungsi - - Anjangan deui sungsian panungtung ti tepas tab. - - - Tepas Firefox pribadi kiwari mantuan anjeun nyokot ti anu ditinggalkeun. Néangan tab anu can lila, markah, jeung hasil nyungsi. + + Saayeunaeun paluruh di: + Nepangkeun kaca tepas pribadi anjeun. Tab mutahir, markah, jeung hasil maluruh bakal némbongan di dieu. - Wilujeng sumping di internét mandiri - Wilujeng sumping di internét anu leuwih pribadi Leuwih warnaan. Pripasi leuwih hadé. Komitmen anu sarua pikeun jalma batan bati. - Luncat tina telepon ka laptop jeung sabalikna - Ngagilirkeun layar leuwih babari ti nu atos-atos Buka ti panungtung anu ditinggalkeun maké tab ti séjén parabot ayeuna dina kaca tepas. @@ -357,6 +334,7 @@ Tambahan tarabas nyungsi nyamuni Mode HTTPS-Hungkul + Otomatis nyoba nyambung ka loka maké protokol énkripsi HTTPS pikeun ngaronjatkeun kaamanan. @@ -1261,34 +1239,21 @@ Grup dihapus - - Wilujeng sumping di %s! Wilujeng sumping di internét anu leuwih hadé Panyungsi anu diwangun pikeun jalma, lain bati. - - Singkronkeun Firefox sakur parabot Angkut di tempat nu ku anjeun tinggalkeun - - Bawa markah, jujutan, jeung kecap sandi ka %1$s di ieu parabot. Singkronkeun tab jeung kecap sandi dina sadaya paranti pikeun pindah layar anu mulus. - - Daptar Asup Singkronna hurung - - Pripasi salawasna Salindung pripasi sacara baku - - %1$s otomatis megat maskapé rerencepan nunutur anjeun ngalanglang raramat. Miturkeun Total Cookie Protection pikeun ngeureunkeun palacak tina maké réréméh pikeun ngintip anjeun meuntas loka. @@ -1301,17 +1266,10 @@ Meungpeuk palacak leuwih loba sangkan kaca dimuat leuwih gancang, tapi sababaraha fungsionalitas dina kaca bisa gagal. Pilih perenah tulbar anjeun - - Perenahkeun tulbar sangkan babari kahontal. Teundeun di handap, atawa pindahkeun ka punclut. Angger di handap, atawa pindahkeun ka luhur. - - Salindungan anjeun Anjeun ngadalikeun data anjeun - - Kami geus ngarancang %s sangkan anjeun bisa ngatur naon anu dibagikeun onlén jeung naon anu dibagikeun ka kami. Firefox ngatur sangkan anjeun bisa nangtukeun naon anu dibagikeun onlén jeung naon anu dibagikeun ka kami. diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml index 206ade659..d8cc026fc 100644 --- a/app/src/main/res/values-tg/strings.xml +++ b/app/src/main/res/values-tg/strings.xml @@ -258,7 +258,10 @@ Танзимоти ҷустуҷӯ - Ҷустуҷӯи ин дафъа: + Ҷустуҷӯ дар ин дафъа: + + + Ҷустуҷӯ дар ин дафъа дар: @@ -333,6 +336,14 @@ Илова кардани миёнбури тамошокунии хусусӣ Реҷаи «Танҳо HTTPS» + + + Маҳдудкунии баннери куки + + Маҳдуд кардани баннерҳои куки + + Браузери «Firefox» кӯшиш мекунад, ки дархостҳои кукиро дар баннерҳои куки ба таври худкор рад кунад. Агар имкони радкунӣ дастнорас аст, «Firefox» метавонад барои қатъ кардани баннер ҳамаи кукиҳоро қабул кунад. + Ба таври худкор кӯшиш мекунад, ки ба сомонаҳо бо истифода аз протоколи рамзгузории HTTPS барои баланд бардоштани амният пайваст шавад. diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 5a1138c7d..e24b18df1 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -44,9 +44,6 @@ เลือกแล้ว - - ที่คั่นหน้าล่าสุด - บันทึกไว้ล่าสุด @@ -257,41 +254,16 @@ ตั้งค่าการค้นหา - ครั้งนี้ค้นหา: + ครั้งนี้ค้นหา: - - มีอะไรใหม่ใน %1$s - - คุณสามารถกลับมาดูหน้าเว็บที่คุณดูค้างไว้ได้ง่ายขึ้นแล้ว - - หน้าแรกของ %1$s ที่ปรับแต่งแบบส่วนตัว - - ข้ามไปยังแท็บที่เปิดอยู่ ที่คั่นหน้า และประวัติการเรียกดู - - แท็บที่สะอาดและเป็นระเบียบ - - ขจัดความยุ่งเหยิงของแท็บด้วยเลย์เอาต์ที่ได้รับการปรับปรุงและแท็บที่ปิดอัตโนมัติ - - ผลค้นหาล่าสุด - - - เยี่ยมชมการค้นหาล่าสุดของคุณใหม่จากหน้าแรกและแท็บของคุณ - - - ขณะนี้หน้าแรกของ Firefox ที่ปรับแต่งแบบคุณได้รับการปรับปรุงให้คุณสามารถกลับมาดูหน้าเว็บที่คุณดูค้างไว้ได้ง่ายขึ้นแล้ว ค้นหาแท็บ ที่คั่นหน้า และผลการค้นหาล่าสุดของคุณ - พบกับโฮมเพจส่วนบุคคลของคุณ แท็บล่าสุด ที่คั่นหน้า และผลการค้นหาจะปรากฏที่นี่ - ยินดีต้อนรับสู่อินเทอร์เน็ตที่เป็นอิสระ - ยินดีต้อนรับสู่อินเทอร์เน็ตที่เป็นส่วนตัวมากขึ้น สีสันที่มากขึ้น ความเป็นส่วนตัวที่ดีขึ้น ให้ความมุ่งมั่นกับผู้คนมากกว่าผลกำไร - สับเปลี่ยนไปมาระหว่างโทรศัพท์กับแล็ปท็อป - สลับหน้าจอง่ายกว่าที่เคย เรียกดูต่อจากที่คุณค้างไว้ด้วยแท็บจากอุปกรณ์อื่นๆ บนหน้าแรกของคุณได้แล้วตอนนี้ @@ -358,6 +330,7 @@ เพิ่มทางลัดการเรียกดูแบบส่วนตัว โหมด HTTPS-Only + พยายามเชื่อมต่อกับเว็บไซต์โดยใช้โปรโตคอลการเข้ารหัส HTTPS โดยอัตโนมัติเพื่อเพิ่มความปลอดภัย @@ -500,6 +473,10 @@ เวลาจำกัด + + คอลเลกชันเสียงแห่งอิสระใหม่ %s + + คอลเลกชันเสียงแห่งอิสระใหม่ ลองเลือกสีสันที่คุณชอบ @@ -649,6 +626,9 @@ ต้องการเปิด %d แท็บหรือไม่? + + การเปิดแท็บจำนวนมากนี้อาจทำให้ %s ช้าลงขณะที่หน้ากำลังโหลด คุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อ? แท็บที่เปิด @@ -1242,31 +1222,22 @@ ลบกลุ่มแล้ว - - ยินดีต้อนรับสู่ %s! ยินดีต้อนรับสู่อินเทอร์เน็ตที่ดีกว่า เบราว์เซอร์ที่สร้างขึ้นสำหรับผู้คนเท่านั้น ไม่ใช่ผลกำไร - - ซิงค์ Firefox ระหว่างอุปกรณ์ หยิบจากที่ที่คุณทำค้างไว้ - - นำที่คั่นหน้า ประวัติ และรหัสผ่านไปยัง %1$s บนอุปกรณ์นี้ - - ลงทะเบียน + + ซิงค์แท็บและรหัสผ่านระหว่างอุปกรณ์เพื่อการสลับหน้าจอที่ราบรื่น เข้าสู่ระบบ Sync เปิดอยู่ - - ความเป็นส่วนตัวตลอดเวลา การปกป้องความเป็นส่วนตัวตามค่าเริ่มต้น - - %1$s จะหยุดบริษัทต่าง ๆ ไม่ให้ติดตามคุณอย่างลับ ๆ ขณะที่คุณท่องเว็บโดยอัตโนมัติ + + มีการป้องกันคุกกี้ทั้งหมดเพื่อหยุดตัวติดตามไม่ให้ใช้คุกกี้ตามรอยคุณในไซต์ต่าง ๆ มาตรฐาน (ค่าเริ่มต้น) @@ -1277,17 +1248,12 @@ ปิดกั้นตัวติดตามเพิ่มเติมเพื่อให้โหลดหน้าเว็บได้เร็วขึ้น แต่การทำงานบางอย่างในหน้าเว็บอาจพัง เลือกตำแหน่งแถบเครื่องมือของคุณ - - วางแถบเครื่องมือไว้ใกล้ ๆ เก็บไว้ที่ด้านล่างหรือย้ายไปด้านบน เก็บไว้ด้านล่างหรือย้ายไปด้านบน - - ความเป็นส่วนตัวของคุณ คุณควบคุมข้อมูลของคุณ - - เราได้ออกแบบ %s เพื่อให้คุณสามารถควบคุมสิ่งที่คุณต้องการแบ่งปันออนไลน์และสิ่งที่คุณต้องการแบ่งปันกับเราได้ + + Firefox ให้คุณควบคุมสิ่งที่คุณแบ่งปันทางออนไลน์และสิ่งที่คุณแบ่งปันกับเรา อ่านประกาศความเป็นส่วนตัวของเรา @@ -1946,6 +1912,8 @@ ยุบ ขยาย + + เปิดลิงก์เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับคอลเลกชันนี้ อ่านบทความ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 3c210cf00..f5d6f42f9 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -46,8 +46,6 @@ - Son yer imleri - Son kaydedilenler Tüm kayıtlı yer imlerini göster @@ -259,41 +257,19 @@ Arama ayarları - Bununla ara: + Bununla ara: - - - %1$s tarayıcınızdaki yenilikler - - Kaldığınız yerden devam etmek artık daha kolay. - - Size özel %1$s giriş sayfası - - Açık sekmelerinizi, yer imlerinizi ve gezinti geçmişinizi görün. - - Düzenli sekmeler - - Yeni sekme düzeni ve kendiliğinden kapanan sekmelerle karmaşayı ortadan kaldırın. - - Son aramalar - - - Son aramalarınıza giriş sayfasından ve sekmelerden tekrar ulaşın. - - - Kişisel Firefox giriş sayfanız, kaldığınız yerden devam etmeyi kolaylaştırıyor. Son sekmeleriniz, yer imleriniz ve arama sonuçlarınız artık giriş sayfanızda. + + Bununla ara: + Size özel giriş sayfanızla tanışın. Son sekmeleriniz, yer imleriniz ve arama sonuçlarınız burada görünecek. - Bağımsız bir internete hoş geldiniz - Daha kişisel bir internete hoş geldiniz Daha renkli. Daha gizli. Para için değil, insanlık için. - Telefondan bilgisayara, bilgisayardan telefona geçin - Cihazdan cihaza geçmek artık daha kolay Diğer cihazlardaki sekmeleriniz artık giriş sayfanızda. @@ -359,6 +335,14 @@ Gizli gezinti kısayolu ekle Yalnızca HTTPS modu + + + Çerez duyurularını azalt + + Çerez duyurularını azalt + + Firefox, çerez duyurularındaki çerez isteklerini otomatik olarak reddetmeye çalışır. Reddetme seçeneği mevcut değilse Firefox, duyuruyu kapatmak için tüm çerezleri kabul edebilir. + Daha fazla güvenlik için sitelere otomatik olarak HTTPS şifreleme protokolüyle bağlanmaya çalışır. @@ -1252,33 +1236,20 @@ Grup silindi - - %s’a hoş geldiniz! Daha iyi bir internete hoş geldiniz Para için değil, insanlık için geliştirilen bir tarayıcı. - - Firefox’u cihazlar arasında eşitleyin Kaldığınız yerden devam edin - - Yer imlerinizi, geçmişinizi ve parolalarınız bu cihazdaki %1$s tarayıcınıza taşıyın. Cihazlarınız arasında sorunsuz geçiş için sekmelerinizi ve parolalarınızı senkronize edin. - - Kaydol Giriş yap Sync açık - - Sürekli gizlilik Gizlilik koruması hep açık - - %1$s şirketlerin sizi web’de gizlice takip etmesini otomatik olarak engeller. Komple çerez koruması, takip kodlarının sizi web’de takip etmek için çerezleri kullanmasını engeller. @@ -1291,17 +1262,10 @@ Sayfaların daha hızlı yüklenmesi için daha fazla takipçiyi engeller ancak bazı sayfa işlevleri bozulabilir. Araç çubuğu konumunu seçin - - Araç çubuğunu kolayca erişilebileceğiniz bir yere koyun. Altta tutabilir veya en üste taşıyabilirsiniz. Altta tutun veya en üste taşıyın. - - Gizliliğiniz Verilerinizin kontrolü sizde - - %s, internette başkalarıyla ve bizimle neleri paylaşacağınızın kontrolünü size verir. Firefox, internette başkalarıyla ve bizimle neleri paylaşacağınızın kontrolünü size verir. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 80fb85d9a..1b1580486 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -45,8 +45,6 @@ - Останні закладки - Недавно збережені Показати всі збережені закладки @@ -260,40 +258,19 @@ Налаштування пошуку - Шукати за допомогою: + Шукати за допомогою: - - - Що нового у %1$s - - Тепер легше повернутися туди, де ви зупинилися. - - Персоналізована сторінка домівки %1$s - - Переходьте до відкритих вкладок, закладок та історії перегляду. - - Чисті, упорядковані вкладки - - Приберіть безлад у вкладках із вдосконаленим виглядом та автозакриттям вкладок. - - Недавні пошуки - - Перегляньте останні пошукові запити зі своєї сторінки домівки та вкладок. - - - Відтепер ваша персоналізована сторінка домівки Firefox полегшує продовження роботи з місця, де ви зупинилися. Знайдіть останні вкладки, закладки та результати пошуку. + + Шукати в: + Зустрічайте свою персоналізовану домівку. Тут з’являтимуться останні вкладки, закладки та результати пошуку. - Вітаємо у незалежному інтернеті - Вітаємо у персоналізованому інтернеті Більше кольорів. Краща приватність. Та ж сама відданість людям, а не прибутку. - Перемикайтеся між телефоном і комп’ютером - Перемикати екрани стало простіше, ніж будь-коли Продовжуйте з того ж місця, де зупинилися, завдяки вкладкам з інших пристроїв, які відтепер доступні на вашій домашній сторінці. @@ -360,6 +337,14 @@ Додати ярлик приватного перегляду HTTPS-режим + + + Зменшення кількості банерів кук + + Зменшити кількість банерів кук + + Firefox автоматично намагається відхилити банери запитів на розміщення кук. Якщо параметр відхилення недоступний, Firefox може погодитися розмістити всі куки, щоб закрити банер. + Намагатися автоматично доступатися до сайтів за допомогою протоколу шифрування HTTPS для поліпшення безпеки. @@ -1256,35 +1241,21 @@ Групу видалено - - Вітаємо в %s! - Ласкаво просимо до кращого інтернету Браузер, створений для людей, а не для прибутку. - - Синхронізуйте Firefox між пристроями Продовжуйте звідти, де зупинилися - - Перенесіть свої закладки, історію та паролі у %1$s на цьому пристрої. Синхронізуйте вкладки та паролі на всіх пристроях для плавного перемикання між ними. - - Зареєструватись Увійти Синхронізація увімкнена - - Постійна приватність Типовий захист приватності - - %1$s автоматично блокує таємне стеження компаній за вами в інтернеті. Функція повний захист кук не дає змогу елементам стеження переслідувати вас на різних сайтах за допомогою кук. @@ -1297,19 +1268,12 @@ Блокує більше стеження, тому сторінки завантажуються швидше, однак можливі порушення їх роботи. Оберіть розташування панелі інструментів - - Розташуйте панель для легкого доступу. Тримайте її внизу, або перемістіть вгору. Залиште її внизу або перемістіть угору. - - Ваша приватність Ви контролюєте свої дані - - Ми створили %s, щоб надати вам контроль над тим, чим ви ділитесь в Інтернеті та з нами. Firefox надає вам контроль над тим, чим ви ділитесь в інтернеті та з нами. diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index c38e8a74a..4a162f1a2 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -255,7 +255,10 @@ Izlash sozlamalari - Bu safar qidiramiz: + Bu safar qidiramiz: + + + Bu safar quyidagi bilan qidiramiz: @@ -329,6 +332,7 @@ Maxfiy koʻrish tezkor buyrugʻini qoʻshish Faqat HTTPS rejimi + Xavfsizlikni oshirish uchun HTTPS shifrlash protokoli yordamida saytlarga avtomatik ulanishga harakat qiladi. diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index e7093e96a..1aaa8f352 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -46,8 +46,6 @@ - Dấu trang gần đây - Đã lưu gần đây Hiển thị tất cả các dấu trang đã lưu @@ -257,40 +255,19 @@ Cài đặt tìm kiếm - Lần này tìm kiếm: + Lần này tìm kiếm: - - - Có gì mới trong %1$s - - Giờ đây, việc tiếp tục nơi bạn đã dừng lại sẽ trở nên dễ dàng hơn. - - Trang chủ %1$s được cá nhân hóa - - Chuyển đến các thẻ đang mở, dấu trang và lịch sử duyệt web của bạn. - - Các thẻ gọn gàng, có tổ chức - - Xóa các thẻ lộn xộn với bố cục được cải thiện và tự động đóng các thẻ. - - Tìm kiếm gần đây - - Xem lại các tìm kiếm mới nhất của bạn từ trang chủ và các thẻ của bạn. - - - Trang chủ Firefox được cá nhân hóa của bạn giờ đây giúp bạn tiếp tục lại nơi bạn đã dừng lại dễ dàng hơn. Tìm các thẻ, dấu trang và kết quả tìm kiếm gần đây của bạn. + + Lần này tìm kiếm trong: + Gặp gỡ trang chủ được cá nhân hóa của bạn. Các thẻ, dấu trang và kết quả tìm kiếm gần đây sẽ xuất hiện ở đây. - Chào mừng bạn đến với internet độc lập - Chào mừng bạn đến với một Internet cá nhân hơn Màu sắc mới. Riêng tư hơn. Cùng cam kết với mọi người vì lợi nhuận. - Chuyển từ điện thoại sang máy tính xách tay và ngược lại - Chuyển đổi màn hình dễ dàng hơn bao giờ hết Tiếp tục nơi bạn đã dừng lại với các thẻ từ các thiết bị khác ngay bây giờ trên trang chủ của bạn. @@ -356,6 +333,14 @@ Thêm lối tắt duyệt web riêng tư Chế độ chỉ HTTPS + + + Giảm biểu ngữ cookie + + Giảm biểu ngữ cookie + + Firefox tự động cố gắng từ chối yêu cầu cookie trên biểu ngữ cookie. Nếu không có tùy chọn từ chối, Firefox có thể chấp nhận tất cả cookie để loại bỏ biểu ngữ. + Tự động cố gắng kết nối với các trang web bằng giao thức mã hóa HTTPS để tăng cường bảo mật. @@ -1241,33 +1226,20 @@ Đã xóa nhóm - - Chào mừng đến với %s! Chào mừng bạn đến với một internet tốt hơn Một trình duyệt được xây dựng cho mọi người, không vì lợi nhuận. - - Đồng bộ hóa Firefox giữa các thiết bị Tiếp tục trang mà bạn vừa rời khỏi - - Mang dấu trang, lịch sử và mật khẩu vào %1$s trên thiết bị này. Đồng bộ hóa các thẻ và mật khẩu trên các thiết bị để chuyển đổi màn hình liền mạch. - - Đăng ký Đăng nhập Đồng bộ hóa được bật - - Luôn bảo vệ quyền riêng tư Bảo vệ quyền riêng tư theo mặc định - - %1$s tự động ngăn các công ty bí mật theo dõi bạn trên web. Trình chống cookie chung ngăn trình theo dõi sử dụng cookie để theo dõi bạn trên các trang web. @@ -1280,17 +1252,10 @@ Chặn nhiều trình theo dõi hơn để các trang tải nhanh hơn, nhưng một số trên trang có thể bị hỏng về mặt chức năng. Chọn vị trí thanh công cụ của bạn - - Đặt thanh công cụ trong tầm với. Giữ nó ở dưới cùng hoặc di chuyển nó lên trên cùng. Giữ nó ở dưới cùng hoặc di chuyển nó lên trên cùng. - - Quyền riêng tư của bạn Bạn kiểm soát dữ liệu của mình - - Chúng tôi đã thiết kế %s để cung cấp cho bạn quyền kiểm soát những gì bạn chia sẻ trực tuyến và những gì bạn chia sẻ với chúng tôi. Firefox cho phép bạn kiểm soát những gì bạn chia sẻ trực tuyến và những gì bạn chia sẻ với chúng tôi. diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index cfea67939..218f74937 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -49,8 +49,6 @@ - 最近加入的書籤 - 最近儲存 顯示所有儲存書籤 @@ -262,40 +260,19 @@ 搜尋設定 - 這次搜尋使用: + 這次搜尋使用: - - - %1$s 有什麼新鮮事 - - 更簡單就能回到上次中斷的地方繼續上網。 - - 個人化的 %1$s 首頁 - - 跳到您開啟的分頁、書籤、上網紀錄等。 - - 精簡有條理的分頁標籤 - - 透過改善過的版面設計與自動關閉閒置分頁功能,解決分頁雜亂的問題。 - - 最近搜尋內容 - - 從首頁與分頁快速重新造訪先前的搜尋結果。 - - - 現在起,有您的風格的 Firefox 首頁,可讓您更簡單就從上次結束瀏覽的地方繼續上網。快速找到您最近開啟的分頁、書籤、搜尋結果等分頁。 + + 這次搜尋: + 了解您的個人化首頁。這裡將顯示最近開啟過的分頁、書籤、搜尋結果。 - 歡迎來到一個更加獨立的網路環境 - 歡迎使用更加個人化的網頁瀏覽器 更多色彩、更加保護您的隱私,依然承諾把人們看得比利益更重要。 - 在手機與筆電間快速切換 - 切換畫面變得更容易 現在起,直接從首頁就可以繼續瀏覽其他裝置上開啟的分頁。 @@ -362,6 +339,14 @@ 新增隱私瀏覽模式捷徑 純 HTTPS 模式 + + + 減少 Cookie 橫幅 + + 減少 Cookie 橫幅 + + Firefox 會自動嘗試為您點擊 Cookie 橫幅上的「拒絕」按鈕。若網站未提供拒絕選向,可能還是會接受所有 Cookie 來讓橫幅消失。 + 自動嘗試使用加密過的 HTTPS 通訊協定連線到網站,以增加安全性。 @@ -1282,34 +1267,21 @@ 已刪除群組 - - 歡迎使用 %s! 歡迎來到更好的網路環境 一套為人們,而不為利益打造的瀏覽器。 - - 在不同裝置間同步 Firefox 從結束的地方繼續 - - 將 %1$s 上的書籤、瀏覽紀錄、網站密碼帶到此裝置。 在不同裝置間同步分頁、密碼,讓您無縫切換裝置。 - - 註冊 登入 已開啟 Sync - - 隨時都有隱私保護 預設開啟隱私保護 - - %1$s 會自動封鎖讓大企業在網路上偷偷跟蹤您的程式。 「全方位 Cookie 保護」功能可防止追蹤器透過 Cookie 在網路上追蹤您。 @@ -1322,17 +1294,10 @@ 封鎖更多追蹤器,讓網頁可以更快載入,但頁面上的某些功能可能會故障。 挑選工具列要放置的位置 - - 可以將工具列放在畫面底端或頂端,容易操作的地方。 放在畫面底部或頂端都沒問題。 - - 您的隱私權 自行控制自己的資料 - - 我們將 %s 設計成讓您可以完整控制要在網路上分享哪些東西、以及與我們分享哪些東西。 Firefox 讓您可自行控制要在網路上分享哪些東西、以及與我們分享哪些東西。 From 415849f09df2780a92838a57062daf6042079884 Mon Sep 17 00:00:00 2001 From: mcarare Date: Tue, 22 Nov 2022 21:35:27 +0200 Subject: [PATCH 077/218] Use blank string instead of empty string for version name fallback in release variants. App version name cannot be empty or null in SDK 33 PackageInfo. --- buildSrc/src/main/java/Config.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index c07d60078..188f80e42 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -30,8 +30,8 @@ object Config { // Note: release builds must have the `versionName` set. However, the gradle ecosystem makes this hard to // ergonomically validate (sometimes IDEs default to a release variant and mysteriously fail due to the // validation, sometimes devs just need a release build and specifying project properties is annoying in IDEs), - // so instead we'll allow the `versionName` to silently default to an empty string. - return if (project.hasProperty("versionName")) project.property("versionName") as String else "" + // so instead we'll allow the `versionName` to silently default to a blank string. + return if (project.hasProperty("versionName")) project.property("versionName") as String else " " } @JvmStatic From 9bf17f1a6a7eeb84f28198ae9ad454fa01f3354f Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Wed, 23 Nov 2022 06:10:37 -0500 Subject: [PATCH 078/218] Disable cookie banner handling by default. --- .../java/org/mozilla/fenix/settings/CookieBannersFragment.kt | 2 +- app/src/main/java/org/mozilla/fenix/utils/Settings.kt | 2 +- app/src/main/res/values/preference_keys.xml | 2 +- app/src/main/res/xml/cookie_banner_preferences.xml | 4 ++-- nimbus.fml.yaml | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt index d9c5d3beb..56a0d4988 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/CookieBannersFragment.kt @@ -37,7 +37,7 @@ class CookieBannersFragment : PreferenceFragmentCompat() { } private fun setupPreferences() { - requirePreference(R.string.pref_key_cookie_banner).apply { + requirePreference(R.string.pref_key_cookie_banner_v1).apply { onPreferenceChangeListener = object : SharedPreferenceUpdater() { override fun onPreferenceChange( preference: Preference, diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 7f93500a6..578fd0194 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -538,7 +538,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { ) var shouldUseCookieBanner by lazyFeatureFlagPreference( - appContext.getPreferenceKey(R.string.pref_key_cookie_banner), + appContext.getPreferenceKey(R.string.pref_key_cookie_banner_v1), featureFlag = true, default = { cookieBannersSection[CookieBannersSection.FEATURE_SETTING_VALUE] == true }, ) diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index d7f16fc76..fb7297222 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -149,7 +149,7 @@ pref_key_cookie_banner_settings - pref_key_cookie_banner + pref_key_cookie_banner_v1 pref_key_etp_learn_more diff --git a/app/src/main/res/xml/cookie_banner_preferences.xml b/app/src/main/res/xml/cookie_banner_preferences.xml index 4076d31f9..ee77bdade 100644 --- a/app/src/main/res/xml/cookie_banner_preferences.xml +++ b/app/src/main/res/xml/cookie_banner_preferences.xml @@ -3,8 +3,8 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> diff --git a/nimbus.fml.yaml b/nimbus.fml.yaml index 78a5e2ece..2e92cfe8f 100644 --- a/nimbus.fml.yaml +++ b/nimbus.fml.yaml @@ -223,14 +223,14 @@ features: value: { "sections-enabled": { "feature-ui": true, - "feature-setting-value": true, + "feature-setting-value": false, } } - channel: nightly value: { "sections-enabled": { "feature-ui": true, - "feature-setting-value": true, + "feature-setting-value": false, } } unified-search: From bca7ecc7d6d6b46477237948b1c650a9a16b2724 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 23 Nov 2022 15:02:26 +0000 Subject: [PATCH 079/218] Update to Android-Components 109.0.20221123143300. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 7f009c033..4e2028e13 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221122143037" + const val VERSION = "109.0.20221123143300" } From 1fd2bab0545bc085c0b91c7d4f733ae6c76c0770 Mon Sep 17 00:00:00 2001 From: MatthewTighe Date: Mon, 21 Nov 2022 13:18:34 -0800 Subject: [PATCH 080/218] For #27950: add first week days of use growth data --- .../mozilla/fenix/components/metrics/Event.kt | 5 + .../components/metrics/MetricsMiddleware.kt | 1 + .../components/metrics/MetricsStorage.kt | 82 ++++++++++- .../java/org/mozilla/fenix/utils/Settings.kt | 10 ++ app/src/main/res/values/preference_keys.xml | 2 + .../metrics/DefaultMetricsStorageTest.kt | 138 +++++++++++++++++- 6 files changed, 234 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt index a31dfd194..77fedea9a 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Event.kt @@ -31,5 +31,10 @@ sealed class Event { * Event recording the first time a URI is loaded in Firefox in a 24 hour period. */ object FirstUriLoadForDay : GrowthData("ja86ek") + + /** + * Event recording the first time Firefox is used 3 days in a row in the first week of install. + */ + object FirstWeekSeriesActivity : GrowthData("20ay7u") } } diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsMiddleware.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsMiddleware.kt index 5c3374c23..e7d7cf2a1 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsMiddleware.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsMiddleware.kt @@ -24,6 +24,7 @@ class MetricsMiddleware( is AppAction.ResumedMetricsAction -> { metrics.track(Event.GrowthData.SetAsDefault) metrics.track(Event.GrowthData.FirstAppOpenForDay) + metrics.track(Event.GrowthData.FirstWeekSeriesActivity) } else -> Unit } diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt index c8f56491d..f19557f7b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsStorage.kt @@ -12,6 +12,9 @@ import mozilla.components.support.utils.ext.getPackageInfoCompat import org.mozilla.fenix.ext.settings import org.mozilla.fenix.nimbus.FxNimbus import org.mozilla.fenix.utils.Settings +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Locale /** * Interface defining functions around persisted local state for certain metrics. @@ -33,13 +36,20 @@ internal class DefaultMetricsStorage( private val settings: Settings, private val checkDefaultBrowser: () -> Boolean, private val shouldSendGenerally: () -> Boolean = { shouldSendGenerally(context) }, + private val getInstalledTime: () -> Long = { getInstalledTime(context) }, private val dispatcher: CoroutineDispatcher = Dispatchers.IO, ) : MetricsStorage { + + private val dateFormatter = SimpleDateFormat("yyyy-MM-dd", Locale.US) + /** * Checks local state to see whether the [event] should be sent. */ override suspend fun shouldTrack(event: Event): Boolean = withContext(dispatcher) { + // The side-effect of storing days of use needs to happen during the first two days after + // install, which would normally be skipped by shouldSendGenerally. + updateDaysOfUse() shouldSendGenerally() && when (event) { Event.GrowthData.SetAsDefault -> { !settings.setAsDefaultGrowthSent && checkDefaultBrowser() @@ -50,6 +60,9 @@ internal class DefaultMetricsStorage( Event.GrowthData.FirstUriLoadForDay -> { settings.uriLoadGrowthLastSent.hasBeenMoreThanDaySince() } + Event.GrowthData.FirstWeekSeriesActivity -> { + shouldTrackFirstWeekActivity() + } } } @@ -64,21 +77,80 @@ internal class DefaultMetricsStorage( Event.GrowthData.FirstUriLoadForDay -> { settings.uriLoadGrowthLastSent = System.currentTimeMillis() } + Event.GrowthData.FirstWeekSeriesActivity -> { + settings.firstWeekSeriesGrowthSent = true + } + } + } + + private fun updateDaysOfUse() { + val daysOfUse = settings.firstWeekDaysOfUseGrowthData + val currentDate = Calendar.getInstance(Locale.US) + val currentDateString = dateFormatter.format(currentDate.time) + if (currentDate.timeInMillis.withinFirstWeek() && daysOfUse.none { it == currentDateString }) { + settings.firstWeekDaysOfUseGrowthData = daysOfUse + currentDateString } } + private fun shouldTrackFirstWeekActivity(): Boolean = Result.runCatching { + if (!System.currentTimeMillis().withinFirstWeek() || settings.firstWeekSeriesGrowthSent) { + return false + } + + val daysOfUse = settings.firstWeekDaysOfUseGrowthData.map { + dateFormatter.parse(it) + }.sorted() + + // This loop will check whether the existing list of days of use, combined with the + // current date, contains any periods of 3 days of use in a row. + for (idx in daysOfUse.indices) { + if (idx + 1 > daysOfUse.lastIndex || idx + 2 > daysOfUse.lastIndex) { + continue + } + + val referenceDate = daysOfUse[idx]!!.time.toCalendar() + val secondDateEntry = daysOfUse[idx + 1]!!.time.toCalendar() + val thirdDateEntry = daysOfUse[idx + 2]!!.time.toCalendar() + val oneDayAfterReference = referenceDate.createNextDay() + val twoDaysAfterReference = oneDayAfterReference.createNextDay() + + if (oneDayAfterReference == secondDateEntry && thirdDateEntry == twoDaysAfterReference) { + return true + } + } + return false + }.getOrDefault(false) + private fun Long.hasBeenMoreThanDaySince(): Boolean = System.currentTimeMillis() - this > dayMillis + private fun Long.toCalendar(): Calendar = Calendar.getInstance(Locale.US).also { calendar -> + calendar.timeInMillis = this + } + + private fun Long.withinFirstWeek() = this < getInstalledTime() + fullWeekMillis + + private fun Calendar.createNextDay() = (this.clone() as Calendar).also { calendar -> + calendar.add(Calendar.DAY_OF_MONTH, 1) + } + companion object { private const val dayMillis: Long = 1000 * 60 * 60 * 24 private const val windowStartMillis: Long = dayMillis * 2 private const val windowEndMillis: Long = dayMillis * 28 + // Note this is 8 so that recording of FirstWeekSeriesActivity happens throughout the length + // of the 7th day after install + private const val fullWeekMillis: Long = dayMillis * 8 + + /** + * Determines whether events should be tracked based on some general criteria: + * - user has installed as a result of a campaign + * - user is within 2-28 days of install + * - tracking is still enabled through Nimbus + */ fun shouldSendGenerally(context: Context): Boolean { - val installedTime = context.packageManager - .getPackageInfoCompat(context.packageName, 0) - .firstInstallTime + val installedTime = getInstalledTime(context) val timeDifference = System.currentTimeMillis() - installedTime val withinWindow = timeDifference in windowStartMillis..windowEndMillis @@ -86,5 +158,9 @@ internal class DefaultMetricsStorage( FxNimbus.features.growthData.value().enabled && withinWindow } + + fun getInstalledTime(context: Context): Long = context.packageManager + .getPackageInfoCompat(context.packageName, 0) + .firstInstallTime } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 578fd0194..fe406ec6a 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -1444,4 +1444,14 @@ class Settings(private val appContext: Context) : PreferencesHolder { key = appContext.getPreferenceKey(R.string.pref_key_growth_uri_load_last_sent), default = 0, ) + + var firstWeekSeriesGrowthSent by booleanPreference( + key = appContext.getPreferenceKey(R.string.pref_key_growth_first_week_series_sent), + default = false, + ) + + var firstWeekDaysOfUseGrowthData by stringSetPreference( + key = appContext.getPreferenceKey(R.string.pref_key_growth_first_week_days_of_use), + default = setOf(), + ) } diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index fb7297222..d4055aa47 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -316,4 +316,6 @@ pref_key_growth_set_as_default pref_key_growth_last_resumed pref_key_growth_uri_load_last_sent + pref_key_growth_first_week_series_sent + pref_key_growth_first_week_days_of_use diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/DefaultMetricsStorageTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/DefaultMetricsStorageTest.kt index cfcb4b678..4266a4dee 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/DefaultMetricsStorageTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/DefaultMetricsStorageTest.kt @@ -14,13 +14,22 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.mozilla.fenix.utils.Settings +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Locale class DefaultMetricsStorageTest { + private val formatter = SimpleDateFormat("yyyy-MM-dd", Locale.US) + private val calendarStart = Calendar.getInstance(Locale.US) + private val dayMillis: Long = 1000 * 60 * 60 * 24 + private var checkDefaultBrowser = false private val doCheckDefaultBrowser = { checkDefaultBrowser } private var shouldSendGenerally = true private val doShouldSendGenerally = { shouldSendGenerally } + private var installTime = 0L + private val doGetInstallTime = { installTime } private val settings = mockk() @@ -32,7 +41,12 @@ class DefaultMetricsStorageTest { fun setup() { checkDefaultBrowser = false shouldSendGenerally = true - storage = DefaultMetricsStorage(mockk(), settings, doCheckDefaultBrowser, doShouldSendGenerally, dispatcher) + installTime = System.currentTimeMillis() + + every { settings.firstWeekDaysOfUseGrowthData } returns setOf() + every { settings.firstWeekDaysOfUseGrowthData = any() } returns Unit + + storage = DefaultMetricsStorage(mockk(), settings, doCheckDefaultBrowser, doShouldSendGenerally, doGetInstallTime, dispatcher) } @Test @@ -147,4 +161,126 @@ class DefaultMetricsStorageTest { assertTrue(updateSlot.captured > 0) } + + @Test + fun `GIVEN that app has been used for less than 3 days in a row WHEN checked for first week activity THEN event will not be sent`() = runTest(dispatcher) { + val tomorrow = calendarStart.createNextDay() + every { settings.firstWeekDaysOfUseGrowthData = any() } returns Unit + every { settings.firstWeekDaysOfUseGrowthData } returns setOf(calendarStart, tomorrow).toStrings() + every { settings.firstWeekSeriesGrowthSent } returns false + + val result = storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertFalse(result) + } + + @Test + fun `GIVEN that app has only been used for 3 days in a row WHEN checked for first week activity THEN event will be sent`() = runTest(dispatcher) { + val tomorrow = calendarStart.createNextDay() + val thirdDay = tomorrow.createNextDay() + every { settings.firstWeekDaysOfUseGrowthData } returns setOf(calendarStart, tomorrow, thirdDay).toStrings() + every { settings.firstWeekSeriesGrowthSent } returns false + + val result = storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertTrue(result) + } + + @Test + fun `GIVEN that app has been used for 3 days but not consecutively WHEN checked for first week activity THEN event will be not sent`() = runTest(dispatcher) { + val tomorrow = calendarStart.createNextDay() + val fourDaysFromNow = tomorrow.createNextDay().createNextDay() + every { settings.firstWeekDaysOfUseGrowthData = any() } returns Unit + every { settings.firstWeekDaysOfUseGrowthData } returns setOf(calendarStart, tomorrow, fourDaysFromNow).toStrings() + every { settings.firstWeekSeriesGrowthSent } returns false + + val result = storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertFalse(result) + } + + @Test + fun `GIVEN that app has been used for 3 days consecutively but not within first week WHEN checked for first week activity THEN event will be not sent`() = runTest(dispatcher) { + val tomorrow = calendarStart.createNextDay() + val thirdDay = tomorrow.createNextDay() + val installTime9DaysEarlier = calendarStart.timeInMillis - (dayMillis * 9) + every { settings.firstWeekDaysOfUseGrowthData } returns setOf(calendarStart, tomorrow, thirdDay).toStrings() + every { settings.firstWeekSeriesGrowthSent } returns false + installTime = installTime9DaysEarlier + + val result = storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertFalse(result) + } + + @Test + fun `GIVEN that first week activity has already been sent WHEN checked for first week activity THEN event will be not sent`() = runTest(dispatcher) { + val tomorrow = calendarStart.createNextDay() + val thirdDay = tomorrow.createNextDay() + every { settings.firstWeekDaysOfUseGrowthData } returns setOf(calendarStart, tomorrow, thirdDay).toStrings() + every { settings.firstWeekSeriesGrowthSent } returns true + + val result = storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertFalse(result) + } + + @Test + fun `GIVEN that first week activity is not sent WHEN checked to send THEN current day is added to rolling days`() = runTest(dispatcher) { + val captureRolling = slot>() + val previousDay = calendarStart.createPreviousDay() + every { settings.firstWeekDaysOfUseGrowthData } returns setOf(previousDay).toStrings() + every { settings.firstWeekDaysOfUseGrowthData = capture(captureRolling) } returns Unit + every { settings.firstWeekSeriesGrowthSent } returns false + + storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertTrue(captureRolling.captured.contains(formatter.format(calendarStart.time))) + } + + @Test + fun `WHEN first week activity state updated THEN settings updated accordingly`() = runTest(dispatcher) { + val captureSent = slot() + every { settings.firstWeekSeriesGrowthSent } returns false + every { settings.firstWeekSeriesGrowthSent = capture(captureSent) } returns Unit + + storage.updateSentState(Event.GrowthData.FirstWeekSeriesActivity) + + assertTrue(captureSent.captured) + } + + @Test + fun `GIVEN not yet in recording window WHEN checking to track THEN days of use still updated`() = runTest(dispatcher) { + shouldSendGenerally = false + val captureSlot = slot>() + every { settings.firstWeekDaysOfUseGrowthData } returns setOf() + every { settings.firstWeekDaysOfUseGrowthData = capture(captureSlot) } returns Unit + + storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertTrue(captureSlot.captured.isNotEmpty()) + } + + @Test + fun `GIVEN outside first week after install WHEN checking to track THEN days of use is not updated`() = runTest(dispatcher) { + val captureSlot = slot>() + every { settings.firstWeekDaysOfUseGrowthData } returns setOf() + every { settings.firstWeekDaysOfUseGrowthData = capture(captureSlot) } returns Unit + installTime = calendarStart.timeInMillis - (dayMillis * 9) + + storage.shouldTrack(Event.GrowthData.FirstWeekSeriesActivity) + + assertFalse(captureSlot.isCaptured) + } + + private fun Calendar.copy() = clone() as Calendar + private fun Calendar.createNextDay() = copy().apply { + add(Calendar.DAY_OF_MONTH, 1) + } + private fun Calendar.createPreviousDay() = copy().apply { + add(Calendar.DAY_OF_MONTH, -1) + } + private fun Set.toStrings() = map { + formatter.format(it.time) + }.toSet() } From 8eb853db19d3f76bc93cd04ef031d63e20d0bdab Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 23 Nov 2022 19:32:04 +0000 Subject: [PATCH 081/218] Update to Android-Components 109.0.20221123190051. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 4e2028e13..2668d9553 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221123143300" + const val VERSION = "109.0.20221123190051" } From 3847ded1ba3c45f2347b9c24c602da3dcef0217d Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Fri, 18 Nov 2022 16:23:44 -0500 Subject: [PATCH 082/218] Update Sentry to version 6.8.0 --- buildSrc/src/main/java/Dependencies.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 6e56ff141..5c9dd96f3 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -14,7 +14,7 @@ object Versions { const val android_gradle_plugin = "7.3.0" const val android_lint_api = "30.3.0" - const val sentry = "6.6.0" + const val sentry = "6.8.0" const val leakcanary = "2.10" const val osslicenses_plugin = "0.10.4" const val detekt = "1.19.0" From b2ef07bb10ef62beb43529c760ae38e030977119 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Thu, 24 Nov 2022 03:16:08 +0100 Subject: [PATCH 083/218] Import l10n. (#27962) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- app/src/main/res/values-cy/strings.xml | 60 +++++---------------- app/src/main/res/values-es-rAR/strings.xml | 53 ++---------------- app/src/main/res/values-fy-rNL/strings.xml | 6 ++- app/src/main/res/values-lo/strings.xml | 62 +++++----------------- app/src/main/res/values-nb-rNO/strings.xml | 61 +++++---------------- app/src/main/res/values-nl/strings.xml | 13 ++++- app/src/main/res/values-pa-rIN/strings.xml | 58 ++++---------------- app/src/main/res/values-pt-rBR/strings.xml | 61 +++++---------------- app/src/main/res/values-ru/strings.xml | 7 +-- app/src/main/res/values-skr/strings.xml | 61 +++++---------------- 10 files changed, 97 insertions(+), 345 deletions(-) diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index c9a4f5299..1afabdf70 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -46,8 +46,6 @@ - Nodau tudalen diweddar - Cadwyd yn ddiweddar Dangos pob nod tudalen wedi’u cadw @@ -257,40 +255,19 @@ Gosodiadau chwilio - Chwiliad y tro yma: + Chwiliad y tro yma: - - - Beth sy’n newydd yn %1$s - - Mae nawr yn haws ailgychwyn o’r lle y gwnaethoch chi adael. - - Tudalen cartref personoledig %1$s - - Symudwch i’ch tabiau agored, nodau tudalen, a’ch hanes pori. - - Tabiau glân, trefnus - - Cliriwch annibendod tabiau gyda gwell cynllun a thabiau cau awtomatig. - - Chwilio diweddar - - Ailedrych ar eich chwilio diweddaraf o’ch tudalen cartref a’ch tabiau. - - - Mae eich cartref personoledig Firefox bellach yn ei gwneud hi’n haws i fynd yn ôl i le wnaethoch chi adael. Dewch o hyd i’ch tabiau, nodau tudalen a’ch canlyniadau chwilio diweddar. + + Y tro hwn chwiliwch yn: + Dyma’ch gwefan cartref personol. Bydd tabiau diweddar, nodau tudalen, a chanlyniadau chwilio yn ymddangos yma. - Croeso i ryngrwyd annibynnol - Croeso i rhyngrwyd mwy personol Rhagor o liwiau. Gwell preifatrwydd. Yr un ymrwymiad i bobl ac nid elw. - Ewch o’r ffôn i’r gliniadur ac yn ôl - Mae newid sgriniau yn haws nag erioed Ewch ymlaen o’r lle roeddech chi nawr gyda thabiau o ddyfeisiau eraill ar eich tudalen cartref. @@ -356,6 +333,14 @@ Ychwanegu llwybr byr pori preifat Modd HTTPS-yn-Unig + + + Gostyngiad Baner Cwcis + + Lleihau baneri cwcis + + Mae Firefox yn ceisio gwrthod ceisiadau cwcis ar faneri cwcisyn awtomatig. Os nad oes dewis gwrthod ar gael, gall Firefox dderbyn pob cwci er mwyn cau’r faner. + Yn ceisio cysylltu’n awtomatig â gwefannau gan ddefnyddio’r protocol amgryptio HTTPS am fwy o ddiogelwch. @@ -1245,34 +1230,21 @@ Dilëwyd y grŵp - - Croeso i %s! Croeso i rhyngrwyd gwell Porwr a adeiladwyd ar gyfer pobl, nid elw. - - Cydweddu Firefox rhwng dyfeisiau Parhau lle roeddech o’r blaen - - Dewch â nodau tudalen, hanes, a chyfrineiriau i %1$s ar y ddyfais hon. Cydweddu tabiau a chyfrineiriau ar draws dyfeisiau ar gyfer newid sgriniau di-dor. - - Ymuno Mewngofnodi Mae Sync ymlaen - - Preifatrwydd parhaus Diogelu preifatrwydd drwy ragosodiad - - Mae %1$s yn atal cwmnïau rhag eich dilyn yn gyfrinachol o amgylch y we, yn awtomatig. Yn cynnwys Diogelwch Cwcis Llwyr i atal tracwyr rhag defnyddio cwcis i’ch stelcian ar draws gwefannau. @@ -1285,18 +1257,10 @@ Yn rhwystro mwy o dracwyr fel bod tudalennau’n llwytho’n gyflymach, ond gall dorri rhai swyddogaethau ar y dudalen. Dewiswch leoliad eich bar offer - - Rhowch y bar offer o fewn cyrraedd hawdd. Cadwch ef ar y gwaelod, neu ei symud i’r brig. Ei gadw ar y gwaelod, neu ei symud i’r brig. - - Eich preifatrwydd Chi sy’n rheoli eich data - - Rydym wedi cynllunio %s i roi rheolaeth i chi dros yr hyn rydych chi’n ei rannu ar-lein a’r hyn rydych chi’n ei rannu gyda ni. -     Mae Firefox yn rhoi rheolaeth i chi dros yr hyn rydych chi’n ei rannu ar-lein a’r hyn rydych chi’n ei rannu gyda ni. diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index f696cc864..999c22cf7 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -46,8 +46,6 @@ - Marcadores recientes - Guardados recientemente Mostrar todos los marcadores guardados @@ -262,41 +260,19 @@ Configuración de búsqueda - Esta vez buscá: + Esta vez buscá: - - - ¿Qué hay de nuevo en %1$s? - - Ahora es más fácil continuar donde lo dejaste. - - Página de inicio personalizada de %1$s - - Accedé a tus pestañas abiertas, marcadores y al historial de navegación. - - Pestañas claras y organizadas - - Eliminá el desorden de las pestañas con un diseño mejorado y cierre automático. - - Búsquedas recientes - - - Revisá tus últimas búsquedas desde tu página de inicio y pestañas. - - - Tu página de inicio de Firefox personalizada hace que ahora sea más fácil continuar donde lo habías dejado. Encontrá tus pestañas, marcadores y resultados de búsqueda recientes. + + Esta vez, buscar en: + Conocé tu página de inicio personalizada. Las pestañas recientes, los marcadores y los resultados de búsqueda aparecerán aquí. - Bienvenido a una Internet independiente - Bienvenido a una Internet más personal Más colores. Mejor privacidad. Mismo compromiso con las personas por encima de los beneficios. - - Cambiá de teléfono a computadora y viceversa Cambiar de pantallas es más fácil que nunca @@ -363,6 +339,7 @@ Agregar atajo de navegación privada Modo solo HTTPS + Intenta conectarse automáticamente a sitios usando el protocolo de cifrado HTTPS para mayor seguridad. @@ -1271,33 +1248,20 @@ Grupo eliminado - - ¡Bienvenido a %s! Bienvenido a una Internet mejor Un navegador hecho para la gente, no por el dinero. - - Sincronizar Firefox entre dispositivos Continuá desde donde dejaste - - Traer marcadores, historial y contraseñas a %1$s en este dispositivo. Sincronizá pestañas y contraseñas entre dispositivos para cambiar de pantalla sin problemas. - - Registrate Iniciar sesión La sincronización está activada - - Privacidad siempre activada Protección de privacidad de manera predetermina - - %1$s impide automáticamente que las compañías te sigan en secreto por la web. Incluye Total Cookie Protection para evitar que los rastreadores usen cookies para espiarte entre sitios. @@ -1310,18 +1274,11 @@ Bloquea más rastreadores para que las páginas se carguen más rápido, pero pueden fallar algunas funcionalidades de la página. Elegí la ubicación de la barra de herramientas - - Poné la barra de herramientas a tu alcance. Mantenela abajo, o movela hacia arriba. Mantenela en la parte inferior o movela a la parte superior. - - Tu privacidad Controlás tus datos - - Diseñamos %s para que puedas controlar lo que compartís en línea y lo que compartís con nosotros. Firefox te da el control sobre lo que compartís en línea y lo que compartís con nosotros. diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index f4e43e2d2..ea75d4546 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -258,7 +258,10 @@ Sykynstellingen - Diskear sykje yn: + Diskear sykje yn: + + + Diskear sykje yn: @@ -333,6 +336,7 @@ Fluchkeppeling nei priveenavigaasje tafoegje Allinnich-HTTPS-modus + Probearret foar in bettere befeiliging automatysk mei it HTTPS-fersiferingsprotokol ferbining te meitsjen mei websites. diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index 79d63268e..e0a21156a 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -44,9 +44,6 @@ ເລືອກແລ້ວ - - ບຸກມາກຫລ້າສຸດ - ບັນທຶກຫຼ້າສຸດ @@ -256,42 +253,20 @@ ການຕັ້ງຄ່າການຄົ້ນຫາ - ເວລານີ້ຄົ້ນຫາ: + ເວລານີ້ຄົ້ນຫາ: + + + ເວລານີ້ຄົ້ນຫາໃນ: - - ສິ່ງໃໝ່ໆໃນ %1$s - - ທ່ານສາມາດກັບໄປເບິງຫນ້າເວັບທີ່ທ່ານເບິງຄ້າງໄວ້ໄດ້ງ່າຍຂື້ນແລ້ວ. - - - ປັບແຕ່ງໜ້າຫຼັກ %1$s - - ຂ້າມໄປຫາແທັບທີ່ເປີດຢູ່, ບຸກມມາກ ແລະ ປະຫວັດການທ່ອງເວັບຂອງທ່ານ. - - - ສະອາດ, ແຖບທີ່ມີການຈັດການ - - ລຶບລ້າງຄວາມວຸ້ນວາຍຂອງແຖບດ້ວຍໂຄງຮ່າງທີ່ປັບປຸງດີຂຶ້ນ ແລະແຖບປິດອັດຕະໂນມັດ. - - ການຄົ້ນຫາຫຼ້າສຸດ - - - ເຂົ້າໄປເບິງຄືນຈາກການຄົ້ນຫາຫຼ້າສຸດໄດ້ໃນຫນ້າທຳອິດຂອງທ່ານ. - - ໜ້າຫຼັກ Firefox ທີ່ປັບແຕ່ງເປັນແບບສ່ວນຕົວຂອງທ່ານຕອນນີ້ເຮັດໃຫ້ມັນງ່າຍຂຶ້ນໃນການເລືອກບ່ອນທີ່ທ່ານປະໄວ້. ຊອກຫາແຖບ, ບຸກມາກ ແລະຜົນການຄົ້ນຫາຫຼ້າສຸດຂອງທ່ານ. ພົບກັບໜ້າຫຼັກທີ່ເປັນສ່ວນຕົວຂອງທ່ານ. ແຖບຫຼ້າສຸດ, ບຸກມາກ, ແລະຜົນການຊອກຫາຈະປາກົດຢູ່ບ່ອນນີ້. - - ຍິນດີຕ້ອນຮັບສູ່ອິນເຕີເນັດທີບໍ່ມີຂອບຈຳກັດ ຍິນດີຕ້ອນຮັບສູ່ອິນເຕີເນັດທີມີຄວາມເປັນສ່ວນຕົວສູງ ສີເພີ່ມເຕີມ. ຄວາມເປັນສ່ວນຕົວທີ່ດີກວ່າ. ຄໍາຫມັ້ນສັນຍາດຽວກັນກັບປະຊາຊົນຫຼາຍກວ່າກໍາໄລ. - ເລື່ອນຈາກໂທລະສັບໄປຫາແລັບທັອບ ແລະຫຼັງ - ການສະຫຼັບໜ້າຈໍແມ່ນງ່າຍກວ່າທີ່ເຄີຍ ເລືອກເບິ່ງຕໍ່ຈາກທີທ່ານປະໄວ້ດ້ວຍແຖບຈາກອຸປະກອນອື່ນໆໃນຫນ້າທໍາອິດຂອງທ່ານ. @@ -357,6 +332,14 @@ ເພີ່ມທາງລັດການທ່ອງເວັບແບບສ່ວນຕົວ ໂໝດ HTTPS ເທົ່ານັ້ນ + + + ການຫຼຸດປ້າຍໂຄສະນາຄຸກກີ + + ຫຼຸດປ້າຍໂຄສະນາຄຸກກີ + + Firefox ພະຍາຍາມປະຕິເສດການຮ້ອງຂໍຄຸກກີໃນປ້າຍໂຄສະນາຄຸກກີອັດຕະໂນມັດ. ຖ້າທາງເລືອກການປະຕິເສດບໍ່ສາມາດໃຊ້ໄດ້, Firefox ອາດຈະຍອມຮັບ cookies ທັງຫມົດເພື່ອປິດປ້າຍໂຄສະນາ. + ພະຍາຍາມເຊື່ອມຕໍ່ຫາເວັບໄຊໂດຍອັດຕະໂນມັດໂດຍໃຊ້ໂປຣໂຕຄໍການເຂົ້າລະຫັດ HTTPS ເພື່ອຄວາມປອດໄພທີ່ເພີ່ມຂຶ້ນ. @@ -1267,35 +1250,21 @@ ລຶບກຸ່ມແລ້ວ - - ຍິນດີຕ້ອນຮັບສູ່ %s! - ຍິນດີຕ້ອນຮັບສູ່ອິນເຕີເນັດທີ່ດີກວ່າ ອິນເຕີເນັດສຳລັບທຸກຄົນ, ບໍ່ແມ່ນເພືອຫວັງຜົນກຳໄລ - - Sync Firefox ລະຫວ່າງອຸປະກອນ ຮັບເອົາຈາກບ່ອນທີ່ທ່ານໄດ້ປະເອົາໄວ້. - - ເອົາບຸກມາກ, ປະຫວັດ, ແລະລະຫັດຜ່ານໄປຫາ %1$s ໃນອຸປະກອນນີ້. ຊິ້ງແຖບ ແລະລະຫັດຜ່ານໃນທົ່ວອຸປະກອນສຳລັບການສະຫຼັບໜ້າຈໍແບບບໍ່ມີຮອຍຕໍ່. - - ລົງ​ທະ​ບຽນ ເຂົ້າສູ່ລະບົບ Sync ເປີດຢູ່ - - ຄວາມເປັນສ່ວນຕົວເປີດຕະຫຼອດ ການປົກປ້ອງຄວາມເປັນສ່ວນຕົວຖືກກຳນົດເປັນຄ່າເລີ່ມຕົ້ນ - - %1$s ຈະຢຸດບໍລິສັດບໍ່ໃຫ້ຕິດຕາມທ່ານຢ່າງລັບໆໃນທົ່ວເວັບ. ມີການປົກປ້ອງຄຸກກີທັງໝົດເພື່ອຢຸດຜູ້ຕິດຕາມຈາກການໃຊ້ຄຸກກີເພື່ອຕິດຕາມທ່ານໃນທົ່ວເວັບໄຊ. @@ -1310,17 +1279,10 @@ ປິດກັ້ນຕົວຕິດຕາມຫຼາຍຂຶ້ນເພື່ອໃຫ້ຫນ້າໂຫລດໄວຂຶ້ນ, ແຕ່ບາງຫນ້າທີ່ຢູ່ໃນຫນ້າອາດຈະພັງ. ເລືອກການຈັດວາງແຖບເຄື່ອງມືຂອງທ່ານ - - ວາງແຖບເຄື່ອງມືໃຫ້ເຂົ້າເຖິງໄດ້ງ່າຍ. ຮັກສາມັນຢູ່ລຸ່ມ, ຫຼືຍ້າຍມັນໄປເທິງ. ຮັກສາມັນຢູ່ລຸ່ມ, ຫຼືຍ້າຍມັນໄປເທິງ. - - ຄວາມເປັນສ່ວນຕົວຂອງທ່ານ ທ່ານຄວບຄຸມຂໍ້ມູນຂອງທ່ານ - - ພວກເຮົາໄດ້ອອກແບບ %s ເພື່ອໃຫ້ທ່ານຄວບຄຸມສິ່ງທີ່ທ່ານແບ່ງປັນອອນລາຍ ແລະສິ່ງທີ່ທ່ານແບ່ງປັນກັບພວກເຮົາ. Firefox ໃຫ້ທ່ານຄວບຄຸມສິ່ງທີ່ທ່ານແບ່ງປັນອອນໄລນ໌ ແລະສິ່ງທີ່ທ່ານແບ່ງປັນກັບພວກເຮົາ. diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index b37dfa23f..55d1e0742 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -46,8 +46,6 @@ - Nylige bokmerker - Nylig lagret Vis alle lagrede bokmerker @@ -261,41 +259,19 @@ Søkeinnstillinger - Søk denne gangen med: + Søk denne gangen med: - - - Hva er nytt i %s - - Det er nå lettere å komme tilbake der du sluttet. - - Tilpasset %1$s-startside - - Gå til de åpne fanene, bokmerkene og nettleserhistorikken. - - Rene, organiserte faner - - Fjern rot i fanene med forbedret layout og faner som lukker seg automatisk. - - Nylige søk - - - Gå tilbake til de siste søkene dine fra startsiden og fanene. - - - Din personlige Firefox-startside gjør det nå lettere å fortsette der du sluttet. Finn de siste fanene, bokmerkene og søkeresultatene. + + Søk denne gangen i: + Møt din personlige hjemmeside. Nylige faner, bokmerker og søkeresultater vises her. - Velkommen til et uavhengig internett - Velkommen til et mer personlig internett Flere farger. Bedre personvern. Samme forpliktelse til mennesker over fortjeneste. - Bytt fra telefon til bærbar PC og tilbake - Det er enklere enn noen gang å bytte skjerm Fortsett der du slapp med faner fra andre enheter nå på startsiden din. @@ -360,6 +336,14 @@ Legg til snarvei for privat nettlesing Kun-HTTPS-modus + + + Redusering av infoskapselbanner + + Reduser infoskapselbannere + + Firefox prøver automatisk å avvise infokapselforespørsler på infoskapselbannere. Hvis et avvisningsalternativ ikke er tilgjengelig, kan Firefox godta alle infokapsler for å avvise banneret. + Forsøker automatisk å koble til nettsteder ved hjelp av HTTPS-krypteringsprotokollen for økt sikkerhet. @@ -1254,35 +1238,21 @@ Gruppe slettet - - Velkommen til %s! - Velkommen til et bedre internett En nettleser bygget for mennesker, ikke profitt. - - Synkroniser Firefox mellom enheter Fortsett der du sluttet - - Ta med bokmerker, historikk og passord til %1$s på denne enheten. Synkroniser faner og passord på tvers av enheter for sømløs bytte av skjerm. - - Registrer deg Logg inn Synkroniseringen er på - - Alltid med personvern Personvernsbeskyttelse som standard - - %1$s stopper selskaper automatisk fra å spore aktivitetene dine på nettet i det skjulte. Total beskyttelse mot infokapsler stopper sporere fra å bruke infokapsler for å forfølge deg på tvers av nettsteder. @@ -1297,19 +1267,12 @@ Blokkerer flere sporings-mekanismer. Sider lastes inn raskere, men enkelte sider fungerer kanskje ikke. Velg plassering for verktøylinjen - - Plassere verktøylinjen innenfor rekkevidde. Ha den på bunn eller flytt den til toppen. Behold den på bunnen, eller flytt den til toppen. - - Ditt personvern Du kontrollerer dine data - - Vi har utviklet %s for å gi deg kontroll over det du deler på nettet og hva du deler med oss. Firefox gir deg kontroll over hva du deler på nettet og hva du deler med oss. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 55759feba..a215fcae0 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -263,7 +263,10 @@ Zoekinstellingen - Deze keer zoeken met: + Deze keer zoeken met: + + + Deze keer zoeken in: @@ -338,6 +341,14 @@ Snelkoppeling naar privénavigatie toevoegen Alleen-HTTPS-modus + + + Reductie van cookiebanners + + Cookiebanners reduceren + + Firefox probeert automatisch cookie-aanvragen op cookiebanners te weigeren. Als er geen weigeringsoptie beschikbaar is, accepteert Firefox mogelijk alle cookies om de banner te sluiten. + Probeert voor een betere beveiliging automatisch middels het HTTPS-versleutelingsprotocol verbinding te maken met websites. diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 4fd07c95c..7e34abd99 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -48,8 +48,6 @@ - ਸੱਜਰੇ ਬੁੱਕਮਾਰਕ - ਤਾਜ਼ਾ ਸੰਭਾਲੇ ਸਾਰੇ ਸੰਭਾਲੇ ਬੁੱਕਮਾਰਕਾਂ ਨੂੰ ਵੇਖੋ @@ -265,40 +263,19 @@ ਖੋਜ ਸੈਟਿੰਗਾਂ - ਇਹ ਸਮਾਂ ਖੋਜ: + ਇਹ ਸਮਾਂ ਖੋਜ: - - - %1$s ਵਿੱਚ ਨਵਾਂ ਕੀ ਹੈ - - ਜਿੱਥੇ ਤੁਸੀਂ ਛੱਡ ਕੇ ਗਈ ਸੀ, ਉਥੋਂ ਹੀ ਮੁੜ ਸ਼ੁਰੂ ਕਰਨਾ ਸੌਖਾ ਹੈ। - - ਆਪਣੇ ਮੁਤਾਬਕ ਢਾਲਿਆ %1$s ਦਾ ਮੁੱਖ-ਸਫ਼ਾ - - ਆਪਣੀਆਂ ਖੋਲ੍ਹੀਆ ਟੈਬਾਂ, ਬੁੱਕਮਾਰਕਾਂ ਅਤੇ ਬਰਾਊਜ਼ ਕਰਨ ਦੇ ਅਤੀਤ ਉੱਤੇ ਜਾਓ। - - ਸਾਫ਼, ਸਜਾਈਆਂ ਟੈਬਾਂ - - ਸੁਧਾਰੇ ਖਾਕੇ ਤੇ ਆਪਣੇ-ਬੰਦ ਹੋਣ ਵਾਲੀਆਂ ਟੈਬਾਂ ਨਾਲ ਟੈਬਾਂ ਦੇ ਖਿਲਾਰੇ ਨੂੰ ਸਾਫ਼ ਕਰੋ। - - ਸੱਜਰੀਆਂ ਖੋਜਾਂ - - ਆਪਣੇ ਮੁੱਖ-ਸਫ਼ੇ ਅਤੇ ਟੈਬਾਂ ਤੋਂ ਆਪਣੀਆਂ ਸੱਜਰੀਆਂ ਖੋਜਾਂ ਨੂੰ ਮੁੜ-ਖੋਲ੍ਹੋ। - - - ਤੁਹਾਡੇ ਆਪਣੇ ਬਣਾਏ Firefox ਮੁੱਖ-ਸਫ਼ੇ ਨੇ ਹੁਣ ਜਿੱਥੇ ਤੁਸੀਂ ਛੱਡ ਕੇ ਗਏ ਸੀ, ਉਥੋਂ ਹੀ ਸ਼ੁਰੂ ਕਰਨਾ ਸੌਖਾ ਬਣਾ ਦਿੱਤਾ ਹੈ। ਆਪਣੀਆਂ ਸੱਜਰੀਆਂ ਟੈਬਾਂ, ਬੁੱਕਮਾਰਕ ਅਤੇ ਖੋਜ ਨਤੀਜੇ ਲੱਭੋ। + + ਇਸ ਵਾਰ ਇਸ ਵਿੱਚ ਖੋਜੋ: + ਤੁਹਾਡੇ ਆਪਣੇ ਬਣਾਏ ਮੁੱਖ-ਸਫ਼ੇ ਨੂੰ ਸਮਝੋ। ਸੱਜਰੀਆਂ ਟੈਬਾਂ, ਬੁੱਕਮਾਰਕ ਅਤੇ ਖੋਜ ਨਤੀਜੇ ਇੱਥੇ ਦਿਖਾਈ ਦੇਣਗੇ। - ਆਜ਼ਾਦ ਇੰਟਰਨੈੱਟ ਲਈ ਜੀ ਆਇਆਂ ਨੂੰ - ਵੱਧ ਨਿੱਜੀ ਇੰਟਰਨੈੱਟ ਲਈ ਜੀ ਆਇਆਂ ਨੂੰ ਵੱਧ ਰੰਗ। ਵੱਧ ਪਰਦੇਦਾਰੀ। ਫਾਇਦੇ ਨਾਲੋਂ ਲੋਕਾਂ ਨੂੰ ਪਹਿਲ ਦੇਣ ਦਾ ਉਹੀ ਵਾਅਦਾ। - ਫ਼ੋਨ ਤੋਂ ਲੈਪਟਾਪ ਉੱਤੇ ਜਾਓ ਤੇ ਵਾਪਸ ਆਓ - ਸਕਰੀਨਾਂ ਵਿਚਾਲੇ ਬਦਲਣਾ ਪਹਿਲਾਂ ਤੋਂ ਵੱਧ ਸੌਖਾਲਾ ਹੋਇਆ ਹੋਰ ਡਿਵਾਈਸਾਂ ਤੋਂ ਜਿੱਥੇ ਤੁਸੀਂ ਟੈਬਾਂ ਨੂੰ ਛੱਡਿਆ ਹੈ, ਉਥੋਂ ਹੀ ਹੁਣ ਆਪਣੀ ਮੁੱਖ ਸਕਰੀਨ ਤੋਂ ਲਵੋ। @@ -364,6 +341,12 @@ ਨਿੱਜੀ ਬਰਾਊਜ਼ਿੰਗ ਸ਼ਾਰਟਕੱਟ ਜੋੜੋ ਸਿਰਫ਼-HTTPS ਢੰਗ + + + ਕੂਕੀਜ਼ ਬੈਨਰ ਘਟਾਉਣਾ + + ਕੂਕੀਜ਼ ਬੈਨਰ ਘਟਾਓ + ਵਾਧਾ ਕੀਤੀ ਸੁਰੱਖਿਆ ਲਈ HTTPS ਇੰਕ੍ਰਿਪਸ਼ਨ ਪਰੋਟੋਕਾਲ ਵਰਤ ਕੇ ਸਾਈਟਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਦੀ ਆਪਣੇ-ਆਪ ਕੋਸ਼ਿਸ਼ ਕਰੋ। @@ -1268,34 +1251,21 @@ ਗਰੁੱਪ ਹਟਾਇਆ - - %s ਵਲੋਂ ਜੀ ਆਇਆਂ ਨੂੰ! ਬੇਹਤਰ ਇੰਟਰਨੈੱਟ ਲਈ ਜੀ ਆਇਆਂ ਨੂੰ ਲੋਕਾਂ ਲਈ, ਨਾ ਕਿ ਫਾਇਦੇ ਲਈ ਬਣਾਇਆ ਬਰਾਊਜ਼ਰ। - - ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ Firefox ਸਿੰਕ ਕਰੋ ਜਿੱਥੇ ਤੁਸੀਂ ਛੱਡਿਆ ਸੀ, ਉੱਥੋਂ ਸ਼ੁਰੂ ਕਰੋ - - ਇਸ ਡਿਵਾਈਸ ਉੱਤੇ %1$s ਵਿੱਚ ਬੁੱਕਮਾਰਕ, ਅਤੀਤ ਅਤੇ ਪਾਸਵਰਡ ਲਿਆਓ। ਸਹਿਜ ਨਾਲ ਸਕਰੀਨਾਂ ਬਦਲਣ ਵਾਸਤੇ ਵੱਖ-ਵੱਖ ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ ਟੈਬਾਂ ਤੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਸਿੰਕ ਕਰੋ। - - ਸਾਈਨ ਅੱਪ ਕਰੋ ਸਾਇਨ ਇਨ ਸਿੰਕ ਚਾਲੂ ਹੈ - - ਪਰਦੇਦਾਰੀ ਹਮੇਸ਼ਾਂ ਚਾਲੂ ਮੂਲ ਰੂਪ ਵਿੱਚ ਪਰਦੇਦਾਰੀ ਸੁਰੱਖਿਆ - - ਤੁਹਾਡੇ ਵਲੋਂ ਵੈਬ ਵਰਤਣ ਦੇ ਦੌਰਾਨ ਕੰਪਨੀਆਂ ਨੂੰ ਚੋਰੀ-ਛੁਪੇ ਤੁਹਾਡਾ ਪਿੱਛਾ ਕਰਨ ਤੋਂ %1$s ਆਪਣੇ-ਆਪ ਰੋਕਦਾ ਹੈ। ਪੇਸ਼ ਕੀਤੀ ਪੂਰੀ ਕੂਕੀਜ਼ ਸੁਰੱਖਿਆ ਨਾਲ ਤੁਹਾਡੇ ਵਲੋਂ ਖੋਲ੍ਹੀਆਂ ਸਾਈਟਾਂ ਵਿਚਾਲੇ ਟਰੈਕਰਾਂ ਨੂੰ ਕੂਕੀਜ਼ ਵਰਤਣ ਤੋਂ ਰੋਕੋ। @@ -1308,18 +1278,10 @@ ਹੋਰ ਟਰੈਕਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਸਫ਼ੇ ਤੇਜ਼ੀ ਨਾਲ ਲੋਡ ਹੁੰਦੇ ਹਨ, ਪਰ ਕੁਝ ਸਫ਼ੇ ਸ਼ਾਇਦ ਠੀਕ ਤਰ੍ਹਾਂ ਕੰਮ ਨਾ ਕਰਨ। ਆਪਣੇ ਟੂਲਬਾਰ ਦੀ ਥਾਂ ਚੁਣੋ - - ਸੌਖੀ ਪਹੁੰਚ ਲਈ ਟੂਲਬਾਰ ਨੂੰ ਰੱਖੋ। ਹੇਠਾਂ ਰੱਖੋ ਜਾਂ ਇਸ ਨੂੰ ਉੱਤੇ ਰੱਖੋ। ਇਸ ਨੂੰ ਹੇਠਾਂ ਰੱਕੋ ਜਾਂ ਉੱਤੇ ਲੈ ਜਾਓ। - - ਤੁਹਾਡੀ ਪਰਦੇਦਾਰੀ ਆਪਣੇ ਡਾਟਾ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ - - ਅਸੀਂ %s ਨੂੰ ਇੰਝ ਬਣਾਇਆ ਹੈ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਪੂਰਾ ਕੰਟਰੋਲ ਹੋਵੇ ਕਿ ਤੁਸੀਂ -ਆਨਲਾਈਨ ਕੀ ਸਾਂਝਾ ਕਰਦੇ ਹੋ ਅਤੇ ਸਾਡੇ ਨਾਲ ਕੀ ਸਾਂਝਾ ਕਰਦੇ ਹੋ। Firefox ਤੁਹਾਡੇ ਹੱਥ ਕੰਟਰੋਲ ਦਿੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਆਨਲਾਈਨ ਕੀ ਸਾਂਝਾ ਕਰਨਾ ਹੈ ਅਤੇ ਕੀ ਸਾਡੇ ਨਾਲ ਸਾਂਝਾ ਕਰਨਾ ਹੈ। diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 702f1937f..8e4c95725 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -45,8 +45,6 @@ - Favoritos recentes - Salvo recentemente Mostrar todos os favoritos salvos @@ -259,42 +257,19 @@ Configurações da pesquisa - Desta vez pesquisar: + Desta vez pesquisar: - - - Novidades no %1$s - - Agora é mais fácil continuar de onde você parou. - - Tela inicial personalizada do %1$s - - Vá direto para suas abas abertas, favoritos e histórico de navegação. - - - Abas limpas e organizadas - - - Layout aprimorado e fechamento automático de abas para remover o excesso de abas. - - Pesquisas recentes - - Revisite suas pesquisas recentes feitas na tela inicial e em abas. - - - A tela inicial personalizada do Firefox agora facilita continuar de onde você parou. Encontre suas abas, favoritos e resultados de pesquisa recentes. + + Desta vez, pesquisar em: + Conheça sua tela inicial personalizada. Abas recentes, favoritos e resultados de pesquisa aparecem aqui. - Boas-vindas a uma internet independente - Boas-vindas a uma internet mais pessoal Mais cores. Melhor privacidade. Mesmo compromisso com pessoas acima de lucros. - Alterne entre celular e computador - Mudar de tela está mais fácil do que nunca Continue agora de onde parou, com abas de outros dispositivos na sua tela inicial. @@ -360,6 +335,14 @@ Adicionar atalho para navegação privativa Modo somente HTTPS + + + Redução de avisos de cookies + + Reduzir avisos de cookies + + O Firefox tenta rejeitar automaticamente solicitações de cookies em avisos de cookies. Se não estiver disponível uma opção de rejeição, o Firefox pode aceitar todos os cookies para descartar o aviso. + Tentar se conectar com sites usando automaticamente o protocolo de criptografia HTTPS para maior segurança. @@ -1253,33 +1236,20 @@ Grupo excluído - - Boas-vindas ao %s! Boas-vindas a uma internet melhor Um navegador feito para as pessoas, não para o lucro. - - Sincronize o Firefox entre dispositivos Continue de onde você parou - - Traga favoritos, histórico e senhas para o %1$s neste dispositivo. Sincronize abas e senhas entre dispositivos para mudar facilmente de uma tela para outra. - - Criar uma conta Entrar A sincronização está ativada - - Privacidade sempre ativa Proteção de privacidade por padrão - - O %1$s impede automaticamente que empresas sigam você secretamente pela web. Apresentamos a proteção total contra cookies para impedir que rastreadores usem cookies para te perseguir de um site para outro. @@ -1292,17 +1262,10 @@ Bloqueia mais rastreadores, assim as páginas carregam mais rápido, mas pode atrapalhar algumas funcionalidades de páginas. Escolha a posição da barra de ferramentas - - Facilite o alcance à barra de ferramentas. Mantenha embaixo, ou mova para cima. Mantenha na parte de baixo, ou mova para o alto. - - Sua privacidade Você controla seus dados - - Projetamos o %s para te dar controle sobre o que você compartilha online e o que você compartilha conosco. O Firefox te dá o controle sobre o que você compartilha online e o que compartilha conosco. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index fca4aa7d2..fb290d0b5 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -185,7 +185,7 @@ Библиотека - Вид для компьютеров + Вид для ПК На домашний экран @@ -265,7 +265,7 @@ Настройки поиска - В этот раз искать: + В этот раз искать: @@ -341,6 +341,7 @@ Добавить ярлык приватного просмотра Режим «Только HTTPS» + Автоматически пытаться подключиться к сайтам через протокол шифрования HTTPS для повышения безопасности. @@ -575,7 +576,7 @@ - Синхронизация и сохранение + Синхронизация Войти, чтобы подключиться снова diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml index 48cc94e3f..ed47dce4c 100644 --- a/app/src/main/res/values-skr/strings.xml +++ b/app/src/main/res/values-skr/strings.xml @@ -47,8 +47,6 @@ - حالیہ نشانیاں - حالیہ محفوظ تھیاں سارے محفوظ تھیاں نشانیاں ݙکھاؤ @@ -254,41 +252,19 @@ ڳولݨ ترتیباں - ایں ویلے دی ڳول: + ایں ویلے دی ڳول: - - - %1$s وچ کیا نواں ہے؟ - - جتھ تساں چھوڑیا ہے، ہݨ اُتھوں بیک اپ چاوݨ سوکھڑا ہے۔ - - ذاتی تھیا %1$s مکھ پناں - - ٹیب، نشانیاں تے براؤزنگ تاریخ کھولݨ کیتے ٹپ مارو۔ - - ستھریاں، منظم ٹیباں - - بہترین خاکے تے خود کار بند تھیندیاں ٹیباں نال ٹیباں دی بے ترتیبی کوں صاف کرو۔ - - حالیہ ڳولاں - - - آپݨے مکھ پنے تے ٹیباں نال آپݨیاں تازہ ترین ڳولاں تے ولدا ون٘جو۔ - - - جتھوں تساں چھوڑیا ہائی تہاݙا ذاتی تھیا فائرفوکس مُکھ پناں ہݨ اُتھوں شروع کرݨ سوکھا بݨیندا ہے۔ آپݨے حالیہ ٹیب، کتاب نشانیاں تے ڳولݨ نتیجے لبھو۔ + + ایں ویلے ایندے وچ ڳول: + آپݨے ذاتی تھئے مکھ پنّے نال ملو۔ حالیہ ٹیباں، نشانیاں تے ڳولݨ نتیجے اتھ ظاہر تھیسن۔ - آزاد انٹرنیٹ وچ ست بسم اللہ - ٻئے ذاتی انٹرنیٹ وچ ست بسم اللہ ٻئے رنگ۔ چنگی رازداری۔ نفعے کنوں ودھ لوکاں نال پریت پالݨ۔ - فون سیٹ کنوں لیپ ٹاپ تے ہاپ کرو تے ولدا واپس وی - سکریناں سوئچ کرݨ ہݨ پہلے کنوں ٻہوں سوکھا ہے آپݨے مکھ پنّے تے ٻئی ڈیوائساں دے ٹیباں نال اُتھاؤں شروع کرو جتھوں تساں چھوڑیا ہائی۔ @@ -354,6 +330,15 @@ نجی براؤزنگ شاٹ کٹ شامل کرو ایچ ٹی ٹی پی ایس ــ صرف موڈ + + + کوکی بینر گھٹاوݨ + + کوکی بینراں کوں تھوڑا کرو + + + فائر فوکس آپݨے آپ کوکی بینراں دی درخواست کوں مسترد کرݨ دی کوشش کرینداے. اگر مسترد کرݨ دا آپشن موجودکائنی ، تاں فائر فوکس ساری کوکیز کوں بینر ختم کرݨ پاروں قبول کر سڳدا ہے. + خودکار طور تے ودھدی ہوئی حفاظت کیتے ایچ ٹی ٹی پی ایس خفیہ کاری پروٹوکول ورتندے ہوئے سائٹاں کوں کنکٹ کرݨ دی کوشش کریندے۔ @@ -1261,34 +1246,21 @@ گروپ مٹ ڳیا - - %s وچ ست بسم اللہ! بہترین انٹرنیٹ وچ ست بسم اللہ لوکاں کیتے بݨا ہویا براؤزر، نہ کہ منافع کیتے۔ - - ڈیوائساں دے درمیان فائرفوکس ہم وقت کرو جتھوں تساں چھوڑیا ہائی، اُتھوں شروع کرو - - ایں ڈیوائس تے کتاب نشانیاں، تاریخ تے پاس ورڈ %1$s تے گھن آؤ۔ ہموار سکرین سوئچنگ کیتے سارے ڈیوائساں تے ٹیباں تے پاس ورڈاں کوں ہم وقت کرو۔ - - سائن اپ سائن ان ہم وقت کرݨ چالو ہے - - ہمیشہ رازداری تے ڈیفالٹ نال رازدای حفاظت - - %1$s خودکار طور تے کمپنیاں کوں ویب تے تہاکوں خفیہ فالو کرݨ کنوں روکیندے۔ ٹریکراں کوں تہاکوں ساریاں سائٹاں وچ پیچھا کرݨ آلیاں کوکیاں ورتݨ کنوں روکݨ کیتے مکمل کوکی حفاظت دی خصوصیت @@ -1301,18 +1273,11 @@ ورقیاں کوں تکھیرا لوڈ کرݨ سانگے ٻئے ٹریکراں کوں بلاک کریندے، پر ورقے تے کجھ فعالت ترٹ سڳدی ہے۔ آپݨے ٹول بار دی جاء چُݨو - - ٹول بار کوں سوکھی پہنچ آلی جاء تے رکھو۔ ایں کوں تل وچ رکھو یا چوٹی تے گھن ون٘ڄو۔ ایں کوں تل وچ رکھو، یا اُتے گھن ون٘ڄو۔ - - تہاݙی رازداری تساں آپݨے ڈیٹا کوں کنٹرول کریندے ہو - - تساں جہڑی شئے تساں ساکوں شیئر کرو یا آن لائن شیئر کریندے ہو اوں کوں تہاݙے قاٻو وچ ݙیوݨ سانگے اساں %s کوں بݨایا ہے۔ تساں جہڑی شئے تساں ساکوں شیئر کرو یا آن لائن شیئر کریندے ہو فائرفوکس اوں کوں تہاݙے قاٻو وچ ݙیندی ہے۔ From 8e09d2a0230c50e125f3e9424fb37e8aa2feca4f Mon Sep 17 00:00:00 2001 From: "oana.horvath" Date: Tue, 22 Nov 2022 18:21:43 +0200 Subject: [PATCH 084/218] No issue: Adding new start on homepage setting UI test --- .../mozilla/fenix/ui/SettingsHomepageTest.kt | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHomepageTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHomepageTest.kt index 42ee74c5f..1ec759d2e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHomepageTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHomepageTest.kt @@ -15,6 +15,8 @@ import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.RetryTestRule import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset +import org.mozilla.fenix.helpers.TestHelper.mDevice +import org.mozilla.fenix.helpers.TestHelper.openAppFromExternalLink import org.mozilla.fenix.helpers.TestHelper.restartApp import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.homeScreen @@ -180,19 +182,6 @@ class SettingsHomepageTest { fun startOnLastTabTest() { val firstWebPage = getGenericAsset(mockWebServer, 1) - homeScreen { - }.openThreeDotMenu { - }.openSettings { - }.openHomepageSubMenu { - clickStartOnHomepageButton() - } - - restartApp(activityIntentTestRule) - - homeScreen { - verifyHomeScreen() - } - navigationToolbar { }.enterURLAndEnterToBrowser(firstWebPage.url) { }.goToHomescreen { @@ -208,6 +197,31 @@ class SettingsHomepageTest { } } + @Test + fun ignoreStartOnHomeWhenLaunchedByExternalLinkTest() { + val genericPage = getGenericAsset(mockWebServer, 1) + + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openHomepageSubMenu { + clickStartOnHomepageButton() + }.goBack {} + + with(activityIntentTestRule) { + finishActivity() + mDevice.waitForIdle() + this.applySettingsExceptions { + it.isTCPCFREnabled = false + } + openAppFromExternalLink(genericPage.url.toString()) + } + + browserScreen { + verifyPageContent(genericPage.content) + } + } + @SmokeTest @Test @Ignore("Intermittent test: https://github.com/mozilla-mobile/fenix/issues/26559") From 216cb7233d515f4e257e3461bb4acbd44c90c700 Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 26 Oct 2022 12:58:38 +0300 Subject: [PATCH 085/218] For #27536: Update Jetpack Compose to latest version. --- buildSrc/src/main/java/Dependencies.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 5c9dd96f3..cb1e5b7f0 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -20,7 +20,7 @@ object Versions { const val detekt = "1.19.0" const val jna = "5.12.1" - const val androidx_compose = "1.2.1" + const val androidx_compose = "1.3.1" const val androidx_compose_compiler = "1.3.2" const val androidx_appcompat = "1.3.0" const val androidx_benchmark = "1.0.0" From 79d99a819bc1edfc878e75682e4bbbe9549e9150 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 24 Nov 2022 14:01:12 +0200 Subject: [PATCH 086/218] For #27966 disable verifySponsoredShortcutsSponsorsAndPrivacyOptionTest UI test --- app/src/androidTest/java/org/mozilla/fenix/ui/TopSitesTest.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/TopSitesTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/TopSitesTest.kt index e0c94db21..6892c2cc1 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/TopSitesTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/TopSitesTest.kt @@ -9,6 +9,7 @@ import androidx.test.uiautomator.UiDevice import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before +import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.mozilla.fenix.R @@ -275,6 +276,7 @@ class TopSitesTest { } } + @Ignore("Failing, see: https://github.com/mozilla-mobile/fenix/issues/25926") @Test fun verifySponsoredShortcutsSponsorsAndPrivacyOptionTest() { var sponsoredShortcutTitle = "" From 5606e728723060a1acf79e1b30601c5fac649097 Mon Sep 17 00:00:00 2001 From: James Hugman Date: Tue, 22 Nov 2022 18:39:57 +0000 Subject: [PATCH 087/218] Use NimbusBuilder from AppServices/AndroidComponents --- .../mozilla/fenix/experiments/NimbusSetup.kt | 110 +++++------------- 1 file changed, 26 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt index 208079d14..99dff84fe 100644 --- a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt +++ b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt @@ -5,36 +5,17 @@ package org.mozilla.fenix.experiments import android.content.Context -import android.net.Uri -import mozilla.components.service.nimbus.Nimbus import mozilla.components.service.nimbus.NimbusApi import mozilla.components.service.nimbus.NimbusAppInfo -import mozilla.components.service.nimbus.NimbusDisabled -import mozilla.components.service.nimbus.NimbusServerSettings +import mozilla.components.service.nimbus.NimbusBuilder import mozilla.components.support.base.log.logger.Logger import org.json.JSONObject -import org.mozilla.experiments.nimbus.NimbusInterface -import org.mozilla.experiments.nimbus.internal.EnrolledExperiment import org.mozilla.experiments.nimbus.internal.NimbusException -import org.mozilla.experiments.nimbus.joinOrTimeout import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.R import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.nimbus.FxNimbus -import org.mozilla.fenix.perf.runBlockingIncrement - -/** - * Fenix specific observer of Nimbus events. - * - * The generated code `FxNimbus` provides a cache which should be invalidated - * when the experiments recipes are updated. - */ -private val observer = object : NimbusInterface.Observer { - override fun onUpdatesApplied(updated: List) { - FxNimbus.invalidateCachedValues() - } -} /** * The maximum amount of time the app launch will be blocked to load experiments from disk. @@ -44,45 +25,23 @@ private val observer = object : NimbusInterface.Observer { */ private const val TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS = 200L -@Suppress("TooGenericExceptionCaught") -fun createNimbus(context: Context, url: String?): NimbusApi { - // Once application-services has switched to using the new - // error reporting system, we may not need this anymore. - // https://mozilla-hub.atlassian.net/browse/EXP-2868 - val errorReporter: ((String, Throwable) -> Unit) = reporter@{ message, e -> - Logger.error("Nimbus error: $message", e) - - if (e is NimbusException && !e.isReportableError()) { - return@reporter - } - - context.components.analytics.crashReporter.submitCaughtException(e) - } - // Eventually we'll want to use `NimbusDisabled` when we have no NIMBUS_ENDPOINT. - // but we keep this here to not mix feature flags and how we configure Nimbus. - val serverSettings = if (!url.isNullOrBlank()) { - if (context.settings().nimbusUsePreview) { - NimbusServerSettings(url = Uri.parse(url), collection = "nimbus-preview") - } else { - NimbusServerSettings(url = Uri.parse(url)) - } - } else { - null - } - - val isFirstNimbusRun = context.settings().isFirstNimbusRun - if (isFirstNimbusRun) { +/** + * Create the Nimbus singleton object for the Fenix app. + */ +fun createNimbus(context: Context, urlString: String?): NimbusApi { + val isAppFirstRun = context.settings().isFirstNimbusRun + if (isAppFirstRun) { context.settings().isFirstNimbusRun = false } // These values can be used in the JEXL expressions when targeting experiments. val customTargetingAttributes = JSONObject().apply { // By convention, we should use snake case. - put("is_first_run", isFirstNimbusRun) + put("is_first_run", isAppFirstRun) // This camelCase attribute is a boolean value represented as a string. // This is left for backwards compatibility. - put("isFirstRun", isFirstNimbusRun.toString()) + put("isFirstRun", isAppFirstRun.toString()) } // The name "fenix" here corresponds to the app_name defined for the family of apps @@ -99,43 +58,26 @@ fun createNimbus(context: Context, url: String?): NimbusApi { channel = BuildConfig.BUILD_TYPE.let { if (it == "debug") "developer" else it }, customTargetingAttributes = customTargetingAttributes, ) - return try { - Nimbus(context, appInfo, serverSettings, errorReporter).apply { - // We register our own internal observer for housekeeping the Nimbus SDK and - // generated code. - register(observer) - // Apply any experiment recipes we downloaded last time, or - // if this is the first time, we load the ones bundled in the res/raw - // directory. - val job = if (isFirstNimbusRun || url.isNullOrBlank()) { - applyLocalExperiments(R.raw.initial_experiments) - } else { - applyPendingExperiments() + return NimbusBuilder(context).apply { + url = urlString + errorReporter = { message, e -> + Logger.error("Nimbus error: $message", e) + if (e !is NimbusException || e.isReportableError()) { + context.components.analytics.crashReporter.submitCaughtException(e) } - - // We always want initialize Nimbus to happen ASAP and before any features (engine/UI) - // have been initialized. For that reason, we use runBlocking here to avoid - // inconsistency in the experiments. - // We can safely do this because Nimbus does most of its work on background threads, - // including the loading the initial experiments from disk. For this reason, we have a - // `joinOrTimeout` to limit the blocking until TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS. - runBlockingIncrement { - // We only read from disk when loading first-run experiments. This is the only time - // that we should join and block. Otherwise, we don't want to wait. - job.joinOrTimeout(TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS) - } - // By now, on this thread, we have a fully initialized Nimbus object, ready for use: - // * we gave a 200ms timeout to the loading of a file from res/raw - // * on completion or cancellation, applyPendingExperiments or initialize was - // called, and this thread waited for that to complete. } - } catch (e: Throwable) { - // Something went wrong. We'd like not to, but stability of the app is more important than - // failing fast here. - errorReporter("Failed to initialize Nimbus", e) - NimbusDisabled(context) - } + initialExperiments = R.raw.initial_experiments + timeoutLoadingExperiment = TIME_OUT_LOADING_EXPERIMENT_FROM_DISK_MS + usePreviewCollection = context.settings().nimbusUsePreview + isFirstRun = isAppFirstRun + onCreateCallback = { nimbus -> + FxNimbus.initialize { nimbus } + } + onApplyCallback = { + FxNimbus.invalidateCachedValues() + } + }.build(appInfo) } /** From 38a1c4a35761effaec0c123f017db78eb60d4ecc Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 24 Nov 2022 15:16:49 +0000 Subject: [PATCH 088/218] Update to Android-Components 109.0.20221124143318. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 2668d9553..1058587ca 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221123190051" + const val VERSION = "109.0.20221124143318" } From c86c917ccece605773fd08e9bf1232546315ea8d Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Wed, 23 Nov 2022 15:38:17 +0200 Subject: [PATCH 089/218] For #26286 refactor homeScreenItemsTest UI test --- .../org/mozilla/fenix/ui/HomeScreenTest.kt | 47 +++++++------ .../java/org/mozilla/fenix/ui/SmokeTest.kt | 2 +- .../mozilla/fenix/ui/TabbedBrowsingTest.kt | 4 +- .../fenix/ui/robots/HomeScreenRobot.kt | 69 ++++++++++++++++--- 4 files changed, 91 insertions(+), 31 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index 024398ac5..45afd1884 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.ui +import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice @@ -35,10 +36,11 @@ class HomeScreenTest { private lateinit var mDevice: UiDevice private lateinit var mockWebServer: MockWebServer - @get:Rule - val activityTestRule = HomeActivityTestRule.withDefaultSettingsOverrides() + @get:Rule(order = 0) + val activityTestRule = + AndroidComposeTestRule(HomeActivityTestRule.withDefaultSettingsOverrides()) { it.activity } - @Rule + @Rule(order = 1) @JvmField val retryTestRule = RetryTestRule(3) @@ -62,21 +64,26 @@ class HomeScreenTest { homeScreen { }.dismissOnboarding() homeScreen { - verifyHomeScreen() - verifyNavigationToolbar() - verifyHomePrivateBrowsingButton() - verifyHomeMenu() verifyHomeWordmark() - verifyTabButton() - verifyCollectionsHeader() - verifyHomeToolbar() - verifyHomeComponent() - - // Verify Top Sites - verifyExistingTopSitesList() + verifyHomePrivateBrowsingButton() verifyExistingTopSitesTabs("Wikipedia") verifyExistingTopSitesTabs("Top Articles") verifyExistingTopSitesTabs("Google") + verifyCollectionsHeader() + verifyNoCollectionsText() + scrollToPocketProvokingStories() + swipePocketProvokingStories() + verifyPocketRecommendedStoriesItems(activityTestRule, 1, 3, 4, 5, 6, 7) + verifyPocketSponsoredStoriesItems(activityTestRule, 2, 8) + verifyDiscoverMoreStoriesButton(activityTestRule, 9) + verifyStoriesByTopicItems() + verifyPoweredByPocket(activityTestRule) + verifyCustomizeHomepageButton(true) + verifyNavigationToolbar() + verifyDefaultSearchEngine("Google") + verifyHomeMenuButton() + verifyTabButton() + verifyNoTabsOpened() } } @@ -89,11 +96,11 @@ class HomeScreenTest { verifyHomeScreen() verifyNavigationToolbar() verifyHomePrivateBrowsingButton() - verifyHomeMenu() + verifyHomeMenuButton() verifyHomeWordmark() verifyTabButton() verifyPrivateSessionMessage() - verifyHomeToolbar() + verifyNavigationToolbar() verifyHomeComponent() }.openCommonMythsLink { verifyUrl("common-myths-about-private-browsing") @@ -107,11 +114,11 @@ class HomeScreenTest { verifyHomeScreen() verifyNavigationToolbar() verifyHomePrivateBrowsingButton() - verifyHomeMenu() + verifyHomeMenuButton() verifyHomeWordmark() verifyTabButton() verifyPrivateSessionMessage() - verifyHomeToolbar() + verifyNavigationToolbar() verifyHomeComponent() } } @@ -144,7 +151,7 @@ class HomeScreenTest { @Test fun dismissOnboardingUsingHelpTest() { - activityTestRule.applySettingsExceptions { + activityTestRule.activityRule.applySettingsExceptions { it.isJumpBackInCFREnabled = false it.isWallpaperOnboardingEnabled = false } @@ -174,7 +181,7 @@ class HomeScreenTest { @Test fun verifyPocketHomepageStoriesTest() { - activityTestRule.applySettingsExceptions { + activityTestRule.activityRule.applySettingsExceptions { it.isRecentTabsFeatureEnabled = false it.isRecentlyVisitedFeatureEnabled = false } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index d0a85e27a..c0be13764 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -115,7 +115,7 @@ class SmokeTest { verifyHomeScreen() verifyNavigationToolbar() verifyHomePrivateBrowsingButton() - verifyHomeMenu() + verifyHomeMenuButton() verifyHomeWordmark() verifyWelcomeHeader() diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt index 1be555141..ed882ffcf 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/TabbedBrowsingTest.kt @@ -354,7 +354,7 @@ class TabbedBrowsingTest { // dismiss search dialog homeScreen { }.pressBack() verifyPrivateSessionMessage() - verifyHomeToolbar() + verifyNavigationToolbar() } navigationToolbar { }.enterURLAndEnterToBrowser(defaultWebPage.url) { @@ -365,7 +365,7 @@ class TabbedBrowsingTest { // dismiss search dialog homeScreen { }.pressBack() verifyHomeWordmark() - verifyHomeToolbar() + verifyNavigationToolbar() } } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index c3d6bf437..f8a6d6197 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -8,9 +8,13 @@ package org.mozilla.fenix.ui.robots import android.graphics.Bitmap import android.widget.EditText +import androidx.compose.ui.test.assert import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.ComposeTestRule +import androidx.compose.ui.test.onChildAt +import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.recyclerview.widget.RecyclerView @@ -75,12 +79,11 @@ class HomeScreenRobot { fun verifyFocusedNavigationToolbar() = assertFocusedNavigationToolbar() fun verifyHomeScreen() = assertHomeScreen() fun verifyHomePrivateBrowsingButton() = assertHomePrivateBrowsingButton() - fun verifyHomeMenu() = assertHomeMenu() + fun verifyHomeMenuButton() = assertHomeMenuButton() fun verifyTabButton() = assertTabButton() fun verifyCollectionsHeader() = assertCollectionsHeader() fun verifyNoCollectionsText() = assertNoCollectionsText() fun verifyHomeWordmark() = assertHomeWordmark() - fun verifyHomeToolbar() = assertHomeToolbar() fun verifyHomeComponent() = assertHomeComponent() fun verifyDefaultSearchEngine(searchEngine: String) = verifySearchEngineIcon(searchEngine) fun verifyNoTabsOpened() = assertNoTabsOpened() @@ -267,6 +270,39 @@ class HomeScreenRobot { } } + fun scrollToPocketProvokingStories() = + scrollToElementByText(getStringResource(R.string.pocket_stories_categories_header)) + + fun swipePocketProvokingStories() { + UiScrollable(UiSelector().resourceId("pocket.stories")).setAsHorizontalList() + .swipeLeft(3) + } + + fun verifyPocketRecommendedStoriesItems(composeTestRule: ComposeTestRule, vararg positions: Int) { + composeTestRule.onNodeWithTag("pocket.stories").assertIsDisplayed() + positions.forEach { + composeTestRule.onNodeWithTag("pocket.stories") + .onChildAt(it - 1) + .assert(hasTestTag("pocket.recommended.story")) + } + } + + fun verifyPocketSponsoredStoriesItems(composeTestRule: ComposeTestRule, vararg positions: Int) { + composeTestRule.onNodeWithTag("pocket.stories").assertIsDisplayed() + positions.forEach { + composeTestRule.onNodeWithTag("pocket.stories") + .onChildAt(it - 1) + .assert(hasTestTag("pocket.sponsored.story")) + } + } + + fun verifyDiscoverMoreStoriesButton(composeTestRule: ComposeTestRule, position: Int) { + composeTestRule.onNodeWithTag("pocket.stories") + .assertIsDisplayed() + .onChildAt(position - 1) + .assert(hasTestTag("pocket.discover.more.story")) + } + fun verifyStoriesByTopic(enabled: Boolean) { if (enabled) { scrollToElementByText(getStringResource(R.string.pocket_stories_categories_header)) @@ -291,6 +327,15 @@ class HomeScreenRobot { } } + fun verifyStoriesByTopicItems() = + assertTrue(mDevice.findObject(UiSelector().resourceId("pocket.categories")).childCount > 1) + + fun verifyPoweredByPocket(rule: ComposeTestRule) { + homeScreenList().scrollIntoView(mDevice.findObject(UiSelector().resourceId("pocket.header"))) + rule.onNodeWithTag("pocket.header.title", true).assertIsDisplayed() + rule.onNodeWithTag("pocket.header.subtitle", true).assertIsDisplayed() + } + fun verifyCustomizeHomepageButton(enabled: Boolean) { if (enabled) { scrollToElementByText(getStringResource(R.string.browser_menu_customize_home_1)) @@ -619,7 +664,7 @@ private fun assertHomeScreen() { .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) } -private fun assertHomeMenu() = onView(ViewMatchers.withResourceName("menuButton")) +private fun assertHomeMenuButton() = onView(ViewMatchers.withResourceName("menuButton")) .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) private fun assertHomePrivateBrowsingButton() = @@ -630,9 +675,6 @@ private val homepageWordmark = onView(ViewMatchers.withResourceName("wordmark")) private fun assertHomeWordmark() = homepageWordmark.check(matches(withEffectiveVisibility(Visibility.VISIBLE))) -private fun assertHomeToolbar() = onView(ViewMatchers.withResourceName("toolbar")) - .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) - private fun assertTabButton() = onView(allOf(withId(R.id.tab_button), isDisplayed())) .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) @@ -668,9 +710,9 @@ private fun getSearchEngine(searchEngineName: String) = appContext.components.core.store.state.search.searchEngines.find { it.name == searchEngineName } private fun verifySearchEngineIcon(searchEngineName: String) { - val ddgSearchEngine = getSearchEngine(searchEngineName) + val defaultSearchEngine = getSearchEngine(searchEngineName) ?: throw AssertionError("No search engine with name $searchEngineName") - verifySearchEngineIcon(ddgSearchEngine.icon, ddgSearchEngine.name) + verifySearchEngineIcon(defaultSearchEngine.icon, defaultSearchEngine.name) } // First Run elements @@ -949,6 +991,17 @@ private fun sponsoredShortcut(sponsoredShortcutTitle: String) = .textContains(sponsoredShortcutTitle), ) +private fun discoverMoreStoriesButton(position: Int) = + mDevice + .findObject( + UiSelector() + .resourceId("pocket.stories"), + ).getChild( + UiSelector() + .resourceId("pocket.discover.more.story") + .index(position - 1), + ) + val deleteFromHistory = onView( allOf( From cf0cf784eb6165c957baa36373afd01d42fbaabd Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 24 Nov 2022 09:56:47 +0200 Subject: [PATCH 090/218] For #26286 new verifyJumpBackInSectionTest UI test --- .../org/mozilla/fenix/ui/HomeScreenTest.kt | 32 +++++++++++ .../fenix/ui/robots/HomeScreenRobot.kt | 55 +++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index 45afd1884..da05bcc1e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -123,6 +123,38 @@ class HomeScreenTest { } } + @Test + fun verifyJumpBackInSectionTest() { + val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 4) + val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) + + navigationToolbar { + }.enterURLAndEnterToBrowser(firstWebPage.url) { + }.goToHomescreen { + verifyJumpBackInSectionIsDisplayed() + verifyJumpBackInItemTitle(firstWebPage.title) + verifyJumpBackInItemWithUrl(firstWebPage.url.toString()) + verifyJumpBackInShowAllButton() + }.clickJumpBackInShowAllButton { + verifyExistingOpenTabs(firstWebPage.title) + }.closeTabDrawer() { + } + homeScreen { + }.clickJumpBackInItemWithTitle(firstWebPage.title) { + verifyUrl(firstWebPage.url.toString()) + clickLinkMatchingText("Link 1") + }.goToHomescreen { + verifyJumpBackInSectionIsDisplayed() + verifyJumpBackInItemTitle(secondWebPage.title) + verifyJumpBackInItemWithUrl(secondWebPage.url.toString()) + }.openTabDrawer { + closeTab() + } + homeScreen { + verifyJumpBackInSectionIsNotDisplayed() + } + } + @Test fun dismissOnboardingUsingSettingsTest() { homeScreen { diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index f8a6d6197..954fdf71a 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -185,6 +185,9 @@ class HomeScreenRobot { fun verifyJumpBackInSectionIsDisplayed() = assertJumpBackInSectionIsDisplayed() fun verifyJumpBackInSectionIsNotDisplayed() = assertJumpBackInSectionIsNotDisplayed() + fun verifyJumpBackInItemTitle(itemTitle: String) = assertJumpBackInItemTitle(itemTitle) + fun verifyJumpBackInItemWithUrl(itemUrl: String) = assertJumpBackInItemWithUrl(itemUrl) + fun verifyJumpBackInShowAllButton() = assertJumpBackInShowAllButton() fun verifyRecentlyVisitedSectionIsDisplayed() = assertRecentlyVisitedSectionIsDisplayed() fun verifyRecentlyVisitedSectionIsNotDisplayed() = assertRecentlyVisitedSectionIsNotDisplayed() fun verifyRecentBookmarksSectionIsDisplayed() = assertRecentBookmarksSectionIsDisplayed() @@ -627,6 +630,29 @@ class HomeScreenRobot { SettingsSubMenuHomepageRobot().interact() return SettingsSubMenuHomepageRobot.Transition() } + + fun clickJumpBackInShowAllButton(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { + mDevice + .findObject( + UiSelector() + .textContains(getStringResource(R.string.recent_tabs_show_all)), + ).clickAndWaitForNewWindow(waitingTime) + + TabDrawerRobot().interact() + return TabDrawerRobot.Transition() + } + + fun clickJumpBackInItemWithTitle(itemTitle: String, interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + mDevice + .findObject( + UiSelector() + .resourceId("recent.tab.title") + .textContains(itemTitle), + ).clickAndWaitForNewWindow(waitingTime) + + BrowserRobot().interact() + return BrowserRobot.Transition() + } } } @@ -943,6 +969,35 @@ private fun assertJumpBackInSectionIsDisplayed() = assertTrue(jumpBackInSection( private fun assertJumpBackInSectionIsNotDisplayed() = assertFalse(jumpBackInSection().waitForExists(waitingTimeShort)) +private fun assertJumpBackInItemTitle(itemTitle: String) = + assertTrue( + mDevice + .findObject( + UiSelector() + .resourceId("recent.tab.title") + .textContains(itemTitle), + ).waitForExists(waitingTime), + ) + +private fun assertJumpBackInItemWithUrl(itemUrl: String) = + assertTrue( + mDevice + .findObject( + UiSelector() + .resourceId("recent.tab.url") + .textContains(itemUrl), + ).waitForExists(waitingTime), + ) + +private fun assertJumpBackInShowAllButton() = + assertTrue( + mDevice + .findObject( + UiSelector() + .textContains(getStringResource(R.string.recent_tabs_show_all)), + ).waitForExists(waitingTime), + ) + private fun assertRecentlyVisitedSectionIsDisplayed() = assertTrue(recentlyVisitedSection().waitForExists(waitingTime)) private fun assertRecentlyVisitedSectionIsNotDisplayed() = assertFalse(recentlyVisitedSection().waitForExists(waitingTime)) From d014295eaa71337970863cd7d3493ce3b605e268 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 24 Nov 2022 09:57:14 +0200 Subject: [PATCH 091/218] For #26286 improve coverage for verifyPocketHomepageStoriesTest UI test --- .../androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index da05bcc1e..9bbef33ca 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -223,6 +223,11 @@ class HomeScreenTest { homeScreen { verifyThoughtProvokingStories(true) + scrollToPocketProvokingStories() + swipePocketProvokingStories() + verifyPocketRecommendedStoriesItems(activityTestRule, 1, 3, 4, 5, 6, 7) + verifyPocketSponsoredStoriesItems(activityTestRule, 2, 8) + verifyDiscoverMoreStoriesButton(activityTestRule, 9) verifyStoriesByTopic(true) }.openThreeDotMenu { }.openCustomizeHome { From 808884f6253ce8734b2174a22e0f0fad1d3153ea Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 24 Nov 2022 09:57:40 +0200 Subject: [PATCH 092/218] For #26286 new openPocketStoryItemTest UI test --- .../org/mozilla/fenix/ui/HomeScreenTest.kt | 20 +++++++++++++ .../fenix/ui/robots/HomeScreenRobot.kt | 30 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index 9bbef33ca..a0cf8bce4 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -35,6 +35,7 @@ class HomeScreenTest { private lateinit var mDevice: UiDevice private lateinit var mockWebServer: MockWebServer + private lateinit var firstPocketStoryPublisher: String @get:Rule(order = 0) val activityTestRule = @@ -238,6 +239,25 @@ class HomeScreenTest { } } + @Test + fun openPocketStoryItemTest() { + activityTestRule.activityRule.applySettingsExceptions { + it.isRecentTabsFeatureEnabled = false + it.isRecentlyVisitedFeatureEnabled = false + } + + homeScreen { + }.dismissOnboarding() + + homeScreen { + verifyThoughtProvokingStories(true) + scrollToPocketProvokingStories() + firstPocketStoryPublisher = getProvokingStoryPublisher(1) + }.clickPocketStoryItem(firstPocketStoryPublisher, 1) { + verifyUrl(firstPocketStoryPublisher) + } + } + @Test fun verifyCustomizeHomepageTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index 954fdf71a..9b27d19ba 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -382,6 +382,20 @@ class HomeScreenRobot { ) } + fun getProvokingStoryPublisher(position: Int): String { + val publisher = mDevice.findObject( + UiSelector() + .className("android.view.View") + .index(position - 1), + ).getChild( + UiSelector() + .className("android.widget.TextView") + .index(1), + ).text + + return publisher + } + class Transition { fun openTabDrawer(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { @@ -653,6 +667,22 @@ class HomeScreenRobot { BrowserRobot().interact() return BrowserRobot.Transition() } + + fun clickPocketStoryItem(publisher: String, position: Int, interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + mDevice.findObject( + UiSelector() + .className("android.view.View") + .index(position - 1), + ).getChild( + UiSelector() + .className("android.widget.TextView") + .index(1) + .textContains(publisher), + ).clickAndWaitForNewWindow(waitingTime) + + BrowserRobot().interact() + return BrowserRobot.Transition() + } } } From 12c01ff4f950e385ab4a367a6a0790d88366f623 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 24 Nov 2022 09:58:21 +0200 Subject: [PATCH 093/218] For #26286 new openPocketDiscoverMoreTest UI test --- .../org/mozilla/fenix/ui/HomeScreenTest.kt | 19 ++++++++++++++++ .../fenix/ui/robots/HomeScreenRobot.kt | 22 +++++++++---------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index a0cf8bce4..5e711c87c 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -258,6 +258,25 @@ class HomeScreenTest { } } + @Test + fun openPocketDiscoverMoreTest() { + activityTestRule.activityRule.applySettingsExceptions { + it.isRecentTabsFeatureEnabled = false + it.isRecentlyVisitedFeatureEnabled = false + } + + homeScreen { + }.dismissOnboarding() + + homeScreen { + scrollToPocketProvokingStories() + swipePocketProvokingStories() + verifyDiscoverMoreStoriesButton(activityTestRule, 9) + }.clickPocketDiscoverMoreButton(activityTestRule, 9) { + verifyUrl("getpocket.com/explore") + } + } + @Test fun verifyCustomizeHomepageTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index 9b27d19ba..05db7128e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -683,6 +683,17 @@ class HomeScreenRobot { BrowserRobot().interact() return BrowserRobot.Transition() } + + fun clickPocketDiscoverMoreButton(composeTestRule: ComposeTestRule, position: Int, interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + composeTestRule.onNodeWithTag("pocket.stories") + .assertIsDisplayed() + .onChildAt(position - 1) + .assert(hasTestTag("pocket.discover.more.story")) + .performClick() + + BrowserRobot().interact() + return BrowserRobot.Transition() + } } } @@ -1076,17 +1087,6 @@ private fun sponsoredShortcut(sponsoredShortcutTitle: String) = .textContains(sponsoredShortcutTitle), ) -private fun discoverMoreStoriesButton(position: Int) = - mDevice - .findObject( - UiSelector() - .resourceId("pocket.stories"), - ).getChild( - UiSelector() - .resourceId("pocket.discover.more.story") - .index(position - 1), - ) - val deleteFromHistory = onView( allOf( From e0cc64a13a953da11efb2b4604d339f39dcdc8bf Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 24 Nov 2022 12:33:35 +0200 Subject: [PATCH 094/218] For #26286 new selectStoriesByTopicItemTest UI test --- .../org/mozilla/fenix/ui/HomeScreenTest.kt | 17 ++++++++++++++++ .../fenix/ui/robots/HomeScreenRobot.kt | 20 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index 5e711c87c..b013b0bf1 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -277,6 +277,23 @@ class HomeScreenTest { } } + @Test + fun selectStoriesByTopicItemTest() { + activityTestRule.activityRule.applySettingsExceptions { + it.isRecentTabsFeatureEnabled = false + it.isRecentlyVisitedFeatureEnabled = false + } + + homeScreen { + }.dismissOnboarding() + + homeScreen { + verifyStoriesByTopicItemState(activityTestRule, false, 1) + clickStoriesByTopicItem(activityTestRule, 1) + verifyStoriesByTopicItemState(activityTestRule, true, 1) + } + } + @Test fun verifyCustomizeHomepageTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index 05db7128e..ec9d7dd64 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -10,6 +10,8 @@ import android.graphics.Bitmap import android.widget.EditText import androidx.compose.ui.test.assert import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotSelected +import androidx.compose.ui.test.assertIsSelected import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.ComposeTestRule @@ -333,6 +335,21 @@ class HomeScreenRobot { fun verifyStoriesByTopicItems() = assertTrue(mDevice.findObject(UiSelector().resourceId("pocket.categories")).childCount > 1) + fun verifyStoriesByTopicItemState(composeTestRule: ComposeTestRule, isSelected: Boolean, position: Int) { + homeScreenList().scrollIntoView(mDevice.findObject(UiSelector().resourceId("pocket.header"))) + + if (isSelected) { + composeTestRule.onNodeWithTag("pocket.categories").assertIsDisplayed() + storyByTopicItem(composeTestRule, position).assertIsSelected() + } else { + composeTestRule.onNodeWithTag("pocket.categories").assertIsDisplayed() + storyByTopicItem(composeTestRule, position).assertIsNotSelected() + } + } + + fun clickStoriesByTopicItem(composeTestRule: ComposeTestRule, position: Int) = + storyByTopicItem(composeTestRule, position).performClick() + fun verifyPoweredByPocket(rule: ComposeTestRule) { homeScreenList().scrollIntoView(mDevice.findObject(UiSelector().resourceId("pocket.header"))) rule.onNodeWithTag("pocket.header.title", true).assertIsDisplayed() @@ -1087,6 +1104,9 @@ private fun sponsoredShortcut(sponsoredShortcutTitle: String) = .textContains(sponsoredShortcutTitle), ) +private fun storyByTopicItem(composeTestRule: ComposeTestRule, position: Int) = + composeTestRule.onNodeWithTag("pocket.categories").onChildAt(position - 1) + val deleteFromHistory = onView( allOf( From 53d0a509735d471557e014ea22985d05a333c929 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Thu, 24 Nov 2022 12:34:20 +0200 Subject: [PATCH 095/218] For #26286 new verifyPocketLearnMoreLinkTest UI test --- .../java/org/mozilla/fenix/ui/HomeScreenTest.kt | 17 +++++++++++++++++ .../mozilla/fenix/ui/robots/HomeScreenRobot.kt | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index b013b0bf1..582f94d5f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -294,6 +294,23 @@ class HomeScreenTest { } } + @Test + fun verifyPocketLearnMoreLinkTest() { + activityTestRule.activityRule.applySettingsExceptions { + it.isRecentTabsFeatureEnabled = false + it.isRecentlyVisitedFeatureEnabled = false + } + + homeScreen { + }.dismissOnboarding() + + homeScreen { + verifyPoweredByPocket(activityTestRule) + }.clickPocketLearnMoreLink(activityTestRule) { + verifyUrl("mozilla.org/en-US/firefox/pocket") + } + } + @Test fun verifyCustomizeHomepageTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index ec9d7dd64..346788f34 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -711,6 +711,13 @@ class HomeScreenRobot { BrowserRobot().interact() return BrowserRobot.Transition() } + + fun clickPocketLearnMoreLink(composeTestRule: ComposeTestRule, interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + composeTestRule.onNodeWithTag("pocket.header.subtitle", true).performClick() + + BrowserRobot().interact() + return BrowserRobot.Transition() + } } } From 2d04c13c5c64522516ade399688f9b5dec035a12 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Fri, 25 Nov 2022 01:40:03 +0100 Subject: [PATCH 096/218] Import l10n. (#27970) --- app/src/main/res/values-es-rAR/strings.xml | 7 ++ app/src/main/res/values-hu/strings.xml | 54 ++---------- app/src/main/res/values-is/strings.xml | 61 +++----------- app/src/main/res/values-pa-rIN/strings.xml | 3 + app/src/main/res/values-sr/strings.xml | 56 ++----------- app/src/main/res/values-uz/strings.xml | 98 +++++++++++++++++++++- app/src/main/res/values-zh-rCN/strings.xml | 13 ++- 7 files changed, 142 insertions(+), 150 deletions(-) diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 999c22cf7..4bf96f701 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -340,6 +340,13 @@ Modo solo HTTPS + + Reducción de pancarta de cookies + + Reducir las pancartas de cookies + + Firefox intenta rechazar automáticamente las solicitudes de cookies en las pancartas de cookies. Si una opción de rechazo no está disponible, Firefox puede aceptar todas las cookies para descartar la pancarta. + Intenta conectarse automáticamente a sitios usando el protocolo de cifrado HTTPS para mayor seguridad. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5243a7251..8339f98a1 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -46,8 +46,6 @@ - Friss könyvjelzők - Nemrég mentett Összes mentett könyvjelző megjelenítése @@ -260,41 +258,19 @@ Keresési beállítások - Ezúttal keresés ezzel: + Ezúttal keresés ezzel: - - - A %s újdonságai - - Mostantól könnyebb ott folytatni, ahol abbahagyta. - - Személyre szabott %1$s kezdőoldal - - Ugrás a megnyitott lapokra, könyvjelzőkre és az előzményekre. - - Tiszta, rendszerezett lapok - - Számoljon le a lapok rendezetlenségével a jobb elrendezés és az automatikusan bezáródó lapok segítségével. - - Legutóbbi keresések - - - Tekintse meg újra a legutóbbi kereséseit a kezdőlapról és a lapokról. - - - A személyre szabott Firefox kezdőlapja megkönnyíti, hogy ott folytassa, ahol abbahagyta. Találja meg a legutóbbi lapjait, könyvjelzőit és keresési találatait. + + Ezúttal keresés ebben: + Ismerje meg személyre szabott kezdőlapját. Itt jelennek meg a legutóbbi lapok, könyvjelzők és keresési találatok. - Üdvözöljük egy független interneten - Üdvözöljük egy személyesebb interneten Több szín. Jobb adatvédelem. Ugyanaz az elkötelezettség: az emberek a profit előtt. - Váltson át a telefonról a laptopra és vissza - A képernyők közötti váltás egyszerűbb, mint valaha Folytassa onnan, ahol abbahagyta, és most már a kezdőlapján megjelennek a többi eszközről származó lapjai is. @@ -360,6 +336,7 @@ Privát böngészési indítóikon hozzáadása Csak HTTPS mód + Automatikusan HTTPS titkosítási protokoll használatával próbál meg csatlakozni a webhelyekhez a fokozott biztonság érdekében. @@ -1259,33 +1236,20 @@ Csoport törölve - - Üdvözli a %s! Üdvözöljük egy jobb interneten Egy böngésző az emberekért, nem a haszonért. - - A Firefox szinkronizálása az eszközök közt Folytassa ott, ahol abbahagyta - - Adjon hozzá könyvjelzőket, előzményeket és jelszavakat a %1$shoz ezen az eszközön. Szinkronizálja a lapokat és a jelszavakat az eszközök között a zökkenőmentes képernyőváltás érdekében. - - Regisztráció Bejelentkezés A Sync be van kapcsolva - - Mindig bekapcsolt adatvédelem Adatvédelem alapértelmezetten - - A %1$s automatikusan megakadályozza, hogy a cégek titokban kövessék Önt a weben. Bemutatkozik a Teljes sütivédelem, amely megakadályozza, hogy a nyomkövetők arra használhassák a sütiket, hogy kövessék a webhelyek között. @@ -1298,18 +1262,10 @@ Több nyomkövetőt blokkol, így az oldalak gyorsabban töltenek be, de egyes oldalfunkciók meghibásodhatnak. Válassza ki az eszköztár elhelyezését - - Helyezze az eszköztárat könnyen elérhető helyre. Tartsa az alján, vagy mozgassa a tetejére. Tartsa továbbra is lent, vagy vigye a tetejére. - - Adatvédelem Ön irányítja az adatait - - Úgy terveztük a %s böngészőt, hogy irányítást adjunk afelett, hogy mit oszt meg online, és mit oszt meg velünk. - A Firefox irányítást ad afelett, hogy mit oszt meg online, és mit oszt meg velünk. diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 732652ef0..e1e5d5d1c 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -46,8 +46,6 @@ - Nýleg bókamerki - Nýlega vistað Sýna öll vistuð bókamerki @@ -257,41 +255,19 @@ Leitarstillingar - Leita núna með: + Leita núna með: - - - Hvað er nýtt í %1$s - - Nú er auðveldara að halda áfram þar sem frá var horfið. - - Persónuleg %1$s upphafssíða - - Hoppaðu í opna flipa, bókamerki og vafraferil. - - Hreinlegir, skipulagðir flipar - - Hreinsaðu flipaóreiðuna með bættu skipulagi og sjálfvirkri lokun flipa. - - Nýlegar leitir - - - Skoðaðu nýjustu leitirnar þínar af upphafssíðunni þinni og flipum. - - - Sérsniðin Firefox-upphafssíða þín gerir það nú auðveldara að halda áfram þar sem frá var horfið. Finndu nýlega flipa, bókamerki og leitarniðurstöður. + + Leita núna í: + Kynntu þér persónulegu upphafssíðuna þína. Nýlegir flipar, bókamerki og leitarniðurstöður munu birtast hér. - Velkomin á sjálfstætt internet - Velkomin á persónulegra internet Fleiri litir. Betri persónuvarnir. Sama skuldbindingin sem setur fólk fram yfir hagnað. - Hoppaðu úr síma yfir í fartölvu og svo aftur til baka - Það er auðveldara en nokkru sinni að skipta á milli skjáa Haltu áfram þar sem þú hættir með flipum af öðrum tækjum, sem núna eru á upphafssíðunni þinni. @@ -357,6 +333,14 @@ Bæta við flýtileið fyrir huliðsglugga Einungis-HTTPS-hamur + + + Fækkun vefkökuborða + + Fækka vefkökuborðum + + Firefox reynir sjálfkrafa að hafna vefkökubeiðnum á vefkökuborðum. Ef ekki er boðið upp á að hafna vefkökum getur Firefox samþykkt allar vefkökur til að hafna borðanum. + Reynir sjálfkrafa að tengjast vefsvæðum með HTTPS dulritunareglum til að auka öryggi. @@ -1243,34 +1227,20 @@ Hópi eytt - - Velkomin í %s! - Velkomin á betra internet Vafri hannaður fyrir fólk, ekki gróða. - - Samstilla Firefox á milli tækja Halda áfram þar sem frá var horfið - - Komdu með bókamerki, feril og lykilorð yfir í %1$s á þessu tæki. Samstilltu flipa og lykilorð á milli tækja til að skipta óaðfinnanlega um skjái. - - Skráðu þig Skrá inn Kveikt er á samstillingu - - Sívökul friðhelgi Sjálfgefin persónuvernd - - %1$s kemur sjálfkrafa í veg fyrir að fyrirtæki fylgi þér í laumi um vefinn. Er með allsherjar-vefkökuvörn sem kemur í veg fyrir að rekjarar geti notað vafrakökur til að rekja slóð þína á milli vefsvæða. @@ -1284,17 +1254,10 @@ Lokar fyrir fleiri rekjara svo síður hlaðast hraðar, en einhver virkni á síðunni gæti rofnað. Veldu staðsetningu verkfærastikunnar - - Settu verkfærastikuna innan seilingar. Haltu henni neðst eða færðu hana efst. Haltu því neðst eða færðu það efst. - - Persónuvernd þín Þú stjórnar gögnunum þínum - - Við hönnuðum %s til að gefa þér stjórn yfir því hverju þú deilir á netinu og því sem þú deilir með okkur. Firefox gefur þér stjórn yfir því hverju þú deilir á netinu og því sem þú deilir með okkur. diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 7e34abd99..7087c2a43 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -347,6 +347,9 @@ ਕੂਕੀਜ਼ ਬੈਨਰ ਘਟਾਓ + + Firefox ਆਪਣੇ-ਆਪ ਕੂਕੀਜ਼ ਬੈਨਰ ਲਈ ਕੂਕੀਜ਼ ਬੇਨਤੀਆਂ ਨੂੰ ਇਨਕਾਰ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ ਕਰਦਾ ਹੈ। ਜੇ ਇਨਕਾਰ ਕਰਨ ਦੀ ਚੋਣ ਨਹੀਂ ਮੌਜੂਦ ਹੁੰਦੀ ਤਾਂ Firefox ਬੈਨਰ ਨੂੰ ਖਾਰਜ ਕਰਨ ਵਾਸਤੇ ਸਾਰੇ ਕੂਕੀਜ਼ ਨੂੰ ਮਨਜ਼ੂਰ ਵੀ ਕਰ ਸਕਦਾ ਹੈ। + ਵਾਧਾ ਕੀਤੀ ਸੁਰੱਖਿਆ ਲਈ HTTPS ਇੰਕ੍ਰਿਪਸ਼ਨ ਪਰੋਟੋਕਾਲ ਵਰਤ ਕੇ ਸਾਈਟਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਦੀ ਆਪਣੇ-ਆਪ ਕੋਸ਼ਿਸ਼ ਕਰੋ। diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 3c38351dc..e91c34481 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -46,8 +46,6 @@ - Недавни обележивачи - Недавно сачувано Прикажи све сачуване обележиваче @@ -257,42 +255,16 @@ Подешавања претраге - Овај пут претражујте са: + Овај пут претражујте са: - - Шта је ново у %1$s - - Сада је лакше да наставите тамо где сте стали. - - Прилагођена %1$s почетна страница - - Приступите отвореним језичцима, обележивачима и историји прегледања. - - Чисти, организовани језичци - - Очистите неред на језичцима помоћу побољшаног распореда и аутоматског затварања језичака. - - Недавне претраге - - - Поново посетите своје недавне претраге са почетне странице и језичака. - - - Ваша лична Firefox почетна страница сада олакшава да наставите тамо где сте стали. Пронађите своје недавне језичке, обележиваче и резултате претраге. - Упознајте своју персонализовану почетну страницу. Овде се приказују недавни језичци, обележивачи и резултати претраге. - Добродошли у независни интернет - Добродошли на више личан интернет Више боја. Боља приватност. Иста посвећеност: људи пре профита. - - Брзо се пребацујте између телефона и лаптопа - Пребацивање између екрана је лакше него икада @@ -361,6 +333,7 @@ Додајте пречицу за приватно прегледање Строги HTTPS режим + Самостално се повезујемо на странице користећи HTTPS протокол за шифровање података у преносу зарад боље безбедности. @@ -500,6 +473,10 @@ Ограничено издање + + Нова збирка „Независни гласови“. %s + + Нова збирка „Независни гласови“. Пробајте нове боје @@ -1248,35 +1225,21 @@ Група је обрисана - - Добро дошли у апликацију %s! - Добродошли на бољи интернет Прегледач за људе, а не за профит. - - Синхронизујте Firefox на више уређаја Наставите тамо где сте стали - - Пренесите обележиваче, историју и лозинке у %1$s на овом уређају. Синхронизујте језичке и лозинке на свим уређајима за несметано пребацивање. - - Пријави се Пријави се Sync је укључен - - Увек укључена приватност Подразумевана заштита приватности - - %1$s аутоматски спречава компаније да вас тајно прате на мрежи. Свеобухватна заштита колачића спречава трагаче да вас прате по интернету путем колачића. @@ -1289,17 +1252,10 @@ Блокира више пратилаца те се странице учитавају брже али неке могућности на страници можда неће радити. Изаберите положај алатнице - - Постави алатницу на дохват руке. Било на дну или на врху. На дну или на врху екрана - поставите по жељи. - - Ваша приватност Имате контролу над својим подацима - - Дизајнирали смо %s тако да имате пуну контролу над оним што делите на мрежи и са нама. Firefox вам даје контролу над оним што делите на мрежи и оним што делите са нама. diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index 4a162f1a2..12bf1b9af 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -333,6 +333,13 @@ Faqat HTTPS rejimi + + Cookie bannerlarini kamaytirish + + Cookie bannerlarini kamaytirish + + Firefox avtomatik ravishda cookie bannerlarida cookie soʻrovlarini rad etishga harakat qiladi. Agar rad etish tanlovi mavjud boʻlmasa, Firefox bannerni oʻchirish uchun barcha cookie fayllarni qabul qilishi mumkin. + Xavfsizlikni oshirish uchun HTTPS shifrlash protokoli yordamida saytlarga avtomatik ulanishga harakat qiladi. @@ -1829,7 +1836,96 @@ Yorliqlar chekloviga yetdi + + Yangi yorliq qoʻshish uchun eskilaridan birini olib tashlang. Saytni bosib turing va oʻchirishni tanlang. OK, tushundim - + + Yorliqlar + + Nomi + + + Yorliq nomi + + OK + + Bekor qilish + + Sozlamalar + + Bizning homiylarimiz va sizning maxfiyligingiz + + Homiylik qilgan + + + + Nofaol varaqlar + + Barcha nofaol varaqlarni yopish + + + Nofaol varaqlarni yoyish + + Nofaol varaqlarni yigʻish + + + + Bir oydan keyin avtomatik yopilsinmi? + + Oʻtgan oy ochilmagan varaqlarni Firefox yopishi mumkin. + + AVTOMATIK YOPISHNI YOQISH + + Avtomatik yoqish yoniq + + + Saytlar, elektron pochta va xabarlar havolalarini Firefoxda avtomatik ravishda ochiladigan qilib sozlang. + + + Olib tashlash + + + Batafsil axborot uchun bosing + + + Yuqoriga oʻtish + + + Yopish + + + + Oʻylantiruvchi hikoyalar + + Mavzu boʻyicha hikoyalar + + Koʻproq bilib oling + + Pocket tomonidan quvvatlanadi. + + %s tomonidan quvvatlanadi. + + Firefox oilasining bir qismi hisoblanadi. %s + + Batafsil ma’lumot + + Homiylik qilgan + + + Maʼlumotlarni yuborish uchun telemetriyani yoqing. + + Sozlamalarni ochish + Firefox Suggest + + + + + + yigʻish + + ushbu kolleksiya haqida koʻproq maʼlumot olish uchun havolani oching + + maqolani oʻqish + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 9fe8d59fd..fdceedba5 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -264,7 +264,10 @@ 搜索设置 - 这次搜索: + 这次搜索: + + + 此次搜索: @@ -340,6 +343,14 @@ 添加隐私浏览快捷方式 HTTPS-Only 模式 + + + 减少 Cookie 横幅 + + 减少 Cookie 横幅 + + Firefox 会自动尝试点击 Cookie 横幅上的“拒绝”按钮。若网站未提供拒绝选项,则可能会接受所有 Cookie 以关闭横幅。 + 自动尝试使用 HTTPS 加密协议连接至网站,增强安全性。 From 093918da60a0c3e3677a322dd835b795547a454a Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 25 Nov 2022 15:02:08 +0000 Subject: [PATCH 097/218] Update to Android-Components 109.0.20221125143304. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 1058587ca..f879435d2 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221124143318" + const val VERSION = "109.0.20221125143304" } From fb0db112656c51ad64ab316b77d453ceb2c62c65 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Sun, 27 Nov 2022 01:39:25 +0100 Subject: [PATCH 098/218] Import l10n. (#27981) --- app/src/main/res/values-el/strings.xml | 57 ++----------- app/src/main/res/values-eu/strings.xml | 95 +++++++++++----------- app/src/main/res/values-fy-rNL/strings.xml | 7 ++ app/src/main/res/values-it/strings.xml | 7 ++ app/src/main/res/values-kmr/strings.xml | 57 ++----------- app/src/main/res/values-oc/strings.xml | 13 ++- 6 files changed, 90 insertions(+), 146 deletions(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index ba486ae53..c22061764 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -49,9 +49,6 @@ Επιλέχθηκε - - Πρόσφατοι σελιδοδείκτες - Πρόσφατα αποθηκευμένα @@ -265,37 +262,13 @@ Ρυθμίσεις αναζήτησης - - Τι νέο υπάρχει στο %1$s - - Τώρα είναι ευκολότερο να επιστρέψετε εκεί όπου σταματήσατε. - - Εξατομικευμένη αρχική σελίδα %1$s - - Μεταβείτε στις ανοικτές καρτέλες, τους σελιδοδείκτες και το ιστορικό περιήγησής σας. - - Σαφείς, οργανωμένες καρτέλες - - Κλείστε περιττές καρτέλες με τη βελτιωμένη διάταξη και το αυτόματο κλείσιμο καρτελών. - - Πρόσφατες αναζητήσεις - - Επισκεφθείτε ξανά τις τελευταίες αναζητήσεις σας από την αρχική σελίδα και τις καρτέλες σας. - - - Η εξατομικευμένη αρχική σελίδα του Firefox διευκολύνει την επιστροφή στο σημείο που σταματήσατε. Βρείτε τις πρόσφατες καρτέλες, τους σελιδοδείκτες και τα αποτελέσματα αναζήτησής σας. - Γνωρίστε την εξατομικευμένη αρχική σας σελίδα. Οι πρόσφατες καρτέλες, οι σελιδοδείκτες και τα αποτελέσματα αναζήτησης θα εμφανίζονται εδώ. - Καλώς ορίσατε σε ένα ανεξάρτητο διαδίκτυο - Καλώς ορίσατε σε ένα πιο προσωπικό διαδίκτυο Περισσότερα χρώματα. Ενισχυμένο απόρρητο. Η ίδια δέσμευση να βάζουμε τον άνθρωπο πάνω από το κέρδος. - Εναλλαγή από τηλέφωνο σε υπολογιστή και αντίστροφα - Η εναλλαγή οθονών είναι πιο εύκολη από ποτέ Συνεχίστε από εκεί που σταματήσατε, με καρτέλες από άλλες συσκευές στην αρχική σας σελίδα. @@ -362,6 +335,7 @@ Προσθήκη συντόμευσης ιδιωτικής περιήγησης Λειτουργία «Μόνο HTTPS» + Προσπαθεί αυτόματα να συνδεθεί σε ιστοτόπους με το πρωτόκολλο κρυπτογράφησης HTTPS για αυξημένη ασφάλεια. @@ -473,6 +447,8 @@ Άρθρα που σας βάζουν σε σκέψεις + + Τα άρθρα παρέχονται από το %s Χορηγούμενα άρθρα @@ -655,6 +631,9 @@ Άνοιγμα %d καρτελών; + + Το άνοιγμα τόσο πολλών καρτελών ενδέχεται να επιβραδύνει το %s κατά τη φόρτωση των σελίδων. Θέλετε σίγουρα να συνεχίσετε; Άνοιγμα καρτελών @@ -1253,34 +1232,21 @@ Η ομάδα διαγράφηκε - - Καλώς ορίσατε στο %s! Καλώς ήρθατε σε ένα καλύτερο διαδίκτυο Ένα πρόγραμμα περιήγησης που δημιουργήθηκε για τους ανθρώπους, όχι το κέρδος. - - Συγχρονισμός Firefox μεταξύ συσκευών Συνεχίστε από εκεί που σταματήσατε - - Φέρτε σελιδοδείκτες, ιστορικό και κωδικούς πρόσβασης στο %1$s σε αυτήν τη συσκευή. Συγχρονίστε καρτέλες και κωδικούς πρόσβασης με τις συσκευές σας για απρόσκοπτη εναλλαγή οθονών. - - Εγγραφή Σύνδεση Το Sync είναι ενεργό - - Μόνιμη προστασία απορρήτου Προστασία απορρήτου από προεπιλογή - - Το %1$s εμποδίζει την καταγραφή της διαδικτυακής δραστηριότητάς σας από εταιρείες. Η Ολική προστασία cookie εμποδίζει τη χρήση των cookies από ιχνηλάτες που σας καταγράφουν μεταξύ ιστοτόπων. @@ -1293,17 +1259,10 @@ Φραγή περισσότερων ιχνηλατών για ταχύτερη φόρτωση σελίδων. Ορισμένες λειτουργίες της σελίδας ενδέχεται να δυσλειτουργούν. Επιλογή τοποθεσίας γραμμής εργαλείων - - Τοποθετήστε τη γραμμή εργαλείων σε κοντινή απόσταση. Κρατήστε την στο κάτω μέρος ή μετακινήστε την στο πάνω μέρος. Διατηρήστε τη στο κάτω μέρος ή μετακινήστε τη στο πάνω μέρος. - - Το απόρρητό σας Εσείς ελέγχετε τα δεδομένα σας - - Έχουμε σχεδιάσει το %s έτσι, ώστε να ελέγχετε τι κοινοποιείτε στο διαδίκτυο και σε εμάς. Το Firefox σάς επιτρέπει να ελέγχετε τι κοινοποιείτε στο διαδίκτυο και σε εμάς. @@ -1974,4 +1933,6 @@ ανάπτυξη άνοιγμα συνδέσμου για περισσότερες πληροφορίες σχετικά με αυτήν τη συλλογή - + + ανάγνωση του άρθρου + diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 887426ebd..b7e444464 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -15,6 +15,12 @@ Desgaitu nabigatze pribatua Bilatu edo idatzi helbidea + + Bilatu historia + + Bilatu laster-markak + + Bilatu fitxak Idatzi bilaketa-terminoak @@ -41,8 +47,6 @@ - Azken laster-markak - Gordetako azkenak Erakutsi gordetako laster-marka guztiak @@ -254,38 +258,19 @@ Bilaketa-ezarpenak - - - %1$s(r)en nobedadeak - - Errazagoa da orain utzi zenuen tokitik jarraitzea. - - %1$s hasiera-orri pertsonalizatua - - Saltatu irekitako zure fitxa, laster-marka eta nabigazio-historiara. - - Fitxa txukun eta antolatuak - - Kendu soberan dagoena hobetutako diseinu eta automatikoki ixten diren fitxekin. - - Azken bilaketak - - Itzuli zure azken bilaketetara zure hasiera-orri eta fitxetatik. - - - Errazagoa da utzitako lekutik jarraitzea Firefoxen pertsonalizatutako hasiera-orriarekin. Aurkitu zure azken fitxak, laster-markak eta bilaketa-emaitzak. + + Oraingoan, bilatu: + + Oraingoan, bilatu honekin: + Ezagut ezazu zure hasiera-orri pertsonalizatua. Azken fitxak, laster-markak eta bilaketa-emaitzak hemen agertuko dira. - Ongi etorri Internet independente batera - Ongi etorri Internet pertsonalago batera Kolore gehiago. Pribatutasun hobea. Irabazi-asmoen gainetik, jendearekiko betidaniko konpromisoa. - Egin salto telefonotik ordenagailu eramangarrira eta atzera - Pantailak aldatzea inoiz baino errazagoa da Berrekin utzitako lekutik zure hasierako orriko beste gailuetako fitxekin. @@ -351,6 +336,15 @@ Gehitu nabigatze pribaturako lasterbidea HTTPS-Only modua + + + Cookie iragarki-banden murrizpena + + Murriztu cookie iragarki-bandak + + + Firefox automatikoki saiatzen da cookie iragarki-bandetako eskaerak ukatzen. Ukatzeko aukera ez badago erabilgarri, Firefoxek cookie guztiak onar litzake iragarki-banda baztertzeko. + Automatikoki saiatzen da guneetara konektatzen HTTPS zifratze-protokoloa erabiliz, segurtasun gehiago lortzeko. @@ -458,8 +452,12 @@ a section where users see a list of tabs that they have visited in the past few days --> Bisitatutako azkenak - Pocket + Pocket + + Hausnartzeko moduko istorioak + + %s(e)k hornitutako artikuluak Babesleen istorioak @@ -643,6 +641,17 @@ Itxi + + Ireki %d fitxa? + + Hainbeste fitxa irekitzeak %s moteldu dezake orriak kargatzen diren bitartean. Ziur zaude jarraitu nahi duzula? + + Ireki fitxak + + Utzi + Gune bat @@ -871,6 +880,10 @@ Ireki fitxa berrian Ireki fitxa pribatuan + + Ireki guztiak fitxa berrietan + + Ireki guztiak fitxa pribatuetan Ezabatu @@ -1052,6 +1065,8 @@ Partekatu Gorde PDF gisa + + Ezin da PDFa sortu Bidali gailura @@ -1227,34 +1242,21 @@ Taldea ezabatuta - - Ongi etorri %s(e)ra! Ongi etorri Internet hobeago batera Herriarentzat egindako nabigatzailea, ez irabazi-asmoentzat. - - Sinkronizatu Firefox gailuen artean Jarraitu utzi zenuen tokitik - - Ekarri laster-markak, historia eta pasahitzak gailu honetako %1$s(e)ra. Sinkronizatu gailuen artean fitxak eta pasahitzak, pantailen artean di-da aldatzeko. - - Eman izena Hasi saioa Sinkronizazioa aktibo dago - - Pribatutasuna beti aktibo Pribatutasunaren babesa lehenespenez - - %1$s(e)k automatikoki eragozten du konpainiek sekretuki zu webean zehar jarraitzea. Cookien erabateko babesarekin, jarraipen-elementuei guneen artean zelatatzen zaituzten cookieak erabiltzea galarazten zaie. @@ -1267,17 +1269,10 @@ Jarraipen-elementu gehiago blokeatzen ditu orriak azkarrago karga daitezen baina orriko zenbait eginbide hauts litezke. Hautatu tresna-barraren kokapena - - Izan tresna-barra esku-eskura. Manten ezazu behean edo eraman ezazu gora. Manten ezazu behean edo eramazu gora. - - Zure pribatutasuna Zuk kontrolatzen dituzu zure datuak - - Online partekatzen duzunaren eta gurekin partekatzen duzunaren inguruko kontrola emateko diseinatu dugu %s. Online partekatzen duzunaren eta gurekin partekatzen duzunaren inguruko kontrola ematen dizu Firefoxek. @@ -1913,7 +1908,9 @@ Aurkitu gehiago - Pocket-ek hornitua. + Pocket-ek hornitua. + + %s(e)k hornitua. Firefoxen familiakoa. %s @@ -1935,4 +1932,6 @@ zabaldu ireki lotura bilduma honi buruzko argibide gehiagorako + + irakurri artikulua diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index ea75d4546..d7f0e29e4 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -337,6 +337,13 @@ Allinnich-HTTPS-modus + + Reduksje fan cookiebanners + + Cookiebanners redusearje + + Firefox probearret automatysk cookie-oanfragen op cookiebanners te wegerjen. As der gjin wegeringsopsje beskikber is, akseptearret Firefox mooglik alle cookies om de banner te sluten. + Probearret foar in bettere befeiliging automatysk mei it HTTPS-fersiferingsprotokol ferbining te meitsjen mei websites. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 83375c545..6c30ab590 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -340,6 +340,13 @@ Modalità solo HTTPS + + Riduzione banner per i cookie + + Riduci i banner per i cookie + + Firefox cerca automaticamente di rifiutare le richieste di cookie quando viene visualizzato un banner per i cookie. Se l’opzione per rifiutarli non è disponibile, Firefox potrebbe accettare tutti i cookie per chiudere il banner. + Tenta automaticamente la connessione ai siti utilizzando il protocollo di crittografia HTTPS per una maggiore sicurezza. diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index 76261ec29..e2681ba08 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -44,9 +44,6 @@ Hate bijartin - - Bijareyên dawiyê - Tomarbûnên dawî @@ -261,41 +258,16 @@ Eyarên lêgerînê - Lêgerîna niha: + Lêgerîna niha: - - Tiştên nû yên %1$s`ê - - Niha hêsantir e ku vegerî ciyê lê mayî. - - Serûpela %1$s `ê ya şexsîkirî - - Here hilpekînên xwe yên vekirî, bijareyan û mêjûya lêgerînê. - - Hilpekînên serhevedayî - - - Bi pergala nû ya hilpekînan û hilpekînên xweber tên girtin tevliheviyê ji holê rakin. - - Lêgerînên dawiyê - - Vegere lêgerînên xwe yên dawiyê yên ji serûpel û hilpekînan. - - - Serûpela te ya Firefoxê ya şexsîkirî niha hêsantir dike ku tu li ciyê lê mayî dewam bikî. Hilpekîn, bijare û encamên dawiyê yên lêgerînên xwe bibîne. - Serûpela xwe ya taybet nas bike. Tu yê li virê hilpekîn, bijare û encamên lêgerînên xwe yên dawiyê bibînî. - Tu bi xêr hatiyî înterneteke serbixwe - Tu bi xêr hatiyî înterneteke kesanetir Rengên zêdetir. Ewlekariya çêtir. Ne ji bo pereyan, ji bo mirovahiyê. - Ji telefonê derbasî kompîturê, ji kompîturê derbasî telefonê bibe - Derbasbûna ji cîhazekê bo cîhazeke din êdî hêsantir e Êdî hilpekînên te yên cîhazên din di serûpela te de ne. @@ -361,6 +333,7 @@ Kurterêya gerîna veşartî tevlî bike Moda Tenê-HTTPS + Ji bo ewlekariya zêdetir hewlê bide ku bi protokola şîfrekirî ya HTTPSê bi awayekî xweber têkeve malperan. @@ -468,6 +441,10 @@ Pocket + + Gotarên balkêş + + Gotar ji aliyê %sê ve tên dabînkirin Nûçeyên sponsorkirî @@ -1248,33 +1225,20 @@ Kom hat jêbirin - - Tu bi xêr hatî %s’ê! Tu bi xêr hatiyî înterneta baştir Gerokeke ji bo mirovan hatiye çêkirin, ne ji bo pereyan. - - Firefoxê di navbera amûran de senkronîze bike Ji ciyê lê mayî dewam bike - - Bijareyan, raboriyê û şîfreyan bîne nav %1$s`ê. Ji bo derbasbûna bêproblem ya di navbera cîhazan de hilpekîn û şîfreyên xwe senkronîze bike. - - Xwe tomar bike Têkeve Sync vekirî ye - - Her car -nepen Parastina nihêniyê temî vekirî ye - - %1$s bi awayekî xweber asteng dike ku şirket we li ser webê bi dizî bişopînin. Parastina çerezan ya bi temamî kodên şopandinê asteng dike ku nikaribin te li ser webê bişopînin. @@ -1287,17 +1251,10 @@ Ji bo rûpel zûtir bên vekirin zêdetir şopîneran asteng dike lê dibe ku hin fonksiyonên rûpelan xira bibin. Ciyê darikê amûran hilbijêre - - Darikê amûran dayne ciyekê bi hêsanî bigihîjiyê. Dikarî wê li xwarê bihêlî yan jî bibî jorê. Li jêrê bihêle an jî bikişîne jorî. - - Nihêniya te Kontrola daneyên te di destê te de ye - - Me %s ji bo hindê çêkiriye ku derbarê tiştên tu li ser înternetê û tiştên bi me re parve dikî de kontrol di destê te de be. Firefox kontrola hindê dide te ka tu li ser înternetê bi kesên din û bi me re çi parve dikî. @@ -1954,4 +1911,6 @@ fireh bike ji bo derbarê vê koleksiyonê de bêtir bizanî, girêdankê veke + + gotarê bixwîne diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index a7863c35a..3690927a5 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -255,7 +255,10 @@ Paramètres de recèrca - Aqueste còp cercar : + Aqueste còp cercar : + + + Aqueste còp cercar amb : @@ -331,6 +334,14 @@ Ajustar un acorchi per la navegacion privada Mòde HTTPS solament + + + Reduccion de las bandièras de cookies + + Reduire las bandièras de cookies + + Firefox ensaja automaticament de regetar las demandas de cookies de las bandièras de cookies. Se l’opcion de refús es pas disponibla, Firefox accèpta totes las cookies per tampar la bandièra. + Ensaja automaticament de se connectar als sites amb lo chiframent HTTPS per una seguretat melhorada. From c4b9983bfb5e65450d6fd6c599511734059a5c31 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Mon, 28 Nov 2022 01:42:30 +0100 Subject: [PATCH 099/218] Import l10n. (#27991) --- app/src/main/res/values-cs/strings.xml | 153 ++++++++++----------- app/src/main/res/values-el/strings.xml | 12 ++ app/src/main/res/values-es-rES/strings.xml | 61 ++------ app/src/main/res/values-ia/strings.xml | 5 + app/src/main/res/values-ru/strings.xml | 11 ++ app/src/main/res/values-sk/strings.xml | 7 + app/src/main/res/values-sq/strings.xml | 60 ++------ app/src/main/res/values-su/strings.xml | 7 + 8 files changed, 136 insertions(+), 180 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index aa4b4604f..4dd39aa12 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -16,6 +16,12 @@ Zakáže režim anonymního prohlížení Zadejte hledání nebo adresu + + Hledat v historii + + Hledat v záložkách + + Hledat panely Zadejte hledaný výraz @@ -41,7 +47,7 @@ - Naposledy přidané + Naposledy uložené Zobrazit všechny uložené záložky @@ -78,6 +84,9 @@ Zavřít + + Zjistit více o úplné ochraně před cookies + Pro tuto funkci je potřeba povolit přístup k fotoaparátu. Ten můžete povolit v nastavení oprávnění aplikací v systému Android. @@ -123,12 +132,6 @@ Tlačítko pro zobrazení všech nedávných panelů - - Vaše vyhledávání „%1$s“ - - Stránek: %d Zobrazit synchronizované panely @@ -253,26 +256,14 @@ Nastavení vyhledávání - - - Co je v aplikaci %1$s nového - - Jednoduše pokračujte, kde jste dříve skončili. - - Osobní domovská stránka aplikace %1$s - - Rychlý přístup k otevřeným panelům, vašim záložkám i historii. - - Úhledně srovnané panely - - Vylepšené zobrazení nebo automatické zavírání vás zbaví nepořádku v panelech. - - Nedávno vyhledávané - - Na domovské stránce najdete, co jste nedávno hledali. - - - Na své osobní domovské stránce Firefoxu vždy najdete, co jste dělali naposledy, ať už nedávno otevřené panely, záložky nebo výsledky vyhledávání. + + Začít + + Přihlásit se + + Přeskočit + + Zavřít @@ -323,6 +314,7 @@ Vytvořit zkratku pro anonymní prohlížení Režim „pouze HTTPS“ + Pro zvýšení zabezpečení se automaticky pokusí připojit k webům pomocí šifrovacího protokolu HTTPS. @@ -362,8 +354,6 @@ Přizpůsobení - S účtem Firefoxu můžete synchronizovat záložky, historii i další svá data - Pro synchronizaci svých panelů, záložek, hesel a dalších věcí se přihlaste. Účet Firefoxu @@ -432,8 +422,10 @@ a section where users see a list of tabs that they have visited in the past few days --> Nedávno navštívené - Pocket + Pocket + + Podnětné články Sponzorované články @@ -449,11 +441,16 @@ Zobrazit - - Klepnutím na logo Firefoxu na domovské stránce změnit tapetu - - Logo Firefox - klepnutím změní tapetu, tlačítko + + Zkusit znovu + + Zjistit více + + Limitovaná edice + + Zkuste barevný nádech + + Podívejte se na další tapety @@ -538,8 +535,6 @@ Povolí Mozille instalovat a spouštět studie. - - Zapnout synchronizaci Synchronizujte a ukládejte svá data @@ -600,6 +595,14 @@ Zavřít + + Otevřít %d panelů? + + Otevřít panely + + Zrušit + Jedna stránka @@ -629,10 +632,6 @@ Seznam Mřížka - - Seskupené panely vyhledávání - - Seskupí související stránky Zavírat panely @@ -738,8 +737,6 @@ Otevřít nabídku panelů Uložit panely do sbírky - - Nabídka panelů @@ -764,9 +761,6 @@ %1$s (anonymní režim) - - Další panely - Zadejte hledané výrazy @@ -795,18 +789,6 @@ Zatím nemáte žádnou historii prohlížení - - Synchronizované z jiného zařízení - - Z jiných zařízení - - - Pro zobrazení historie prohlížení z vašich ostatních zařízení se prosím přihlaste. - - Přihlásit se - - Nebo si vytvořte účet Firefox a začněte synchronizovat]]> - Stažené soubory smazány @@ -856,6 +838,10 @@ Otevřít v novém panelu Otevřít v anonymním panelu + + Otevřít vše v nových panelech + + Otevřít vše v anonymních panelech Odstranit @@ -1036,6 +1022,8 @@ Sdílet + + Uložit jako PDF Poslat do zařízení @@ -1047,9 +1035,11 @@ Zkopírováno do schránky - Přihlásit se k synchronizaci + Přihlásit se k synchronizaci Přihlásit ke službě Sync + + Synchronizace a ukládání dat Poslat do všech zařízení @@ -1177,8 +1167,6 @@ Ukončit - - Opravdu chcete smazat všechna soukromá data? Časové období mazání @@ -1203,22 +1191,14 @@ Zrušit - - - Vítá vás %s - - Synchronizace Firefoxu mezi zařízeními - - Přeneste si své záložky, historii a hesla do aplikace %1$s i na tomto zařízení. - - Přihlásit se + + Prohlížeč postavený pro lidi, ne pro peníze. + + Přihlásit se Synchronizace je zapnutá - - Soukromí pro vás a napořád - - %1$s automaticky zabrání společnostem v tajném sledování vašeho prohlížení webu. + + Ochrana soukromí již ve výchozím nastavení Standardní (výchozí) @@ -1229,13 +1209,8 @@ Blokuje více sledovacích prvků. Zrychlí i načítání stránek, ale může omezit jejich fungování. Vyberte si umístění nástrojové lišty - - Nastavte si umístění nástrojové lišty na obrazovce dole nebo nahoře, ať na ni dosáhnete. - - Vaše soukromí - - %s vám dává kontrolu nad tím, co sdílíte online a co sdílíte s námi. + + Firefox vám dává kontrolu nad tím, co sdílíte online a co sdílíte s námi. Přečíst zásady ochrany osobních údajů @@ -1347,6 +1322,8 @@ Omezuje možnosti sociálních sítí sledovat vaše aktivity napříč internetem. Sledovací cookies + + Cross-site cookies Blokuje cookies, které používají reklamní sítě a firmy ke sběru informací z mnoha serverů na internetu. @@ -1856,7 +1833,7 @@ Objevte více - Službu poskytuje Pocket. + Službu poskytuje Pocket. Součást rodiny Firefoxu. %s @@ -1870,4 +1847,14 @@ Přejít do nastavení Návrhy od Firefoxu + + + + sbalit + + rozbalit + + otevřít odkaz a zjistit více o této sbírce + + přečíst článek diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index c22061764..8e8e2469e 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -261,6 +261,11 @@ Ρυθμίσεις αναζήτησης + + Αυτήν τη φορά, αναζήτηση: + + Αυτήν τη φορά, αναζήτηση σε: + Γνωρίστε την εξατομικευμένη αρχική σας σελίδα. Οι πρόσφατες καρτέλες, οι σελιδοδείκτες και τα αποτελέσματα αναζήτησης θα εμφανίζονται εδώ. @@ -336,6 +341,13 @@ Λειτουργία «Μόνο HTTPS» + + Μείωση μπάνερ cookie + + Μείωση μπάνερ cookie + + Το Firefox προσπαθεί αυτόματα να απορρίψει τα αιτήματα cookie σε μπάνερ cookie. Εάν δεν διατίθεται επιλογή απόρριψης, το Firefox μπορεί να αποδεχτεί όλα τα cookies για να απορρίψει το μπάνερ. + Προσπαθεί αυτόματα να συνδεθεί σε ιστοτόπους με το πρωτόκολλο κρυπτογράφησης HTTPS για αυξημένη ασφάλεια. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 7feff5281..a5f75524f 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -48,9 +48,6 @@ Seleccionada - - Marcadores recientes - Guardado recientemente @@ -264,39 +261,18 @@ Configuración de búsquedas - Buscar esta vez: + Buscar esta vez: - - - Novedades de %1$s - - Ahora es más fácil continuar donde lo habías dejado. - - Página de inicio de %1$s personalizada - - Accede a tus pestañas abiertas, marcadores y al historial de navegación. - - Pestañas claras y organizadas - - Elimina el desorden de pestañas con un diseño mejorado y con cierre automático. - - Búsquedas recientes - - Revisa tus últimas búsquedas desde tu página de inicio y pestañas. - - - Tu página de inicio de Firefox personalizada hace que ahora sea más fácil continuar donde lo habías dejado. Encuentra tus pestañas, marcadores y resultados de búsqueda recientes. + + Esta vez buscar en: + Descubre tu página de inicio personalizada. Las pestañas recientes, marcadores y resultados de búsqueda aparecerán aquí. - Te damos la bienvenida a un internet independiente - Te damos la bienvenida a un Internet más personal Más colores. Mejor privacidad. Mismo compromiso con las personas por encima de los beneficios. - - Salta del teléfono al ordenador y viceversa Cambiar de pantalla es más fácil que nunca @@ -365,6 +341,14 @@ Agregar acceso directo a navegación privada Modo solo HTTPS + + + Reducción de avisos de cookies + + Reducir los avisos de cookies + + Firefox intenta rechazar automáticamente las solicitudes de cookies en los avisos de cookies. Si no está disponible una opción de rechazo, Firefox podría aceptar todas las cookies para cerrar el aviso. + Intenta conectarse automáticamente a sitios utilizando el protocolo de cifrado HTTPS para mayor seguridad. @@ -1281,34 +1265,20 @@ Grupo eliminado - - ¡Te damos la bienvenida a %s! - Te damos la bienvenida a un mejor Internet Un navegador creado para las personas, no para el lucro. - - Sincronizar Firefox entre dispositivos Continúa donde lo dejaste. - - Traer marcadores, historial y contraseñas a %1$s en este dispositivo. Sincroniza pestañas y contraseñas entre dispositivos para cambiar de pantalla sin interrupciones. - - Registrarse Iniciar sesión Sync está activado - - Privacidad siempre activada Protección de privacidad de manera predeterminada - - %1$s bloquea automáticamente a las compañías que te siguen en secreto por la web. Incluye Total Cookie Protection para evitar que los rastreadores usen cookies para espiarte entre sitios. @@ -1321,17 +1291,10 @@ Bloquea más rastreadores para que las páginas se carguen más rápido, pero pueden fallar algunas funcionalidades de la página. Escoge la posición de la barra de herramientas - - Pon la barra de herramientas a tu alcance. Mantenla abajo, o muévela hacia arriba. Mantenlo en la parte inferior o muévelo a la parte superior. - - Tu privacidad Tú controlas tus datos - - Hemos diseñado %s para darte el control sobre lo que compartes en línea y lo que compartes con nosotros. Firefox te da control sobre lo que compartes en línea y lo que compartes con nosotros. diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index a4a73fa2e..c02719475 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -338,6 +338,11 @@ Modo solo HTTPS + + Reduction de banner pro le cookie + + Reducer banners pro le cookie + Automaticamente tenta de connecter se al sitos per le protocollo de cryptation HTTPS pro major securitate. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index fb290d0b5..13ac49566 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -267,6 +267,9 @@ В этот раз искать: + + В этот раз искать в: + Познакомьтесь с настраиваемой домашней страницей. Здесь будут отображаться последние вкладки, закладки и результаты поиска. @@ -342,6 +345,14 @@ Режим «Только HTTPS» + + Снижение числа уведомлений о куках + + + Снижать число уведомлений о куках + + Firefox автоматически пытается отклонить запросы на установку кук при показе уведомлений о них. Если вариант отклонения недоступен, Firefox может принять все куки, чтобы скрыть уведомление. + Автоматически пытаться подключиться к сайтам через протокол шифрования HTTPS для повышения безопасности. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 324f576ad..d233464fc 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -341,6 +341,13 @@ Režim "Len HTTPS" + + Zníženie počtu bannerov súborov cookie + + Znižovať počet bannerov súborov cookie + + Firefox sa automaticky pokúša odmietnuť žiadosti o uloženie súborov cookie na informačných banneroch súborov cookie. Ak možnosť odmietnutia nie je k dispozícii, Firefox môže akceptovať všetky súbory cookie, aby oznámenie zavrel. + Automaticky sa pokúša pripojiť k stránkam pomocou šifrovacieho protokolu HTTPS na zvýšenie bezpečnosti. diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index c4c5e768f..6136fde8d 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -44,9 +44,6 @@ E përzgjedhur - - Faqerojtës së fundi - Ruajtur së fundi @@ -257,40 +254,19 @@ Rregullime mbi kërkimin - Kërkimi këtë herë: + Kërkimi këtë herë: - - - Ç’ka të re në %1$s - - Tani është më e lehtë t’ia rifilloni atje ku e latë. - - Faqe hyrëse e personalizuar %1$s - - Kaloni te skeda tuajat të hapura, faqerojtës dhe historik shfletimesh. - - Skeda të qëruara, të sistemuara - - Spastroni rrëmujën e skedave, me skemë të përmirësuar dhe skeda me vetëmbyllje. - - Kërkime së fundi - - Rivizitoni kërkimet tuaja më të reja prej faqes tuaj hyrëse dhe skedash. - - - Faqja juaj hyrëse në Firefox, e personalizuar, tani e bën më të lehtë të riktheheni atje ku e latë. Gjeni skedat, faqerojtësit dhe përfundime kërkimi tuajat më të freskëta. + + Këtë herë kërko te: + Njihuni me faqen tuaj hyrëse të personalizuar. Këtu do të shfaqen skeda të hapura së fundi, faqerojtës dhe përfundime kërkimi. - Mirë se vini te një internet i pavarur - Mirë se vini te një internet më personal Më tepër ngjyra. Privatësi më e mirë. I njëjti përkushtim ndaj njerëzve, jo ndaj fitimeve. - Kaloni nga telefoni në portativ, ose anasjelltas - Ndërrimi i ekraneve është më i lehtë se kurrë Vazhdojeni ku e latë, me skeda nga pajisje të tjera tani në faqen tuaj hyrëse. @@ -355,6 +331,14 @@ Shtoni shkurtore shfletimi privat Mënyra Vetëm-HTTPS + + + Reduktim Banderolash Për Cookie-t + + Redukto banderola për cookie-t + + Firefox-i provon automatikisht të hedhë tej kërkesa për “cookie” nga banderola cookie-shbanners. Nëse s’ka mundësi hedhjeje tej, Firefox-i mund të pranojë krejt cookie-t, për të hequr qafe banderolën. + Përpiqet automatikisht të lidhet me sajtet duke përdorur protokollin HTTPS të fshehtëzimit, për më tepër siguri. @@ -1244,33 +1228,20 @@ Grupi u fshi - - Mirë se vini te %s! Mirë se vini në një internet më të mirë Një shfletues i ndërtuar për njerëzit, jo për fitime. - - Njëkohësoni Firefox-in mes pajisjesh Vazhdoni atje ku e latë - - Sillni faqerojtës, historik dhe fjalëkalime te %1$s në këtë pajisje. Njëkohësoni skeda dhe fjalëkalime përmes pajisjesh, për ndërrim të pacen ekranesh. - - Regjistrohuni Hyni Njëkohësimi është aktiv - - Privatësi gjithnjë në punë Mbrojtje privatësie, si parazgjedhje - - %1$s i pengon vetvetiu shoqëritë t’ju ndjekin ju fshehtas nëpër internet. Me Mbrojtj Tërësore Nga Cookie-t, për të ndalur gjurmuesit të përdorin “cookies” për t’ju ndjekur nëpër sajte. @@ -1283,17 +1254,10 @@ Bllokon më shumë gjurmues, ndaj faqet ngarkohen më shpejt, por disa anë, pjesë e faqes, mund të mos punojnë. Zgjidhni vendosjen e panelit tuaj - - Vendoseni panelin diku ku e përdorni kollaj. Mbajeni në fund, ose kalojeni në krye. Mbajeni në fund, ose shpjereni në krye. - - Privatësia juaj Të dhënat tuaja i kontrolloni ju - - E kemi hartuar %s për t’ju dhënë kontroll mbi ç’ndani me të tjerë në internet dhe ç’ndani me ne. Firefox-i ju lejon kontroll mbi ç’ndani me të tjerë në internet dhe ç’ndani me ne. diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index cf5b30472..2d56ef053 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -335,6 +335,13 @@ Mode HTTPS-Hungkul + + Kurangan Spanduk Réréméh + + Kurangan spanduk réréméh + + Firefox otomatis nyoba nampik pamundut réréméh dina spanduk réréméh. Upama teu aya pilihan nampik, Firefox bisa nampa sadaya réréméh pikeun ngaleungitkeun spandukna. + Otomatis nyoba nyambung ka loka maké protokol énkripsi HTTPS pikeun ngaronjatkeun kaamanan. From 4f5165d1da9d27076c6e849600d34bcd40dba340 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 27 Nov 2022 23:21:09 +0000 Subject: [PATCH 100/218] Update to Android-Components 109.0.20221127143308. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index f879435d2..015e6fbf3 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221125143304" + const val VERSION = "109.0.20221127143308" } From 171a2e652244bd141dc6299aac6e393c38f2ad8f Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 23 Nov 2022 17:54:58 +0200 Subject: [PATCH 101/218] For #26633: Add post notifications permission. --- app/src/main/AndroidManifest.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9a3019274..feaa56b1e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,6 +29,9 @@ + + + Date: Mon, 21 Nov 2022 14:19:39 +0200 Subject: [PATCH 102/218] For #27896 - Match share sheet header style with the rest "Send to device" share sheet header is now styled to match the other headers. --- app/src/main/res/layout/share_to_account_devices.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/res/layout/share_to_account_devices.xml b/app/src/main/res/layout/share_to_account_devices.xml index 6009a4a74..06bf7ddc4 100644 --- a/app/src/main/res/layout/share_to_account_devices.xml +++ b/app/src/main/res/layout/share_to_account_devices.xml @@ -11,16 +11,12 @@ From 9b920a472cfb0e3d97bf15e826146b3964ebf48e Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Mon, 28 Nov 2022 15:02:12 +0000 Subject: [PATCH 103/218] Update to Android-Components 109.0.20221128143301. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 015e6fbf3..2a9e88918 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221127143308" + const val VERSION = "109.0.20221128143301" } From 11efaff96c544dc5bd281d248da8e6bf9d216dd6 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Fri, 25 Nov 2022 12:41:01 -0500 Subject: [PATCH 104/218] Close #27949: Add engagement notification for inactive users --- .experimenter.yaml | 8 + app/metrics.yaml | 26 ++++ .../java/org/mozilla/fenix/HomeActivity.kt | 2 + .../mozilla/fenix/browser/BrowserFragment.kt | 1 + .../intent/DefaultBrowserIntentProcessor.kt | 31 +++- .../DefaultBrowserNotificationWorker.kt | 52 +------ .../onboarding/MarketingNotificationHelper.kt | 60 ++++++++ .../ReEngagementNotificationWorker.kt | 139 ++++++++++++++++++ .../java/org/mozilla/fenix/utils/Settings.kt | 34 ++++- app/src/main/res/values/preference_keys.xml | 2 + app/src/main/res/values/strings.xml | 5 + .../DefaultBrowserIntentProcessorTest.kt | 42 ++++++ .../ReEngagementNotificationWorkerTest.kt | 44 ++++++ .../org/mozilla/fenix/utils/SettingsTest.kt | 60 ++++++++ nimbus.fml.yaml | 8 + 15 files changed, 463 insertions(+), 51 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/onboarding/MarketingNotificationHelper.kt create mode 100644 app/src/main/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorker.kt create mode 100644 app/src/test/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorkerTest.kt diff --git a/.experimenter.yaml b/.experimenter.yaml index 04d51d391..6ae24eaa4 100644 --- a/.experimenter.yaml +++ b/.experimenter.yaml @@ -71,6 +71,14 @@ nimbus-validation: settings-title: type: string description: The title of displayed in the Settings screen and app menu. +re-engagement-notification: + description: A feature that shows the re-enagement notification if the user is inactive. + hasExposure: true + exposureDescription: "" + variables: + enabled: + type: boolean + description: "If true, the re-engagement notification is shown to the inactive user." search-term-groups: description: A feature allowing the grouping of URLs around the search term that it came from. hasExposure: true diff --git a/app/metrics.yaml b/app/metrics.yaml index 366853f34..9be2bed32 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -206,6 +206,32 @@ events: - https://github.com/mozilla-mobile/fenix/issues/27779 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/27780 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: 122 + re_engagement_notif_tapped: + type: event + description: | + User tapped on the re-engagement notification + bugs: + - https://github.com/mozilla-mobile/fenix/issues/27949 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/27978 + data_sensitivity: + - interaction + notification_emails: + - android-probes@mozilla.com + expires: 122 + re_engagement_notif_shown: + type: event + description: | + Re-engagement notification was shown to the user + bugs: + - https://github.com/mozilla-mobile/fenix/issues/27949 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/27978 data_sensitivity: - technical notification_emails: diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 36da2108d..aa972e5b8 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -103,6 +103,7 @@ import org.mozilla.fenix.library.historymetadata.HistoryMetadataGroupFragmentDir import org.mozilla.fenix.library.recentlyclosed.RecentlyClosedFragmentDirections import org.mozilla.fenix.onboarding.DefaultBrowserNotificationWorker import org.mozilla.fenix.onboarding.FenixOnboarding +import org.mozilla.fenix.onboarding.ReEngagementNotificationWorker import org.mozilla.fenix.perf.MarkersActivityLifecycleCallbacks import org.mozilla.fenix.perf.MarkersFragmentLifecycleCallbacks import org.mozilla.fenix.perf.Performance @@ -377,6 +378,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { components.appStore.dispatch(AppAction.ResumedMetricsAction) DefaultBrowserNotificationWorker.setDefaultBrowserNotificationIfNeeded(applicationContext) + ReEngagementNotificationWorker.setReEngagementNotificationIfNeeded(applicationContext) } } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index f4e02b49a..ce42a1c24 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -261,6 +261,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { } subscribeToTabCollections() + updateLastBrowseActivity() } override fun onStop() { diff --git a/app/src/main/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessor.kt index 8952a240e..ae739089b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessor.kt @@ -6,12 +6,17 @@ package org.mozilla.fenix.home.intent import android.content.Intent import androidx.navigation.NavController +import mozilla.components.concept.engine.EngineSession import mozilla.telemetry.glean.private.NoExtras +import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.ext.openSetDefaultBrowserOption import org.mozilla.fenix.ext.settings import org.mozilla.fenix.onboarding.DefaultBrowserNotificationWorker.Companion.isDefaultBrowserNotificationIntent +import org.mozilla.fenix.onboarding.ReEngagementNotificationWorker +import org.mozilla.fenix.onboarding.ReEngagementNotificationWorker.Companion.isReEngagementNotificationIntent /** * When the default browser notification is tapped we need to launch [openSetDefaultBrowserOption] @@ -24,12 +29,26 @@ class DefaultBrowserIntentProcessor( ) : HomeIntentProcessor { override fun process(intent: Intent, navController: NavController, out: Intent): Boolean { - return if (isDefaultBrowserNotificationIntent(intent)) { - activity.openSetDefaultBrowserOption() - Events.defaultBrowserNotifTapped.record(NoExtras()) - true - } else { - false + return when { + isDefaultBrowserNotificationIntent(intent) -> { + Events.defaultBrowserNotifTapped.record(NoExtras()) + + activity.openSetDefaultBrowserOption() + true + } + isReEngagementNotificationIntent(intent) -> { + Events.reEngagementNotifTapped.record(NoExtras()) + + activity.browsingModeManager.mode = BrowsingMode.Private + activity.openToBrowserAndLoad( + ReEngagementNotificationWorker.NOTIFICATION_TARGET_URL, + newTab = true, + from = BrowserDirection.FromGlobal, + flags = EngineSession.LoadUrlFlags.external(), + ) + true + } + else -> false } } } diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt b/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt index 746554bfe..5cc3a105f 100644 --- a/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt +++ b/app/src/main/java/org/mozilla/fenix/onboarding/DefaultBrowserNotificationWorker.kt @@ -5,12 +5,9 @@ package org.mozilla.fenix.onboarding import android.app.Notification -import android.app.NotificationChannel -import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent -import android.os.Build import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat @@ -22,7 +19,6 @@ import androidx.work.WorkerParameters import mozilla.components.service.glean.private.NoExtras import mozilla.components.support.base.ids.SharedIdsHelper import org.mozilla.fenix.GleanMetrics.Events -import org.mozilla.fenix.GleanMetrics.Events.marketingNotificationAllowed import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.settings @@ -36,9 +32,15 @@ class DefaultBrowserNotificationWorker( ) : Worker(context, workerParameters) { override fun doWork(): Result { - val channelId = ensureChannelExists() + val channelId = ensureMarketingChannelExists(applicationContext) + NotificationManagerCompat.from(applicationContext) - .notify(NOTIFICATION_TAG, NOTIFICATION_ID, buildNotification(channelId)) + .notify( + NOTIFICATION_TAG, + DEFAULT_BROWSER_NOTIFICATION_ID, + buildNotification(channelId), + ) + Events.defaultBrowserNotifShown.record(NoExtras()) // default browser notification should only happen once @@ -81,45 +83,7 @@ class DefaultBrowserNotificationWorker( } } - /** - * Make sure a notification channel for default browser notification exists. - * - * Returns the channel id to be used for notifications. - */ - private fun ensureChannelExists(): String { - var channelEnabled = true - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val notificationManager: NotificationManager = - applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - - val channel = NotificationChannel( - NOTIFICATION_CHANNEL_ID, - applicationContext.getString(R.string.notification_marketing_channel_name), - NotificationManager.IMPORTANCE_DEFAULT, - ) - - notificationManager.createNotificationChannel(channel) - - val existingChannel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID) - channelEnabled = - existingChannel != null && existingChannel.importance != NotificationManager.IMPORTANCE_NONE - } - - @Suppress("TooGenericExceptionCaught") - val notificationsEnabled = try { - NotificationManagerCompat.from(applicationContext).areNotificationsEnabled() - } catch (e: Exception) { - false - } - - marketingNotificationAllowed.set(notificationsEnabled && channelEnabled) - - return NOTIFICATION_CHANNEL_ID - } - companion object { - private const val NOTIFICATION_CHANNEL_ID = "org.mozilla.fenix.default.browser.channel" - private const val NOTIFICATION_ID = 1 private const val NOTIFICATION_PENDING_INTENT_TAG = "org.mozilla.fenix.default.browser" private const val INTENT_DEFAULT_BROWSER_NOTIFICATION = "org.mozilla.fenix.default.browser.intent" private const val NOTIFICATION_TAG = "org.mozilla.fenix.default.browser.tag" diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/MarketingNotificationHelper.kt b/app/src/main/java/org/mozilla/fenix/onboarding/MarketingNotificationHelper.kt new file mode 100644 index 000000000..980f1d95c --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/onboarding/MarketingNotificationHelper.kt @@ -0,0 +1,60 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.onboarding + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.os.Build +import androidx.core.app.NotificationManagerCompat +import org.mozilla.fenix.GleanMetrics.Events.marketingNotificationAllowed +import org.mozilla.fenix.R + +// Channel ID was not updated when it was renamed to marketing. Thus, we'll have to continue +// to use this ID as the marketing channel ID +private const val MARKETING_CHANNEL_ID = "org.mozilla.fenix.default.browser.channel" + +// For notification that uses the marketing notification channel, IDs should be unique. +const val DEFAULT_BROWSER_NOTIFICATION_ID = 1 +const val RE_ENGAGEMENT_NOTIFICATION_ID = 2 + +/** + * Make sure the marketing notification channel exists. + * + * Returns the channel id to be used for notifications. + */ +fun ensureMarketingChannelExists(context: Context): String { + var channelEnabled = true + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val notificationManager: NotificationManager = + context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + + var channel = + notificationManager.getNotificationChannel(MARKETING_CHANNEL_ID) + + if (channel == null) { + channel = NotificationChannel( + MARKETING_CHANNEL_ID, + context.getString(R.string.notification_marketing_channel_name), + NotificationManager.IMPORTANCE_DEFAULT, + ) + + notificationManager.createNotificationChannel(channel) + } + + channelEnabled = channel.importance != NotificationManager.IMPORTANCE_NONE + } + + @Suppress("TooGenericExceptionCaught") + val notificationsEnabled = try { + NotificationManagerCompat.from(context).areNotificationsEnabled() + } catch (e: Exception) { + false + } + + marketingNotificationAllowed.set(notificationsEnabled && channelEnabled) + + return MARKETING_CHANNEL_ID +} diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorker.kt b/app/src/main/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorker.kt new file mode 100644 index 000000000..e58a6b737 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorker.kt @@ -0,0 +1,139 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.onboarding + +import android.app.Notification +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import androidx.annotation.VisibleForTesting +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat +import androidx.core.content.ContextCompat +import androidx.work.ExistingWorkPolicy +import androidx.work.OneTimeWorkRequest +import androidx.work.WorkManager +import androidx.work.Worker +import androidx.work.WorkerParameters +import mozilla.components.support.base.ids.SharedIdsHelper +import mozilla.telemetry.glean.private.NoExtras +import org.mozilla.fenix.GleanMetrics.Events +import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.R +import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.utils.IntentUtils +import org.mozilla.fenix.utils.Settings +import java.util.concurrent.TimeUnit + +/** + * Worker that builds and schedules the re-engagement notification + */ +class ReEngagementNotificationWorker( + context: Context, + workerParameters: WorkerParameters, +) : Worker(context, workerParameters) { + + override fun doWork(): Result { + val settings = applicationContext.settings() + + if (isActiveUser(settings) || !settings.shouldShowReEngagementNotification()) { + return Result.success() + } + + val channelId = ensureMarketingChannelExists(applicationContext) + NotificationManagerCompat.from(applicationContext) + .notify( + NOTIFICATION_TAG, + RE_ENGAGEMENT_NOTIFICATION_ID, + buildNotification(channelId), + ) + + // re-engagement notification should only be shown once + settings.reEngagementNotificationShown = true + + Events.reEngagementNotifShown.record(NoExtras()) + + return Result.success() + } + + private fun buildNotification(channelId: String): Notification { + val intent = Intent(applicationContext, HomeActivity::class.java) + intent.putExtra(INTENT_RE_ENGAGEMENT_NOTIFICATION, true) + + val pendingIntent = PendingIntent.getActivity( + applicationContext, + SharedIdsHelper.getNextIdForTag(applicationContext, NOTIFICATION_PENDING_INTENT_TAG), + intent, + IntentUtils.defaultIntentPendingFlags, + ) + + with(applicationContext) { + val appName = getString(R.string.app_name) + return NotificationCompat.Builder(this, channelId) + .setSmallIcon(R.drawable.ic_status_logo) + .setContentTitle( + applicationContext.getString(R.string.notification_re_engagement_title), + ) + .setContentText( + applicationContext.getString(R.string.notification_re_engagement_text, appName), + ) + .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL) + .setColor(ContextCompat.getColor(this, R.color.primary_text_light_theme)) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .setShowWhen(false) + .setContentIntent(pendingIntent) + .setAutoCancel(true) + .build() + } + } + + companion object { + const val NOTIFICATION_TARGET_URL = "https://www.mozilla.org/firefox/privacy/" + private const val NOTIFICATION_PENDING_INTENT_TAG = "org.mozilla.fenix.re-engagement" + private const val INTENT_RE_ENGAGEMENT_NOTIFICATION = "org.mozilla.fenix.re-engagement.intent" + private const val NOTIFICATION_TAG = "org.mozilla.fenix.re-engagement.tag" + private const val NOTIFICATION_WORK_NAME = "org.mozilla.fenix.re-engagement.work" + private const val NOTIFICATION_DELAY = Settings.TWO_DAYS_MS + + // We are trying to reach the users that are inactive after the initial 24 hours + private const val INACTIVE_USER_THRESHOLD = NOTIFICATION_DELAY - Settings.ONE_DAY_MS + + /** + * Check if the intent is from the re-engagement notification + */ + fun isReEngagementNotificationIntent(intent: Intent) = + intent.extras?.containsKey(INTENT_RE_ENGAGEMENT_NOTIFICATION) ?: false + + /** + * Schedules the re-engagement notification if needed. + */ + fun setReEngagementNotificationIfNeeded(context: Context) { + val instanceWorkManager = WorkManager.getInstance(context) + + if (!context.settings().shouldSetReEngagementNotification()) { + return + } + + val notificationWork = OneTimeWorkRequest.Builder(ReEngagementNotificationWorker::class.java) + .setInitialDelay(NOTIFICATION_DELAY, TimeUnit.MILLISECONDS) + .build() + + instanceWorkManager.beginUniqueWork( + NOTIFICATION_WORK_NAME, + ExistingWorkPolicy.KEEP, + notificationWork, + ).enqueue() + } + + @VisibleForTesting + internal fun isActiveUser(settings: Settings): Boolean { + if (System.currentTimeMillis() - settings.lastBrowseActivity > INACTIVE_USER_THRESHOLD) { + return false + } + + return true + } + } +} diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index fe406ec6a..12283f5b0 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -77,6 +77,7 @@ class Settings(private val appContext: Context) : PreferencesHolder { const val FOUR_HOURS_MS = 60 * 60 * 4 * 1000L const val ONE_DAY_MS = 60 * 60 * 24 * 1000L + const val TWO_DAYS_MS = 2 * ONE_DAY_MS const val THREE_DAYS_MS = 3 * ONE_DAY_MS const val ONE_WEEK_MS = 60 * 60 * 24 * 7 * 1000L const val ONE_MONTH_MS = (60 * 60 * 24 * 365 * 1000L) / 12 @@ -405,10 +406,13 @@ class Settings(private val appContext: Context) : PreferencesHolder { * Indicates the last time when the user was interacting with the [BrowserFragment], * This is useful to determine if the user has to start on the [HomeFragment] * or it should go directly to the [BrowserFragment]. + * + * This value defaults to 0L because we want to know if the user never had any interaction + * with the [BrowserFragment] */ var lastBrowseActivity by longPreference( appContext.getPreferenceKey(R.string.pref_key_last_browse_activity_time), - default = timeNowInMillis(), + default = 0L, ) /** @@ -579,6 +583,34 @@ class Settings(private val appContext: Context) : PreferencesHolder { return !defaultBrowserNotificationDisplayed && !isDefaultBrowserBlocking() } + var reEngagementNotificationShown by booleanPreference( + appContext.getPreferenceKey(R.string.pref_key_re_engagement_notification_shown), + default = false, + ) + + /** + * Check if we should set the re-engagement notification. + */ + fun shouldSetReEngagementNotification(): Boolean { + return numberOfAppLaunches <= 1 && !reEngagementNotificationShown + } + + /** + * Check if we should show the re-engagement notification. + */ + fun shouldShowReEngagementNotification(): Boolean { + return !reEngagementNotificationShown && reEngagementNotificationEnabled && !isDefaultBrowserBlocking() + } + + /** + * Indicates if the re-engagement notification feature is enabled + */ + var reEngagementNotificationEnabled by lazyFeatureFlagPreference( + key = appContext.getPreferenceKey(R.string.pref_key_re_engagement_notification_enabled), + default = { FxNimbus.features.reEngagementNotification.value(appContext).enabled }, + featureFlag = true, + ) + val shouldUseAutoBatteryTheme by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_auto_battery_theme), default = false, diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index d4055aa47..8c02486dd 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -67,6 +67,8 @@ pref_key_last_browse_activity_time pref_key_last_cfr_shown_time pref_key_should_show_default_browser_notification + pref_key_re_engagement_notification_shown + pref_key_re_engagement_notification_enabled pref_key_is_first_run pref_key_home_blocklist diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 412904735..0781ab472 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1072,6 +1072,11 @@ Make %1$s your default browser + + Try private browsing + + Browse with no saved cookies or history in %1$s diff --git a/app/src/test/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessorTest.kt index 16a91aaab..b9be14dae 100644 --- a/app/src/test/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/intent/DefaultBrowserIntentProcessorTest.kt @@ -10,6 +10,7 @@ import io.mockk.Called import io.mockk.every import io.mockk.mockk import io.mockk.verify +import mozilla.components.concept.engine.EngineSession import mozilla.components.service.glean.testing.GleanTestRule import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertFalse @@ -18,9 +19,12 @@ import org.junit.Assert.assertNull import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.onboarding.ReEngagementNotificationWorker @RunWith(FenixRobolectricTestRunner::class) class DefaultBrowserIntentProcessorTest { @@ -63,4 +67,42 @@ class DefaultBrowserIntentProcessorTest { verify { navController wasNot Called } verify { out wasNot Called } } + + @Test + fun `process re-engagement notification intents`() { + val navController: NavController = mockk(relaxed = true) + val out: Intent = mockk() + val activity: HomeActivity = mockk(relaxed = true) + val browsingModeManager: BrowsingModeManager = mockk(relaxed = true) + + val intent = Intent().apply { + putExtra("org.mozilla.fenix.re-engagement.intent", true) + } + every { activity.applicationContext } returns testContext + every { activity.browsingModeManager } returns browsingModeManager + + assertNull(Events.reEngagementNotifTapped.testGetValue()) + + val result = DefaultBrowserIntentProcessor(activity) + .process(intent, navController, out) + + assert(result) + + assertNotNull(Events.reEngagementNotifTapped.testGetValue()) + verify { + activity.openToBrowserAndLoad( + searchTermOrURL = ReEngagementNotificationWorker.NOTIFICATION_TARGET_URL, + newTab = true, + from = BrowserDirection.FromGlobal, + customTabSessionId = null, + engine = null, + forceSearch = false, + flags = EngineSession.LoadUrlFlags.external(), + requestDesktopMode = false, + historyMetadata = null, + ) + } + verify { navController wasNot Called } + verify { out wasNot Called } + } } diff --git a/app/src/test/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorkerTest.kt b/app/src/test/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorkerTest.kt new file mode 100644 index 000000000..9b758f96c --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/onboarding/ReEngagementNotificationWorkerTest.kt @@ -0,0 +1,44 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.onboarding + +import io.mockk.spyk +import junit.framework.TestCase.assertFalse +import mozilla.components.support.test.robolectric.testContext +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.utils.Settings + +@RunWith(FenixRobolectricTestRunner::class) +class ReEngagementNotificationWorkerTest { + lateinit var settings: Settings + + @Before + fun setUp() { + settings = Settings(testContext) + } + + @Test + fun `GIVEN last browser activity THEN determine if the user is active correctly`() { + val localSetting = spyk(settings) + + localSetting.lastBrowseActivity = System.currentTimeMillis() + assert(ReEngagementNotificationWorker.isActiveUser(localSetting)) + + localSetting.lastBrowseActivity = System.currentTimeMillis() - Settings.FOUR_HOURS_MS + assert(ReEngagementNotificationWorker.isActiveUser(localSetting)) + + localSetting.lastBrowseActivity = System.currentTimeMillis() - Settings.ONE_DAY_MS + assertFalse(ReEngagementNotificationWorker.isActiveUser(localSetting)) + + localSetting.lastBrowseActivity = 0 + assertFalse(ReEngagementNotificationWorker.isActiveUser(localSetting)) + + localSetting.lastBrowseActivity = -1000 + assertFalse(ReEngagementNotificationWorker.isActiveUser(localSetting)) + } +} diff --git a/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt b/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt index da854c2ba..0b66c046d 100644 --- a/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt +++ b/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt @@ -768,6 +768,66 @@ class SettingsTest { assertFalse(localSetting.shouldShowDefaultBrowserNotification()) } + @Test + fun `GIVEN re-engagement notification shown and number of app launch THEN should set re-engagement notification returns correct value`() { + val localSetting = spyk(settings) + + localSetting.reEngagementNotificationShown = false + localSetting.numberOfAppLaunches = 0 + assert(localSetting.shouldSetReEngagementNotification()) + + localSetting.numberOfAppLaunches = 1 + assert(localSetting.shouldSetReEngagementNotification()) + + localSetting.numberOfAppLaunches = 2 + assertFalse(localSetting.shouldSetReEngagementNotification()) + + localSetting.reEngagementNotificationShown = true + localSetting.numberOfAppLaunches = 0 + assertFalse(localSetting.shouldSetReEngagementNotification()) + } + + @Test + fun `GIVEN re-engagement notification shown and is default browser THEN should show re-engagement notification returns correct value`() { + val localSetting = spyk(settings) + + every { localSetting.isDefaultBrowserBlocking() } returns false + + every { localSetting.reEngagementNotificationEnabled } returns false + localSetting.reEngagementNotificationShown = false + assertFalse(localSetting.shouldShowReEngagementNotification()) + + every { localSetting.reEngagementNotificationEnabled } returns true + localSetting.reEngagementNotificationShown = false + assert(localSetting.shouldShowReEngagementNotification()) + + every { localSetting.reEngagementNotificationEnabled } returns false + localSetting.reEngagementNotificationShown = true + assertFalse(localSetting.shouldShowReEngagementNotification()) + + every { localSetting.reEngagementNotificationEnabled } returns true + localSetting.reEngagementNotificationShown = true + assertFalse(localSetting.shouldShowReEngagementNotification()) + + every { localSetting.isDefaultBrowserBlocking() } returns true + + every { localSetting.reEngagementNotificationEnabled } returns false + localSetting.reEngagementNotificationShown = false + assertFalse(localSetting.shouldShowReEngagementNotification()) + + every { localSetting.reEngagementNotificationEnabled } returns true + localSetting.reEngagementNotificationShown = false + assertFalse(localSetting.shouldShowReEngagementNotification()) + + every { localSetting.reEngagementNotificationEnabled } returns false + localSetting.reEngagementNotificationShown = true + assertFalse(localSetting.shouldShowReEngagementNotification()) + + every { localSetting.reEngagementNotificationEnabled } returns true + localSetting.reEngagementNotificationShown = true + assertFalse(localSetting.shouldShowReEngagementNotification()) + } + @Test fun inactiveTabsAreEnabled() { // When just created diff --git a/nimbus.fml.yaml b/nimbus.fml.yaml index 2e92cfe8f..4c9daba3f 100644 --- a/nimbus.fml.yaml +++ b/nimbus.fml.yaml @@ -257,6 +257,14 @@ features: value: enabled: true + re-engagement-notification: + description: A feature that shows the re-enagement notification if the user is inactive. + variables: + enabled: + description: If true, the re-engagement notification is shown to the inactive user. + type: Boolean + default: true + types: objects: MessageData: From f7090366366a86c6aed3239ff3a30c5580861385 Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Mon, 21 Nov 2022 15:12:06 -0600 Subject: [PATCH 105/218] Fixes #27933: record app opened event and add nimbus event test suite --- .../fenix/helpers/HomeActivityTestRule.kt | 16 ++++++ .../org/mozilla/fenix/ui/NimbusEventTest.kt | 51 +++++++++++++++++++ .../fenix/ui/robots/HomeScreenRobot.kt | 9 ++++ .../java/org/mozilla/fenix/HomeActivity.kt | 5 +- 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt index efda02186..eb1950b62 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.helpers +import android.content.Intent import android.view.ViewConfiguration.getLongPressTimeout import androidx.test.espresso.intent.rule.IntentsTestRule import androidx.test.rule.ActivityTestRule @@ -161,6 +162,8 @@ class HomeActivityIntentTestRule internal constructor( private val longTapUserPreference = getLongPressTimeout() + private lateinit var intent: Intent + /** * Update settings after the activity was created. */ @@ -171,6 +174,19 @@ class HomeActivityIntentTestRule internal constructor( } } + override fun getActivityIntent(): Intent { + return if(this::intent.isInitialized) { + this.intent + } else { + super.getActivityIntent() + } + } + + fun withIntent(intent: Intent): HomeActivityIntentTestRule { + this.intent = intent + return this + } + override fun beforeActivityLaunched() { super.beforeActivityLaunched() setLongTapTimeout(3000) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt new file mode 100644 index 000000000..3b36ceaf3 --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -0,0 +1,51 @@ +package org.mozilla.fenix.ui + +import android.content.Intent +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.UiDevice +import okhttp3.mockwebserver.MockWebServer +import org.junit.* +import org.mozilla.fenix.helpers.AndroidAssetDispatcher +import org.mozilla.fenix.helpers.HomeActivityIntentTestRule +import org.mozilla.fenix.helpers.RetryTestRule +import org.mozilla.fenix.ui.robots.homeScreen + +class NimbusEventTest { + private lateinit var mDevice: UiDevice + private lateinit var mockWebServer: MockWebServer + + @get:Rule + val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides() + .withIntent(Intent().apply { + action = Intent.ACTION_VIEW + }) + + @Rule + @JvmField + val retryTestRule = RetryTestRule(3) + + @Before + fun setUp() { + mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + + mockWebServer = MockWebServer().apply { + dispatcher = AndroidAssetDispatcher() + start() + } + } + + @After + fun tearDown() { + mockWebServer.shutdown() + } + + @Test + fun homeScreenNimbusEventsTest() { + homeScreen { }.dismissOnboarding() + + homeScreen { + verifyHomeScreen() + Assert.assertTrue(evaluateAgainstNimbusTargetingHelper("'app_opened'|eventSum('Days', 28, 0) > 0")) + } + } +} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index 346788f34..9ce36b07b 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -90,6 +90,7 @@ class HomeScreenRobot { fun verifyDefaultSearchEngine(searchEngine: String) = verifySearchEngineIcon(searchEngine) fun verifyNoTabsOpened() = assertNoTabsOpened() fun verifyKeyboardVisible() = assertKeyboardVisibility(isExpectedToBeVisible = true) + fun evaluateAgainstNimbusTargetingHelper(jexl: String): Boolean = evaluateAgainstNimbus(jexl) fun verifyWallpaperImageApplied(isEnabled: Boolean) { if (isEnabled) { @@ -806,6 +807,14 @@ private fun verifySearchEngineIcon(searchEngineName: String) { verifySearchEngineIcon(defaultSearchEngine.icon, defaultSearchEngine.name) } +private fun getNimbus() = + appContext.components.analytics.experiments + +private fun evaluateAgainstNimbus(jexl: String): Boolean { + val helper = getNimbus().createMessageHelper() + return helper.evalJexl(jexl) +} + // First Run elements private fun assertWelcomeHeader() = assertTrue( diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index aa972e5b8..fa5b10fa7 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -276,7 +276,10 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { val safeIntent = intent?.toSafeIntent() safeIntent ?.let(::getIntentSource) - ?.also { Events.appOpened.record(Events.AppOpenedExtra(it)) } + ?.also { + Events.appOpened.record(Events.AppOpenedExtra(it)) + components.analytics.experiments.recordEvent("app_opened") + } } supportActionBar?.hide() From d8e724218f5b99ec5ccabfceda175395581d328d Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Mon, 21 Nov 2022 15:38:53 -0600 Subject: [PATCH 106/218] add Experimentation helper --- .../org/mozilla/fenix/helpers/Experimentation.kt | 16 ++++++++++++++++ .../java/org/mozilla/fenix/ui/NimbusEventTest.kt | 9 +++------ .../mozilla/fenix/ui/robots/HomeScreenRobot.kt | 9 --------- 3 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt new file mode 100644 index 000000000..c357b8f43 --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt @@ -0,0 +1,16 @@ +package org.mozilla.fenix.helpers + +import org.mozilla.experiments.nimbus.GleanPlumbMessageHelper +import org.mozilla.fenix.ext.components +import org.mozilla.fenix.helpers.TestHelper.appContext + +object Experimentation { + private val nimbus = + appContext.components.analytics.experiments + + fun withHelper(block: GleanPlumbMessageHelper.() -> Unit) { + val helper = nimbus.createMessageHelper() + block(helper) + } + +} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt index 3b36ceaf3..6ad368d05 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -5,9 +5,7 @@ import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import okhttp3.mockwebserver.MockWebServer import org.junit.* -import org.mozilla.fenix.helpers.AndroidAssetDispatcher -import org.mozilla.fenix.helpers.HomeActivityIntentTestRule -import org.mozilla.fenix.helpers.RetryTestRule +import org.mozilla.fenix.helpers.* import org.mozilla.fenix.ui.robots.homeScreen class NimbusEventTest { @@ -43,9 +41,8 @@ class NimbusEventTest { fun homeScreenNimbusEventsTest() { homeScreen { }.dismissOnboarding() - homeScreen { - verifyHomeScreen() - Assert.assertTrue(evaluateAgainstNimbusTargetingHelper("'app_opened'|eventSum('Days', 28, 0) > 0")) + Experimentation.withHelper { + Assert.assertTrue(evalJexl("'app_opened'|eventSum('Days', 28, 0) > 0")) } } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt index 9ce36b07b..346788f34 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt @@ -90,7 +90,6 @@ class HomeScreenRobot { fun verifyDefaultSearchEngine(searchEngine: String) = verifySearchEngineIcon(searchEngine) fun verifyNoTabsOpened() = assertNoTabsOpened() fun verifyKeyboardVisible() = assertKeyboardVisibility(isExpectedToBeVisible = true) - fun evaluateAgainstNimbusTargetingHelper(jexl: String): Boolean = evaluateAgainstNimbus(jexl) fun verifyWallpaperImageApplied(isEnabled: Boolean) { if (isEnabled) { @@ -807,14 +806,6 @@ private fun verifySearchEngineIcon(searchEngineName: String) { verifySearchEngineIcon(defaultSearchEngine.icon, defaultSearchEngine.name) } -private fun getNimbus() = - appContext.components.analytics.experiments - -private fun evaluateAgainstNimbus(jexl: String): Boolean { - val helper = getNimbus().createMessageHelper() - return helper.evalJexl(jexl) -} - // First Run elements private fun assertWelcomeHeader() = assertTrue( From 65a4442d8951fb386ec4508835798e8ac708ce90 Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Wed, 23 Nov 2022 11:42:28 -0500 Subject: [PATCH 107/218] update for pr feedback and add sync login event --- app/build.gradle | 1 + .../org/mozilla/fenix/helpers/Experimentation.kt | 5 ++--- .../java/org/mozilla/fenix/ui/NimbusEventTest.kt | 16 +++++++++++++++- .../main/java/org/mozilla/fenix/HomeActivity.kt | 1 + .../fenix/components/BackgroundServices.kt | 14 ++++++++------ build.gradle | 2 ++ buildSrc/src/main/java/Dependencies.kt | 1 + 7 files changed, 30 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4d5e9064d..42be1a20b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -659,6 +659,7 @@ dependencies { testImplementation 'org.apache.maven:maven-ant-tasks:2.1.3' implementation Deps.mozilla_support_rusthttp + androidTestImplementation Deps.mockk_android testImplementation Deps.mockk // For the initial release of Glean 19, we require consumer applications to diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt index c357b8f43..953549032 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt @@ -5,12 +5,11 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.TestHelper.appContext object Experimentation { - private val nimbus = + val experiments = appContext.components.analytics.experiments fun withHelper(block: GleanPlumbMessageHelper.() -> Unit) { - val helper = nimbus.createMessageHelper() + val helper = experiments.createMessageHelper() block(helper) } - } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt index 6ad368d05..195980a10 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -3,17 +3,21 @@ package org.mozilla.fenix.ui import android.content.Intent import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice +import mozilla.components.concept.sync.* import okhttp3.mockwebserver.MockWebServer import org.junit.* +import org.mozilla.fenix.components.TelemetryAccountObserver import org.mozilla.fenix.helpers.* +import org.mozilla.fenix.helpers.TestHelper.appContext import org.mozilla.fenix.ui.robots.homeScreen +import io.mockk.mockk class NimbusEventTest { private lateinit var mDevice: UiDevice private lateinit var mockWebServer: MockWebServer @get:Rule - val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides() + val homeActivityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides() .withIntent(Intent().apply { action = Intent.ACTION_VIEW }) @@ -45,4 +49,14 @@ class NimbusEventTest { Assert.assertTrue(evalJexl("'app_opened'|eventSum('Days', 28, 0) > 0")) } } + + @Test + fun telemetryAccountObserverTest() { + val observer = TelemetryAccountObserver(appContext) + observer.onAuthenticated(mockk(), AuthType.Signin) + + Experimentation.withHelper { + Assert.assertTrue(evalJexl("'sync_auth_sign_in'|eventSum('Days', 28, 0) > 0")) + } + } } diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index fa5b10fa7..a7adc5f26 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -278,6 +278,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { ?.let(::getIntentSource) ?.also { Events.appOpened.record(Events.AppOpenedExtra(it)) + // This will record an event in Nimbus' internal event store. Used for behavioral targeting components.analytics.experiments.recordEvent("app_opened") } } diff --git a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt index 508fdd246..e4c5efa0b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt +++ b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -46,7 +46,6 @@ import org.mozilla.fenix.ext.settings import org.mozilla.fenix.perf.StrictModeManager import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.sync.SyncedTabsIntegration -import org.mozilla.fenix.utils.Settings /** * Component group for background services. These are the components that need to be accessed from within a @@ -127,7 +126,7 @@ class BackgroundServices( } private val telemetryAccountObserver = TelemetryAccountObserver( - context.settings(), + context ) val accountAbnormalities = AccountAbnormalities(context, crashReporter, strictMode) @@ -219,13 +218,16 @@ private class AccountManagerReadyObserver( @VisibleForTesting(otherwise = PRIVATE) internal class TelemetryAccountObserver( - private val settings: Settings, + private val context: Context ) : AccountObserver { override fun onAuthenticated(account: OAuthAccount, authType: AuthType) { - settings.signedInFxaAccount = true + context.settings().signedInFxaAccount = true when (authType) { // User signed-in into an existing FxA account. - AuthType.Signin -> SyncAuth.signIn.record(NoExtras()) + AuthType.Signin -> { + SyncAuth.signIn.record(NoExtras()) + context.components.analytics.experiments.recordEvent("sync_auth_sign_in") + } // User created a new FxA account. AuthType.Signup -> SyncAuth.signUp.record(NoExtras()) @@ -254,6 +256,6 @@ internal class TelemetryAccountObserver( override fun onLoggedOut() { SyncAuth.signOut.record(NoExtras()) - settings.signedInFxaAccount = false + context.settings().signedInFxaAccount = false } } diff --git a/build.gradle b/build.gradle index 3241aff78..0baaebd0e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,7 @@ import org.mozilla.fenix.gradle.tasks.GithubDetailsTask buildscript { // This logic is duplicated in the allprojects block: I don't know how to fix that. repositories { + mavenLocal() maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" @@ -81,6 +82,7 @@ plugins { allprojects { // This logic is duplicated in the buildscript block: I don't know how to fix that. repositories { + mavenLocal() maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index cb1e5b7f0..2b3f7dbdc 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -227,6 +227,7 @@ object Deps { const val junit = "junit:junit:${Versions.junit}" const val mockk = "io.mockk:mockk:${Versions.mockk}" + const val mockk_android = "io.mockk:mockk-android:${Versions.mockk}" // --- START AndroidX test dependencies --- // // N.B.: the versions of these dependencies appear to be pinned together. To avoid bugs, they From 41f7698bfa83f991f016868113716015d4a0687e Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Wed, 23 Nov 2022 11:44:12 -0500 Subject: [PATCH 108/218] remove mavenLocal from repositories --- build.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.gradle b/build.gradle index 0baaebd0e..3241aff78 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,6 @@ import org.mozilla.fenix.gradle.tasks.GithubDetailsTask buildscript { // This logic is duplicated in the allprojects block: I don't know how to fix that. repositories { - mavenLocal() maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" @@ -82,7 +81,6 @@ plugins { allprojects { // This logic is duplicated in the buildscript block: I don't know how to fix that. repositories { - mavenLocal() maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" From e400a8ed8d2a51a2f8467770e090fffe844c090d Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Wed, 23 Nov 2022 12:47:12 -0500 Subject: [PATCH 109/218] fix tests and linting --- .../fenix/helpers/HomeActivityTestRule.kt | 2 +- .../org/mozilla/fenix/ui/NimbusEventTest.kt | 27 ++++++++++++------ .../fenix/components/BackgroundServices.kt | 4 +-- .../components/BackgroundServicesTest.kt | 28 ++++++++++++++++++- 4 files changed, 48 insertions(+), 13 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt index eb1950b62..3a3a97453 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt @@ -175,7 +175,7 @@ class HomeActivityIntentTestRule internal constructor( } override fun getActivityIntent(): Intent { - return if(this::intent.isInitialized) { + return if (this::intent.isInitialized) { this.intent } else { super.getActivityIntent() diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt index 195980a10..4b2b8bfee 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -3,14 +3,21 @@ package org.mozilla.fenix.ui import android.content.Intent import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice -import mozilla.components.concept.sync.* +import io.mockk.mockk +import mozilla.components.concept.sync.AuthType import okhttp3.mockwebserver.MockWebServer -import org.junit.* +import org.junit.After +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Rule +import org.junit.Test import org.mozilla.fenix.components.TelemetryAccountObserver -import org.mozilla.fenix.helpers.* +import org.mozilla.fenix.helpers.AndroidAssetDispatcher +import org.mozilla.fenix.helpers.Experimentation +import org.mozilla.fenix.helpers.HomeActivityIntentTestRule +import org.mozilla.fenix.helpers.RetryTestRule import org.mozilla.fenix.helpers.TestHelper.appContext import org.mozilla.fenix.ui.robots.homeScreen -import io.mockk.mockk class NimbusEventTest { private lateinit var mDevice: UiDevice @@ -18,9 +25,11 @@ class NimbusEventTest { @get:Rule val homeActivityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides() - .withIntent(Intent().apply { - action = Intent.ACTION_VIEW - }) + .withIntent( + Intent().apply { + action = Intent.ACTION_VIEW + }, + ) @Rule @JvmField @@ -46,7 +55,7 @@ class NimbusEventTest { homeScreen { }.dismissOnboarding() Experimentation.withHelper { - Assert.assertTrue(evalJexl("'app_opened'|eventSum('Days', 28, 0) > 0")) + assertTrue(evalJexl("'app_opened'|eventSum('Days', 28, 0) > 0")) } } @@ -56,7 +65,7 @@ class NimbusEventTest { observer.onAuthenticated(mockk(), AuthType.Signin) Experimentation.withHelper { - Assert.assertTrue(evalJexl("'sync_auth_sign_in'|eventSum('Days', 28, 0) > 0")) + assertTrue(evalJexl("'sync_auth_sign_in'|eventSum('Days', 28, 0) > 0")) } } } diff --git a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt index e4c5efa0b..f40dbb4ce 100644 --- a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt +++ b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -126,7 +126,7 @@ class BackgroundServices( } private val telemetryAccountObserver = TelemetryAccountObserver( - context + context, ) val accountAbnormalities = AccountAbnormalities(context, crashReporter, strictMode) @@ -218,7 +218,7 @@ private class AccountManagerReadyObserver( @VisibleForTesting(otherwise = PRIVATE) internal class TelemetryAccountObserver( - private val context: Context + private val context: Context, ) : AccountObserver { override fun onAuthenticated(account: OAuthAccount, authType: AuthType) { context.settings().signedInFxaAccount = true diff --git a/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt b/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt index f865fb907..c6d5fe246 100644 --- a/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.components +import android.content.Context import io.mockk.MockKAnnotations import io.mockk.Runs import io.mockk.confirmVerified @@ -15,6 +16,7 @@ import io.mockk.verify import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AuthType import mozilla.components.concept.sync.OAuthAccount +import mozilla.components.service.nimbus.NimbusApi import mozilla.components.support.base.observer.ObserverRegistry import mozilla.components.support.test.robolectric.testContext import mozilla.telemetry.glean.testing.GleanTestRule @@ -24,6 +26,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.SyncAuth +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings @@ -34,9 +37,15 @@ class BackgroundServicesTest { @get:Rule val gleanTestRule = GleanTestRule(testContext) + @MockK + private lateinit var context: Context + @MockK private lateinit var settings: Settings + @MockK + private lateinit var nimbus: NimbusApi + private lateinit var observer: TelemetryAccountObserver private lateinit var registry: ObserverRegistry @@ -45,7 +54,15 @@ class BackgroundServicesTest { MockKAnnotations.init(this) every { settings.signedInFxaAccount = any() } just Runs - observer = TelemetryAccountObserver(settings) + val mockComponents: Components = mockk() + every { mockComponents.settings } returns settings + every { mockComponents.analytics } returns mockk { + every { experiments } returns nimbus + } + every { context.components } returns mockComponents + every { nimbus.recordEvent(any()) } returns Unit + + observer = TelemetryAccountObserver(context) registry = ObserverRegistry().apply { register(observer) } } @@ -123,4 +140,13 @@ class BackgroundServicesTest { verify { settings.signedInFxaAccount = false } confirmVerified(settings) } + + @Test + fun `telemetry account observer records nimbus event for logins`() { + observer.onAuthenticated(mockk(), AuthType.Signin) + verify { + nimbus.recordEvent("sync_auth_sign_in") + } + confirmVerified(nimbus) + } } From 4dc05644c6f66bc5c155116b72350b06e1d7cf16 Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Mon, 28 Nov 2022 09:50:59 -0600 Subject: [PATCH 110/218] add license headers --- .../java/org/mozilla/fenix/helpers/Experimentation.kt | 4 ++++ .../androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt index 953549032..3b4ba4ee1 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/Experimentation.kt @@ -1,3 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + package org.mozilla.fenix.helpers import org.mozilla.experiments.nimbus.GleanPlumbMessageHelper diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt index 4b2b8bfee..60834bd8c 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -1,3 +1,7 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + package org.mozilla.fenix.ui import android.content.Intent From 01bc96990c59a19fbaae02d6d047f98e69173665 Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Mon, 28 Nov 2022 15:58:51 -0600 Subject: [PATCH 111/218] remove extra line --- app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt index 60834bd8c..974bd2364 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -42,7 +42,6 @@ class NimbusEventTest { @Before fun setUp() { mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) - mockWebServer = MockWebServer().apply { dispatcher = AndroidAssetDispatcher() start() From f3f98173e6797aab271c494bbb76a45d066a907d Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Mon, 28 Nov 2022 16:06:07 -0600 Subject: [PATCH 112/218] update override method response to be nullable --- .../java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt index 3a3a97453..ec3ef1959 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt @@ -174,7 +174,7 @@ class HomeActivityIntentTestRule internal constructor( } } - override fun getActivityIntent(): Intent { + override fun getActivityIntent(): Intent? { return if (this::intent.isInitialized) { this.intent } else { From 73d105bd4e3eaabeccd917a31fc3c401c8e43f40 Mon Sep 17 00:00:00 2001 From: Charlie Humphreys Date: Mon, 28 Nov 2022 17:12:31 -0600 Subject: [PATCH 113/218] update nimbus event for sync sign in https://dictionary.telemetry.mozilla.org/apps/fenix/metrics/sync_auth_sign_in --- .../androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt | 2 +- .../java/org/mozilla/fenix/components/BackgroundServices.kt | 2 +- .../java/org/mozilla/fenix/components/BackgroundServicesTest.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt index 974bd2364..e3e33bf08 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NimbusEventTest.kt @@ -68,7 +68,7 @@ class NimbusEventTest { observer.onAuthenticated(mockk(), AuthType.Signin) Experimentation.withHelper { - assertTrue(evalJexl("'sync_auth_sign_in'|eventSum('Days', 28, 0) > 0")) + assertTrue(evalJexl("'sync_auth.sign_in'|eventSum('Days', 28, 0) > 0")) } } } diff --git a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt index f40dbb4ce..1d849614f 100644 --- a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt +++ b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -226,7 +226,7 @@ internal class TelemetryAccountObserver( // User signed-in into an existing FxA account. AuthType.Signin -> { SyncAuth.signIn.record(NoExtras()) - context.components.analytics.experiments.recordEvent("sync_auth_sign_in") + context.components.analytics.experiments.recordEvent("sync_auth.sign_in") } // User created a new FxA account. diff --git a/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt b/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt index c6d5fe246..5cf747049 100644 --- a/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/BackgroundServicesTest.kt @@ -145,7 +145,7 @@ class BackgroundServicesTest { fun `telemetry account observer records nimbus event for logins`() { observer.onAuthenticated(mockk(), AuthType.Signin) verify { - nimbus.recordEvent("sync_auth_sign_in") + nimbus.recordEvent("sync_auth.sign_in") } confirmVerified(nimbus) } From acc4b8b2d9c781de5ef82ea3cfff061f27192d49 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Tue, 29 Nov 2022 03:29:57 +0100 Subject: [PATCH 114/218] Import l10n. (#28007) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- app/src/main/res/values-da/strings.xml | 58 +++++------------------- app/src/main/res/values-es/strings.xml | 61 +++++--------------------- app/src/main/res/values-ja/strings.xml | 61 ++++++-------------------- 3 files changed, 35 insertions(+), 145 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index bf87c5dd4..ba36c814d 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -47,8 +47,6 @@ - Seneste bogmærker - Gemt for nylig Vis alle gemte bogmærker @@ -257,40 +255,19 @@ Søgeindstillinger - Søg denne gang med: + Søg denne gang med: - - - Nyheder i %1$s - - Det er blevet lettere at fortsætte, hvor du slap. - - Tilpasset startside i %1$s - - Hop til dine åbne faneblade, bogmærker og browserhistorik. - - Overskuelige faneblade - - Fjern distraherende faneblade med forbedret layout og automatisk lukning af faneblade. - - Seneste søgninger - - Besøg dine seneste søgninger igen fra din startside og faneblade. - - - Din personlige startside i Firefox gør det nu lettere at fortsætte, hvor du slap. Find dine seneste faneblade, bogmærker og søgeresultater. + + Søg denne gang i: + Mød din tilpassede startside. Seneste faneblade, bogmærker og søgeresultater vises her. - Velkommen til et uafhængigt internet - Velkommen til et mere personligt internet Flere farver. Bedre beskyttelse af dit privatliv. Samme forpligtelse til mennesker frem for profit. - Hop fra telefonen til computeren og tilbage - Det er nemmere end nogensinde før at skifte mellem skærme Fortsæt hvor du slap med faneblade fra andre enheder - nu på din startside. @@ -355,6 +332,12 @@ Tilføj genvej til privat browsing Tilstanden Kun-HTTPS + + + Reduktion af cookie-bannere + + Reducer cookie-bannere + Forsøger automatisk at oprette forbindelse til websteder ved hjælp af krypteringsprotokollen HTTPS for øget sikkerhed. @@ -1239,34 +1222,20 @@ Gruppe slettet - - Velkommen til %s! - Velkommen til et bedre internet En browser lavet for mennesker, ikke profit. - - Synkroniser Firefox mellem enheder Fortsæt hvor du slap - - Synkroniser bogmærker, historik og adgangskoder med %1$s på denne enhed. Synkroniser faneblade og adgangskoder på tværs af enheder for problemfri skift mellem skærme. - - Tilmeld dig Log ind Synkronisering er slået til - - Altid aktiveret privatlivsbeskyttelse Privatlivsbeskyttelse som standard - - %1$s forhindrer automatisk virksomheder i at følge dig i smug på nettet. Med Komplet Cookiebeskyttelse, der forhindrer sporings-tjenester i at følge dig på tværs af websteder. @@ -1279,17 +1248,10 @@ Blokerer flere sporings-mekanismer. Sider indlæses hurtigere, men noget funktionalitet virker måske ikke. Vælg placeringen af din værktøjslinje - - Placer værktøjslinjen indenfor rækkevidde. Behold den nederst, eller flyt den til toppen. Behold den nederst, eller flyt den til toppen. - - Bedre beskyttelse af dit privatliv Du styrer dine data - - Vi har designet %s til at give dig kontrol over, hvad du deler på nettet - og hvad du deler med os. Firefox giver dig kontrol over, hvad du deler på nettet - og hvad du deler med os. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 7feff5281..a5f75524f 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -48,9 +48,6 @@ Seleccionada - - Marcadores recientes - Guardado recientemente @@ -264,39 +261,18 @@ Configuración de búsquedas - Buscar esta vez: + Buscar esta vez: - - - Novedades de %1$s - - Ahora es más fácil continuar donde lo habías dejado. - - Página de inicio de %1$s personalizada - - Accede a tus pestañas abiertas, marcadores y al historial de navegación. - - Pestañas claras y organizadas - - Elimina el desorden de pestañas con un diseño mejorado y con cierre automático. - - Búsquedas recientes - - Revisa tus últimas búsquedas desde tu página de inicio y pestañas. - - - Tu página de inicio de Firefox personalizada hace que ahora sea más fácil continuar donde lo habías dejado. Encuentra tus pestañas, marcadores y resultados de búsqueda recientes. + + Esta vez buscar en: + Descubre tu página de inicio personalizada. Las pestañas recientes, marcadores y resultados de búsqueda aparecerán aquí. - Te damos la bienvenida a un internet independiente - Te damos la bienvenida a un Internet más personal Más colores. Mejor privacidad. Mismo compromiso con las personas por encima de los beneficios. - - Salta del teléfono al ordenador y viceversa Cambiar de pantalla es más fácil que nunca @@ -365,6 +341,14 @@ Agregar acceso directo a navegación privada Modo solo HTTPS + + + Reducción de avisos de cookies + + Reducir los avisos de cookies + + Firefox intenta rechazar automáticamente las solicitudes de cookies en los avisos de cookies. Si no está disponible una opción de rechazo, Firefox podría aceptar todas las cookies para cerrar el aviso. + Intenta conectarse automáticamente a sitios utilizando el protocolo de cifrado HTTPS para mayor seguridad. @@ -1281,34 +1265,20 @@ Grupo eliminado - - ¡Te damos la bienvenida a %s! - Te damos la bienvenida a un mejor Internet Un navegador creado para las personas, no para el lucro. - - Sincronizar Firefox entre dispositivos Continúa donde lo dejaste. - - Traer marcadores, historial y contraseñas a %1$s en este dispositivo. Sincroniza pestañas y contraseñas entre dispositivos para cambiar de pantalla sin interrupciones. - - Registrarse Iniciar sesión Sync está activado - - Privacidad siempre activada Protección de privacidad de manera predeterminada - - %1$s bloquea automáticamente a las compañías que te siguen en secreto por la web. Incluye Total Cookie Protection para evitar que los rastreadores usen cookies para espiarte entre sitios. @@ -1321,17 +1291,10 @@ Bloquea más rastreadores para que las páginas se carguen más rápido, pero pueden fallar algunas funcionalidades de la página. Escoge la posición de la barra de herramientas - - Pon la barra de herramientas a tu alcance. Mantenla abajo, o muévela hacia arriba. Mantenlo en la parte inferior o muévelo a la parte superior. - - Tu privacidad Tú controlas tus datos - - Hemos diseñado %s para darte el control sobre lo que compartes en línea y lo que compartes con nosotros. Firefox te da control sobre lo que compartes en línea y lo que compartes con nosotros. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 084e53ebb..1f7a20dc7 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -48,9 +48,6 @@ 選択 - - 最近追加したブックマーク - 最近保存 @@ -265,41 +262,20 @@ 検索設定 - 今回の検索: + 今回の検索: - - - %1$s の新機能 - - 前回のページから再開するのが簡単になりました。 - - 個人に合わせた %1$s ホームページ - - 開いているタブ、ブックマーク、閲覧履歴にジャンプします。 - - きれいに整理されたタブ - - 改善されたレイアウトとタブを自動的に閉じる機能で散らかったタブを片付けます。 - - 最近の検索 - - ホームページとタブから最近の検索を確認できます。 - - - 個人に合わせた Firefox ホームページにより、前回のページから簡単に再開できるようになりました。最近のタブ、ブックマーク、検索結果を見つけられます。 + + 今回だけ使う検索エンジン: + パーソナライズされたホームページをご覧ください。最近使ったタブ、ブックマーク、検索結果がここに表示されます。 - - 誰のものでもない自由なインターネットへようこそ あなただけのインターネットへようこそ 多様なカラー、より優れたプライバシー保護、利益を超えて人々への平等なコミットメント。 - スマートフォンとラップトップの間を行ったり来たり - 画面の切り替えがこれまで以上に簡単に ホームページ上で、他の端末のタブの中断したところから再開できます。 @@ -365,6 +341,15 @@ プライベートブラウジングショートカットを追加する HTTPS-Only モード + + + Cookie バナーの削減 + + Cookie バナーを減らす + + + Firefox が自動的に Cookie バナーによる Cookie 要求を拒否しようとします。拒否オプションが利用できない場合、すべての Cookie を受け入れてバナーを閉じることがあります。 + セキュリティ強化のため、自動的に HTTPS 暗号化プロトコルを使用してサイトへの接続を試行します。 @@ -1268,33 +1253,20 @@ グループを削除しました - - %s へようこそ! より良いインターネットへようこそ 利益ではなく、ユーザーのために作られているブラウザー。 - - 端末間で Firefox を同期 やめたところから再開できます - - この端末の %1$s とブックマーク、履歴、パスワードを同期します。 端末間でタブとパスワードを同期して、シームレスに画面を切り替えられます。 - - アカウント登録 ログイン Sync が有効です - - プライバシー重視 初期設定でプライバシー保護 - - %1$s はウェブ上であなたを密かに追跡する組織を自動的に遮断します。 包括的 Cookie 保護機能が、Cookie を利用してサイト間であなたを追跡するトラッカーを遮断します。 @@ -1307,17 +1279,10 @@ より多くのトラッカーをブロックするとページの読み込みが速くなりますが、一部のページは正しく機能しなくなる可能性があります。 ツールバーの配置を選べます - - ツールバーを簡単に手の届く位置に置きましょう。画面下または上に移動できます。 画面下または上に移動できます。 - - あなたのプライバシー あなたのデータはあなたのもの - - %s は、あなたがオンラインで共有するものと、私たちと共有するものをコントロールできるように設計されています。 Firefox は、あなたがオンラインで共有するものと、私たちと共有するものをコントロールできます。 From 326986b98f873dcf118aadea3be6a4f826b8f106 Mon Sep 17 00:00:00 2001 From: Alexandru2909 Date: Thu, 20 Oct 2022 09:55:15 +0300 Subject: [PATCH 115/218] For #26708 - Add search widget preview for nightly --- .../res/drawable-hdpi/fenix_search_widget.png | Bin 0 -> 27831 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/nightly/res/drawable-hdpi/fenix_search_widget.png diff --git a/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png b/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png new file mode 100644 index 0000000000000000000000000000000000000000..2e3efa4063235412d1c5153e3f16d1e6cb1530d9 GIT binary patch literal 27831 zcmYg%1z1$k*7ndnAV{}L2nZh1t z@sIbrdVij0fH`NMb=F?F*Spt#W1y!&LCQo5001Z+YpNOn00h{70fWSZ*x$`AI&ZLl zNW3*Id;kCe?LQx!61k5R*o!zmMjFb1no*V=>=%3&C0!)|;Byig(gFMY3!TTRN+y9g z2TNqxEaqW62u#Ic?v?9#_`=6$B*<|4C-wF+;#4pCsOueQi6iiPx45?m!17h?!k3Ivw+1<&CC>0XzpQ+v=!#8T-wxF zY*J3-eW^>hUDM*y^t9>pv`GC<9vX%uNZ{IMz0XC$xnB+c&7<(R{aBn?{Dr{+i?pw% zEb_Q-;<-@Axl!K~~nb;-pyHMGczanVV3fuNj%J6fT1K8k*rG6mEQa<+X-j2QioO6k~y zdm|$4V4)dvAO*{=AF47=3;!eNUrRx-oOB@GbgjL}y}6jk-k4xPhpp@SzOe6}jLOeMT?gK>a-zZJcR!y*muiVc9INV(mKF4^0T7*Vfa9HWfTQJk+My|MJxR z_$%vc{W7dUS#r1#=2WOC2*-5QRHjq#Mf7caEN zgb(!)=O2aphJxvswvG-Iv~O51=95jE$Z>`h5H1V5Ff>jUR=U0Dp3&DO45txlKki+j zCyl+BoE)Fud0?R4w zFexo==B@%Qnu3BNtgxtP!}*^hfEn+T<9Jc3bYoPx0pw?L>suUHbtl7e0&*M9Flv1u z54eP^Eb`WC&_DJ?tSU?p#4bUyEE(D1?9RnrCOGB&BuVeymB+AC%AJohKA){YskMa5 z|4&#t0q4>5wk`YFKBK>ME3_0}PMez3vWLUhzP5vusMIo9q=nb2bG%cQhh927JjCSvZ+rzg1qBLLQ&Y1rDtBewiuEg6+*ikC z{kT5x01WC1N+QwS{y*+@<3fTLLykJgdXM#AbLKN03}M_Jj>W%fMYhh&%qVdGqwA{W z(0{dad3o8zEk`aH*9K5H8y0!qdwdjz|8IwuTOmu(q;n>;7voJAy_#dYh`~QSok7tg~aW9`X*uLJC7TDJ@1YmVpV=LPTlyPDzGyMLq%eIihZOZE4n zJssa|QWtMPp!7dRx~n#VmUq_HFa8Yz3`;A=v2m*WPe}FeHU3fn2tVfp{JWF!jSBG3 z5Qm=<1OAb9euxkL_e?zlZnuT=2V6v~J%5<-;k~~%z;}A8K1)ezHD6n8dpo=yeZO?B z_n8|BCiqLHdodc|{Sj{FArZzkr)R4K8IW;J4(Gbr7JGW@{~N>Ett-g!I1lPs`sMjT zufFknDkpdJy(OUlBeBJQ>}?6+gLPlTx%)b9x*^_xgvrtPw8LfhM@}PU)suci{hN~y zJ#II*-;<9!V|~X**Q*)9RWWE%R%B}@-HS4LCa%A{XJkTmyt%aTS!< zK=0r8Hz2nu`?{cn3;z_l#f^P&4D9?y=R#_p`Cak{mMao!*{i%DTO(=w59hAlVE^wp zf7t}L65-g>q^x1kD?iQ}CXRf}je1fqYe+H0VfLQLnz)uC!%gXVjK6zGLt&5h%Y4hfkuVswt;0i!8 zyX_si3A@`u++I3k_Wz{~K6yDFuo8Av!6kG)R3Cc%iWWEgIEwwAWDpf#)O*Z?XuAl{ z$`{TPsR}n2z@M729Lh!tRU*cgy=~#_@zB!dpt4*4C8gLQ?lG_0y!a}fX-kHd1%KIp z!DE+BPZl36@`S42?`Us9Cj?jIT*4G(&WGRw+-7`ihcHe%gs&cB8jVxrZQGIsspJ3Z z-2RUBNx;oP^Q7;(mZAw>Zs0bqY}ArWXq>;9#(iR0(&92tlwvs-am&6?`=+e^d_j8~ zeJ#rZ#XUc}apCK8iRlLocEG>sraSPkZLh|S60;v36hT9Vvq~;@8-CtJ2z)Oj^?NcR z&sK+lLC|RAq)bJT79Vo#^+L(zRe}L@W3W~~@h9wg)=o9=vR=4hWKji>qM}$ktD$4ND%E9t-a@4c)s5}u2i!lj?Z3V4zIfB-2MbcYxyG!MDvGe@`-*f0&Ovpm9$t+!HJjSy zyF?ZJ4Ft!iBT$~6xG28V!!0KOJn++Yq1<~<1?~#n@pp9{Mg=_TKTfY_YnlN z*XM0N2#LEi`F`G;W6|jssu&yCv^&OnIh3G~&DkTyM)+b2$3&aT96)FYE{EN2I76kh zHeUHYVPGz1TC!Zy!P_P$|37&OyT~E7i+my3KOD!*eE0xJRR#{sFMd@qh0qNLMQ+^8 zI=4Bs*HJA;EbMP#Xde|tW~9_KD11c3G~)JB+cfwk7so)@9qBlk+mdv#1tF+gh^z_v z3W2cy#wKtp%w+W2fGJqGV@n4BPmxn?X1zy?2wG${e-P>Z>Xj+@3;+A&4#yASkA%Z+ zt%}^G4Spu-t*pShe9e7KR(Py$j%$W06u}RCp!zZ@XMiHg3ZF z&f8WM_fx+-Kfi>j?`)<7R_)J!+#$mdhCUu6zy2PC$=+h$X$4G&g2N*qrKASZtPvJdieqEZf+_uY2d(IamZd-_7JcrYgCd+x^un= z3eRT_pY!Z)yB}wBq?VxgqsT*gRb0>|`zu!R+ z>5YWhAi1gg+UMU-CmX&gX#EW$!XhI-0LS0M3-w=2*n~^{#v1lo40!GI6&FZBpAz49 zhvpf=tqY2);6}%cd#STAy^+B)9F+5t{cv)2@@_&i@lgkVNnCOQp zs4b;@OUA)2*#^ba>*4?Le*M^i@cG|6xa~i-VDHiy$hLrCG+i4KW5JabBrpD`uYos_Ew$XY0EJ zpScPj?+9t+mZnE>{?!Qh(=#&yaHDWF0&c8|dRDfsUkU-_P}Nci-e|l5mc`&;h8*&0 zg4=aav~mu)STl4}_?eU$IXim_ZVp*sx6T5Dl)K+%Eq_dDfpN z)f6~OF&v)6Pih(rb;a-=kDj#p_)@*gJo_y>VFrC_F8X6wf9-?wH=tZwI$W_1L2Y}r>{RX zC!GhEW$3QN3@NbQZG%{uqfs})NPZ$`MFC8#U3W=%XkJv~v00$>su(GRmw8>bvN&=MyOp( zvur?qaZifp?#@1s!*bEWx=KetI9cc+%Xx)Wg;#WV>YWWSL^MMA>ry0voQ0egr73V? z!Rn(?l4}7ODcR2FU8TmQkMo8Iy=RmimHz`mz{XxP_~2&bBk~c5gRq$(L<|mv2IrCrS&gylf`%VnLeIJ}dfgh_bQ{Leh zr}fP}6k#~0v8y1BOx^u#2{n(MReG&dF*QbV^9epNSV*<&j5KU>WaI9g}E|aPcJjzOdaI z+1a@F+yOxMdWW9UfueV4-DlODO!HNV9oM@KNW|k2U#+Glde_6Eg{C_W9#yq#AA#5r)R_a-P1ew@$a`x_R-ef{C29XxUDWTniwZ2PM& zS$^WP-U#NZ$1$m5k7op@RcWwHTCmv6kmJ9B%2m+ZHi#=nD@pd0xaZsrLE61hqzdZ# zZgTa@fIlu40qOn`_QH<$JlL5Zhm3&cYxLucAJsYrgJcpzn*amySkA>0rU_TYj%S6- z!YtO)(&9Latr$E0r=3+Dqkq zk9?mBtB#}C}(hJ)5;D=w%Od4j#Ikp9^R{Nsq$A(?{6vo~=HqoBK`Mg{6>Y@`AgEFgchf~f=VAS158ur;{%oj)*2@qQ6! zPi}2rfm)$TZHI7p%Yn_^ke$M(ls0CT%2^Q9o3SnCw54;zN3I6V25P_*jClo4D0lrk z^^KoPjvw8UcOQkQ)y2id#DnI=N6vCxF5yRj3&f@n=<(H}&sfGq-pwNHKVi^b@cAy_ z_?T)!!Rw6`;{rE3q;RYnS>%M5?3xpl-FfuZ?8MvQu$JF9A$QfGxso8P^3L|iT6`<< z@d-OiJ~Z5uIe~@JWNyF|)V4kr&z4$2c&`lCKvmXe;WypPlg~8>)0C_-p#?X+ ziDl}vGPwE@kT6bw@gq9`4N=eEbWV$c)+UZyyN59vh76j9aGoN+CME-d2<2I}{#(U5 zI&U%ri53qjC-nKleBFlb6mr4}qhaAw(4P`RLX+%G(7PE=TCGb{Qf|@4JRzeOEG8hM z`->BFJBj%L;2R#Q;UgxPH-QYbRs`FhdZiiPu>*{DJAOX~8S;uuP&k zSAVEOe4hPX|EyU1Spj3l_ikt-ObCBtLC$az)Z@Hi>2 zF}Y?Z_|v=wFAzQW8f-XM)~85)7<@}?ZyaV10X(zc!k>Z_yWk0A$W=6Ptc6^i8`!(4 zsD&+jhU&PW)9Kw-Fg}C?FnZlGyUCOE_0jHLQMp?`Uq_Ul8e}Ax_T*>sjEfUKp4@Ai zj@h2jQm`?wRJ<7?S}*HkB_|4pFLDO+Y~j9ZKmEaf-i=2&etEF47f#_dG*px%55ZN; zeRt6a4SVo+b~;~+xG$hWR20BHh{7$&=AQyer>zg;ho8V`XtM{R?e`r6y8Jz5Z4;{x z3qh!OvWlO-o^mhJ7>;9o&7oI8D0si(8pkg>--7pA62j!$t17WiGupX$O<+Zt@N>6o zS*s+EB6Up3A;Xd|bcjL?x4<)~gMHgic5#mKbM5b3B-dxaHApp&iyYPHm7dw$Hb=n_Yy%1kmM=a8sM zMNx*5gRA0Tx>GIm-u)3_8@Y1{;T_8cyB$&56#p(ZS|UipKH0){cV4zykyi%2>E%QH zc~S+VwLGemMew6tDgj;dXL3RXOwJD?%fHly6f{rAxaEI)Q1%YG(PRH17jiz)wHAa6 z<7Hb8nY9Vfy${#kP`}mQMG1oUW$;kxNwNJH^?A}32-Frm`M;zfd6D@Du-Kkn-fTC9 z(m2cp-2oCzI~EQ*bWZp%s*VOPt3|x;i#Vvkqrp9W<)lj=cGPb^(RDKn+-2afA#hbu zOsxwte8!7_}dyBT%^bzE7ay8`2I9-lc6!j99#DN40!`RqvY@Kkp{GH zB+8g<+Oh$UXR58rJUuc73OFV3*Jd{fVy$roX`|V1<_4&6d+&eio19cAlXc<3Rs7HV zz{b$~c-`!Bl_K|>C%r_+@|Jj?k1G5C0w%BIcv|1@FF?DwuMd&c2@53i*O%RSjsa$h>hy@PeLlg4S}&^ zNyIMYwVfQ_BA6cBOgYbAtq5`cVjPiW2*5YHU;M65agyXoM$K2FymxxmD310~4v>=wc z;>s%cL!x&qxJ}K?f6*Cm<<8HH6fFi(kLk1HhpY)D(#TARVv>=roDpl}8F90Fa@oPz zch+PXY@wCG*^6U7QsLeWMwmBE;7LFW_&bB+W;~fDrhR%35X?iBxKpt8Po?Y;!92=@ zh8f!dL=78q2foL;T&LR7$7kyI8V@Rs7RXelu74Z4gPQWb=Id975V}ox2#pscsVeUm3x?^U1@HK=LX^k3xC6U-k+Y*q8l`A`)vLI+rfc7c zJl29}1!hAExffrkXt(?t$3Iu5PmE%&gXb|7+HT8~S5&Mu>Pz4vz3!$PC^MmYL7qjZ z5F;)^ITn0rJ!0T`zddlfVM`74UtjbBTvS_U@pafkT6pD$cHo$Y$4&wPA`ulnibG(Wq8^Pj@eM z*cB!Hcz=#*+jpQh)}obUK3VeKGhtZ%maOO*Do7c-xHBd( zqC%SlnQDEII9*EVE`wDL>_i$-ju6Nm*#(yiW+j#q%ie}Z5V0{BpIi;up6c-3v^A$%bFfjul zvD|ZS>3F_ZHa%vtep2FIrazs?bY0yRsxQ$^tWuk)QOKn3TBJt3NgcFFcgK#MLsJa! zIB6qcYv!(qP`*J?d1#Ii6H z@tXps1H||vTHJZEyDyACJdHrs!_JCB?`hoQdL_@Pdu6|be=ja~+$JJyx@WGvwOeHK zV{T{7TG-g+4Oy>aAZ_z4O=JWT68vHm9~{*8(!APIZE~&sY}7bG$(lv-^d-+E`Rgyh zv*)dAao?t6c-p=Q=hcVk^v{-8S10HZUcp0`%xbJ3CunuWem``1^rG4I3U=UR+hx3I zVtrY6@sM*mQ!~(Ji$l$YjG7 zAC6AbJ&rY-*`BK-P4K@ieG_f*;<${-{`Hl%{2O3+O%>5p4AF6nC9mYN9@;yLY5jQ? zXbz$fq99Dvv==nzMOE{mRQF-tUQ@iK8!YHSgQw#s^vG3=+xMZy;j8RHy6CVXMrO4! zn(Dw+VTx)#!=uLd3oVD3HFZ`{U&*&B_V;aW(BNuML_wc|(UFueE!Y|bdujd@hvqgIQTu6@iO-@&&cNLf7DfZiy?#U5?t~Vh)u-uSD>|&>k zt?Yz;&2MjJ;u@9*<)bWvjB-qO#8~tVGqNXD>Oxz$GTr3FDMer#r6+!x3r!wb?v|-r;dBYB zS3d?u5sL!hW2sA^<%idDXCa@qGeTvSBBY3n|Lj3zTwM54>Tf`tYFOlN-8dWtjfLz6 zV=mB3Yh5oVuPxdJn!7L-rt|x%sKY;KO*U`9lHY8`@z6KZm;7c``IOj=3sL5giz~aN zQc^&`!D9k&6GT^fDJ=R|e+A;KFW~xgp6@`R2*SNh!~OfcUR!DG(C*i_l{>{GUkgh+ z*7n*DZ}AN?ml{@^(e!9EFzE_zX&ysV_%SXa!dAJgL&?$YbsTg+tqQWVW%O@kJ zGcmMX9a=!deuAh5$^8p7XEU=I$W?A*5O>BhfUhi*-`)tK8w>n;oY4fK9j?9Q_am! z6ophj7E_GWOgGN~R#{90c zlrNdFxcpH!ImuRXRpXPA+)E{4UrH{mk712j91P_ zaGjZ26MS3j6H>M}Rz)en_GG95B775Tz8S{2CG>GJqN_pQSzZafK7^4r@`~G7r&`CB z#WAG!m`Far{Q?$WYIrv4%0Xd#Mbbc&Frc1G| zC}jH1x|+~L5Sjn@?r2m)IZE;YS=VfO?{QL;ib#oFpq+Z!n@6_-wCcG9BR(8Hj)i)J zJ$r2i3MxC?)oycy9s*f}Aar$d)}(FqP*H8FTzsKdIz09TG88^UYaE>v!`19D;6;lT zGhWqM*_Q=C=ZU#JWT_|G6&fO z>ApFIhz_J)TsgM8JKY4hJX*`EOzDzwL;8rOb%hvT58z>)08Hb7L8JVHdqW`QHtGPlv<(p5^C1 z3^7m%F~qImRoVvzVArSdmTr}pxY@B5dlle>qczplx%0S z&U4NZ>nzwEIlflNWUGt7BUOD!P862&Bh&fb&;7F}1_iB=UAJAr92)KJ>2K9OssS?! z>8vG3FvrhvbFm0|yLR_&*4g$Q#q($PhfpG=f%d0c@Vc|o)&xVz@(nF1bX~5Wb*I1e z#I)Xkf7Ncw&x^5D6=n0#~9F=Tlxv9G0S_Eg>@l@M*cU;Dcq9N(7}%r^jc;Xi_X zWlQ%usI~4K4LTE^=PaHy6ziW&N%{mt!Wk}XhpO__DpL;Ef;i^`VGnHyU~k}GQn^qv zDOWd+v8*m@d3Vvj2E6UD3Iw>S>(T(&q;GF&hUgF|m|D9uJz`?N)^OYAIc!&ZfKGlHEPud?nll`_5dSg%xZGb+f~}i5{u2qK(FmIH9M`g^Kr&GLX@E zu|>`uqvFt2@FqLvgk2zZGYQH+*q9YtzC7e+3(Dr zIfhfFlEemLLJv-H>4C2#zpm#&&qLM*kc%d`LAz*`=^uJ|`U^9YrX+^BzaaC)r+vK4e1d zX}vSxD$Ca+6?r$ks7?^j+umOzk`&aTb7&s@;$Gnf>DoSzwVf8#`- zS+D(r)h*_qlUM6CDaWNRkOC_}A`KSc9w1b-O#jU6)QQ%yv8A7iv(2J)(mgjj#XpvkgUB9>1 zR#zwU&RX{1=|9xbal$!$ilOn6{py$(#`0ai`6TMbU|NYfNk9XUXXQ|-Z&zjkVrlZ>p=rOB`XFL_&Q0Lyx zO!DkieWHln6yKSOaUpLAYTcoyi7)wu=93Gz?*RcCFxnA3SI-g)lM41&a0G+Qm7ORN z2Ul+T=pr~GQ^R14YtS?zLO|6Ak5DP}VF;>K1V7^>edG-!{{_{cE*X4i(^ri2bKO?W zx=6GEu1U|*p|58oy`I@)g{U;C;wD;LLHujKzLdzVekuJ%Gmtu zeB*PG=A4=?84KFVAW*=mDB{KubHcqR%Pc4UM}XZr2KPR?iYqYVN;?!#5aoRSc2E5c9Y|w* zK8b#CZ*z4liJo!A9AjL-zM{p0*f21dCmzR-K-_vP&aal4x)kt zHi^nd@d{8H3lHfW$p$xH;)j@aCsXS!0&wVqx?Uj}sN>z!7)E^!fNLyH*)+}TGSFyU zc-d|R`A9H(sGh~_eIa=EXqQX^@@}^;dRaX9#UIImKjjByf>}t4Ac|l4CELi)tBKdA zckCY*d;TiyW3##3@ShJy^Ip`D7Bv+@VLg*kz8jxz3Z>49Kk<)`PQc_p^6l3dlh*Yr zDjry=mxs9|SOW2<+7zq2j1sC2VbZMPaZo>L?modi``5_M-IRc`?vDy1MqogZBzAV7Tvs1Gj@n zqT{4*S4!dBUmoPAHL)K|MOPFNDaRHnk0tXCKUa?g^M&dax}Cz@dLnSmfBYVKp6(n) zV!I#enEFXbnBQqV%*ph&?&~h9v!E#vdd66fpac=7Z?LSI7B}COpb`F49hje^#dIK& z@$4p(m!XM*mnrS4zIQ;D@k~$8bmn+0_;@jDCpi`7H}sxHcaVd4_H^ z1vT*>*Xo}g$!S)iorrSKod*s3AETyx#vbklI=z0op#ELPgiFe#D1SZmXkk~rV`?!v zRD|V;m$5cEf%q9NcMR^0G`?tr9mg{h3f`PLb@WPm*`! z^4KYFD0H~&MbBpgAh_2v{N>TOaxnJTLRoqaN|KLyv>aoMl1!Qq14W;doY};vgev!3 zS#k30;m`<+G`>`l)cz0;v$$Tn`D-#z@TYe>8QxtJVNM-o6{0?al}@rL(}6(>j`d;i z!UL-PA0cBFO4Ck!rqxv|Nx`wZdd@2}C`aYxWE&uk&4o$hGgHGY)C0E$i$T>o+ab=a zH_m+n#xMUEGB~*U$>&JD*VqpJ$%szd-5am zp_Y6h%fKIBIFrmgyb97}EX(O^6V`&{6PgG_8}ij-XA&fHd`jF_Ig9i<+N0Kc9z8%J zJa-YZcO8n&$g$f@XO%8ti@P$y8T-Qax61W;42icziFf8hlYf5^jEmu`?Cs#lwKCi$PkGy0Wa##V zF>Bm7!?PPHJ+}C&o_dls!;*|o=YzWpO)=yeaN$SO3FN#+yTZjG&MQ7?Ir>Rm_j~|` zM@Xw-GlJ7S9tiO;8C&V8n(SWS$fM#0TV#0M@+1MhwW4u~7=9}w--&ZnJD?`Tppq>p zj|U^GD>m4~S$AW*KjyytauTP2LLx|ECoI8yx__ZWrK8>Z9n@{+NWUHnCR}B7CSI5w z{ecjMMTvkc!39ghGR z&9by%kE1jy>7J|FXpl|y$N-J|m#1>6X(QGWw?LZ&mflC6hnviV;asQDY<2u_vt5U8 zh#BC47+1Qo#O~@r3u#g_SurC};DS8-P#}sA(9jn#@-?)VF#IPu(MN7#(WLwC)YL+( zGQhoS^x$ZEd93L|LDvaOJYS-y&!tpf*tDx%#i*$Q-9+$&nJBxCeXp{qu=+WzT z_l|FLk(`(@s*De(k2Q|NJ5mt{KY!Y%;D#X7wxZ>YD(9~~pjvFhNE&i21{g~A6_iL* zE?9qyiTI|RqF$L+es4ll$V?+iS)smWj;%Aml#bW$B9B!0BH7_ACWlW^X%QD6$DSJW z#`nwq{EzN-_1km`0~9KOnlEkB#|5w;mV~aEEra<{`zsdD(~u3HjanaWGs@gJ0G@Mh zd)_8Ha+S!pE^(R{xbzdpe)&j>D0pY1t-vPOuIYym|J)Fhd$#$61P$g;=Ubp@4m=Ah zN30;t&CQnhEoJQuzoqi@|0uW-_ zIZ)u&+s;Vf#T3|%^<#yiJ~wkxOCNZe%6_tPRva)f@Te~$hZNgNt6)R1?N4Op7agJR z5gS|HR-7ffLV+&Mycr_|hgy**Nv_A2ztpf_?t+N|49kYDOfT}TsdO&bk2GgA{cxKo zj9z3&H(P>q606Cbkl(U+3fQ5kyaB*1p~4-Zq6BgIjJI!af%4o${5`8 ztTVCF8<&*?R0Xtn-gWrJm2O>lDTnPrVnIsU&<6Bxt6v7S6M>n-KAOyO2}JLEq?M)SD`rWEzviFG`bbI3g7;2($@0X2nZ#7 zuujO@_BggxUkpMZb}=WhSG2{xCDwMW@xYyUy)ta7(BryGY4c6icRkK5M1)^*tV6XTjJ#_l$Q1Z{|Eee&pGh`GkbLPe2siN$qcuZ{i$ z6DS3<`1tq!N$ctOSl(G?1OI@4N$Z*0v|w9K@-zr7?I>5qdpWn+*z5O4S#K5NQ@=#A z2@0eN#q<57P6Hd!*EfDVSharJ7JI&UBEsh>qxzG7*L!66qAZUNLalF#*&#VPM-Nlk z*U^HV_yKZa*)t6oVISs9hwjMXV>>zgCluL@KA6YG1e%??8*$kMUBM?s-DCbF+#&*V z{5Ra&^|aVV+kAJur+heM5r_CXr7vT1F=J+!9SLl1KDfVgwZA~-HuSL1BUA=Co6Wrw zZ+ot3L*hyf`n6TiS!q^n6k*9^Uj4Gf{%*-n9u>JBc608Nn<28>buo`{bxiBgIxpcL z(K+h_o*C(4VTv=!Hny-s{^tzdchCNF`lP#JLUWQFIMUJvWn%%H3a_S`5)4j*5<<&7 z?hU^vhIos+zXjAjS-;-!CCH~hn)JKWaZd-$$bQJBA)faLee2FjAeEpv+}16xbRy0g zmCF|VVkX_6r8JSK`Sk$bHaD{o<%Q|5T&zDO#gJB})b;}TXD*_!r{JtAU_&&e6Y4C0 zx31DEwEZbMufY?cU~zoWo|O!$aSGfL5tcb$nwhjDWm74-pPc#cV)5urzvXr^Kz_wC z)d>vCf{QbQZfmopNn1`Wg4(W0zOkAI+9XUpad5*kr0JoPjR1I)?z8t*QF*sJ1I(q}zI|mLnv^X=jq7{*u@ghJRacJUuy= zXqzYnK_lxt};R<#5fz=9PW-$yF{bplrWB7b8lSc^f zb=)2+)Qrb1j$R!txXCKr!FUhRXg7Ww{d@BL*l1vWb-8F#mm)>+kjS2fw=sB%I$WRZ z$K5t<5BI}Peb-wQmN&R~lc3 zhOb=?=_T>2PHyO&<7)2}THgJ9|NZ zh2GaqYQu-5iVNQ)I&{j~4^t0oyQ-28oWxoNcZ+}Y^ypAxo-EUch!TCW$-MTFKWaat zPFe~=NY-k15!JMeq_Q#XcglOAyH1=?;d#T?bY)h{V=A`bKMnrgeBRU6cU7#JE3zHg zuLm{sT*3V}TaKdZ%OOYAAyy0HPJ+)9xjEJ>{Dt@oJpv`&;cMbJwHZnKMP zQaEVu%sX@F&93lP{q|F8QF|CFWRrvF$n0lF%ury?A5gAPEcUbW!A1Ha`v6d%a4Qxh zf!;WMpfsF0&G48fFsI(8nb+{;M+Yeaxh<;yt!%GTs+j^Q>sdTVc-1fHWKy?Vm! zAO*^iRK_lVEJ;;v@m6`vD3fCa`fd^=pmAA*YBWl_NVo%=!P&% z=z+nrK#p4ol229V@zOX%-@Sz^hoBUwx?Uw_Lcy?T4b9ksbeQ2qL-Z(>%}NFC)U#I+ z#uN;(5z^zS6=3}bN`5+k!Ja&dtM_|hWtO$2iOfebHJ92ZxNW9jqbt6e8f%75A$>ob znfMC)syC9z${pck_wO}b6Ae*o9vT7sw5m!Jtcl8u@G7Obe?;bEyZUJInEs|}td=p7v)pbOHmpM8+*TFCCJwI*fJ4)0spi9+ zMlj9(2bN6w%O`c0)8yDKQ3+>OI}sgPtW*FZx_A3rex-Mwm&7!|NZYJDTT2QAJ80G% zx2dj!_Ci&$pop{&BSwIP~lS z27AfafG|;Sp5f0{9E+O;PS{5Vb5oHI2EC}nH>J(9z_#Mm>k;nQ*Sh!0*Ry`3jcD&s zD19p|hd*b6E4{|f6EHn#eh(W`!be``im~FJQrUNL54;A2c0Ca=a?ywfVswsSzgEX6 za5bWS*V+SduESdd9yE@>2zb;9fKgQVbbZ(oo69&{8*~ezjTt$Qmg29<-i2Mg(GQJ8 z?~kDcKIgZ7uSmO)Qoy!qigcc+n7IxpXtNlVflBLodmGNh{pBZow>@C&Ec&*!^Hn(Z zGe@rVNXI`w>+pjFAl?>fn|j-}B{nA>TOH2HSTyZICmgz}CUzBo>SeEL>eaBYp!TS% z;fR#G3f`N7jyH<>&gRGIy|f_#(&7EO@Al~-C>$0nDuAj=E48K z_w{UK9Y`RKlUG4%LL1`H%|oMPZ%P#EshB}bkOPxsx%VZ8-3A>D;NpYA@t{U%D$)1uDXK_f8dT-a_*;P*m7r@vtLF(Lum zFlBE{;+kh?mW`qX2id)Ez2EOkKo-2 zCPaOx+Kc2^oBDyszV`XyZZ9(Fgi`6dnYUlMA@JAjqZvmSHI2BuL0Dk8P09Qbd19yW02BAQdsx|H48OHSfG{-$4 zu6g4qnp6>psp~ZGsZE|{DKbPxi&kdF^mU!Ln*`a-u?Mb3JdRBXMGA$kk+pI@wv8Tl z;sdhPH2Om$+N56d=9PV4xj0 z;UiJ60i-krjm=PJF*k(YJ$nxQ9U(+Z1>NB+_@^7!v2vD;^@`ykWC^)lKNtyL+*9su zA*&_D3DXoCltWCoHWN>jZmV5_&H^z9eb zULzEArPSod>8mn_EqBja`JwHvhNaQHxfdll{68h}v-eL9_Uf0lZ8f_il<(U024RBi zF7?l;bkX~DXs&qvH%urbT&_5ZQGB5?F0;T*3mY31?2taouEc}1l`P^XM?{$HMQkC# zBhWp{ynf{V+eH8sl2tRe39>J5ekyi!1hk8bN1}L&OZCB^E!1TN6MCvq5JS6^V+^gX;(-wiz2}Fz4vyDAS4}UY$b$-Qbs9*CO~GRV<;;r<8;4(%0OC%5 z)n=!V+TJUNKJ7?aCLeYibTOMkrQM+^NSqkndDVuE@f;5F52u?@%bbz5U<;&oFY34v z$awFir_*n?0-U&q)OSU1Ep66s>A8Lw^?465MepEb8m9acl?3b(?lDH~mVnk7 z$c_}BQZW$%>>1vr-$naLKw(R0*>%EHUoj5>77!%8v4pf|q||>O1B>D;HcoT$ z_h=l3kNCs=YVUsmV#urLFn9&dL+$$7Nl-@%#-D_HjrHROhTW#XsfzaXj=}6{CZ|q& z;;VQ@)8#cVJt>}5>2i((^YTCVnndR5 z{6}r=tDD+u$fYXMyxy~uVICna1)i>yM2_T1<; zF#s9NLr|)NrX!5>WnP=?bmC6(Dp>r~%KeDqu@%1u^0kKp@^>(;J;ngyWGHCqoGcq} z5O#A4idMuHp=IJLE~72pj0#@mrr#q97>OiHf8gG7`6ir<+tVTi?_hpzMOP?71Yq4r zFba&t4TfZzjlQn%nMTvWdr#pONbh4z8dw{TZ^3IK5hovy9FyQ0xRdBd!EV^QK12D#dRx;tv=t*g2fQ8C&OuqPf(-1A9Y*-AL!{&`&Afl`HU zQ^UoU{a%8xJKxgl;aj+Bf_E1n$01EmTOZ($6DxuveK*G590f9xI04}!U`)VP88@t% z8>f|jAAH=8SOM0HXrPp+5$d=a?W9h34-Q|-NP;eY~?o-qK~ z3O!==jdQ<5yVk)Kt5rEVPK7bd?o+q!DNcQ_;A)E0g+i!;-l_whIo&=&Ih*|mU$2EGPM)AT}ua!c*uF%pH(ckJ`DYZg7b&jm^j+zCj=B&oZ}=M-kd3c`1dS_ys*G zz5ZHbs6^qSdj%m)reuBT9{UMI%+qs!=M?I5#0d&F0RrD0*`6*u;W>VGoLWbW>> zsQTx-(L7l`zAmp}Q=6G{?%J?_ki0q-N@outxYNe5iT zWpc|U2R<(>#M-acFu$GK4H~FlSVF(AW5nDakC%iiEULbyP{jihJGskP{w>0;&x!AXE$-9?U z9QTXR#cBN$Bi1kFzL?rmkd1mYZ5i0}0{j6HvSG(U%pBP>lOS5j_lI48U>jyWcfI%+ zP?4f#6LgKZDS1(SS89G#XK70mm4rPNr}gRh6XnY(T`8&Ec#r#{IcXX7FDX$o-nha* z!YSHqqCTezfznYQ)vV~WzITmuc7jZVua{g)C>?=v0I^UrU9bYUen-RF?)CTJ(77*9 zJi@H^_Soc(sZEXC+Jm`qvXMbC=dN0Qc5GFuP7X~NXvqq2#W3Uz1+rc|*HzxyWgwPG zZSbS)pB(%=Lq*{e^flJa#G$wJWZK2DWHF_b^0ZKMKaFeqd%=zg&B|))4d1y!=adpm zGd7zuS3w^!pxZAHkb0+06OcLAow4m`)OWoOqRdApNuBxEQNIccckPqgKuU-HbG((1 z1_2iO-=dRTJd0FZ?^cBr%z}9iUZ@6aNToR^dJH-@pi9iQkMyPTme4qT(!RdFIbW*O zjp{d1+~p1BEk?N>JmLOwb@i#LGUJt_S`MYt#iJ)GdiOa?Lf7okp?lp@Qk2}L z9y_3|!NvC;IeLxGsYjsevI3StHx$>Pq(gD;v3n&^+0U0OG&GoEhCaet%inB{<6z6d zq0cw=TJr*0%~1O`VLzv+#{CXx*Kl(VQj0!>cRcb~q}bi;*N0v*7o7Y|Xg;)GzI=vJe#2lYUNRpgZ;NwqKZ4n0z@J#}| zAmrzA2M~<4W5*eL=5!FAglo|F075ttt z0$$=K{b^hR-J5R{B;3I+nfT48bI4!&2MaD8D8F|tNJ!xHzzi;aCV7A6$}iYCt{*!G zAF*4ED1=|*x|PofqkRuqC!nPX_y)(~BzjUS`t8B`#Gvos31Ff?Jx=YfScMEGzSz@A zy^5aMC1rG}%y)5K?Cz*PT25Py5y;Hyn*E6iR7Z9{usxTU+U*`SvD*m>IVw;T!p(a+ z9}QF%J$Aj?<=u0B@c6#IR-t-^mP7|K2r}MLd~m2#f%uy5Z{eJYrBg##S!Gk86}0v? zVK*ji(zTsfWb0$Zyh-P|jQ}P37ad8yyA_|?(%ozXb7sXfqe8@4iLA6khj?iN+ns@0 zyDx5&wnEpZ^nM0wX<+^-se0|~dTr{RCRF``do=6dQN(C~Ms$%UR7Qs*GL^z0HPSJ4 zae~QeOc&*SILQdw+g1o5L=N>Dwa>A_ca}syHh6A-Finx*#w8QlQ`n`)<`;HbA<2I% z?Tp&D1{K**ra@ecQK`k@acCr19$&X30(U4wf-xUwm@KUB zeE_d_$)&*kzQkc`USeWXHg8=y9b3JdnHr*{b+(N-lG1#Lb+9|2SY~&dtbM~D ztC10WJc#7)9D$PARNr15MD1KljCLtGukIMcBw}7`u2^_qxyi0onH6bI6>3&ftZYy) zqJhmARR}amVN}?$TWiAX+|^YXIx=u@VG=Ja@)hR?Ns7j8rSV@W2=6OX*KyTwP^d8* z^*RYES{lau$OxiHp$Gjr@l>QvJ=r_J&nJq@y}Yu!G?|L2yH>fs3*;wi34r3lo5d&z z(KVvk!&AD$e*e)>fk0WSzt8a+aSym)Mi=^Rjkq0tVfJSumrz3B?e6-9m3TRnGt!lgf6q;68G6=dKs7!z6f6sshjoeSpB~IC;8R!&xFdxNtk4=7FuVp7x5P7tU|Ot;Tj5bzagQ zRC}^|^%#%XjJ2Q%c>q>hkf4ei~YohQOBCO+dh4iMU3ux%c=e2&mT`kFSq^Nb#Gsvrdp z8IuBeO6X2-#Jv}lHC)F#pK-o`s8n)_nK%q2jw$zMC}F4Fptz+ksdV~=%5=*jg#lKv z2ZLs+VO^9KzV6DR@{8IpB370A0ul^|!y=~M!upA~8AA4uomaTHuMlEzla)G`2r)yR zGyA^QpVjCpnlj}^A<6Vaa%s?zD2MZPp_<=Wh#Xol-dfNc$w<)rqsc0p>Qh4QS#>{O z3^X){EGN>X&!ODhctVa8V~a{3oMpeJ%W-uAaVy;t&WaST;j4Z^>Nrzm!5TT&+;*Az z{s2qFu~+f~6QQ=D-{ag4`hf|uSLcg#979{1jQz^0@mfruS$j_eCAAs4dWwF!6w}Cg z`(LiM3ch+^8gxs>67Fbfl$ZSRoX#I`b-bq;_;2k?loOVtP*4O{fjml91QAtNtkL(*K#f(2XJ9E^NbOMT-erb8>6v0ns4#JZ0N=EP_j}sBs?p^~268ju zMH-*qC?Qq?L@C;4bW>?`uXWTi@Bi5gNaDQT^iqCG@ZxpeY#_|XELq@8p?rw0;mzyV zl>Hb@R@z>ezh`P>+7a$g1naBix)0jgNJ{fPbT6DyTlpY;TgLI$Xw>S`w4*b2Q@{x~ zb~WVUYIZX~m#Xt7 zUOSF<#$E7{zhjWo3h+OUH}JC>Dwk*s#VKz%Dt6s934h|0OdE|zYp%%hP#mO6_Gs&X zA0O%kE|i*|Y9CGyhw>D2hECO_x_QKh7&!*jCZNx?iP zC;Swn8m6TR)2FIXjx^Nf!1+A1aAd0Xy_45#Ul@&LFZxYC6@Z@va$pUf2Dwds67{iu zuhd~oJu5>K_lqgNm?MrSI?TlxQqdIUFjgT?4`3QiwCVPbX43xe%>w9uD1Wm_C>OaB zZZ<-aW!n;dDqZMbvE!8V196Pw2{b2Y#Ad;+W)D5p$W@p!ol!oa^JyhxA&2ON!<*q?OkMY^ zs07#hE<5>QSXgCm?}_QkpX(Kt4^@!2UkE@XTacI(e7MqKn$`aJK{EbdqF+`@`WoNs z2(a~?Cft+o)&6}lKK!90c94ZM=2!x1izJBY(mBCKpO{N}m99GXi8YgYIGsbIuNtAt}al6?-2D)x4x$XxBOjY7RbXh;qcGF&{%$c zLS+^7rX#258qC2Tik8`8KV3Ju4eZDr&k+o<2ao$($7a@9ln(mG^e)5Ip zo(-QwlliuDp)8D8S(Oy;{hO`LP%)>>!Z@E*EoEWa3r3i?rsrjralVaPMyrXc{0)+- z@Yn*fmxXEYm)ko6q>4LoAt@UF*C9|J;j7z(Izs7K&~3cxpUCjRIRG8^&;)kKrk8GZ z0raHswEYvvAabIGXXET_qmbQTcX zkI;Axz^UZnl#jI@J!21v;prI}OO!nU*M|^&@W$tkwLtFZU{gyksxk=5+Gp=U{!EvI z3%^tS{vXBtN&SSuuL9I2Fah1&c5iYXg>TWFFG5odTC&P_2g|(k%Sf@-A8TUG*M$Nb zX>^zcGiLRFARfqVvv?(DjsHqsljEF7zh27OH>q!WoKK`f34kQ3%G;@v4c zCjSv)dN=!KmED3E6^vs!<&s`h|06yMR&qABkJ*PKn}USF8h7=ApOZOS;HwLm9*N>0 zxd*Y~%5PFBUJI76T{1I)UCR}E{Y4nmF}Ylp`&lI`L`iNB%9>Nji_WZMAnWm+U%4wp zAGe|fPP`Zh=p4)5Qe?L^GmKXC5dv0O{+(yQ>uvw2+R4h>mb%fa?S9~XW}94lj+3MZ z2l;VTjR$p^xhKC*)YUB5+l{f2#e|E+SupEJn>jco6M{jLDo!C#&e|hf{P}$;{dmpZ zO>&*(OA_}{P$?USM2NbWrrk`}m{{L$=?nHu+KhrcY}`$dyONsLB+x^Z8lj||teLnz z+bnvI#_gW;lah;8FteDmZrLm+n~?F^>w(>6+Enre$O_`jG4K;9T5u_jI z0rYlU2`Kmd>!;V4>_})^AltH{JM%|L;5Yhp1l>n>A{PTGm8Ty zUvRJjJ-&TDaI5gq;2)BgKq9q^Z4&EB-zyzWwgPuN;!k$}IE_d~&D)n7o)B@BETdt^ z97Sg#Qk4u}RhVTU&1bO+FX2Dr(ylCCxWZmx?(Y}k&to=xH{IrCgK$G3IiF3!-oumx zXfCxy7_Y3yVhHa7$12Lnhg9LiWte_Eye9Em{cGZ>tKszMmaM!3dK#Un4e58_?)FUs_T~QlSHb`?rYC}4qZ*p6|@M){7hOhr89XH1k zayQWn_^J%y*DuAdz~d~=YyQ5<*FU!Hp(ABu{zJBC+hd!9HG#*-D#UHpvGl}v2_i{C zYM>6+Z<^OPDgUPzz=zmg_fOF44DSc*jjPzCKBlcr6NKB%EFO9t!pnqsE|bJi;h+%% zm*S~^&~L+#R=E@^j!vJ(zw^8HZrccG4h@GIx;a2fi4Y|Ao7CKI{2*0vXCQ4REP!;@2Zs`~E1)mG;6Yda%vcwQ zAb3VqecZ-br$1k{sgu*HPiRon{$|=2et0vm>JvAk>ksVO)z<#l3@z|0Y-ye_Wq#$j zYo3vEP;Ncz;Mle(H_gR|%MI|wjq#};Qr3LQlXnOZ2uE^~hUO)OFBv+xM(vWR`Hn7bhD`i+{peDZ*jUuCf1ZJae{IsL$^ zfWn6@!VgS>9@-)9QaHP_^l>4hlEBmOqj+lZeFa&-%!=! zOrt)RC{7hZ{SU4wbx>bZAZ*bkYZ*_+ix0$Swui$oc4b2&Vf$y;S{wd7r=<0CNEUYL z%d1CCC5rUB`^=B#?$|O5zOX*`v%_g3y9WxzF=Oc;d7mrs*IvVCmW03Sw>xR@hKPjG z?rqr7&SQ+fI|{A7tpH5(P{tu7*(lKA)>u0N2!1sV1;V-~*ajw&4>Bt$DLRULx9xMD z#cTTL9vZ$QPsJC!`$ywL7WSmjHx=bSLc*QRlw_mqn^~yH?SZY3LrHVrM`?^TI?P2g zP1aE66)$TIJOZUN!Gu!2o|rB6B2AD+GAxs2^TFI)@+b89b1Y{$e+=N2Gv`9HwE}_C@RS@_lG#&Z#IlssUcRyvz4j+qgn;mjPCGw(fN63 z)(1v%7S>=%-+CyH-Q?(DLuOtOQe24smN(d|J&Tb#w?yT#DbqLGY+52AR2{*S*Ag*t zOAwJfE6S*9;s<%v2EM7F?oyvM(^MRxCm-|(!A1S=kR+Qd8($u6O%&Ouh6kM!QLNNu zqW;=ub&KbsPA?FRZ#j;}J59`q?Em~cwTMrA$|nuDNXy4!$?t2K98hh#yc-U){>Evr zY;wUtglpHn;hrXg1Y_&0M-ejN&^>o|_JRZ^ixHof5+TNU;KI*kyxzwAsd6G08&VRh z2WJ1v%2t+0@pkSFx4(JZCYq@N!GBj8Cl2wg(hq&zXDyi1V4h(Qdqy(=QM!L}J=z&I zao>EXE^gdh4(gN6DRsqX&0x|J;&i02Di_3`Khca5Ks-7 z^)Bo`so5-y2g|TU*$zNylK4L?(DdX5878we24Csxe-7t3clc1FSdpImgORBV6Kg~G z^yjz;g~5qYu7{~4+Ddix`eBX14nGPtRw9*nYLe(@YX|5R-_hj4h~~oV?CX+TcgUm# zK4&9~Vegku&g;trJ-48uGymMAi8_ER8)2{gmoDAo)SH00okZEV{)4q@G49dv4wx&) z{6YJ3x%VvhYzD7p(RlbgNC%uSjJTiG4+D=@dI6GJQKdbPh!Z5QRhb*JnuUmvdt<~Z zsHygu@68oVe#!AtwVx{}S>p#;B~->txfj~+y=QT- zFEM;Q9L~uAtl=#Xvq;z_lj9v(L&-%`X?!19ej(=iiSpkNq=by_WUW(^y^L>gqQ>B3%C;i@u+dtr8~hRM6+1ewa(bGVwo*1DuELd z(~m~KVyA;dMIcS-vx}!JR!;$>|r*d+$t5fx-r1$$t~=f(aj@X|EcpOC2%@iRy;052Z)+i7PXEYMB+ zF?GrwR>k?zW|NDx?X*c91M0O^Q&OO%Dd9mP>|1qt+3s}Ey)ZvF()-@#(+u~!Lx-NG{{JV?Dx(g&SWSwe7 z*6z_!!)vB|uaGwz(U8r`d{w-wGt-#+fzee|!xkyuZ5kP*XT<0O=`3Qc$XoO-KIF;6 zuJW)>d;M*YpK)E>zJ^OvlPXP}ZfM@Cl z1e?i^;axXB^uw;=`MV@{{yH zP7`rA&dro0G#+>P`-?v0+I`q?hjaHAQv*R+%u+7s6?7OMv~sYu!Cw(N*YxiVBBm%q zGYOz1zM)kk`f+v+%Am)E&t$XWnIctYNAWA2O|);$jbXXLIXFN1 zBG4D-ap{8kT$X1z>gftQn!1SBPxSVH{Z_h$2d*bzXk_Wk&_UfW8qk&Rrt6VNrhd_; zL48q0rAs{|c17p)lOazVtru{)=2GnQ!f-%L(=2#S=i?wE|58i% zu$8f^O8c3krP(qZP}4GQa^yS0WR%l*ujEZ2p=UT zO~0?_bQpfO%_=6itPAzI%#7%=lLFbx0!@U^wu#M?FF>B0p5C(|7Qgm45a(9fJEDy_ z1Uu;Qi79>y1y>KfelXi$n>HO0|{ut6y;qQa+6{erO}U;k`w-d89&TTGcl`TGjuhx(s@_F7MP| za`CJ$pju{7CJCOlGYSj>78cGfvDCCbpV@1V-$vlm!kZ~Fho z%vU};S*RI38Q<9-&9|dKXI@B<4V&tJ@>TxxPqEkl!=H+0YYYffsmDwiq%ea;{IwDQ z?QaY6@1`SF{wF!(Kdo%;jrXvIa*)%XT|kTusM4Xd4%FO${BJ{md4bxs4qVOGIP)U{ zZlVkki?0g8trO*ZH23JP>Is~k1C-2KOW~PqAcJ0@UV46n{GTTA=4C&w!}DoD*sU3o z)xT~B!0}*aw>8}eS+J0z^xv6p @w+Fw;;`a5aLMhkPOUr8eJr0u!35^{s679Of!N0%Q@6NVFd^_Ly_NMmGJIL|C2Lr0V zC+y4f-$X$O^Xz`RCt?Jn_3vxLr4u1D?A7KybZy|zK++)-c7H!O>hGDein)}6aZ%pA zvKaUt0UpiBP5bEM`I}_&1Tc5Ybw0sccxV}oCK@$+p=Cg z4HA@_RjSueGD^?xHkVd31!DViHSW@LoHfik&jp4NMj)gE$czte+ct4;rw`J!w1GaQ z;Y{iIP{~49URyT!-;LCtzN?@REbzCF&2dsPpKsI9f0uT-mC(N{XK2b z7+CEoPfo4EhXc54*nVJG$o}V&%nttOJ67NJU)|4U9?M3V#rm!0e^Ad4Q@F*a&&UxK z5~j;=l;ro_`PzTm+>#a--}UL;kg2a+uU!|lrwp|udz|OLB3fqMI8GO#{AHa@)cSTS zr@T8m|^XZFVW`aA8U+Ydt&TMPYhqS!+kb93{>BoT|1 zlG1WoK-3-qPNTVKO14|3OCK;PCQUWRo$2-CGIDim3-xA#_OI^)lrEXx#Vz}Mv0%8= zbf%LjV85J&*mYVt#6p@7gqw@*3IYlvO~#N>RCWSIPMTkYE;3Rpt$(cC3|`5OE~gK- z`R|?5eBQL|5$}SI`^oWv-#!*wN=U$*EEE%5ug;WP)%y>Iwt+Jb5p62g=(b>4hQ&0e zJIw$=shE9Z1_k-k4P}nG-;8a-HrBI?m_z%+D5!}Zlwp6TOCYN3*y0;>Ro)#Ckto{Y z1Olq=fU5z!O~iQVGu78MhMX2~sv`@)Rb&9O_&)G<>!pV;=w2nfhgJL_&_Z@pDJ4V1bUzOjG zZuDG2vJkzzke|r-uCS1o1NQ7X@io5t-ZdT8Veh7`(osqkzSegS*JWrL03}rgjsEOH zFubNWOo@ZvtW{%hOT@w@4db z

j>Y$F&>7J({J`E24W=L{9XY&^GTRjiHen0YRC7u#_h7IRwzvC(=oP;iOV2rOT8 z5dXPIKTqK&^i2N-AweJxUPmWj4TX24jORRv?WL)#MF$^NBL83t8Z3|4m)&BB+@+=! zj|LCD987PsvCL&Lkd%(P^tHUT-KqGzg+X0)6+)o448vqWb=HVen?rlEW|f^=d`G(# z6pSh?jBdiUi)O-FsMyoNa3X;Y5Q+6NQM3)Vxh>~v{e568U!1{07$qum=l)~@b)ueg z94q31Iy1!mkgcE@p5CDi-%JeE@}q;L**YSwDJ2Kd8h2-Q79BU)Q^I%ydq@Ih%9Mhy T-cB_ Date: Tue, 29 Nov 2022 15:02:33 +0000 Subject: [PATCH 116/218] Update to Android-Components 109.0.20221129143251. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 2a9e88918..f56fe0a8f 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221128143301" + const val VERSION = "109.0.20221129143251" } From c1afeac74371f9de13d5270734ad973108d77051 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Tue, 29 Nov 2022 18:27:41 +0100 Subject: [PATCH 117/218] Import l10n. (#28018) Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- app/src/main/res/values-be/strings.xml | 7 +++ app/src/main/res/values-de/strings.xml | 6 ++ app/src/main/res/values-el/strings.xml | 6 ++ app/src/main/res/values-fi/strings.xml | 6 ++ app/src/main/res/values-fr/strings.xml | 19 +++++- app/src/main/res/values-gn/strings.xml | 7 +++ app/src/main/res/values-hu/strings.xml | 13 +++++ app/src/main/res/values-it/strings.xml | 12 +++- app/src/main/res/values-iw/strings.xml | 6 ++ app/src/main/res/values-kk/strings.xml | 6 ++ app/src/main/res/values-ko/strings.xml | 6 ++ app/src/main/res/values-nb-rNO/strings.xml | 6 ++ app/src/main/res/values-oc/strings.xml | 7 +++ app/src/main/res/values-pt-rBR/strings.xml | 6 ++ app/src/main/res/values-pt-rPT/strings.xml | 6 ++ app/src/main/res/values-sat/strings.xml | 68 ++++++---------------- app/src/main/res/values-sl/strings.xml | 9 ++- app/src/main/res/values-sv-rSE/strings.xml | 7 +++ app/src/main/res/values-tg/strings.xml | 6 ++ app/src/main/res/values-tr/strings.xml | 6 ++ app/src/main/res/values-uk/strings.xml | 6 ++ app/src/main/res/values-zh-rTW/strings.xml | 6 ++ 22 files changed, 173 insertions(+), 54 deletions(-) diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 15ee82d62..3b6e68b2d 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -1117,6 +1117,13 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Зрабіце %1$s сваім прадвызначаным браўзерам + + Паспрабуйце Прыватнае агляданне + + + Праглядайце без захаваных файлаў кукі або гісторыі ў %1$s + Калекцыя выдалена diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b77ef9e76..fd9d397d0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1140,6 +1140,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s als Ihren Standardbrowser festlegen + + Probieren Sie den Privaten Modus aus + + Surfen Sie mit %1$s ohne Cookies oder Chronik zu speichern + Sammlung gelöscht diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 8e8e2469e..605e597ad 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -1121,6 +1121,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Ορισμός του %1$s ως προεπιλεγμένου προγράμματος περιήγησης + + Δοκιμάστε την ιδιωτική περιήγηση + + Περιηγηθείτε χωρίς αποθηκευμένα cookies ή ιστορικό στο %1$s + Η συλλογή διαγράφηκε diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 8f0de323d..0c0910e4d 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -1125,6 +1125,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Aseta %1$s oletusselaimeksi + + Kokeile yksityistä selaamista + + %1$s mahdollistaa selaamisen ilman evästeiden tai historian tallentamista + Kokoelma poistettu diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b0185b05d..64f968b90 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -259,7 +259,10 @@ Paramètres de recherche - Pour cette recherche : + Pour cette recherche : + + + Pour cette recherche : @@ -335,6 +338,14 @@ Ajouter un raccourci pour la navigation privée Mode HTTPS uniquement + + + Réduction des bannières de cookies + + Réduire les bannières de cookies + + Firefox essaie automatiquement de refuser les demandes de dépôt de cookies quand une bannière de cookies s’affiche. Si aucune option de rejet n’est disponible, Firefox peut accepter tous les cookies pour fermer la bannière. + Essayer de se connecter automatiquement aux sites en utilisant le protocole de chiffrement HTTPS pour une sécurité accrue. @@ -1125,6 +1136,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Faites de %1$s votre navigateur par défaut + + Essayez la navigation privée + + Naviguez sans enregistrer ni cookies ni historique dans %1$s + Collection supprimée diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml index 980355dc6..b376dafef 100644 --- a/app/src/main/res/values-gn/strings.xml +++ b/app/src/main/res/values-gn/strings.xml @@ -1132,6 +1132,13 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Ejapo %1$s kundahára ypyguávarõ + + Kundaha ñemi jepuru + + + Eikundaha kookie ha tembiasakue ñongatu’ỹre %1$s-pe + Ñembyatyha mboguetepyre diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8339f98a1..f39be0c75 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -337,6 +337,13 @@ Csak HTTPS mód + + Sütibannerek számának csökkentése + + A sütibannerek számának csökkentése + + A Firefox automatikusan megpróbálja elutasítani a sütibannereken megjelenő sütikéréseket. Ha nem áll rendelkezésre elutasítási lehetőség, akkor a Firefox minden sütit elfogadhat a banner elrejtéséhez. + Automatikusan HTTPS titkosítási protokoll használatával próbál meg csatlakozni a webhelyekhez a fokozott biztonság érdekében. @@ -1113,6 +1120,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> A %1$s alapértelmezett böngészővé tétele + + Próbálja ki a privát böngészést + + Böngésszen mentett sütik vagy előzmények nélkül a %1$sban + Gyűjtemény törölve diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6c30ab590..18bfcf8f6 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -274,7 +274,7 @@ Passare da uno schermo all’altro è più facile che mai - Riprendi da dove avevi interrotto con le schede di altri dispositivi, ora disponibili direttamente dalla pagina iniziale. + Riprendi da dove eri rimasto con le schede di altri dispositivi, ora disponibili direttamente dalla pagina iniziale. Inizia @@ -283,7 +283,7 @@ Salta - La sincronizzazione delle tue schede è in corso. Riprendi da dove avevi interrotto sull’altro dispositivo. + La sincronizzazione delle tue schede è in corso. Riprendi da dove eri rimasto sull’altro dispositivo. Chiudi @@ -1142,6 +1142,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Imposta %1$s come browser predefinito + + Prova la navigazione anonima + + Naviga senza salvare cookie o cronologia in %1$s + Raccolta eliminata @@ -1275,7 +1281,7 @@ Un browser realizzato per le persone, non per il profitto. - Riprendi da dove ti eri interrotto + Riprendi da dove eri rimasto Sincronizza le schede e le password tra i tuoi dispositivi per passare da uno schermo all’altro senza interruzioni. diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 515fad4dd..6b520fe7b 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -1095,6 +1095,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> הגדרת %1$s כדפדפן ברירת המחדל שלך + + נסו את הגלישה הפרטית + + גלישה ללא עוגיות או היסטוריה שמורים ב־%1$s + האוסף נמחק diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 5d5d0f3b5..52653816a 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -1101,6 +1101,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s негізгі браузер қылу + + Жекелік шолуды қолданып көріңіз + + %1$s ішінде сақталған cookie файлдарсыз және тарихсыз шолыңыз + Жинақ өшірілді diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 96c539345..2fe940035 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1145,6 +1145,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s를 기본 브라우저로 설정 + + 사생활 보호 모드 사용해보기 + + %1$s에 저장된 쿠키나 기록이 없는 탐색 + 모음집 삭제됨 diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 55d1e0742..236861bed 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -1116,6 +1116,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Bruk %1$s som din standard nettleser + + Prøv privat nettlesing + + Surf uten lagrede infokapsler eller historikk med %1$s + Samling slettet diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index 3690927a5..9f7e409a9 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -1126,6 +1126,13 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Far que %1$s siá lo navegador per defaut + + Ensajatz la navegacion privada + + + Navegatz sens cap de cookies o d’istoric dins %1$s + Colleccion suprimida diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 8e4c95725..331f0ba3a 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1113,6 +1113,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Defina o %1$s como navegador padrão + + Experimente a navegação privativa + + Navegue sem salvar cookies nem histórico no %1$s + Coleção excluída diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 35c5ceff4..ff9e6a3fe 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -1111,6 +1111,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Escolher o %1$s como o seu navegador predefinido + + Experimente a navegação privada + + Navegue sem guardar cookies nem histórico no %1$s + Coleção eliminada diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml index af0d17771..70bab3fcd 100644 --- a/app/src/main/res/values-sat/strings.xml +++ b/app/src/main/res/values-sat/strings.xml @@ -42,9 +42,6 @@ ᱵᱟᱪᱷᱟᱣᱮᱱᱟ - - ᱱᱤᱛᱚᱜᱼᱟᱜ ᱵᱩᱠᱢᱟᱨᱠ ᱠᱚ - ᱱᱤᱛ ᱥᱟᱺᱪᱟᱣᱟᱜ @@ -260,41 +257,19 @@ ᱥᱮᱸᱫᱽᱨᱟ ᱥᱟᱡᱟᱣ ᱠᱚ - ᱱᱤᱭᱟᱹ ᱚᱠᱛᱚ ᱥᱮᱸᱫᱽᱨᱟ : + ᱱᱤᱭᱟᱹ ᱚᱠᱛᱚ ᱥᱮᱸᱫᱽᱨᱟ : - - - %1$s ᱨᱮ ᱪᱮᱫ ᱱᱟᱶᱟ ᱢᱮᱱᱟ-ᱟ - - ᱱᱤᱛᱚᱜ ᱫᱚ ᱡᱟᱦᱟᱸ ᱨᱮ ᱢᱟᱲᱟᱝ ᱛᱟᱦᱮᱸ ᱠᱟᱱᱟᱢ ᱱᱚᱰᱮ ᱠᱷᱚᱱ ᱥᱟᱵ ᱫᱟᱲᱮᱭᱟᱜᱼᱟᱢ᱾ - - ᱱᱤᱡᱮ ᱛᱮ ᱛᱮᱭᱟᱨ %1$s ᱚᱲᱟᱜ ᱥᱟᱦᱴᱟ - - ᱠᱷᱩᱞᱟᱹ ᱠᱟᱱ ᱴᱮᱵᱽ, ᱵᱩᱠᱢᱟᱨᱠ ᱠᱚ, ᱟᱨ ᱦᱤᱛᱟᱹᱞ ᱵᱽᱨᱟᱣᱩᱡᱽ ᱛᱮ ᱪᱟᱞᱟᱜ ᱢᱮ᱾ - - ᱥᱟᱯᱷᱟ, ᱴᱮᱵᱽ ᱠᱚ ᱵᱮᱵᱚᱥᱛᱷᱟᱭ ᱢᱮ - - ᱴᱮᱵᱽ ᱵᱷᱤᱲ ᱠᱚ ᱥᱩᱫᱷᱨᱟᱹᱣ ᱠᱟᱱ ᱞᱮᱭᱟᱩᱴ ᱟᱨ ᱟᱡ ᱛᱮ ᱵᱚᱸᱫᱚᱜ ᱠᱟᱱ ᱴᱮᱵᱽ ᱠᱚ ᱢᱮᱴᱟᱣᱟᱭ᱾ - - ᱱᱤᱛᱚᱜᱟᱜ ᱥᱮᱸᱫᱽᱨᱟ ᱠᱚ - - - ᱟᱢᱟᱜ ᱚᱲᱟᱜ ᱥᱟᱦᱴᱟ ᱟᱨ ᱴᱮᱵᱽ ᱠᱷᱚᱱ ᱱᱤᱛᱚᱜᱟᱜ ᱥᱮᱸᱫᱽᱨᱟ ᱛᱮ ᱫᱩᱦᱲᱟᱹ ᱪᱟᱞᱟᱜ ᱞᱟᱹᱜᱤᱫ ᱾ - - - ᱟᱢᱟᱜ ᱢᱚᱱᱮᱛᱮᱭᱟᱜ Firefox ᱚᱲᱟᱜᱥᱟᱦᱴᱟ ᱫᱚ ᱱᱤᱛᱚᱜ ᱡᱟᱦᱟᱸ ᱨᱮ ᱟᱲᱟᱜ ᱠᱟᱜᱼᱟᱢ ᱚᱱᱰᱮ ᱜᱮ ᱤᱫᱤ ᱢᱮᱭᱟᱭ ᱾ ᱟᱢᱟᱜ ᱱᱤᱛᱚᱜᱟᱜ ᱴᱮᱵᱽ ᱠᱚ, ᱵᱩᱠᱢᱟᱨᱠ ᱠᱚ ᱟᱨ ᱥᱮᱸᱫᱽᱨᱟ ᱠᱚ ᱯᱟᱱᱛᱮ ᱛᱟᱢ ᱾ + + ᱱᱤᱛᱚᱜ ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ : + ᱟᱢᱟᱜ ᱠᱩᱥᱤ ᱚᱲᱟᱜ ᱥᱟᱦᱴᱟ ᱧᱮᱞ ᱛᱟᱢ ᱾ ᱱᱤᱛᱚᱜᱟᱜ ᱴᱮᱵᱽ ᱠᱚ, ᱵᱩᱩᱠᱢᱟᱨᱠ ᱠᱚ ᱟᱨ ᱥᱮᱱᱫᱽᱨᱟ ᱛᱮᱞᱟ ᱫᱚ ᱱᱚᱰᱮ ᱫᱮᱠᱷᱟᱣᱜᱼᱟ ᱾ - ᱥᱟᱹᱫᱷᱤᱱ ᱤᱱᱴᱚᱨᱱᱮᱴ ᱨᱮ ᱟᱢᱟᱜ ᱥᱟᱹᱜᱩᱱ ᱫᱟᱨᱟᱢ - ᱱᱤᱡᱚᱨᱟᱜ ᱞᱮᱠᱷᱟ ᱤᱱᱴᱚᱨᱱᱮᱴ ᱨᱮ ᱟᱢᱟᱜ ᱥᱟᱹᱜᱩᱱ ᱫᱟᱨᱟᱢ ᱰᱷᱮᱨ ᱨᱚᱝ ᱠᱚ ᱾ ᱵᱮᱥ ᱱᱤᱥᱚᱱ ᱾ ᱞᱟᱵᱷ ᱨᱮ ᱚᱱᱟ ᱥᱚᱯᱚᱛᱷ ᱜᱮ ᱡᱷᱚᱛᱚ ᱦᱚᱲ ᱾ - ᱯᱷᱚᱱ ᱠᱷᱚᱱ ᱞᱮᱯᱴᱚᱯ ᱛᱮ ᱩᱪᱟᱹᱲ ᱢᱮ ᱵᱟᱨ ᱯᱟᱦᱴᱮ ᱞᱮᱠᱟᱛᱮ - ᱯᱚᱨᱫᱟ ᱵᱚᱫᱚᱞ ᱫᱚ ᱱᱤᱛᱚᱜ ᱟᱹᱰᱤ ᱤᱫᱤᱜ ᱠᱟᱱᱟ ᱚᱲᱟᱜ ᱥᱟᱦᱴᱟ ᱨᱮ ᱱᱤᱛᱚᱜ ᱡᱟᱦᱟᱸ ᱠᱷᱚᱱ ᱮᱢ ᱟᱲᱟᱜ ᱞᱮᱜᱼᱟ ᱮᱴᱟᱜ ᱥᱟᱫᱷᱚᱱ ᱨᱮᱭᱟᱜ ᱴᱮᱵᱽ ᱠᱷᱚᱱ ᱯᱟᱧᱡᱟ ᱫᱟᱲᱮᱭᱟᱜᱼᱟᱢ ᱾ @@ -358,6 +333,14 @@ ᱱᱤᱡᱮᱨᱟᱜ ᱵᱽᱨᱟᱣᱩᱡᱤᱝ ᱠᱷᱟᱴᱚᱢᱟᱪᱷᱟ ᱥᱮᱞᱮᱫᱽ ᱢᱮ ᱠᱷᱟᱹᱞᱤᱼHTTPS ᱢᱳᱰ + + + ᱠᱩᱠᱤ ᱵᱮᱱᱚᱨ ᱠᱷᱟᱴᱚ + + ᱠᱩᱠᱤ ᱵᱮᱱᱚᱨ ᱠᱷᱟᱴᱚᱭ ᱢᱮ + + ᱠᱩᱠᱤ ᱵᱮᱱᱚᱨ ᱨᱮ Firefox ᱫᱚ ᱟᱡ ᱛᱮᱜᱮ ᱠᱩᱠᱤ ᱱᱮᱦᱚᱨ ᱠᱚ ᱵᱟᱫ ᱜᱤᱰᱤ ᱠᱟᱜᱼᱟᱭ ᱾ ᱡᱩᱫᱤ ᱵᱟᱫ ᱜᱤᱫᱤ ᱚᱯᱥᱚᱱ ᱨᱮ ᱵᱟᱹᱱᱩᱜ ᱠᱷᱟᱱ, Firefox ᱫᱚ ᱵᱮᱱᱚᱨ ᱢᱮᱴᱟᱣ ᱞᱟᱹᱜᱤᱫ ᱡᱷᱚᱛᱚ ᱠᱩᱠᱤ ᱦᱮᱥᱤᱭᱟᱹᱨ ᱩᱛᱟᱹᱨ ᱟᱭ ᱾ + ᱵᱮᱰᱷᱟᱣ ᱠᱟᱱᱟ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱞᱟᱹᱜᱤᱫ ᱛᱮ HTTPS ᱫᱟᱱᱟᱝ ᱵᱮᱵᱷᱟᱨ ᱛᱮ ᱥᱟᱭᱤᱴ ᱠᱚ ᱥᱟᱞᱟᱜ ᱟᱡ ᱛᱮ ᱡᱩᱲᱟᱹᱣ ᱵᱤᱲᱟᱹᱣ ᱾ @@ -1132,6 +1115,13 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s ᱫᱚ ᱟᱢᱟᱜ ᱢᱩᱞ ᱯᱷᱮᱲᱟᱛ ᱵᱽᱨᱟᱩᱡᱚᱨ ᱥᱮᱴ ᱢᱮ + + ᱱᱤᱡᱚᱨᱟᱜ ᱵᱽᱨᱟᱣᱡᱤᱝ ᱠᱩᱨᱩᱢᱩᱴᱩ ᱞᱮᱢ + + + %1$s ᱨᱮ ᱵᱟᱝ ᱥᱟᱧᱪᱟᱣ ᱠᱟᱱ ᱠᱩᱠᱤ ᱟᱨᱵᱟᱝ ᱦᱤᱛᱟᱹᱞ ᱠᱚ ᱵᱽᱨᱟᱣᱩᱡᱽ ᱢᱮ + ᱛᱩᱢᱟᱹᱞ ᱢᱮᱴᱟᱣᱮᱱᱟ @@ -1254,33 +1244,20 @@ ᱫᱳᱞ ᱢᱮᱴᱟᱣ ᱦᱩᱭ - - %s ᱨᱮ ᱥᱟᱹᱜᱩᱱ ᱫᱟᱨᱟᱢ! ᱢᱤᱫᱴᱟᱹᱝ ᱵᱮᱥ ᱤᱱᱴᱚᱨᱱᱮᱴ ᱨᱮ ᱟᱢᱟᱜ ᱥᱟᱹᱜᱩᱱ ᱫᱟᱨᱟᱢ ᱦᱚᱲ ᱠᱚ ᱞᱟᱹᱜᱤᱫ, ᱵᱤᱱ ᱞᱟᱵᱷ ᱨᱮᱭᱟᱜ ᱢᱤᱫᱴᱟᱹᱝ ᱵᱽᱨᱟᱣᱡᱚᱨ ᱾ - - ᱥᱟᱫᱷᱚᱱ ᱵᱷᱤᱛᱨᱤ ᱨᱮ Firefox ᱥᱭᱝᱠ ᱢᱮ ᱪᱟᱞᱟᱜ ᱢᱮ ᱡᱟᱦᱟᱸ ᱨᱮ ᱢᱟᱲᱟᱝ ᱛᱟᱦᱮᱸ ᱠᱟᱱᱟᱢ - - %1$s ᱨᱮ ᱵᱩᱠᱢᱟᱨᱠᱥ, ᱦᱤᱛᱟᱹᱞ, ᱟᱨ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫᱽ ᱨᱮ ᱟᱹᱜᱩ ᱪᱷᱚᱭ ᱢᱮ ᱾ ᱟᱨᱟᱢ ᱛᱮ ᱯᱚᱨᱫᱟ ᱠᱚ ᱩᱪᱟᱹᱲ ᱞᱟᱹᱜᱤᱫ ᱥᱟᱫᱷᱚᱱ ᱥᱟᱨᱟ ᱨᱮ ᱴᱮᱵᱽ ᱟᱨ ᱫᱟᱱᱟᱝ ᱥᱟᱵᱟᱫ ᱠᱚᱨᱮ ᱟᱹᱭᱩᱨ ᱢᱤᱫ ᱢᱮ ᱾ - - ᱥᱩᱦᱤ ᱮᱡ ᱪᱷᱚ ᱵᱚᱞᱚᱱ ᱥᱩᱦᱤ ᱥᱭᱝᱠ ᱪᱟᱹᱞᱩ ᱢᱮᱱᱟᱜ-ᱟ - - ᱯᱨᱟᱭᱣᱮᱥᱭ ᱡᱷᱚᱛᱚ ᱵᱮᱲᱟ ᱮᱢ ᱪᱷᱚᱭ ᱢᱮ ᱢᱩᱞ ᱞᱮᱠᱷᱟᱛᱮ ᱱᱤᱥᱚᱱ ᱨᱩᱠᱷᱤᱭᱟᱹᱭ ᱢᱮ - - %1$s ᱫᱚ ᱵᱟᱦᱨᱮ ᱠᱚᱢᱯᱟᱱᱤ ᱠᱚ ᱣᱮᱵᱽ ᱨᱮ ᱟᱢ ᱯᱟᱸᱡᱟ ᱠᱚ ᱵᱚᱸᱫᱚᱜᱼᱟ ᱾ ᱡᱷᱚᱛᱚ ᱥᱟᱭᱤᱴ ᱠᱚᱨᱮ ᱠᱩᱠᱤ ᱯᱟᱧᱡᱟ ᱫᱟᱱᱟᱲ ᱠᱚ ᱵᱟᱹᱲ ᱪᱷᱚ ᱞᱟᱹᱜᱤᱫ ᱢᱩᱴ ᱠᱩᱠᱤ ᱨᱩᱠᱷᱤᱭᱟᱹ ᱫᱮᱠᱷᱟᱣᱜ ᱠᱟᱱᱟ ᱾ @@ -1293,18 +1270,11 @@ ᱥᱟᱦᱴᱟ ᱞᱚᱜᱚᱱ ᱞᱳᱰ ᱞᱟᱹᱜᱤᱫ ᱯᱟᱧᱡᱟ ᱫᱟᱱᱟᱲ ᱠᱚ ᱵᱞᱚᱠ ᱠᱚᱟᱭ, ᱦᱮᱞᱮ ᱥᱟᱦᱴᱟ ᱞᱳᱰ ᱨᱮ ᱰᱤᱜᱟᱹᱣ ᱦᱩᱭ ᱫᱟᱲᱮᱭᱟᱜᱼᱟ ᱾ ᱟᱢᱟᱜ ᱴᱩᱞᱵᱟᱨ ᱯᱞᱮᱥᱢᱮᱱᱴ ᱨᱟᱠᱟᱵᱽ ᱛᱟᱢ - - ᱴᱩᱞᱵᱟᱨ ᱫᱚ ᱥᱮᱴᱮᱨᱚᱜ ᱴᱷᱮᱱ ᱫᱚᱦᱚᱭ ᱢᱮ ᱾ ᱞᱟᱛᱟᱨ ᱨᱮ ᱫᱚᱦᱚᱭ ᱢᱮ, ᱟᱨ ᱵᱟᱝ ᱪᱮᱛᱟᱱ ᱥᱮᱫ ᱩᱪᱟᱹᱲ ᱢᱮ ᱾ ᱞᱟᱛᱟᱨ ᱨᱮ ᱫᱚᱦᱚᱭ ᱢᱮ, ᱵᱟᱝᱠᱷᱟᱱ ᱪᱮᱛᱟᱱ ᱥᱮᱫ ᱩᱪᱟᱹᱲ ᱢᱮ ᱾ - - ᱟᱢᱟᱜ ᱱᱤᱥᱚᱱ ᱟᱢᱟᱜ ᱰᱟᱴᱟ ᱟᱢᱟᱜ ᱠᱚᱵᱚᱡᱽ ᱨᱮ ᱛᱟᱦᱮᱱ ᱟ - - ᱟᱞᱮ %s ᱞᱮ ᱰᱤᱡᱟᱭᱤᱱ ᱟᱠᱟᱫᱼᱟ ᱚᱠᱟ ᱫᱚ ᱡᱟᱦᱟᱱᱟᱜ ᱠᱚ ᱚᱱᱞᱟᱭᱤᱱ ᱦᱟᱹᱴᱤᱧ ᱨᱮ ᱟᱨ ᱚᱠᱟ ᱠᱚ ᱟᱞᱮ ᱦᱟᱹᱤᱧ ᱟᱞᱮᱭᱟᱢ, ᱜᱚᱲᱚ ᱮᱢᱟᱭ ᱾ Firefox ᱴᱷᱮᱱ ᱡᱟᱦᱱᱟᱜ ᱜᱮ ᱟᱢ ᱚᱱᱞᱟᱭᱤᱱ ᱦᱟᱹᱴᱤᱧ ᱮᱫᱟᱢ ᱟᱨ ᱟᱢ ᱟᱞᱮ ᱥᱟᱶ ᱪᱮᱫ ᱮᱢ ᱦᱟᱹᱴᱤᱧ ᱮᱫᱟᱢ ᱚᱱᱟ ᱨᱮᱭᱟᱜ ᱠᱚᱵᱚᱡᱽ ᱮᱢᱟᱢ ᱠᱟᱱᱟᱭ ᱾ diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index dd62f2688..2094123d1 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -256,7 +256,7 @@ Nastavitve iskanja - Tokrat išči: + Tokrat išči: @@ -332,6 +332,7 @@ Dodaj bližnjico zasebnega brskanja Način "samo HTTPS" + Za večjo varnost poskuša samodejno vzpostaviti povezavo s šifrirnim protokolom HTTPS. @@ -1110,6 +1111,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Nastavi %1$s kot privzeti brskalnik + + Preizkusite zasebno brskanje + + Brskajte brez shranjevanja piškotkov ali zgodovine v %1$s + Zbirka izbrisana diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 8a600c5d1..5bc7abed1 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -1124,6 +1124,13 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Gör %1$s till din standardwebbläsare + + Prova privat surfning + + + Surfa utan sparade kakor eller historik i %1$s + Samling borttagen diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml index d8cc026fc..129442dd4 100644 --- a/app/src/main/res/values-tg/strings.xml +++ b/app/src/main/res/values-tg/strings.xml @@ -1116,6 +1116,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Гузоштани %1$s ҳамчун браузери пешфарз + + Тамошокунии хусусиро озмоед + + Сомонаҳоро бе ягон куки ё таърихи нигоҳдошташуда дар «%1$s» тамошо кунед + Маҷмӯа нест карда шуд diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index f5d6f42f9..f6027a09c 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -1114,6 +1114,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s varsayılan tarayıcınız olsun + + Gizli gezintiyi deneyin + + %1$s ile çerezleriniz ve geçmişiniz kaydedilmeden gezin + Koleksiyon silindi diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 1b1580486..e66942a7b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1120,6 +1120,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Зробіть %1$s своїм типовим браузером + + Спробуйте приватний перегляд + + Переглядайте без збереження кук чи історії у %1$s + Збірку видалено diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 218f74937..e68a52a86 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1137,6 +1137,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> 將 %1$s 設為預設瀏覽器 + + 試用隱私瀏覽功能 + + 上網結束後,%1$s 將不會保留任何 Cookie 與瀏覽紀錄 + 已刪除收藏集 From f42e18a20e5a0f86287c1ce01923fff6b2bacce6 Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Fri, 25 Nov 2022 10:41:53 -0500 Subject: [PATCH 118/218] Update Taskgraph to version 3.7.0 --- taskcluster/requirements.txt | 39 +++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/taskcluster/requirements.txt b/taskcluster/requirements.txt index 52b88e0b6..ff3732d85 100644 --- a/taskcluster/requirements.txt +++ b/taskcluster/requirements.txt @@ -14,9 +14,9 @@ attrs==22.1.0 \ # via # mozilla-version # taskcluster-taskgraph -certifi==2022.6.15 \ - --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d \ - --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 +certifi==2022.9.24 \ + --hash=sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14 \ + --hash=sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382 # via requests charset-normalizer==2.1.1 \ --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ @@ -25,19 +25,28 @@ charset-normalizer==2.1.1 \ future==0.18.2 \ --hash=sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d # via mozilla-version -idna==3.3 \ - --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ - --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d +giturlparse==0.10.0 \ + --hash=sha256:04ba1a3a099c3093fa8d24a422913c6a9b2c2cd22bcffc939cf72e3e98f672d7 \ + --hash=sha256:2595ab291d30717cda8474b874c9fd509f1b9802ad7f6968c36a45e4b13eb337 + # via mozilla-repo-urls +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests json-e==4.4.3 \ --hash=sha256:604cc506746ece244e5f4c66ce1b77887b0340749f9f10f58f311caf5701315f \ --hash=sha256:8ed3974faa887ca96a7987298f6550cf2ad35472419a980766b3abe48258de0a # via taskcluster-taskgraph +mozilla-repo-urls==0.1.1 \ + --hash=sha256:30510d3519479aa70211145d0ac9cf6e2fadcb8d30fa3b196bb957bd773502ba \ + --hash=sha256:7364da790751db2a060eb45adbf1d7db89a145ed279ba235f3425db9dd255915 + # via taskcluster-taskgraph mozilla-version==1.1.0 \ --hash=sha256:1a56c1ea668ec10e18c0a2e394a79373b5ec0ea25a33d204ac6382f337cb9f8a \ --hash=sha256:1fdd9ed90eeec801852b981e98d5b4f6a69efee32eb5f492db86be97393ce4e9 # via -r requirements.in pyyaml==6.0 \ + --hash=sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf \ --hash=sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293 \ --hash=sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b \ --hash=sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57 \ @@ -49,26 +58,32 @@ pyyaml==6.0 \ --hash=sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287 \ --hash=sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513 \ --hash=sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0 \ + --hash=sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782 \ --hash=sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0 \ --hash=sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92 \ --hash=sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f \ --hash=sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2 \ --hash=sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc \ + --hash=sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1 \ --hash=sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c \ --hash=sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86 \ --hash=sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4 \ --hash=sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c \ --hash=sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34 \ --hash=sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b \ + --hash=sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d \ --hash=sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c \ --hash=sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb \ + --hash=sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7 \ --hash=sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737 \ --hash=sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3 \ --hash=sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d \ + --hash=sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358 \ --hash=sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53 \ --hash=sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78 \ --hash=sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803 \ --hash=sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a \ + --hash=sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f \ --hash=sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174 \ --hash=sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5 # via taskcluster-taskgraph @@ -91,18 +106,18 @@ slugid==2.0.0 \ --hash=sha256:a950d98b72691178bdd4d6c52743c4a2aa039207cf7a97d71060a111ff9ba297 \ --hash=sha256:aec8b0e01c4ad32e38e12d609eab3ec912fd129aaf6b2ded0199b56a5f8fd67c # via taskcluster-taskgraph -taskcluster-taskgraph==3.0.0 \ - --hash=sha256:566e46ba9beeb42e6884f7594ceb5b512b82bb93097ae4abc395e4d513dbe556 \ - --hash=sha256:fba61e84ba3624056dd84c79d9c1796d4f50d1d25715f3217681c737f7ed3f03 +taskcluster-taskgraph==3.7.0 \ + --hash=sha256:1d30045b1ff537245f77222ee323734098e5b3327623024027f3348abca81e00 \ + --hash=sha256:4ef7a36e3c873c024c6d415d52342509ee07b0686d98fc1db8e01cdcaee5e377 # via -r requirements.in taskcluster-urls==13.0.1 \ --hash=sha256:5e25e7e6818e8877178b175ff43d2e6548afad72694aa125f404a7329ece0973 \ --hash=sha256:b25e122ecec249c4299ac7b20b08db76e3e2025bdaeb699a9d444556de5fd367 \ --hash=sha256:f66dcbd6572a6216ab65949f0fa0b91f2df647918028436c384e6af5cd12ae2b # via taskcluster-taskgraph -urllib3==1.26.12 \ - --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \ - --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997 +urllib3==1.26.13 \ + --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ + --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 # via requests voluptuous==0.13.1 \ --hash=sha256:4b838b185f5951f2d6e8752b68fcf18bd7a9c26ded8f143f92d6d28f3921a3e6 \ From 322b9ecf734b100ee6783440f8de63eaef6ac4a1 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Tue, 29 Nov 2022 12:29:05 -0500 Subject: [PATCH 119/218] Close #28021: Add ability to opt in to receiving push notifications on Android 13+ devices --- .../main/java/org/mozilla/fenix/FenixApplication.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 60fa61bd3..74738d876 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -80,6 +80,7 @@ import org.mozilla.fenix.ext.isKnownSearchDomain import org.mozilla.fenix.ext.setCustomEndpointIfAvailable import org.mozilla.fenix.ext.settings import org.mozilla.fenix.nimbus.FxNimbus +import org.mozilla.fenix.onboarding.ensureMarketingChannelExists import org.mozilla.fenix.perf.MarkersActivityLifecycleCallbacks import org.mozilla.fenix.perf.ProfilerMarkerFactProcessor import org.mozilla.fenix.perf.StartupTimeline @@ -367,6 +368,16 @@ open class FenixApplication : LocaleAwareApplication(), Provider { } } + // For Android 13 or above, prompt the user for notification permission at the start. + // Regardless if the user accepts or denies the permission prompt, the prompt will occur only once. + fun queueNotificationPermissionRequest() { + if (SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + queue.runIfReadyOrQueue { + ensureMarketingChannelExists(this) + } + } + } + initQueue() // We init these items in the visual completeness queue to avoid them initing in the critical @@ -376,6 +387,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { queueReviewPrompt() queueRestoreLocale() queueStorageMaintenance() + queueNotificationPermissionRequest() } private fun startMetricsIfEnabled() { From 561b56389b989ef0dbddd64718b22453c37df8b9 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Wed, 30 Nov 2022 01:43:13 +0100 Subject: [PATCH 120/218] Import l10n. (#28027) --- app/src/main/res/values-es-rAR/strings.xml | 6 ++++++ app/src/main/res/values-is/strings.xml | 6 ++++++ app/src/main/res/values-zh-rCN/strings.xml | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 4bf96f701..32159e892 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -1132,6 +1132,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Hacer que %1$s sea el navegador predeterminado + + Probá la navegación privada + + Navegá sin cookies ni historial guardados en %1$s + Se eliminó la colección diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index e1e5d5d1c..deb9e034c 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -1106,6 +1106,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Gerðu %1$s að sjálfgefnum vafra + + Prófaðu huliðsvafur + + Vafraðu án þess að vista vefkökur eða aðgerðaferil í %1$s + Safni eytt diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index fdceedba5..9b04e312a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -1148,6 +1148,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> 将 %1$s 设为默认浏览器 + + 试用隐私浏览功能 + + %1$s 将不会保存浏览期间的 Cookie 和历史记录 + 收藏集已删除 From 148fe08f94e36711ee9df40398531b3bba00b35e Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 29 Nov 2022 19:46:44 +0000 Subject: [PATCH 121/218] Update to Android-Components 109.0.20221129190138. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index f56fe0a8f..27cc56f1d 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221129143251" + const val VERSION = "109.0.20221129190138" } From 4d5ca81c6bae7b99b956dd67dd791ca20490a27f Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 30 Nov 2022 18:02:25 +0000 Subject: [PATCH 122/218] Update to Android-Components 109.0.20221130170727. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 27cc56f1d..5d90a9923 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221129190138" + const val VERSION = "109.0.20221130170727" } From 68bcf7e872a60b2091efb563264e4ddb7a38aaeb Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Thu, 1 Dec 2022 02:02:46 +0100 Subject: [PATCH 123/218] Import l10n. (#28038) --- app/src/main/res/values-fy-rNL/strings.xml | 6 ++++++ app/src/main/res/values-lo/strings.xml | 6 ++++++ app/src/main/res/values-nl/strings.xml | 6 ++++++ app/src/main/res/values-su/strings.xml | 6 ++++++ app/src/main/res/values-vi/strings.xml | 6 ++++++ 5 files changed, 30 insertions(+) diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index d7f0e29e4..5e2033c76 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -1108,6 +1108,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s jo standertbrowser meitsje + + Probearje priveenavigaasje + + Sneupje sûnder bewarre cookies of skiednis yn %1$s + Kolleksje fuortmsiten diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index e0a21156a..6d37dfdbc 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -1124,6 +1124,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> ກຳນົດ %1$s ເປັນບຣາວເຊີຫລັກຂອງທ່ານ + + ລອງຊອກຫາແບບສ່ວນຕົວ + + ຊອກຫາດ້ວຍບໍ່ມີຄຸກກີ້ ຫຼືປະຫວັດທີ່ບັນທຶກໄວ້ໃນ %1$s + ລົບການສະສົມແລ້ວ diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index a215fcae0..4ffd8b2cf 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1123,6 +1123,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s uw standaardbrowser maken + + Probeer privénavigatie + + Surf zonder opgeslagen cookies of geschiedenis in %1$s + Collectie verwijderd diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index 2d56ef053..9550afed8 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -1118,6 +1118,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Jadikeun %1$s panyungsi baku + + Cobaan nyungsi nyamuni + + Nyungsi tanpa neundeun réréméh atawa jujutan dina %1$s + Mupus koléksi diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 1aaa8f352..551d6650c 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1106,6 +1106,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Đặt %1$s làm trình duyệt mặc định của bạn + + Thử duyệt web riêng tư + + Duyệt mà không để lại lịch sử hoặc cookie trong %1$s + Đã xóa bộ sưu tập From efdb1172ef358ba825c47511ec890495de7f94ff Mon Sep 17 00:00:00 2001 From: Rahul Sainani Date: Thu, 1 Dec 2022 18:43:38 +0100 Subject: [PATCH 124/218] For mozilla-mobile#26736 - fix username validation error state (#28017) --- .../fenix/settings/logins/fragment/AddLoginFragment.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt index 9e26aaada..af63477a6 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/AddLoginFragment.kt @@ -195,8 +195,10 @@ class AddLoginFragment : Fragment(R.layout.fragment_add_login), MenuProvider { binding.usernameText.addTextChangedListener( object : TextWatcher { - override fun afterTextChanged(u: Editable?) { - usernameChanged = true + override fun afterTextChanged(editable: Editable?) { + // update usernameChanged to true when the text is not empty, + // otherwise it is not changed, as this screen starts with an empty username. + usernameChanged = editable.toString().isNotEmpty() updateUsernameField() setSaveButtonState() findDuplicate() From 301034ac77e9b147864dc0dd157bc5ef8bf69775 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 1 Dec 2022 18:48:06 +0000 Subject: [PATCH 125/218] Update to Android-Components 109.0.20221201174451. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 5d90a9923..586c7620e 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221130170727" + const val VERSION = "109.0.20221201174451" } From e04b8b77b81648aafa4d24b311754a96ed8063b8 Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Fri, 2 Dec 2022 01:31:48 +0100 Subject: [PATCH 126/218] Import l10n. (#28049) --- app/src/main/res/values-co/strings.xml | 14 ++++++++++++++ app/src/main/res/values-en-rGB/strings.xml | 6 ++++++ app/src/main/res/values-es-rCL/strings.xml | 6 ++++++ app/src/main/res/values-ia/strings.xml | 3 +++ app/src/main/res/values-skr/strings.xml | 3 +++ 5 files changed, 32 insertions(+) diff --git a/app/src/main/res/values-co/strings.xml b/app/src/main/res/values-co/strings.xml index ea06928ca..afbe4a2d1 100644 --- a/app/src/main/res/values-co/strings.xml +++ b/app/src/main/res/values-co/strings.xml @@ -338,6 +338,14 @@ Modu solu HTTPS + + Riduzzione di e striscie di cannistrelli + + Riduce e striscie di canistrelli + + + Firefox prova autumaticamente di righjittà e dumande di canistrelli quandu ci hè striscie di canistrelli. S’è alcuna ozzione di righjettu ùn hè micca dispunibule, Firefox pò accettà tutti i canistrelli per chjode a striscia. + Tentativu autumaticu di cunnessione à i siti impieghendu u protocollu di cifratura HTTPS per aumentà a sicurità. @@ -1115,6 +1123,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Impiegate %1$s cum’è navigatore predefinitu + + Pruvà a navigazione privata + + Navigate senza arregistrà nè canistrelli nè cronolugia in %1$s + Cullezzione squassata diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 8c75306c2..b7415bde6 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -1107,6 +1107,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Make %1$s your default browser + + Try private browsing + + Browse with no saved cookies or history in %1$s + Collection deleted diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 54a62a914..2600dd6d4 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -1110,6 +1110,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Establecer %1$s como tu navegador predeterminado + + Prueba la navegación privada + + Navega sin guardar cookies ni historial en %1$s + Colección eliminada diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index c02719475..38abcdfc9 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -1144,6 +1144,9 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Rende %1$s tu navigator predefinite + + Essaya le navigation private + Collection delite diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml index ed47dce4c..21d08f448 100644 --- a/app/src/main/res/values-skr/strings.xml +++ b/app/src/main/res/values-skr/strings.xml @@ -1121,6 +1121,9 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s کوں آپݨاں پہلوں مقرر براؤز بݨاؤ + + نجی براؤزنگ ازماؤ + مجموعہ مٹ ڳیا From a38def346882796e1bcb65d3e754532dc5797ec2 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 2 Dec 2022 01:29:28 +0000 Subject: [PATCH 127/218] Update to Android-Components 109.0.20221202003559. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 586c7620e..31bad7801 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221201174451" + const val VERSION = "109.0.20221202003559" } From 181f6b5ffe95b61641e905081b511fb528245534 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Mon, 28 Nov 2022 17:19:28 +0200 Subject: [PATCH 128/218] For #26286 new dismissOnboardingWithPageLoadTest UI test --- .../org/mozilla/fenix/ui/HomeScreenTest.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index 582f94d5f..77a187950 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -199,6 +199,25 @@ class HomeScreenTest { } } + @Test + fun dismissOnboardingWithPageLoadTest() { + activityTestRule.activityRule.applySettingsExceptions { + it.isJumpBackInCFREnabled = false + it.isWallpaperOnboardingEnabled = false + } + + val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) + + homeScreen { + verifyWelcomeHeader() + } + navigationToolbar { + }.enterURLAndEnterToBrowser(defaultWebPage.url) { + }.goToHomescreen { + verifyExistingTopSitesList() + } + } + @Test fun toolbarTapDoesntDismissOnboardingTest() { homeScreen { From 3e4f0fabce2a967358a917d9ae3435a4de8687e7 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Thu, 1 Dec 2022 17:12:36 -0500 Subject: [PATCH 129/218] Update protobuf to version 3.21.10 --- buildSrc/src/main/java/Dependencies.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 2b3f7dbdc..81bb5ca82 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -59,7 +59,7 @@ object Versions { const val google_play_review_version = "2.0.0" - const val protobuf = "3.21.7" // keep in sync with the version used in AS. + const val protobuf = "3.21.10" // keep in sync with the version used in AS. } @Suppress("unused") From b634f0e11573bdb3ea02964ab3c3c4b458949d3a Mon Sep 17 00:00:00 2001 From: Zac McKenney Date: Fri, 2 Dec 2022 12:02:54 -0800 Subject: [PATCH 130/218] For #27540: Add screen size configuration change handling --- .../mozilla/fenix/browser/BrowserFragment.kt | 216 +++++++++++------- .../fenix/browser/BrowserFragmentTest.kt | 75 ++++++ 2 files changed, 211 insertions(+), 80 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index ce42a1c24..5aa5ac704 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.browser import android.content.Context +import android.content.res.Configuration import android.os.StrictMode import android.view.View import android.view.ViewGroup @@ -52,6 +53,11 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { private var readerModeAvailable = false private var pwaOnboardingObserver: PwaOnboardingObserver? = null + private var forwardAction: BrowserToolbar.TwoStateButton? = null + private var backAction: BrowserToolbar.TwoStateButton? = null + private var refreshAction: BrowserToolbar.TwoStateButton? = null + private var isTablet: Boolean = false + @Suppress("LongMethod") override fun initializeUI(view: View, tab: SessionState) { super.initializeUI(view, tab) @@ -84,86 +90,7 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { browserToolbarView.view.addNavigationAction(homeAction) - if (resources.getBoolean(R.bool.tablet)) { - val enableTint = ThemeManager.resolveAttribute(R.attr.textPrimary, context) - val disableTint = ThemeManager.resolveAttribute(R.attr.textDisabled, context) - val backAction = BrowserToolbar.TwoStateButton( - primaryImage = AppCompatResources.getDrawable( - context, - R.drawable.mozac_ic_back, - )!!, - primaryContentDescription = context.getString(R.string.browser_menu_back), - primaryImageTintResource = enableTint, - isInPrimaryState = { getCurrentTab()?.content?.canGoBack ?: false }, - secondaryImageTintResource = disableTint, - disableInSecondaryState = true, - longClickListener = { - browserToolbarInteractor.onBrowserToolbarMenuItemTapped( - ToolbarMenu.Item.Back(viewHistory = true), - ) - }, - listener = { - browserToolbarInteractor.onBrowserToolbarMenuItemTapped( - ToolbarMenu.Item.Back(viewHistory = false), - ) - }, - ) - browserToolbarView.view.addNavigationAction(backAction) - val forwardAction = BrowserToolbar.TwoStateButton( - primaryImage = AppCompatResources.getDrawable( - context, - R.drawable.mozac_ic_forward, - )!!, - primaryContentDescription = context.getString(R.string.browser_menu_forward), - primaryImageTintResource = enableTint, - isInPrimaryState = { getCurrentTab()?.content?.canGoForward ?: false }, - secondaryImageTintResource = disableTint, - disableInSecondaryState = true, - longClickListener = { - browserToolbarInteractor.onBrowserToolbarMenuItemTapped( - ToolbarMenu.Item.Forward(viewHistory = true), - ) - }, - listener = { - browserToolbarInteractor.onBrowserToolbarMenuItemTapped( - ToolbarMenu.Item.Forward(viewHistory = false), - ) - }, - ) - browserToolbarView.view.addNavigationAction(forwardAction) - val refreshAction = BrowserToolbar.TwoStateButton( - primaryImage = AppCompatResources.getDrawable( - context, - R.drawable.mozac_ic_refresh, - )!!, - primaryContentDescription = context.getString(R.string.browser_menu_refresh), - primaryImageTintResource = enableTint, - isInPrimaryState = { - getCurrentTab()?.content?.loading == false - }, - secondaryImage = AppCompatResources.getDrawable( - context, - R.drawable.mozac_ic_stop, - )!!, - secondaryContentDescription = context.getString(R.string.browser_menu_stop), - disableInSecondaryState = false, - longClickListener = { - browserToolbarInteractor.onBrowserToolbarMenuItemTapped( - ToolbarMenu.Item.Reload(bypassCache = true), - ) - }, - listener = { - if (getCurrentTab()?.content?.loading == true) { - browserToolbarInteractor.onBrowserToolbarMenuItemTapped(ToolbarMenu.Item.Stop) - } else { - browserToolbarInteractor.onBrowserToolbarMenuItemTapped( - ToolbarMenu.Item.Reload(bypassCache = false), - ) - } - }, - ) - browserToolbarView.view.addNavigationAction(refreshAction) - } + setScreenSize(isTablet = resources.getBoolean(R.bool.tablet)) val readerModeAction = BrowserToolbar.ToggleButton( @@ -243,6 +170,130 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { } } + private fun setScreenSize(isTablet: Boolean) { + if (isTablet == this.isTablet) return + + if (isTablet) { + addTabletActions(requireContext()) + } else { + removeTabletActions() + } + + this.isTablet = isTablet + } + + @Suppress("LongMethod") + private fun addTabletActions(context: Context) { + val enableTint = ThemeManager.resolveAttribute(R.attr.textPrimary, context) + val disableTint = ThemeManager.resolveAttribute(R.attr.textDisabled, context) + + if (backAction == null) { + backAction = BrowserToolbar.TwoStateButton( + primaryImage = AppCompatResources.getDrawable( + context, + R.drawable.mozac_ic_back, + )!!, + primaryContentDescription = context.getString(R.string.browser_menu_back), + primaryImageTintResource = enableTint, + isInPrimaryState = { getCurrentTab()?.content?.canGoBack ?: false }, + secondaryImageTintResource = disableTint, + disableInSecondaryState = true, + longClickListener = { + browserToolbarInteractor.onBrowserToolbarMenuItemTapped( + ToolbarMenu.Item.Back(viewHistory = true), + ) + }, + listener = { + browserToolbarInteractor.onBrowserToolbarMenuItemTapped( + ToolbarMenu.Item.Back(viewHistory = false), + ) + }, + ) + } + + backAction?.let { + browserToolbarView.view.addNavigationAction(it) + } + + if (forwardAction == null) { + forwardAction = BrowserToolbar.TwoStateButton( + primaryImage = AppCompatResources.getDrawable( + context, + R.drawable.mozac_ic_forward, + )!!, + primaryContentDescription = context.getString(R.string.browser_menu_forward), + primaryImageTintResource = enableTint, + isInPrimaryState = { getCurrentTab()?.content?.canGoForward ?: false }, + secondaryImageTintResource = disableTint, + disableInSecondaryState = true, + longClickListener = { + browserToolbarInteractor.onBrowserToolbarMenuItemTapped( + ToolbarMenu.Item.Forward(viewHistory = true), + ) + }, + listener = { + browserToolbarInteractor.onBrowserToolbarMenuItemTapped( + ToolbarMenu.Item.Forward(viewHistory = false), + ) + }, + ) + } + + forwardAction?.let { + browserToolbarView.view.addNavigationAction(it) + } + + if (refreshAction == null) { + refreshAction = BrowserToolbar.TwoStateButton( + primaryImage = AppCompatResources.getDrawable( + context, + R.drawable.mozac_ic_refresh, + )!!, + primaryContentDescription = context.getString(R.string.browser_menu_refresh), + primaryImageTintResource = enableTint, + isInPrimaryState = { + getCurrentTab()?.content?.loading == false + }, + secondaryImage = AppCompatResources.getDrawable( + context, + R.drawable.mozac_ic_stop, + )!!, + secondaryContentDescription = context.getString(R.string.browser_menu_stop), + disableInSecondaryState = false, + longClickListener = { + browserToolbarInteractor.onBrowserToolbarMenuItemTapped( + ToolbarMenu.Item.Reload(bypassCache = true), + ) + }, + listener = { + if (getCurrentTab()?.content?.loading == true) { + browserToolbarInteractor.onBrowserToolbarMenuItemTapped(ToolbarMenu.Item.Stop) + } else { + browserToolbarInteractor.onBrowserToolbarMenuItemTapped( + ToolbarMenu.Item.Reload(bypassCache = false), + ) + } + }, + ) + } + + refreshAction?.let { + browserToolbarView.view.addNavigationAction(it) + } + } + + private fun removeTabletActions() { + forwardAction?.let { + browserToolbarView.view.removeNavigationAction(it) + } + backAction?.let { + browserToolbarView.view.removeNavigationAction(it) + } + refreshAction?.let { + browserToolbarView.view.removeNavigationAction(it) + } + } + override fun onStart() { super.onStart() val context = requireContext() @@ -396,4 +447,9 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { internal fun updateLastBrowseActivity() { requireContext().settings().lastBrowseActivity = System.currentTimeMillis() } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + setScreenSize(isTablet = resources.getBoolean(R.bool.tablet)) + } } diff --git a/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt index 2e34a9f79..f79056199 100644 --- a/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/browser/BrowserFragmentTest.kt @@ -6,13 +6,18 @@ package org.mozilla.fenix.browser import android.content.Context import android.view.View +import androidx.appcompat.content.res.AppCompatResources import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleRegistry import androidx.navigation.NavController import io.mockk.every import io.mockk.mockk +import io.mockk.mockkObject +import io.mockk.mockkStatic import io.mockk.spyk +import io.mockk.unmockkObject +import io.mockk.unmockkStatic import io.mockk.verify import mozilla.components.browser.state.action.RestoreCompleteAction import mozilla.components.browser.state.action.TabListAction @@ -39,6 +44,7 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.onboarding.FenixOnboarding +import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) @@ -317,6 +323,75 @@ class BrowserFragmentTest { verify(exactly = 1) { browserToolbarView.dismissMenu() } } + @Test + fun `WHEN fragment configuration screen size changes between tablet and mobile size THEN tablet action items added and removed`() { + val browserToolbar: BrowserToolbar = mockk(relaxed = true) + every { browserFragment.browserToolbarView.view } returns browserToolbar + + mockkObject(ThemeManager.Companion) + every { ThemeManager.resolveAttribute(any(), context) } returns mockk(relaxed = true) + + mockkStatic(AppCompatResources::class) + every { AppCompatResources.getDrawable(context, any()) } returns mockk() + + every { browserFragment.resources.getBoolean(R.bool.tablet) } returns true + browserFragment.onConfigurationChanged(mockk(relaxed = true)) + verify(exactly = 3) { browserToolbar.addNavigationAction(any()) } + + every { browserFragment.resources.getBoolean(R.bool.tablet) } returns false + browserFragment.onConfigurationChanged(mockk(relaxed = true)) + verify(exactly = 3) { browserToolbar.removeNavigationAction(any()) } + + unmockkObject(ThemeManager.Companion) + unmockkStatic(AppCompatResources::class) + } + + @Test + fun `WHEN fragment configuration change enables tablet size twice THEN tablet action items are only added once`() { + val browserToolbar: BrowserToolbar = mockk(relaxed = true) + every { browserFragment.browserToolbarView.view } returns browserToolbar + + mockkObject(ThemeManager.Companion) + every { ThemeManager.resolveAttribute(any(), context) } returns mockk(relaxed = true) + + mockkStatic(AppCompatResources::class) + every { AppCompatResources.getDrawable(context, any()) } returns mockk() + + every { browserFragment.resources.getBoolean(R.bool.tablet) } returns true + browserFragment.onConfigurationChanged(mockk(relaxed = true)) + verify(exactly = 3) { browserToolbar.addNavigationAction(any()) } + + browserFragment.onConfigurationChanged(mockk(relaxed = true)) + verify(exactly = 3) { browserToolbar.addNavigationAction(any()) } + + unmockkObject(ThemeManager.Companion) + unmockkStatic(AppCompatResources::class) + } + + @Test + fun `WHEN fragment configuration change sets mobile size twice THEN tablet action items are not added or removed`() { + val browserToolbar: BrowserToolbar = mockk(relaxed = true) + every { browserFragment.browserToolbarView.view } returns browserToolbar + + mockkObject(ThemeManager.Companion) + every { ThemeManager.resolveAttribute(any(), context) } returns mockk(relaxed = true) + + mockkStatic(AppCompatResources::class) + every { AppCompatResources.getDrawable(context, any()) } returns mockk() + + every { browserFragment.resources.getBoolean(R.bool.tablet) } returns false + browserFragment.onConfigurationChanged(mockk(relaxed = true)) + verify(exactly = 0) { browserToolbar.addNavigationAction(any()) } + verify(exactly = 0) { browserToolbar.removeNavigationAction(any()) } + + browserFragment.onConfigurationChanged(mockk(relaxed = true)) + verify(exactly = 0) { browserToolbar.addNavigationAction(any()) } + verify(exactly = 0) { browserToolbar.removeNavigationAction(any()) } + + unmockkObject(ThemeManager.Companion) + unmockkStatic(AppCompatResources::class) + } + private fun addAndSelectTab(tab: TabSessionState) { store.dispatch(TabListAction.AddTabAction(tab)).joinBlocking() store.dispatch(TabListAction.SelectTabAction(tab.id)).joinBlocking() From 351561a164eba30423ca96ce02370ecb1cb3a98c Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 2 Dec 2022 21:31:41 +0000 Subject: [PATCH 131/218] Update to Android-Components 109.0.20221202210159. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 31bad7801..42cfd1671 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221202003559" + const val VERSION = "109.0.20221202210159" } From 70b623ca9f892ebad9a04b17270c0e5c158b7bdb Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Sat, 3 Dec 2022 15:38:15 +0100 Subject: [PATCH 132/218] Import l10n. (#28058) --- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es-rMX/strings.xml | 6 ++ app/src/main/res/values-ia/strings.xml | 7 +++ app/src/main/res/values-in/strings.xml | 68 ++++++---------------- app/src/main/res/values-ja/strings.xml | 6 ++ app/src/main/res/values-ka/strings.xml | 66 ++++++--------------- app/src/main/res/values-kab/strings.xml | 58 ++++-------------- app/src/main/res/values-pa-rIN/strings.xml | 6 ++ app/src/main/res/values-rm/strings.xml | 19 +++++- app/src/main/res/values-ru/strings.xml | 6 ++ app/src/main/res/values-sk/strings.xml | 6 ++ app/src/main/res/values-skr/strings.xml | 4 ++ app/src/main/res/values-sr/strings.xml | 28 +++++++-- 13 files changed, 129 insertions(+), 153 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index fd9d397d0..5f57b1bb7 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1144,7 +1144,7 @@ Probieren Sie den Privaten Modus aus - Surfen Sie mit %1$s ohne Cookies oder Chronik zu speichern + Surfen Sie mit %1$s ohne Cookies oder eine Chronik zu speichern diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 9e757e1a2..15f2040e4 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -1111,6 +1111,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Haz que %1$s sea tu navegador predeterminado + + Prueba la navegación privada + + Navega sin guardar cookies ni historial en %1$s + Colección eliminada diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index 38abcdfc9..7275e2437 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -343,6 +343,9 @@ Reducer banners pro le cookie + + Firefox automaticamente proba a rejectar requestas de cookies sur banners pro cookies. Si un option pro rejectar non es disponibile, Firefox pote acceptar tote le cookies pro dimitter le banner. + Automaticamente tenta de connecter se al sitos per le protocollo de cryptation HTTPS pro major securitate. @@ -1147,6 +1150,10 @@ Essaya le navigation private + + Navigar sin cookies o chronologia salvate in %1$s + Collection delite diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index e6273a8e1..c76c7a9c0 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -47,8 +47,6 @@ - Markah terbaru - Baru saja disimpan Tampilkan semua markah tersimpan @@ -262,41 +260,19 @@ Setelan pencarian - Kali ini temukan dengan: + Kali ini temukan dengan: - - - Yang baru di %1$s - - Sekarang lebih mudah untuk melanjutkan dari sesi sebelumnya. - - Beranda %1$s yang dipersonalisasi - - Lompat ke tab terbuka, markah, dan riwayat penjelajahan Anda. - - Tab bersih dan terorganisir - - - Hilangkan tab berantakan dengan tata letak baru dan tab yang menutup otomasi. - - Pencarian terkini - - Kunjungi kembali penelusuran terkini dari beranda dan tab Anda. - - - Sekarang, halaman beranda Firefox yang dipersonalisasi memudahkan Anda melanjutkan pekerjaan dari sesi sebelumnya. Temukan tab, markah, dan hasil pencarian Anda yang terkini. + + Kali ini, cari di: + Temui beranda pribadi Anda. Tab, markah, dan hasil pencarian terkini akan muncul di sini. - Selamat datang di internet yang independen - Selamat datang di Internet yang lebih pribadi Lebih banyak warna. Privasi yang lebih baik. Komitmen yang sama pada masyarakat di atas laba. - Lompat dari ponsel ke laptop dan sebaliknya - Beralih layar lebih mudah dari sebelumnya Lanjutkan dari bagian terakhir yang Anda tinggalkan dengan tab dari perangkat lain sekarang di beranda Anda. @@ -364,6 +340,14 @@ Tambahkan pintasan penjelajahan pribadi Mode Hanya HTTPS + + + Pengurangan Spanduk Kuki + + Kurangi spanduk kuki + + Firefox secara otomatis mencoba menolak permintaan kuki di spanduk kuki. Jika opsi menolak tidak tersedia, Firefox akan menerima semua kuki untuk menutup spanduk tersebut. + Secara otomatis mencoba terhubung ke situs menggunakan protokol enkripsi HTTPS untuk meningkatkan keamanan. @@ -1138,6 +1122,13 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Jadikan %1$s sebagai peramban baku Anda + + Coba penjelajahan pribadi + + + Menjelajah tanpa kuki atau riwayat tersimpan di %1$s + Koleksi dihapus @@ -1261,34 +1252,20 @@ Grup dihapus - - Selamat datang di %s! - Selamat datang di Internet yang lebih baik Peramban yang dibuat untuk masyarakat, bukan profit. - - Sinkronkan Firefox antar perangkat Mulai dari situasi saat Anda pergi - - Bawa markah, riwayat, dan kata sandi ke %1$s di perangkat ini. Sinkronkan tab dan kata sandi di berbagai perangkat untuk peralihan layar yang mulus. - - Daftar Masuk Sinkronisasi aktif - - Privasi selalu aktif Perlindungan privasi secara bawaan - - %1$s secara otomatis menghentikan perusahaan yang mengikuti Anda di web secara rahasia. Menghadirkan Perlindungan Kuki Total untuk mencegah pelacak gunakan kuki untuk menguntit Anda di web. @@ -1301,17 +1278,10 @@ Blokir lebih banyak pelacak sehingga laman dimuat lebih cepat, tetapi beberapa fungsionalitas pada laman mungkin rusak. Pilih penempatan bilah alat Anda - - Letakkan bilah alat agar mudah dijangkau. Tetap di bawah, atau pindahkan ke atas. Simpan di bawah, atau pindahkan ke atas. - - Privasi Anda Anda mengendalikan data Anda - - Kami merancang %s agar Anda dapat mengendalikan apa saja yang Anda bagikan secara daring dan apa yang Anda bagikan kepada kami. Firefox memberi Anda kendali atas apa saja yang Anda bagikan secara daring dan apa yang Anda bagikan kepada kami. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1f7a20dc7..1e469298c 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -1128,6 +1128,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s を既定のブラウザーに設定しましょう + + プライベートブラウジングを試す + + Cookie や履歴を %1$s に保存せずに閲覧します + コレクションを削除しました diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 292b3f5d5..ec3e672ff 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -45,8 +45,6 @@ - ბოლოს ჩანიშნული - ბოლოს შენახული ყველა ჩანიშნულის ჩვენება @@ -252,42 +250,20 @@ ძიების პარამეტრები - საძიებოდ გამოიყენეთ: + საძიებოდ გამოიყენეთ: - - - რა სიახლეებითაა %1$s - - მარტივად განაგრძეთ იქიდან, სადაც შეჩერდით. - - მორგებული %1$s-გვერდი საწყისად - - გადადით გახსნილ ჩანართებზე, სანიშნებსა და მონახულებულ გვერდებზე. - - სუფთა, მოწესრიგებული ჩანართები - - - აირიდეთ ჩანართების არეულობა, დახვეწილი განლაგებითა და თვითდახურვით. - - ბოლოს მოძიებული - - კვლავ მოინახულეთ ბოლოს მოძიებულები, საწყისი გვერდიდან და ჩანართებიდან. - - - Firefox-ის მორგებული საწყისი გვერდით შეძლებთ, მარტივად განაგრძოთ იქიდან, სადაც შეჩერდით. იპოვეთ ბოლოს გახსნილი ჩანართები, სანიშნები და მოძიებული გვერდები. + + საძიებოდ გამოიყენეთ: + გაეცანით მორგებულ საწყის გვერდს. ბოლოდროინდელი ჩანართები, სანიშნები და მოძიებული გვერდები გამოჩნდება აქ. - - კეთილი იყოს თქვენი ფეხი დამოუკიდებელ ინტერნეტსივრცეში კეთილი იყოს თქვენი ფეხი მეტად პირად ინტერნეტსივრცეში მეტი ფერი. გაუმჯობესებული პირადულობა. ხალხის მოგებაზე წინ დაყენება მუდამ. - მოქნილად გადაერთეთ ტელეფონიდან ლეპტოპზე და უკან - ეკრანებს შორის გადართვა ჯერ არნახული სიმარტივით განაგრძეთ, სადაც გაჩერდით სხვა მოწყობილობიდან ჩანართების წამოღებით ახლა უკვე საწყის გვერდზე. @@ -354,6 +330,14 @@ პირადი თვალიერების მალსახმობის დამატება მხოლოდ-HTTPS-რეჟიმი + + + ფუნთუშის მოთხოვნების შემცირება + + შეამცირეთ ფუნთუშის მოთხოვნები + + Firefox თავადვე შეეცდება უარყოს ფუნთუშის მოთხოვნები საიტზე ამომხტარ აბრებზე. თუ უარყოფა ვერ მოხერხდება, Firefox შეიძლება ყველა ფუნთუშის მიღებას დათანხმდეს ამომხტომი აბრის მოსაცილებლად. + თავადვე შეეცდება დაუკავშირდეს საიტებს დაშიფრული HTTPS-ოქმით, მეტი უსაფრთხოებისთვის. @@ -1123,6 +1107,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> გახადეთ %1$s ნაგულისხმევი ბრაუზერი + + გამოცადეთ პირადი რეჟიმი + + გვერდების მონახულებისას %1$s არ შეინახავს ისტორიასა და ფუნთუშებს + კრებული წაიშალა @@ -1244,34 +1234,21 @@ ჯგუფი წაიშალა - - მოგესალმებათ %s! მოგესალმებით უკეთეს ინტერნეტში ბრაუზერი შექმნილი ხალხისთვის, და არა მოგებისთვის - - დაასინქრონეთ Firefox მოწყობილობებს შორის განაგრძეთ იქიდან, სადაც გაჩერდით. - - გადმოიტანს სანიშნებს, ისტორიასა და პაროლებს, ამ მოწყობილობის %1$s-ზე. დაასინქრონეთ ჩანართები და პაროლები მოწყობილობებს შორის შეუფერხებლად გადასვლისთვის. - - ანგარიშის შექმნა შესვლა სინქრონიზაცია ჩართულია - - ყოველთვის პირადული პირადულობის ნაგულისხმევი დაცვა - - %1$s ავტომატურად უზღუდავს კომპანიებს თქვენს მოქმედებებზე ფარულად თვალის მიდევნების საშუალებას ვებსივრცეში. ფუნთუშებისგან ყოველმხრივი დაცვით მეთვალყურეებს არ ექნებათ საშუალება, თვალი გადევნონ ვებსივრცეში ფუნთუშების გამოყენებით. @@ -1284,17 +1261,10 @@ ზღუდავს მეტ მეთვალყურეს, გვერდის ჩატვირთვა ასწრაფდება, თუმცა გამართულად შეიძლება ვერ იმუშაოს. აირჩიეთ ხელსაწყოთა ზოლის მდებარეობა - - განათავსეთ ხელსაწყოები მოხერხებულ ადგილას. დატოვეთ ქვემოთ ან გადაიტანეთ ზემოთ. დატოვეთ ქვემოთ ან გადაიტანეთ ზემოთ. - - თქვენი პირადულობა თქვენი მონაცემები თქვენს ხელშია - - %s შექმნილია ისე, რომ თავად წყვეტდეთ რას გააზიარებთ ინტერნეტში და რას გაგვიზიარებთ ჩვენ. %s საშუალებას იძლევა, რომ თავად წყვეტდეთ, რას გააზიარებთ ინტერნეტში და რას გაგვიზიარებთ ჩვენ. diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 9770acbe5..437be09a2 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -49,8 +49,6 @@ - Ticraḍ n yisebtar n melmi kan - Yettwasekles melmi kan Sken akk ticraḍ n yisebtar yettwaskelsen @@ -261,41 +259,19 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Nadi ismenyifen - Tura nadi wagi: + Tura nadi wagi: - - - D acu i d maynut deg %1$s - - Akka tura fessus ad tkemmleḍ ansi akken i tḥebseḍ. - - Asebter agejdan n %1$s yettwasagnen - - Ɛeddi ɣer waccaren yeldin, ticraḍ n yisebtar, d uzray n tunigin. - - Accaren zeddigen, yuddsen - - - Sfeḍ accaren ur tesriḍ ara s taneɣruft igerrzen akked waccaren n umdal awurman. - - Inadiyen imaynuten - - Ales rzu ɣer yinadiyen ineggura seg usebtar-inek•inem d waccaren. - - - Asebter-inek•inem n Firefox udmawan yettarra tura fessus ugar akemmel seg wanda akken i tḥebseḍ. Af accaren-ik•im n melmi kan, ticraḍ n yisebtar, d yigmaḍ n unadi. + + I unadi-a: + Snirem asebtar-ik·im agejdan yettwasagnen. Accaren imaynuten, ticraḍ n yisebtar d yigmaḍ n unadi ad d-banen deg-s. - Ansuf ɣer internet ilelli - Ansuf ɣer internet udmawan ugar Ugar n yiniten. Tudert tabaḍnit igerrzen ugar. Tuṭṭfa deg tbaḍnit n yimdanen mačči d anadi ɣef tedrimt. - Ɛeddi seg tiliɣri ɣer uselkim, neɣ seg uselkim ɣer tiliɣri - Abeddel seg ugdil ɣer wayeḍ fessus ugar ɣef wayen iɛeddan Kemmel seg wanda i tḥebseḍ s useqdec n waccaren ɣef yibenkan-nniḍen ara d-ibanen akka tura ɣef usebter-ik·im agejdan. @@ -362,6 +338,7 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Rnu anegzum i tunigin tusligin Askar HTTPS-Only + Ɛreḍ ad teqqneḍ s wudem awurman ɣer yismal s useqdec n uneggaf n uwgelhen HTTPS i tɣellist ɛlayen. @@ -1141,6 +1118,9 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara %1$s is a placeholder that will be replaced by the app name (Fenix). --> Err %1$s d iminig-ik amezwer + + Ɛreḍ tunigin tusligt + Tettwakkes tegrumma @@ -1263,33 +1243,20 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Agraw yettwakksen - - Ansuf ɣer %s! Ansuf ɣer internet ifazen D iminig i yettwafeṣṣlen i yimdanen, yerna baṭel. - - Mtawi Firefox gar yibenkan Kemmel seg wanida i tḥebseḍ - - Awi-d ticraḍ n yisebtar, amazray, d wawalen uffiren ɣer %1$s deg yibenk-a. Mtawi accaren d wawalen uffiren gar yibenkan-ik·im i wakken add tɛeddiḍ seg ugdil ɣer wayeḍ s wudem afrawan. - - Jerred Kcem Amtawi yermed - - Tabaḍnit tezga tettwaḍmen Ammesten n tudert tabaḍnit s wudem amezwer - - %1$s yessewḥal s wudem awurman tikebbaniyin ara ak-iḍefren deg web. Ammesten asemday mgal y inagan n tuqqna yessewḥal ineḍfaren ad sqedc inagan n tuqqna i wakken ad ak•akem-ḍefren deg web. @@ -1302,18 +1269,11 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Isewḥal ugar n ineḍfaren akken isebtar ad d-allin s wudem aurad, maca kra n tmahilin n usebter zemrent ad rẓent. Fren adig n ufeggag-ik·im n yifecka - - Eǧǧ afeggag n yifecka ɣef wafus. Eǧǧ-it ddaw neɣ err-it d asawen. Eǧǧ-it ukessar neɣ err-it d asawen - - Tabaḍnit inek/m Ad tiliḍ d aɛessas ɣef yisefka-k - - Nfeṣṣel %si w akken ad nerr gar ifassen-ik·im ayen i tbeṭṭuḍ srid aked wayen tbeṭṭuḍ yid-neɣ. Firefox ad yerr gar ifassen-ik·im ayen i tbeṭṭuḍ srid akked wayen tbeṭṭuḍ yid-neɣ. @@ -1980,4 +1940,6 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara snefli Ldi aseɣwen i wakken ad tissineḍ ugar ɣef tefrant-a. + + ɣer amagrad diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 7087c2a43..2800cb5b8 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -1128,6 +1128,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> %1$s ਨੂੰ ਆਪਣਾ ਮੂਲ ਬਰਾਊਜ਼ਰ ਬਣਾਓ + + ਨਿੱਜੀ ਬਰਾਊਜ਼ ਕਰਨ ਨੂੰ ਅਜ਼ਮਾਓ + + %1$s ਵਿੱਚ ਬਿਨਾਂ ਕਿਸੇ ਸੰਭਾਲੇ ਕੂਕੀ ਜਾਂ ਅਤੀਤ ਦੇ ਬਰਾਊਜ਼ ਕਰੋ + ਭੰਡਾਰ ਹਟਾਇਆ diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml index cbc06d72a..b4909d135 100644 --- a/app/src/main/res/values-rm/strings.xml +++ b/app/src/main/res/values-rm/strings.xml @@ -252,7 +252,10 @@ Parameters da tschertga - Tschertgar questa giada: + Tschertgar questa giada: + + + Questa giada tschertgar cun/en: @@ -326,6 +329,14 @@ Agiuntar ina scursanida al modus privat Modus mo HTTPS + + + Reducziun da bandieras da cookies + + Reducir las bandieras da cookies + + Firefox emprova da refusar automaticamain dumondas da cookies sin bandieras da cookies. Sche l\'opziun da refusar na stat betg a disposiziun, accepta Firefox eventualmain tut ils cookies per serrar la bandiera. + Empruvar da connectar automaticamain cun websites cun agid dal protocol da criptadi HTTPS per dapli segirezza. @@ -1091,6 +1102,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Fa da %1$s tes navigatur da standard + + Emprova il modus privat + + Navighescha senza memorisar ni cookies ni la cronologia en %1$s + Stizzà la collecziun diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 13ac49566..a5c3bede5 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1138,6 +1138,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Сделайте %1$s вашим браузером по умолчанию + + Попробуйте приватный просмотр + + Просмотр без сохранённых кук или истории в %1$s + Сборник удалён diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index d233464fc..cbe55214a 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -1122,6 +1122,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Nastaviť %1$s ako predvolený prehliadač + + Vyskúšajte súkromné prehliadanie + + Prehliadajte bez uložených súborov cookie alebo histórie v prehliadači %1$s + Kolekcia bola odstránená diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml index 21d08f448..821fb14b3 100644 --- a/app/src/main/res/values-skr/strings.xml +++ b/app/src/main/res/values-skr/strings.xml @@ -1124,6 +1124,10 @@ نجی براؤزنگ ازماؤ + + %1$s وچ محفوظ تھیاں کوکیاں یا تاریخ ٻاجھوں براؤز کرو + مجموعہ مٹ ڳیا diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index e91c34481..86563d3ce 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -257,6 +257,9 @@ Овај пут претражујте са: + + Овај пут претражујте: + Упознајте своју персонализовану почетну страницу. Овде се приказују недавни језичци, обележивачи и резултати претраге. @@ -334,6 +337,13 @@ Строги HTTPS режим + + Смањење банера колачића + + Смањи банере колачића + + Firefox аутоматски покушава да одбије захтеве за складиштење колачића када се прикаже банер колачића. Ако опција за одбијање није доступна, Firefox може прихватити све колачиће да би сакрио банер. + Самостално се повезујемо на странице користећи HTTPS протокол за шифровање података у преносу зарад боље безбедности. @@ -397,7 +407,7 @@ Прикажи предлоге из оставе - Претражи историјат прегледања + Претражи историју прегледања Претражи забелешке @@ -496,7 +506,7 @@ Изаберите шта синхронизовати - Историјат + Историја Забелешке @@ -619,7 +629,7 @@ Остале забелешке - Историјат + Историја Нови језичак @@ -794,7 +804,7 @@ Унеси појмове за претрагу - Обриши историјат + Обриши историју Историја је избрисана @@ -815,7 +825,7 @@ Старије - Овде нема историјата + Овде нема историје @@ -1104,6 +1114,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Поставите %1$s као подразумевани прегледач + + Испробајте приватно прегледање + + Прегледајте без чувања колачића и историје уз %1$s + Збирка обрисана @@ -1167,7 +1183,7 @@ %d језичака - Историјат прегледања и подаци страница + Историја прегледања и подаци страница %d адреса From c2442e8206d94a0bf50c1c0ecc12d0a1c640e576 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 3 Dec 2022 15:02:05 +0000 Subject: [PATCH 133/218] Update to Android-Components 109.0.20221203143207. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 42cfd1671..67e35b22c 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221202210159" + const val VERSION = "109.0.20221203143207" } From 2c00a4b5878f60cdee85dee943450291b94ee44d Mon Sep 17 00:00:00 2001 From: "oana.horvath" Date: Mon, 5 Dec 2022 12:54:13 +0200 Subject: [PATCH 134/218] No issue: disables openPocketStoryItemTest --- app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt index 77a187950..f6fc04a6e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HomeScreenTest.kt @@ -12,6 +12,7 @@ import androidx.test.uiautomator.Until import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before +import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.mozilla.fenix.helpers.AndroidAssetDispatcher @@ -258,6 +259,7 @@ class HomeScreenTest { } } + @Ignore("Failed, see: https://github.com/mozilla-mobile/fenix/issues/28069") @Test fun openPocketStoryItemTest() { activityTestRule.activityRule.applySettingsExceptions { From 5b61f2ec7275f7d2a097a62856802ed10c330e19 Mon Sep 17 00:00:00 2001 From: "oana.horvath" Date: Fri, 2 Dec 2022 16:22:00 +0200 Subject: [PATCH 135/218] No issue: RTL nav bar UI tests --- .../org/mozilla/fenix/helpers/TestHelper.kt | 34 ++++++++++----- .../mozilla/fenix/ui/NavigationToolbarTest.kt | 43 +++++++++++++++++++ .../mozilla/fenix/ui/SettingsBasicsTest.kt | 1 + .../java/org/mozilla/fenix/ui/SmokeTest.kt | 18 -------- 4 files changed, 68 insertions(+), 28 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt index 81e4d522a..6d9282635 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.helpers +import android.Manifest import android.app.ActivityManager import android.app.PendingIntent import android.content.ActivityNotFoundException @@ -42,6 +43,7 @@ import androidx.test.espresso.matcher.ViewMatchers.withParent import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.ActivityTestRule +import androidx.test.runner.permission.PermissionRequester import androidx.test.uiautomator.By import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiObject @@ -57,6 +59,7 @@ import org.hamcrest.Matcher import org.junit.Assert import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue +import org.mozilla.fenix.Config import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity @@ -389,20 +392,31 @@ object TestHelper { /** * Changes the default language of the entire device, not just the app. + * Runs on Debug variant as we don't want to adjust Release permission manifests * Runs the test in its testBlock. - * Cleans up and sets the default locale after it's are done. + * Cleans up and sets the default locale after it's done. */ fun runWithSystemLocaleChanged(locale: Locale, testRule: ActivityTestRule, testBlock: () -> Unit) { - val defaultLocale = Locale.getDefault() + if (Config.channel.isDebug) { + /* Sets permission to change device language */ + PermissionRequester().apply { + addPermissions( + Manifest.permission.CHANGE_CONFIGURATION, + ) + requestPermissions() + } - try { - setSystemLocale(locale) - testBlock() - ThreadUtils.runOnUiThread { testRule.activity.recreate() } - } catch (e: Exception) { - e.printStackTrace() - } finally { - setSystemLocale(defaultLocale) + val defaultLocale = Locale.getDefault() + + try { + setSystemLocale(locale) + testBlock() + ThreadUtils.runOnUiThread { testRule.activity.recreate() } + } catch (e: Exception) { + e.printStackTrace() + } finally { + setSystemLocale(defaultLocale) + } } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt index d0629660a..3f602610f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt @@ -12,11 +12,14 @@ import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test +import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityTestRule import org.mozilla.fenix.helpers.TestAssetHelper +import org.mozilla.fenix.helpers.TestHelper.runWithSystemLocaleChanged import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.navigationToolbar +import java.util.Locale /** * Tests for verifying basic functionality of browser navigation and page related interactions @@ -95,6 +98,46 @@ class NavigationToolbarTest { } } + // Swipes the nav bar left/right to switch between tabs + @SmokeTest + @Test + fun swipeToSwitchTabTest() { + val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) + val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2) + + navigationToolbar { + }.enterURLAndEnterToBrowser(firstWebPage.url) { + }.openTabDrawer { + }.openNewTab { + }.submitQuery(secondWebPage.url.toString()) { + swipeNavBarRight(secondWebPage.url.toString()) + verifyUrl(firstWebPage.url.toString()) + swipeNavBarLeft(firstWebPage.url.toString()) + verifyUrl(secondWebPage.url.toString()) + } + } + + // Because it requires changing system prefs, this test will run only on Debug builds + @Test + fun swipeToSwitchTabInRTLTest() { + val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) + val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2) + val arabicLocale = Locale("ar", "AR") + + runWithSystemLocaleChanged(arabicLocale, activityTestRule) { + navigationToolbar { + }.enterURLAndEnterToBrowser(firstWebPage.url) { + }.openTabDrawer { + }.openNewTab { + }.submitQuery(secondWebPage.url.toString()) { + swipeNavBarLeft(secondWebPage.url.toString()) + verifyUrl(firstWebPage.url.toString()) + swipeNavBarRight(firstWebPage.url.toString()) + verifyUrl(secondWebPage.url.toString()) + } + } + } + // Test running on beta/release builds in CI: // caution when making changes to it, so they don't block the builds @Test diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsBasicsTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsBasicsTest.kt index 24a6fc292..77d550ac6 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsBasicsTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsBasicsTest.kt @@ -302,6 +302,7 @@ class SettingsBasicsTest { } } + // Because it requires changing system prefs, this test will run only on Debug builds @Ignore("Failing due to app translation bug, see: https://github.com/mozilla-mobile/fenix/issues/26729") @Test fun frenchSystemLocaleTest() { diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index c0be13764..9b789c9fd 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -421,24 +421,6 @@ class SmokeTest { } } - // Swipes the nav bar left/right to switch between tabs - @Test - fun swipeToSwitchTabTest() { - val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) - val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2) - - navigationToolbar { - }.enterURLAndEnterToBrowser(firstWebPage.url) { - }.openTabDrawer { - }.openNewTab { - }.submitQuery(secondWebPage.url.toString()) { - swipeNavBarRight(secondWebPage.url.toString()) - verifyUrl(firstWebPage.url.toString()) - swipeNavBarLeft(firstWebPage.url.toString()) - verifyUrl(secondWebPage.url.toString()) - } - } - // Saves a login, then changes it and verifies the update @Test fun updateSavedLoginTest() { From b05422267617da5396b915d86c1e4dfd3bd166ee Mon Sep 17 00:00:00 2001 From: mozilla-l10n-automation-bot <54512241+mozilla-l10n-automation-bot@users.noreply.github.com> Date: Mon, 5 Dec 2022 15:16:35 +0100 Subject: [PATCH 136/218] Import l10n. (#28060) Co-authored-by: Ryan VanderMeulen --- app/src/main/res/values-cy/strings.xml | 6 ++ app/src/main/res/values-eo/strings.xml | 67 ++++++---------------- app/src/main/res/values-es-rES/strings.xml | 6 ++ app/src/main/res/values-eu/strings.xml | 6 ++ app/src/main/res/values-hy-rAM/strings.xml | 19 +++++- app/src/main/res/values-pl/strings.xml | 19 +++++- app/src/main/res/values-sr/strings.xml | 4 +- 7 files changed, 74 insertions(+), 53 deletions(-) diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index 1afabdf70..57cb7964d 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -1109,6 +1109,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Gwnewch %1$s eich porwr rhagosodedig + + Rhowch gynnig ar bori preifat + + Pori heb unrhyw gwcis wedi’u cadw na hanes yn %1$s + Dilëwyd y casgliad diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index b1068fb73..69215f3cd 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -45,9 +45,6 @@ Elektita - - Ĵusaj legosignoj - Ĵuse konservitaj @@ -255,41 +252,19 @@ Agordoj de serĉo - Ĉi foje serĉi: + Ĉi foje serĉi: - - - Novaĵoj en %1$s - - Nun estas pli facile repreni vian retumon tie, kie vi ĝin interrompis. - - Personecigita eka paĝo de %1$s - - Iru al viaj malfermitaj langetoj, legosignoj aŭ al retuma historio. - - Klaraj kaj organizitaj langetoj - - Evitu havi malordon en viaj langetoj danke al plibonigita aranĝo kaj aŭtomate fermiĝantaj langetoj. - - Ĵusaj serĉoj - - - Remalfermu viajn lastajn serĉojn de via eka paĝo aŭ langetoj. - - - Via personecigita eka paĝo de Firefox igas pli facila la taskon repreni vian retumon kie vi ĝin interrompis. Trovu viajn ĵusajn langetojn, legosignojn kaj serĉajn rezultojn. + + Ĉi foje serĉi: + Malkovru vian personecigitan ekan paĝon. Ĵusaj langetoj, legosignoj, kaj serĉaj rezultoj aperos ĉi tie. - Bonvenon al sendependa interreto - Bonvenon al pli persona interreto Pli da koloroj. Pli bona privateco. Sama dediĉo al personoj pli ol al profitoj. - Iru tien kaj reen inter la telefono kaj la komputilo - Iri de unu ekrano al la alia estas pli facile ol iam ajn antaŭe Daŭrigu el la loko kie vi haltis kun la langetoj de viaj aliaj aparatoj, kiuj nun aperas en via eka paĝo. @@ -355,6 +330,14 @@ Aldoni privatan retuman ŝparvojon HTTPS-nura reĝimo + + + Redukto de kuketaj anoncoj + + Redukti kuketajn anoncojn + + Firefox aŭtomate klopodas rifuzi kuketajn petojn en kuketaj anoncoj. Se ne disponeblas eblo rifuzi ilin, Firefox povus akcepti ĉiujn kuketojn por ignori la anoncon. + Aŭtomate provi konekti al retejoj per la ĉifrita protokolo HTTPS por pliigi sekurecon. @@ -1131,6 +1114,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Igu %1$s via norma retumilo + + Provu la privatan retumon + + Retumu per %1$s sen konservitaj kuketoj kaj sen historio + Kolekto forigita @@ -1255,33 +1244,20 @@ Grupo forigita - - Bonvenon al %s! Bonvenon al pli bona interreto Retumilo farita homcele, ne profitcele. - - Speguli Firefox inter aparatoj Rekomencu kie vi haltis - - Porti legosignojn, historion kaj pasvortojn al %1$s en tiu ĉi aparato. Spegulu langetojn kaj pasvortojn por senĝena irado tien kaj reen inter aparatoj. - - Registriĝi Komenci seancon Spegulado estas ŝaltita - - Privateco ĉiam aktiva Norma protekto de privateco - - %1$s aŭtomate evitas ke entreprenoj sekrete sekvu vin tra la teksaĵo. La totala protekto kontraŭ kuketoj evitas ke spuriloj uzu kuketojn por sekvi vin tra la reto. @@ -1294,18 +1270,11 @@ Pli da spuriloj blokitaj signifas ke paĝoj ŝargiĝos pli rapide, sed kelkaj misfunkcioj povus okazi. Elektu lokon por la ilaro - - Metu la ilaron ĉemanen. Lasu ĝin malsupre aŭ movu ĝin supren. Lasu ĝin malsupre, aŭ movu ĝin al la supro. - - Via privateco Vi regas viajn datumojn - - Ni kreis %s por doni al vi la eblon plene regi kion vi dividas en la reto kaj kion vi dividas kun ni. Firefox donas al vi la eblon plene regi kion vi dividas en la reto kaj kion vi dividas kun ni. diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index a5f75524f..6541d232a 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -1136,6 +1136,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Establecer %1$s como tu navegador predeterminado + + Prueba la navegación privada + + Navega sin guardar cookies ni historial en %1$s + Colección eliminada diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index b7e444464..e88c1e5eb 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -1119,6 +1119,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Egizu %1$s zure nabigatzaile lehenetsia + + Probatu nabigatze pribatua + + Nabigatu cookie edo historiarik gorde gabe %1$s(e)n + Bilduma ezabatuta diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index f26362123..bf64147ed 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -255,7 +255,10 @@ Որոնման կարգավորում - Այս անգամվա որոնում. + Այս անգամվա որոնում. + + + Այս անգամվա որոնումը՝ @@ -329,6 +332,14 @@ Ավելացնել գաղտնի դիտարկման դյուրանցում HTTPS կերպ միայն + + + Թխուկների դրոշակի կրճատում + + Նվազեցնել թխուկների պաստառները + + Firefox-ը ինքնաբար կերպով փորձում է մերժել թխուկների խնդրանքները թխուկների պաստառների վրա: Եթե մերժման տարբերակն անհասանելի է, Firefox-ը կարող է ընդունել բոլոր թխուկները՝ դրոշակը հեռացնելու համար: + Ինքնաշխատ կերպով փորձում է միանալ կայքերին՝ օգտագործելով HTTPS գաղտնագրման արձանագրությունը՝ անվտանգության բարձրացման համար: @@ -1098,6 +1109,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Դարձրեք %1$s-ը ձեր սկզբնադիր զննիչը + + Փորձեք Գաղտնի դիտարկումը + + Զննեք առանց պահված թխուկների կամ պատմության %1$s-ում + Հավաքածուն ջնջվեց diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index f8214275d..0f23e4fb5 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -258,7 +258,10 @@ Ustawienia wyszukiwania - Tym razem szukaj: + Tym razem szukaj: + + + Tym razem szukaj w: @@ -332,6 +335,14 @@ Dodaj skrót do trybu prywatnego Tryb używania wyłącznie protokołu HTTPS + + + Ograniczanie informacji o ciasteczkach + + Ogranicz informacje o ciasteczkach + + Firefox automatycznie próbuje odrzucać prośby o akceptację ciasteczek. Jeśli nie ma możliwości odrzucenia, Firefox może zaakceptować wszystkie ciasteczka, aby zamknąć prośbę. + Automatycznie próbuje łączyć się ze stronami za pomocą protokołu szyfrowania HTTPS w celu zwiększenia bezpieczeństwa. @@ -1105,6 +1116,12 @@ %1$s is a placeholder that will be replaced by the app name (Fenix). --> Ustaw przeglądarkę %1$s jako domyślną + + Wypróbuj tryb prywatny + + Używaj przeglądarki %1$s bez zachowywania ciasteczek ani historii + Usunięto kolekcję diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 86563d3ce..828009837 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -1257,7 +1257,7 @@ Подразумевана заштита приватности - Свеобухватна заштита колачића спречава трагаче да вас прате по интернету путем колачића. + Свеобухватна заштита колачића спречава елементе за праћење да вас прате по интернету путем колачића. Стандардно (подразумевано) @@ -1399,7 +1399,7 @@ Блокира колачиће које оглашавачке мреже и аналитичке фирме користе за састављање профила прегледања о вама, на више страница. - Свеобухватна заштита од колачића изолује колачиће на тренутној страници тако да трагачи попут огласних мрежа не могу њима да се служе и прате вас. + Свеобухватна заштита од колачића изолује колачиће на тренутној страници тако да елементи за праћење попут огласних мрежа не могу њима да се служе и прате вас. Крипто-рудари From 39d186b5609f59af84a9243c6bb599198a6b49a0 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Mon, 5 Dec 2022 14:51:26 +0000 Subject: [PATCH 137/218] Update to Android-Components 109.0.20221205143121. --- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 67e35b22c..82f1488fa 100644 --- a/buildSrc/src/main/java/AndroidComponents.kt +++ b/buildSrc/src/main/java/AndroidComponents.kt @@ -3,5 +3,5 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ object AndroidComponents { - const val VERSION = "109.0.20221203143207" + const val VERSION = "109.0.20221205143121" } From ce6dd57487ac3ec20ca32d78c4f2a8e13c38e467 Mon Sep 17 00:00:00 2001 From: Perry McManis Date: Thu, 1 Dec 2022 08:54:23 -0500 Subject: [PATCH 138/218] For #28042 - Increase lifetime of customize_home.contile to application --- app/metrics.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/metrics.yaml b/app/metrics.yaml index 9be2bed32..b98fb3054 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -1935,12 +1935,14 @@ customize_home: An indication of whether Contile is enabled to be displayed send_in_pings: - metrics + - topsites-impression bugs: - https://github.com/mozilla-mobile/fenix/issues/24467 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/24468 data_sensitivity: - interaction + lifetime: application notification_emails: - android-probes@mozilla.com expires: 112 From 630edbb70922d51fc1ea8e64909756cf2b668233 Mon Sep 17 00:00:00 2001 From: joaopmatos Date: Mon, 25 Oct 2021 20:39:39 +0100 Subject: [PATCH 139/218] For #8545 - Change home screen recyclerView height to wrap_content --- app/src/main/res/layout/fragment_home.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 651fa00f8..f233f5984 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -89,7 +89,7 @@ Date: Fri, 2 Dec 2022 17:01:07 -0800 Subject: [PATCH 140/218] For mozilla-mobile#17904 - Increases tap area on the add shortcut button --- app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index c33db9d45..4511e4015 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -95,6 +95,7 @@ import org.mozilla.fenix.databinding.FragmentHomeBinding import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.containsQueryParameters import org.mozilla.fenix.ext.hideToolbar +import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.runIfFragmentIsAttached @@ -899,6 +900,8 @@ class HomeFragment : Fragment() { true, ) layout.findViewById