From 053aa5118a8df3414295a567795af88c154ae579 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Tue, 23 Feb 2021 18:24:31 -0500 Subject: [PATCH 001/149] Update version.txt to 88.0.0-beta.1 So we don't have to scramble to do this on the next merge day --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index af2d9c332..4e3c841a8 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -84.0.0-beta.1 +88.0.0-beta.1 From b1f05f765410258a3abd3a8af71b1659c9c4181a Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Wed, 24 Feb 2021 00:01:18 +0000 Subject: [PATCH 002/149] Import l10n. --- app/src/main/res/values-cy/strings.xml | 12 +++++++++--- app/src/main/res/values-in/strings.xml | 12 +++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index f96d976c2..bdfd073d1 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -886,16 +886,22 @@ Ymlaen Diffodd - + Caniatáu sain a fideo + + Caniatáu sain a fideo Rhwystro sain a fideo ar ddata cellol yn unig Bydd sain a fideo yn chwarae ar ddiwifr - + Rhwystro sain yn unig - + + Rhwystro sain yn unig + Rhwystro sain a fideo + + Rhwystro sain a fideo Ymlaen diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 51fe05685..3869d747a 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -901,16 +901,22 @@ Nonaktif - + Izinkan audio dan video + + Izinkan audio dan video Blokir suara dan video hanya pada mode data seluler Suara dan video akan diputar dalam mode Wi-Fi - + Blokir suara saja - + + Blokir audio saja + Blokir suara dan video + + Blokir audio dan video Aktif From e63bcfc35d4d3758d89153906fdef28bdbe715c6 Mon Sep 17 00:00:00 2001 From: Stefan Arentz Date: Wed, 24 Feb 2021 09:12:30 -0500 Subject: [PATCH 003/149] Do not the contributor workflow for MickeyMoz (#18125) --- .github/workflows/build-contributor-pr.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-contributor-pr.yml b/.github/workflows/build-contributor-pr.yml index b966cb796..e890fa5bc 100644 --- a/.github/workflows/build-contributor-pr.yml +++ b/.github/workflows/build-contributor-pr.yml @@ -3,7 +3,7 @@ on: [pull_request] jobs: run-build: runs-on: ubuntu-20.04 - if: github.event.pull_request.head.repo.full_name != github.repository + if: github.event.pull_request.head.repo.full_name != github.repository && github.actor != 'MickeyMoz' steps: - name: Checkout repository uses: actions/checkout@v2 @@ -21,7 +21,8 @@ jobs: run-testDebugUnitTest: runs-on: ubuntu-20.04 - if: github.event.pull_request.head.repo.full_name != github.repository + if: github.event.pull_request.head.repo.full_name != github.repository && github.actor != 'MickeyMoz' + steps: - name: Checkout repository uses: actions/checkout@v2 @@ -39,7 +40,8 @@ jobs: run-detekt: runs-on: ubuntu-20.04 - if: github.event.pull_request.head.repo.full_name != github.repository + if: github.event.pull_request.head.repo.full_name != github.repository && github.actor != 'MickeyMoz' + steps: - name: Checkout repository uses: actions/checkout@v2 @@ -62,7 +64,8 @@ jobs: run-ktlint: runs-on: ubuntu-20.04 - if: github.event.pull_request.head.repo.full_name != github.repository + if: github.event.pull_request.head.repo.full_name != github.repository && github.actor != 'MickeyMoz' + steps: - name: Checkout repository uses: actions/checkout@v2 @@ -80,7 +83,8 @@ jobs: run-lintDebug: runs-on: ubuntu-20.04 - if: github.event.pull_request.head.repo.full_name != github.repository + if: github.event.pull_request.head.repo.full_name != github.repository && github.actor != 'MickeyMoz' + steps: - name: Checkout repository uses: actions/checkout@v2 From a16f5547990d81652006e8b7a5882aaaca439aa6 Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Fri, 19 Feb 2021 16:12:57 -0500 Subject: [PATCH 004/149] For issue #10428 Improve download dialog error message. --- .../fenix/browser/BaseBrowserFragment.kt | 35 +++++++++--------- .../fenix/downloads/DynamicDownloadDialog.kt | 17 +++++++-- .../downloads/DynamicDownloadDialogTest.kt | 36 +++++++++++++++++++ 3 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 app/src/test/java/org/mozilla/fenix/downloads/DynamicDownloadDialogTest.kt 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 ecc49681e..5a925e49d 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -474,13 +474,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit didFail = downloadJobStatus == DownloadState.Status.FAILED, tryAgain = downloadFeature::tryAgain, onCannotOpenFile = { - FenixSnackbar.make( - view = view.browserLayout, - duration = Snackbar.LENGTH_SHORT, - isDisplayedWithBrowserToolbar = true - ) - .setText(context.getString(R.string.mozac_feature_downloads_could_not_open_file)) - .show() + showCannotOpenFileError(view.browserLayout, context, it) }, view = view.viewDynamicDownloadDialog, toolbarHeight = toolbarHeight, @@ -783,16 +777,6 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit } } - val onCannotOpenFile = { - FenixSnackbar.make( - view = view.browserLayout, - duration = Snackbar.LENGTH_SHORT, - isDisplayedWithBrowserToolbar = true - ) - .setText(context.getString(R.string.mozac_feature_downloads_could_not_open_file)) - .show() - } - val onDismiss: () -> Unit = { sharedViewModel.downloadDialogState.remove(sessionId) } @@ -802,7 +786,9 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit metrics = requireComponents.analytics.metrics, didFail = savedDownloadState.second, tryAgain = onTryAgain, - onCannotOpenFile = onCannotOpenFile, + onCannotOpenFile = { + showCannotOpenFileError(view.browserLayout, context, it) + }, view = view.viewDynamicDownloadDialog, toolbarHeight = toolbarHeight, onDismiss = onDismiss @@ -1280,6 +1266,19 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit ) } + private fun showCannotOpenFileError( + view: View, + context: Context, + downloadState: DownloadState + ) { + FenixSnackbar.make( + view = view, + duration = Snackbar.LENGTH_SHORT, + isDisplayedWithBrowserToolbar = true + ).setText(DynamicDownloadDialog.getCannotOpenFileErrorMessage(context, downloadState)) + .show() + } + companion object { private const val KEY_CUSTOM_TAB_SESSION_ID = "custom_tab_session_id" private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1 diff --git a/app/src/main/java/org/mozilla/fenix/downloads/DynamicDownloadDialog.kt b/app/src/main/java/org/mozilla/fenix/downloads/DynamicDownloadDialog.kt index db524f182..8f2b4fa39 100644 --- a/app/src/main/java/org/mozilla/fenix/downloads/DynamicDownloadDialog.kt +++ b/app/src/main/java/org/mozilla/fenix/downloads/DynamicDownloadDialog.kt @@ -4,8 +4,10 @@ package org.mozilla.fenix.downloads +import android.content.Context import android.view.View import android.view.ViewGroup +import android.webkit.MimeTypeMap import androidx.coordinatorlayout.widget.CoordinatorLayout import kotlinx.android.extensions.LayoutContainer import kotlinx.android.synthetic.main.download_dialog_layout.view.* @@ -30,7 +32,7 @@ class DynamicDownloadDialog( private val metrics: MetricController, private val didFail: Boolean, private val tryAgain: (String) -> Unit, - private val onCannotOpenFile: () -> Unit, + private val onCannotOpenFile: (DownloadState) -> Unit, private val view: View, private val toolbarHeight: Int, private val onDismiss: () -> Unit @@ -110,7 +112,7 @@ class DynamicDownloadDialog( ) if (!fileWasOpened) { - onCannotOpenFile() + onCannotOpenFile(downloadState) } context.metrics.track(Event.InAppNotificationDownloadOpen) @@ -138,4 +140,15 @@ class DynamicDownloadDialog( view.visibility = View.GONE onDismiss() } + + companion object { + fun getCannotOpenFileErrorMessage(context: Context, download: DownloadState): String { + val fileExt = MimeTypeMap.getFileExtensionFromUrl( + download.filePath + ) + return context.getString( + R.string.mozac_feature_downloads_open_not_supported1, fileExt + ) + } + } } diff --git a/app/src/test/java/org/mozilla/fenix/downloads/DynamicDownloadDialogTest.kt b/app/src/test/java/org/mozilla/fenix/downloads/DynamicDownloadDialogTest.kt new file mode 100644 index 000000000..4ac91f837 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/downloads/DynamicDownloadDialogTest.kt @@ -0,0 +1,36 @@ +/* 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.downloads + +import android.webkit.MimeTypeMap +import mozilla.components.browser.state.state.content.DownloadState +import mozilla.components.support.test.robolectric.testContext +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith +import org.mozilla.fenix.R +import org.mozilla.fenix.downloads.DynamicDownloadDialog.Companion.getCannotOpenFileErrorMessage +import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.robolectric.Shadows.shadowOf + +@RunWith(FenixRobolectricTestRunner::class) +class DynamicDownloadDialogTest { + + @Test + fun `WHEN calling getCannotOpenFileErrorMessage THEN should return the error message for the download file type`() { + val download = DownloadState(url = "", fileName = "image.gif") + + shadowOf(MimeTypeMap.getSingleton()).apply { + addExtensionMimeTypMapping(".gif", "image/gif") + } + + val expected = testContext.getString( + R.string.mozac_feature_downloads_open_not_supported1, "gif" + ) + + val result = getCannotOpenFileErrorMessage(testContext, download) + assertEquals(expected, result) + } +} From 9e20de21a85b23da725b5785be96afb78efb48b0 Mon Sep 17 00:00:00 2001 From: mcarare Date: Fri, 5 Feb 2021 16:26:10 +0200 Subject: [PATCH 005/149] For #16044: Suggest search engines based on typed text. --- .../fenix/search/SearchDialogController.kt | 9 ++++++++- .../fenix/search/SearchDialogFragment.kt | 7 ++++++- .../fenix/search/SearchDialogInteractor.kt | 4 ++++ .../search/awesomebar/AwesomeBarInteractor.kt | 5 +++++ .../fenix/search/awesomebar/AwesomeBarView.kt | 17 +++++++++++++++++ app/src/main/res/drawable/ic_search_with.xml | 16 ++++++++++++++++ app/src/main/res/values/strings.xml | 4 ++++ .../fenix/search/SearchDialogControllerTest.kt | 4 +++- 8 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable/ic_search_with.xml 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 6e87cf2cc..4a4fe9c4f 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt @@ -42,6 +42,7 @@ interface SearchController { fun handleExistingSessionSelected(tabId: String) fun handleSearchShortcutsButtonClicked() fun handleCameraPermissionsNeeded() + fun handleSearchEngineSuggestionClicked(searchEngine: SearchEngine) } @Suppress("TooManyFunctions", "LongParameterList") @@ -55,7 +56,8 @@ class SearchDialogController( private val metrics: MetricController, private val dismissDialog: () -> Unit, private val clearToolbarFocus: () -> Unit, - private val focusToolbar: () -> Unit + private val focusToolbar: () -> Unit, + private val clearToolbar: () -> Unit ) : SearchController { override fun handleUrlCommitted(url: String) { @@ -221,6 +223,11 @@ class SearchDialogController( dialog.show() } + override fun handleSearchEngineSuggestionClicked(searchEngine: SearchEngine) { + clearToolbar() + handleSearchShortcutEngineSelected(searchEngine) + } + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) fun buildDialog(): AlertDialog.Builder { return AlertDialog.Builder(activity).apply { 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 f1b5adcdb..34d2f3ccf 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -157,7 +157,12 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { toolbarView.view.hideKeyboard() toolbarView.view.clearFocus() }, - focusToolbar = { toolbarView.view.edit.focus() } + focusToolbar = { toolbarView.view.edit.focus() }, + clearToolbar = { + toolbarView.view + .findViewById(R.id.mozac_browser_toolbar_edit_url_view) + ?.setText("") + } ) ) diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogInteractor.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogInteractor.kt index 9f82379d9..93d1068ba 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogInteractor.kt @@ -37,6 +37,10 @@ class SearchDialogInteractor( searchController.handleSearchTermsTapped(searchTerms) } + override fun onSearchEngineSuggestionSelected(searchEngine: SearchEngine) { + searchController.handleSearchEngineSuggestionClicked(searchEngine) + } + override fun onSearchShortcutEngineSelected(searchEngine: SearchEngine) { searchController.handleSearchShortcutEngineSelected(searchEngine) } diff --git a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarInteractor.kt b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarInteractor.kt index bb0c62a62..75738eb79 100644 --- a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarInteractor.kt @@ -44,4 +44,9 @@ interface AwesomeBarInteractor { * Called whenever the Shortcuts button is clicked */ fun onSearchShortcutsButtonClicked() + + /** + * Called whenever search engine suggestion is tapped + */ + fun onSearchEngineSuggestionSelected(searchEngine: SearchEngine) } diff --git a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt index cd9fa8c8b..da4cc0612 100644 --- a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt @@ -11,11 +11,13 @@ import androidx.core.graphics.drawable.toBitmap import mozilla.components.browser.awesomebar.BrowserAwesomeBar import mozilla.components.browser.search.DefaultSearchEngineProvider import mozilla.components.browser.state.search.SearchEngine +import mozilla.components.browser.state.state.searchEngines import mozilla.components.concept.awesomebar.AwesomeBar import mozilla.components.concept.engine.EngineSession import mozilla.components.feature.awesomebar.provider.BookmarksStorageSuggestionProvider import mozilla.components.feature.awesomebar.provider.HistoryStorageSuggestionProvider import mozilla.components.feature.awesomebar.provider.SearchActionProvider +import mozilla.components.feature.awesomebar.provider.SearchEngineSuggestionProvider import mozilla.components.feature.awesomebar.provider.SearchSuggestionProvider import mozilla.components.feature.awesomebar.provider.SessionSuggestionProvider import mozilla.components.feature.search.SearchUseCases @@ -51,6 +53,7 @@ class AwesomeBarView( private val syncedTabsStorageSuggestionProvider: SyncedTabsStorageSuggestionProvider private val defaultSearchSuggestionProvider: SearchSuggestionProvider private val defaultSearchActionProvider: SearchActionProvider + private val searchEngineSuggestionProvider: SearchEngineSuggestionProvider private val searchSuggestionProviderMap: MutableMap> private var providersInUse = mutableSetOf() @@ -143,6 +146,8 @@ class AwesomeBarView( colorFilter = createBlendModeColorFilterCompat(primaryTextColor, SRC_IN) }.toBitmap() + val searchWithBitmap = getDrawable(activity, R.drawable.ic_search_with)?.toBitmap() + defaultSearchSuggestionProvider = SearchSuggestionProvider( context = activity, @@ -173,6 +178,16 @@ class AwesomeBarView( selectShortcutEngineSettings = interactor::onClickSearchEngineSettings ) + searchEngineSuggestionProvider = + SearchEngineSuggestionProvider( + context = activity, + searchEnginesList = components.core.store.state.search.searchEngines, + selectShortcutEngine = interactor::onSearchEngineSuggestionSelected, + title = R.string.search_engine_suggestions_title, + description = activity.getString(R.string.search_engine_suggestions_description), + searchIcon = searchWithBitmap + ) + searchSuggestionProviderMap = HashMap() } @@ -242,6 +257,8 @@ class AwesomeBarView( providersToAdd.add(sessionProvider) } + providersToAdd.add(searchEngineSuggestionProvider) + return providersToAdd } diff --git a/app/src/main/res/drawable/ic_search_with.xml b/app/src/main/res/drawable/ic_search_with.xml new file mode 100644 index 000000000..8ffacd9b6 --- /dev/null +++ b/app/src/main/res/drawable/ic_search_with.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 602b07df6..19c22e14b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -212,6 +212,10 @@ %s will share everything you type in the address bar with your default search engine. Learn more + + Search %s + + Search directly from the address bar diff --git a/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt b/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt index f8b79a052..96218a32d 100644 --- a/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt @@ -50,6 +50,7 @@ class SearchDialogControllerTest { @MockK private lateinit var sessionManager: SessionManager @MockK(relaxed = true) private lateinit var clearToolbarFocus: () -> Unit @MockK(relaxed = true) private lateinit var focusToolbar: () -> Unit + @MockK(relaxed = true) private lateinit var clearToolbar: () -> Unit @MockK(relaxed = true) private lateinit var dismissDialog: () -> Unit private lateinit var controller: SearchDialogController @@ -81,7 +82,8 @@ class SearchDialogControllerTest { metrics = metrics, dismissDialog = dismissDialog, clearToolbarFocus = clearToolbarFocus, - focusToolbar = focusToolbar + focusToolbar = focusToolbar, + clearToolbar = clearToolbar ) } From 0e8dc6164d8d11bc5267e31c3e4f8759054f5828 Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Wed, 3 Feb 2021 16:24:53 -0500 Subject: [PATCH 006/149] Target Android 11 --- app/build.gradle | 17 ++++------------- app/src/main/AndroidManifest.xml | 1 - .../main/java/org/mozilla/fenix/ext/Activity.kt | 2 ++ .../fenix/search/SearchDialogFragment.kt | 2 ++ .../PerformanceActivityLifecycleCallbacks.kt | 12 ++++++------ .../session/VisibilityLifecycleCallback.kt | 14 +++++++------- .../SitePermissionsDetailsExceptionsFragment.kt | 4 ++-- .../SitePermissionsExceptionsFragment.kt | 4 ++-- ...sionsManageExceptionsPhoneFeatureFragment.kt | 4 ++-- .../org/mozilla/fenix/share/ShareViewModel.kt | 4 ++-- .../fenix/tabtray/TabTrayDialogFragment.kt | 4 ++++ .../org/mozilla/fenix/theme/ThemeManager.kt | 9 ++++++++- .../mozilla/fenix/wifi/WifiConnectionMonitor.kt | 4 ++-- .../java/org/mozilla/fenix/ext/ActivityTest.kt | 2 ++ buildSrc/src/main/java/Config.kt | 4 ++-- 15 files changed, 47 insertions(+), 40 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 2676cc592..54e1ea7b5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,8 +58,7 @@ android { def deepLinkSchemeValue = "fenix-dev" buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" manifestPlaceholders = [ - "deepLinkScheme": deepLinkSchemeValue, - "requestLegacyExternalStorage": true + "deepLinkScheme": deepLinkSchemeValue ] // Build flag for "Mozilla Online" variants. See `Config.isMozillaOnline`. @@ -94,19 +93,13 @@ android { applicationIdSuffix ".fenix.debug" resValue "bool", "IS_DEBUG", "true" pseudoLocalesEnabled true - def deepLinkSchemeValue = "fenix-dev" - buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" - manifestPlaceholders = [ - "deepLinkScheme": deepLinkSchemeValue, - "requestLegacyExternalStorage": false - ] } nightly releaseTemplate >> { applicationIdSuffix ".fenix" buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" def deepLinkSchemeValue = "fenix-nightly" buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" - manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue, "requestLegacyExternalStorage": false] + manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue] } beta releaseTemplate >> { buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" @@ -122,8 +115,7 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": deepLinkSchemeValue, - "requestLegacyExternalStorage": true + "deepLinkScheme": deepLinkSchemeValue ] } release releaseTemplate >> { @@ -140,8 +132,7 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": deepLinkSchemeValue, - "requestLegacyExternalStorage": true + "deepLinkScheme": deepLinkSchemeValue ] } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b1b84e842..5b2095bb1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,7 +23,6 @@ android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" - android:requestLegacyExternalStorage="${requestLegacyExternalStorage}" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/NormalTheme" diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index 0ab6efec0..cfaa24169 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -17,6 +17,8 @@ import mozilla.components.concept.base.crash.Breadcrumb */ fun Activity.enterToImmersiveMode() { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17804 + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 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 34d2f3ccf..780724462 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -100,6 +100,8 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { super.onStop() // https://github.com/mozilla-mobile/fenix/issues/14279 // Let's reset back to the default behavior after we're done searching + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17805 + @Suppress("DEPRECATION") requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) } diff --git a/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt b/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt index 6f46fb997..c46c08b5e 100644 --- a/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt +++ b/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt @@ -59,12 +59,12 @@ class PerformanceActivityLifecycleCallbacks( } } - override fun onActivityStarted(activity: Activity?) {} - override fun onActivityStopped(activity: Activity?) {} - override fun onActivityResumed(activity: Activity?) {} - override fun onActivityPaused(activity: Activity?) {} - override fun onActivitySaveInstanceState(activity: Activity?, bundle: Bundle?) {} - override fun onActivityDestroyed(activity: Activity?) {} + override fun onActivityStarted(activity: Activity) {} + override fun onActivityStopped(activity: Activity) {} + override fun onActivityResumed(activity: Activity) {} + override fun onActivityPaused(activity: Activity) {} + override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {} + override fun onActivityDestroyed(activity: Activity) {} companion object { /** diff --git a/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt b/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt index 131bfbd73..b8230946c 100644 --- a/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt +++ b/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt @@ -44,23 +44,23 @@ class VisibilityLifecycleCallback(private val activityManager: ActivityManager?) return false } - override fun onActivityStarted(activity: Activity?) { + override fun onActivityStarted(activity: Activity) { activitiesInStartedState++ } - override fun onActivityStopped(activity: Activity?) { + override fun onActivityStopped(activity: Activity) { activitiesInStartedState-- } - override fun onActivityResumed(activity: Activity?) {} + override fun onActivityResumed(activity: Activity) {} - override fun onActivityPaused(activity: Activity?) {} + override fun onActivityPaused(activity: Activity) {} - override fun onActivityCreated(activity: Activity?, bundle: Bundle?) {} + override fun onActivityCreated(activity: Activity, bundle: Bundle?) {} - override fun onActivitySaveInstanceState(activity: Activity?, bundle: Bundle?) {} + override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {} - override fun onActivityDestroyed(activity: Activity?) {} + override fun onActivityDestroyed(activity: Activity) {} companion object { /** 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 399d46ca8..6eefefffc 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 @@ -130,11 +130,11 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() { AlertDialog.Builder(requireContext()).apply { setMessage(R.string.confirm_clear_permissions_site) setTitle(R.string.clear_permissions) - setPositiveButton(android.R.string.yes) { dialog: DialogInterface, _ -> + setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _ -> clearSitePermissions() dialog.dismiss() } - setNegativeButton(android.R.string.no) { dialog: DialogInterface, _ -> + setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _ -> dialog.cancel() } }.show() diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt index 2b73d4da2..352b71150 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt @@ -95,11 +95,11 @@ class SitePermissionsExceptionsFragment : AlertDialog.Builder(requireContext()).apply { setMessage(R.string.confirm_clear_permissions_on_all_sites) setTitle(R.string.clear_permissions) - setPositiveButton(android.R.string.yes) { dialog: DialogInterface, _ -> + setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _ -> deleteAllSitePermissions() dialog.dismiss() } - setNegativeButton(android.R.string.no) { dialog: DialogInterface, _ -> + setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _ -> dialog.cancel() } }.show() 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 dab4a76e8..97c4a63d3 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 @@ -159,11 +159,11 @@ class SitePermissionsManageExceptionsPhoneFeatureFragment : Fragment() { AlertDialog.Builder(requireContext()).apply { setMessage(R.string.confirm_clear_permission_site) setTitle(R.string.clear_permission) - setPositiveButton(android.R.string.yes) { dialog: DialogInterface, _ -> + setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _ -> clearPermissions() dialog.dismiss() } - setNegativeButton(android.R.string.no) { dialog: DialogInterface, _ -> + setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _ -> dialog.cancel() } }.show() 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 4fde40fce..29cd7c769 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt @@ -47,8 +47,8 @@ class ShareViewModel(application: Application) : AndroidViewModel(application) { @VisibleForTesting internal val networkCallback = object : ConnectivityManager.NetworkCallback() { - override fun onLost(network: Network?) = reloadDevices(network) - override fun onAvailable(network: Network?) = reloadDevices(network) + override fun onLost(network: Network) = reloadDevices(network) + override fun onAvailable(network: Network) = reloadDevices(network) private fun reloadDevices(network: Network?) { viewModelScope.launch(ioDispatcher) { diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt index ef6f3fe70..6bda59cf2 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt @@ -245,12 +245,16 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), UserInteractionHandler } view.tabLayout.setOnApplyWindowInsetsListener { v, insets -> + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17807 + @Suppress("DEPRECATION") v.updatePadding( left = insets.left(), right = insets.right(), bottom = insets.bottom() ) + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17807 + @Suppress("DEPRECATION") tabTrayView.view.tab_wrapper.updatePadding( bottom = insets.bottom() ) diff --git a/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt b/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt index f39c8dd0f..38b8314bb 100644 --- a/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt +++ b/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt @@ -76,7 +76,8 @@ abstract class ThemeManager { private fun updateLightSystemBars(window: Window, context: Context) { if (SDK_INT >= Build.VERSION_CODES.M) { window.statusBarColor = context.getColorFromAttr(android.R.attr.statusBarColor) - + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR } else { @@ -85,6 +86,8 @@ abstract class ThemeManager { if (SDK_INT >= Build.VERSION_CODES.O) { // API level can display handle light navigation bar color + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR updateNavigationBar(window, context) @@ -93,12 +96,16 @@ abstract class ThemeManager { private fun clearLightSystemBars(window: Window) { if (SDK_INT >= Build.VERSION_CODES.M) { + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = window.decorView.systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() } if (SDK_INT >= Build.VERSION_CODES.O) { // API level can display handle light navigation bar color + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = window.decorView.systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv() } diff --git a/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt b/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt index 4db646e12..4d3b636aa 100644 --- a/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt +++ b/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt @@ -34,12 +34,12 @@ class WifiConnectionMonitor(app: Application) { private var isRegistered = false private val frameworkListener = object : ConnectivityManager.NetworkCallback() { - override fun onLost(network: Network?) { + override fun onLost(network: Network) { notifyListeners(false) lastKnownStateWasAvailable = false } - override fun onAvailable(network: Network?) { + override fun onAvailable(network: Network) { notifyListeners(true) lastKnownStateWasAvailable = true } diff --git a/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt b/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt index 4d074780e..884e5bd5f 100644 --- a/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt +++ b/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt @@ -18,6 +18,8 @@ import org.robolectric.Shadows.shadowOf @RunWith(FenixRobolectricTestRunner::class) class ActivityTest { + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17804 + @Suppress("DEPRECATION") @Test fun testEnterImmersiveMode() { val activity = Robolectric.buildActivity(Activity::class.java).create().get() diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index 236689878..ff824ff74 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -13,9 +13,9 @@ import java.util.Locale object Config { // Synchronized build configuration for all modules - const val compileSdkVersion = 29 + const val compileSdkVersion = 30 const val minSdkVersion = 21 - const val targetSdkVersion = 29 + const val targetSdkVersion = 30 @JvmStatic private fun generateDebugVersionName(): String { From 1347b90558a2ea0ea6810d9bef845be8f5d8c684 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Wed, 24 Feb 2021 17:21:54 -0500 Subject: [PATCH 007/149] Update metrics.md for perf startup entries (#18162) --- docs/metrics.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/metrics.md b/docs/metrics.md index 4412b58ab..5abd72251 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -315,8 +315,8 @@ The following metrics are added to the ping: | perf.awesomebar.session_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a session awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | | perf.awesomebar.shortcuts_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a shortcuts awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | | perf.awesomebar.synced_tabs_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a synced tabs awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.startup.application_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `FenixApplication.onCreate` in the main process. |[1](todo)||2021-08-11 |1 | -| perf.startup.home_activity_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeActivity.onCreate`. |[1](todo)||2021-08-11 |1 | +| perf.startup.application_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `FenixApplication.onCreate` in the main process. |[1](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | +| perf.startup.home_activity_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeActivity.onCreate`. |[1](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | | preferences.accessibility_services |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has touch exploration or switch services enabled. These are built into the Android OS, not Fenix prefs. default: "" |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | preferences.open_links_in_a_private_tab |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled open links in a private tab. default: false |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | preferences.open_links_in_app |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has the open links in apps feature enabled. default: false |[1](https://github.com/mozilla-mobile/fenix/pull/11446), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From 9d763280e98af0b44d8e1de7ecb3c029110c7059 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Wed, 24 Feb 2021 14:33:32 -0800 Subject: [PATCH 008/149] Closes #18164: on pre-push, check for uncommitted glean docs. --- config/pre-push-recommended.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/config/pre-push-recommended.sh b/config/pre-push-recommended.sh index 28e245997..9d140ce3d 100755 --- a/config/pre-push-recommended.sh +++ b/config/pre-push-recommended.sh @@ -14,6 +14,25 @@ # Descriptions for each gradle task below can be found in the # output of `./gradlew tasks`. +# Prevent push if generated glean docs are not committed. +# A better implementation would make sure these doc updates +# only came from this commit. +./gradlew -q \ + gleanGenerateMetricsDocsForDebug \ + gleanGenerateMetricsSourceForDebug +if git status --porcelain=v1 | grep -q "docs/metrics.md"; then + echo " +FAIL pre-push hook: generated glean file, docs/metrics.md, has uncommitted changes. +Please commit these files and try again. + +This check tries to prevent these generated files from being uncommitted on master. +However, it may fail unintuitively if we're in that state. If this happens often +and is disruptive to your workflow, please notify mcomella so we can improve this +check." >&2 + exit 1 +fi + +# Run core checks. ./gradlew -q \ ktlint \ detekt \ From 2ddcc902935d32b39cd62509b3137b26d9f67857 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Thu, 25 Feb 2021 00:09:15 +0000 Subject: [PATCH 009/149] Import l10n. --- app/src/main/res/values-co/strings.xml | 12 +++++++++--- app/src/main/res/values-de/strings.xml | 5 +++++ app/src/main/res/values-en-rCA/strings.xml | 5 +++++ app/src/main/res/values-es-rAR/strings.xml | 5 +++++ app/src/main/res/values-hr/strings.xml | 12 +++++++++--- app/src/main/res/values-hsb/strings.xml | 5 +++++ app/src/main/res/values-hu/strings.xml | 12 +++++++++--- app/src/main/res/values-kk/strings.xml | 18 +++++++++++++++--- app/src/main/res/values-ko/strings.xml | 5 +++++ app/src/main/res/values-nb-rNO/strings.xml | 5 +++++ app/src/main/res/values-nn-rNO/strings.xml | 12 +++++++++--- app/src/main/res/values-pt-rBR/strings.xml | 5 +++++ app/src/main/res/values-ru/strings.xml | 5 +++++ app/src/main/res/values-tr/strings.xml | 5 +++++ app/src/main/res/values-uk/strings.xml | 5 +++++ app/src/main/res/values-zh-rCN/strings.xml | 6 ++++++ app/src/main/res/values-zh-rTW/strings.xml | 5 +++++ 17 files changed, 112 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/values-co/strings.xml b/app/src/main/res/values-co/strings.xml index c42c30624..c8b6b8817 100644 --- a/app/src/main/res/values-co/strings.xml +++ b/app/src/main/res/values-co/strings.xml @@ -897,16 +897,22 @@ Attivata Disattivata - + Permette l’audio è a video + + Permette l’audio è a video Bluccà l’audio è a video da i dati mubili solu Audio è video seranu letti cù una cunnessione Wi-Fi - + Bluccà solu l’audio - + + Bluccà solu l’audio + Bluccà l’audio è a video + + Bluccà l’audio è a video Attivata diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4022803bc..ab688e3f9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -222,6 +222,11 @@ Weitere Informationen + + Suchen mit %s + + Direkt aus der Adressleiste suchen + In einem neuen Firefox-Tab öffnen diff --git a/app/src/main/res/values-en-rCA/strings.xml b/app/src/main/res/values-en-rCA/strings.xml index be3b6e3c0..38d70c102 100644 --- a/app/src/main/res/values-en-rCA/strings.xml +++ b/app/src/main/res/values-en-rCA/strings.xml @@ -216,6 +216,11 @@ Learn more + + Search %s + + Search directly from the address bar + Open a new Firefox tab diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 4359cce87..77605f963 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -222,6 +222,11 @@ Conocer más + + Buscar %s + + Buscar directamente desde la barra de direcciones + Abrir una nueva pestaña de Firefox diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 9cd85a0f9..d5f3f86f1 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -892,16 +892,22 @@ Uključeno Isključeno - + Dopusti zvuk i video + + Dopusti zvuk i video Blokiraj zvuk i video samo na mobilnoj vezi Zvuk i video reproducirat će se na Wi-Fi-ju - + Blokiraj samo zvuk - + + Blokiraj samo zvuk + Blokiraj zvuk i video + + Blokiraj zvuk i video Uključeno diff --git a/app/src/main/res/values-hsb/strings.xml b/app/src/main/res/values-hsb/strings.xml index a6082b0aa..e1174d2cf 100644 --- a/app/src/main/res/values-hsb/strings.xml +++ b/app/src/main/res/values-hsb/strings.xml @@ -217,6 +217,11 @@ Dalše informacije + + Z %s pytać + + Direktnje z adresoweho pola pytać + Nowy rajtark Firefox wočinić diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d0876285c..7e7bc4a3c 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -891,16 +891,22 @@ Ki - + Hang és videó engedélyezése + + Hang és videó engedélyezése Hang és videó blokkolása csak mobil-adatkapcsolaton A hang és videó Wi-Fi-n lesz lejátszva - + Csak a hang blokkolása - + + Csak a hang blokkolása + Hang és videó blokkolása + + Hang és videó blokkolása Be diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 94477b126..89e816fcf 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -127,6 +127,8 @@ Бетбелгіні түзету Қосымшалар + + Кеңейтулер Осында қосымшалар жоқ @@ -520,6 +522,10 @@ Басқа бетбелгілер Шолу тарихы + + Жаңа бет + + Беттен табу Синхрондалған беттер @@ -870,16 +876,22 @@ Іске қосулы Сөндірулі - + Аудио мен видеоны рұқсат ету + + Аудио мен видеоны рұқсат ету Аудио мен видеоны тек ұялы деректерде бұғаттау Аудио және видео Wi-Fi арқылы ойнатылады - + Тек аудионы бұғаттау - + + Тек аудионы бұғаттау + Аудио мен видеоны бұғаттау + + Аудио мен видеоны бұғаттау Іске қосулы diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index d9bc1aaeb..c504b7155 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -227,6 +227,11 @@ 더 알아보기 + + %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 1e016c1d7..aee06e372 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -220,6 +220,11 @@ Les mer + + Søk %s + + Søk direkte fra adresselinjen + Åpne en ny Firefox-fane diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index 0c50a0747..22d1671ca 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -897,16 +897,22 @@ Av - + Tillat lyd og video + + Tillat lyd og video Blokker lyd og video berre på mobildata Lyd og video vert spela av på Wi-Fi - + Blokker berre lyd - + + Blokker berre lyd + Blokker lyd og video + + Blokker lyd og video diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b69673ddb..68aa5db1b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -218,6 +218,11 @@ Saiba mais + + Pesquisar com %s + + Pesquisar diretamente na barra de endereços + Abrir uma nova aba no Firefox diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5f8843eab..648ba5d36 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -227,6 +227,11 @@ Узнать больше + + Поиск в %s + + Поиск прямо из адресной строки + Открыть новую вкладку Firefox diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 7e87abc75..186ec3703 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -218,6 +218,11 @@ Daha fazla bilgi al + + %s ile ara + + Doğrudan adres çubuğundan arama yapın + Yeni Firefox sekmesi aç diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 9e242df11..b905dcc46 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -219,6 +219,11 @@ Докладніше + + Пошук в %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 cb934be6f..a5cd3cf80 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -226,6 +226,12 @@ 详细了解 + + 搜索 %s + + + 直接从地址栏搜索 + 新建 Firefox 标签页 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 7f9b0a1c9..257d79220 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -221,6 +221,11 @@ 了解更多 + + 搜尋 %s + + 從網址列直接搜尋 + 開新 Firefox 分頁 From dc002f050807b8141ea82c655ac5dcbaece58376 Mon Sep 17 00:00:00 2001 From: Christian Sadilek Date: Wed, 24 Feb 2021 11:02:52 -0500 Subject: [PATCH 010/149] Remove Session[Manager] references from Fennec intent processors --- .../mozilla/fenix/components/Components.kt | 3 +- .../fenix/components/IntentProcessors.kt | 6 +-- .../customtabs/FennecWebAppIntentProcessor.kt | 25 ++++------ .../FennecBookmarkShortcutsIntentProcessor.kt | 21 ++++----- .../FennecWebAppIntentProcessorTest.kt | 7 +-- ...necBookmarkShortcutsIntentProcessorTest.kt | 46 ++++++++++--------- 6 files changed, 49 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/Components.kt b/app/src/main/java/org/mozilla/fenix/components/Components.kt index d1f714984..fbfe5ed3f 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Components.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Components.kt @@ -67,11 +67,10 @@ class Components(private val context: Context) { core.topSitesStorage ) } - @Suppress("Deprecation") + val intentProcessors by lazyMonitored { IntentProcessors( context, - core.sessionManager, core.store, useCases.sessionUseCases, useCases.tabsUseCases, diff --git a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt index a2d35af89..cf80fb2b0 100644 --- a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt +++ b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt @@ -5,7 +5,6 @@ package org.mozilla.fenix.components import android.content.Context -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.customtabs.CustomTabIntentProcessor import mozilla.components.feature.customtabs.store.CustomTabsServiceStore @@ -32,7 +31,6 @@ import org.mozilla.fenix.utils.Mockable @Suppress("LongParameterList") class IntentProcessors( private val context: Context, - private val sessionManager: SessionManager, private val store: BrowserStore, private val sessionUseCases: SessionUseCases, private val tabsUseCases: TabsUseCases, @@ -74,12 +72,12 @@ class IntentProcessors( store = customTabsStore ), WebAppIntentProcessor(store, tabsUseCases.addTab, sessionUseCases.loadUrl, manifestStorage), - FennecWebAppIntentProcessor(context, sessionManager, sessionUseCases.loadUrl, manifestStorage) + FennecWebAppIntentProcessor(context, tabsUseCases.addTab, manifestStorage) ) } val fennecPageShortcutIntentProcessor by lazyMonitored { - FennecBookmarkShortcutsIntentProcessor(sessionManager, sessionUseCases.loadUrl) + FennecBookmarkShortcutsIntentProcessor(tabsUseCases.addTab) } val migrationIntentProcessor by lazyMonitored { diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt index 1eee927a2..68fbfe249 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt @@ -9,8 +9,6 @@ import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT import androidx.annotation.VisibleForTesting import androidx.core.content.ContextCompat -import mozilla.components.browser.session.Session -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.CustomTabConfig import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.EngineSession @@ -22,7 +20,7 @@ import mozilla.components.feature.intent.processing.IntentProcessor import mozilla.components.feature.pwa.ManifestStorage import mozilla.components.feature.pwa.ext.putWebAppManifest import mozilla.components.feature.pwa.ext.toCustomTabConfig -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.base.log.logger.Logger import mozilla.components.support.utils.SafeIntent import mozilla.components.support.utils.toSafeIntent @@ -38,8 +36,7 @@ import java.io.IOException */ class FennecWebAppIntentProcessor( private val context: Context, - private val sessionManager: SessionManager, - private val loadUrlUseCase: SessionUseCases.DefaultLoadUrlUseCase, + private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase, private val storage: ManifestStorage ) : IntentProcessor { val logger = Logger("FennecWebAppIntentProcessor") @@ -62,16 +59,14 @@ class FennecWebAppIntentProcessor( return if (!url.isNullOrEmpty() && matches(intent)) { val webAppManifest = runBlockingIncrement { loadManifest(safeIntent, url) } - - val session = Session(url, private = false, source = SessionState.Source.HOME_SCREEN) - session.webAppManifest = webAppManifest - session.customTabConfig = - webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig() - - sessionManager.add(session) - loadUrlUseCase(url, session.id, EngineSession.LoadUrlFlags.external()) - - intent.putSessionId(session.id) + val sessionId = addNewTabUseCase( + url = url, + source = SessionState.Source.HOME_SCREEN, + flags = EngineSession.LoadUrlFlags.external(), + webAppManifest = webAppManifest, + customTabConfig = webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig() + ) + intent.putSessionId(sessionId) if (webAppManifest != null) { intent.flags = FLAG_ACTIVITY_NEW_DOCUMENT diff --git a/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt index cf37943e9..b66650310 100644 --- a/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessor.kt @@ -7,13 +7,11 @@ package org.mozilla.fenix.home.intent import android.content.Intent import android.content.Intent.ACTION_VIEW import androidx.annotation.VisibleForTesting -import mozilla.components.browser.session.Session -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.EngineSession import mozilla.components.feature.intent.ext.putSessionId import mozilla.components.feature.intent.processing.IntentProcessor -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.utils.toSafeIntent /** @@ -21,8 +19,7 @@ import mozilla.components.support.utils.toSafeIntent * https://developer.android.com/guide/topics/ui/shortcuts/creating-shortcuts#pinned */ class FennecBookmarkShortcutsIntentProcessor( - private val sessionManager: SessionManager, - private val loadUrlUseCase: SessionUseCases.DefaultLoadUrlUseCase + private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase ) : IntentProcessor { /** @@ -41,13 +38,15 @@ class FennecBookmarkShortcutsIntentProcessor( val url = safeIntent.dataString return if (!url.isNullOrEmpty() && matches(intent)) { - val session = Session(url, private = false, source = SessionState.Source.HOME_SCREEN) - - sessionManager.add(session, selected = true) - loadUrlUseCase(url, session.id, EngineSession.LoadUrlFlags.external()) + val sessionId = addNewTabUseCase( + url = url, + flags = EngineSession.LoadUrlFlags.external(), + source = SessionState.Source.HOME_SCREEN, + selectTab = true, + startLoading = true + ) intent.action = ACTION_VIEW - intent.putSessionId(session.id) - + intent.putSessionId(sessionId) true } else { false diff --git a/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt index 6e9f7c715..b39b012a8 100644 --- a/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessorTest.kt @@ -5,9 +5,8 @@ package org.mozilla.fenix.customtabs import io.mockk.mockk -import mozilla.components.browser.session.SessionManager import mozilla.components.feature.pwa.ManifestStorage -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue @@ -60,13 +59,11 @@ class FennecWebAppIntentProcessorTest { } private fun createFennecWebAppIntentProcessor(): FennecWebAppIntentProcessor { - val sessionManager = SessionManager(engine = mockk(relaxed = true)) - val useCase: SessionUseCases.DefaultLoadUrlUseCase = mockk(relaxed = true) + val useCase: TabsUseCases.AddNewTabUseCase = mockk(relaxed = true) val storage: ManifestStorage = mockk(relaxed = true) return FennecWebAppIntentProcessor( testContext, - sessionManager, useCase, storage ) diff --git a/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt index 06f1ffed8..4d7cd34da 100644 --- a/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/intent/FennecBookmarkShortcutsIntentProcessorTest.kt @@ -9,33 +9,27 @@ import android.net.Uri import io.mockk.Called import io.mockk.every import io.mockk.mockk -import io.mockk.mockkStatic import io.mockk.verify -import io.mockk.verifyAll import kotlinx.coroutines.runBlocking -import mozilla.components.browser.session.Session -import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.EngineSession import mozilla.components.feature.intent.ext.getSessionId -import mozilla.components.feature.session.SessionUseCases +import mozilla.components.feature.tabs.TabsUseCases import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith -import org.mozilla.fenix.home.intent.FennecBookmarkShortcutsIntentProcessor.Companion.ACTION_FENNEC_HOMESCREEN_SHORTCUT import org.mozilla.fenix.helpers.FenixRobolectricTestRunner -import java.util.UUID +import org.mozilla.fenix.home.intent.FennecBookmarkShortcutsIntentProcessor.Companion.ACTION_FENNEC_HOMESCREEN_SHORTCUT @RunWith(FenixRobolectricTestRunner::class) class FennecBookmarkShortcutsIntentProcessorTest { - private val sessionManager = mockk(relaxed = true) - private val loadUrlUseCase = mockk(relaxed = true) + private val addNewTabUseCase = mockk(relaxed = true) @Test fun `do not process blank Intents`() = runBlocking { - val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) + val processor = FennecBookmarkShortcutsIntentProcessor(addNewTabUseCase) val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) fennecShortcutsIntent.data = Uri.parse("http://mozilla.org") @@ -43,30 +37,38 @@ class FennecBookmarkShortcutsIntentProcessorTest { assertFalse(wasEmptyIntentProcessed) verify { - sessionManager wasNot Called - loadUrlUseCase wasNot Called + addNewTabUseCase wasNot Called } } @Test fun `processing a Fennec shortcut Intent results in loading it's URL in a new Session`() = runBlocking { - mockkStatic(UUID::class) - // The Session constructor uses UUID.randomUUID().toString() as the default value for it's id field - every { UUID.randomUUID().toString() } returns "test" - val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) + val expectedSessionId = "test" + val processor = FennecBookmarkShortcutsIntentProcessor(addNewTabUseCase) val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) val testUrl = "http://mozilla.org" fennecShortcutsIntent.data = Uri.parse(testUrl) - val expectedSession = Session(testUrl, private = false, source = SessionState.Source.HOME_SCREEN) - val wasIntentProcessed = processor.process(fennecShortcutsIntent) + every { addNewTabUseCase( + url = testUrl, + flags = EngineSession.LoadUrlFlags.external(), + source = SessionState.Source.HOME_SCREEN, + selectTab = true, + startLoading = true) + } returns expectedSessionId + val wasIntentProcessed = processor.process(fennecShortcutsIntent) assertTrue(wasIntentProcessed) assertEquals(Intent.ACTION_VIEW, fennecShortcutsIntent.action) - assertEquals(expectedSession.id, fennecShortcutsIntent.getSessionId()) - verifyAll { - sessionManager.add(expectedSession, true) - loadUrlUseCase(testUrl, expectedSession.id, EngineSession.LoadUrlFlags.external()) + assertEquals(expectedSessionId, fennecShortcutsIntent.getSessionId()) + verify { + addNewTabUseCase( + url = testUrl, + flags = EngineSession.LoadUrlFlags.external(), + source = SessionState.Source.HOME_SCREEN, + selectTab = true, + startLoading = true + ) } } } From 9cca1b93b5ab14b04542e98e9ce3a8845f9afcbf Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Thu, 25 Feb 2021 16:35:28 -0500 Subject: [PATCH 011/149] Replace TopSitesUseCases.renameTopSites with TopSitesUseCases.updateTopSites --- .../fenix/home/sessioncontrol/SessionControlController.kt | 6 +++++- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) 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 1fa618487..711e668c5 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 @@ -325,7 +325,11 @@ class DefaultSessionControlController( setPositiveButton(R.string.top_sites_rename_dialog_ok) { dialog, _ -> viewLifecycleScope.launch(Dispatchers.IO) { with(activity.components.useCases.topSitesUseCase) { - renameTopSites(topSite, topSiteLabelEditText.text.toString()) + updateTopSites( + topSite, + topSiteLabelEditText.text.toString(), + topSite.url + ) } } dialog.dismiss() diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 1f3e0dba9..d60ce5e93 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 = "73.0.20210223143117" + const val VERSION = "74.0.20210225143132" } From 0f4735dad94093e7700c3227c9302202807b6183 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Fri, 26 Feb 2021 00:06:44 +0000 Subject: [PATCH 012/149] Import l10n. --- app/src/main/res/values-cs/strings.xml | 5 +++ app/src/main/res/values-cy/strings.xml | 5 +++ app/src/main/res/values-dsb/strings.xml | 17 ++++++-- app/src/main/res/values-fa/strings.xml | 23 +++++++++-- app/src/main/res/values-fy-rNL/strings.xml | 6 +++ app/src/main/res/values-hr/strings.xml | 5 +++ app/src/main/res/values-hu/strings.xml | 5 +++ app/src/main/res/values-it/strings.xml | 5 +++ app/src/main/res/values-iw/strings.xml | 5 +++ app/src/main/res/values-kab/strings.xml | 5 +++ app/src/main/res/values-kk/strings.xml | 5 +++ app/src/main/res/values-nl/strings.xml | 5 +++ app/src/main/res/values-nn-rNO/strings.xml | 5 +++ app/src/main/res/values-rm/strings.xml | 5 +++ app/src/main/res/values-sl/strings.xml | 3 ++ app/src/main/res/values-sr/strings.xml | 5 +++ app/src/main/res/values-sv-rSE/strings.xml | 5 +++ app/src/main/res/values-tg/strings.xml | 5 +++ app/src/main/res/values-tl/strings.xml | 5 +++ app/src/main/res/values-ur/strings.xml | 48 ++++++++++++++++++++-- 20 files changed, 163 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 77facf933..fc05452c1 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -222,6 +222,11 @@ Zjistit více + + Hledat na %s + + Vyhledat na webu přímo z adresního řádku + Otevřít nový panel Firefoxu diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index bdfd073d1..a358c83fa 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -216,6 +216,11 @@ Dysgu rhagor + + Chwilio %s + + Chwilio’n uniongyrchol o’r bar cyfeiriad + Agorwch tab Firefox newydd diff --git a/app/src/main/res/values-dsb/strings.xml b/app/src/main/res/values-dsb/strings.xml index e9c24bd68..152f297cb 100644 --- a/app/src/main/res/values-dsb/strings.xml +++ b/app/src/main/res/values-dsb/strings.xml @@ -216,6 +216,11 @@ Dalšne informacije + + Z %s pytaś + + Direktnje z adresowego póla pytaś + Nowy rejtarik Firefox wócyniś @@ -886,16 +891,22 @@ Zašaltowany Wušaltowany - + Awdio a wideo dowóliś + + Awdio a wideo dowóliś Awdio a wideo jano za mobilny zwisk blokěrowaś Awdio a wideo se pśez WLAN wótgrawatej - + Jano awdio blokěrowaś - + + Jano awdio blokěrowaś + Awdio a wideo blokěrowaś + + Awdio a wideo blokěrowaś Zašaltowany diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index b0fb3425e..59b9d908c 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -128,6 +128,8 @@ ویرایش نشانک افزونه‌ها + + افزونه‌ها هیچ افزودنی در اینجا وجود ندارد @@ -212,6 +214,11 @@ بیشتر بدانید + + جست‌وجو در %s + + مستقیماً از نوار آدرس جستجو کنید + بازکردن یک زبانه فایرفاکس جدید @@ -522,6 +529,10 @@ نشانک‌‌های دیگر تاریخچه + + زبانهٔ جدید + + پیدا کردن در صفحه زبانه‌های همگام‌سازی شده @@ -874,16 +885,22 @@ روشن خاموش - + اجازه دادن صوت و ویدئو + + اجازه دادن به صدا و ویدئو مسدود کردن صدا و تصویر فقط بر روی حالت داده صدا و تصویر بر روی حالت Wi-Fi پخش خواهد شد - + مسدود کردن فقط صدا - + + فقط مسدود کردن صدا + مسدود کردن صوت و ویدئو + + مسدود کردن صوت و ویدئو روشن diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index 9aa79e081..415363eab 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -219,6 +219,12 @@ Mear ynfo + + %s trochsykje + + + Streekrjocht fan de adresbalke út sykje + In nij Firefox-ljepblêd iepenje diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index d5f3f86f1..2ee173ddd 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -216,6 +216,11 @@ Saznaj više + + Pretraži %s + + Pretraži izravno iz adresne trake + Otvori novu karticu u Firefoxu diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 7e7bc4a3c..2762a89b0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -219,6 +219,11 @@ További tudnivalók + + %s keresés + + Keresés közvetlenül a címsávból + Új Firefox-lap megnyitása diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 38a0bb45b..8b8596d9e 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -220,6 +220,11 @@ Ulteriori informazioni + + Cerca in %s + + Cerca direttamente dalla barra degli indirizzi + Apri una nuova scheda in Firefox diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index a7645af5f..1c3d58571 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -216,6 +216,11 @@ מידע נוסף + + חיפוש ב־%s + + חיפוש ישירות משורת הכתובת + פתיחת לשונית חדשה ב־Firefox diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 1da682bfa..ba2a92665 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -219,6 +219,11 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Issin ugar + + Nadi %s + + Nadi srid seg ufeggag n tansiwin + Ldi iccer amaynut n Firefox diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 89e816fcf..3ea3ac89c 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -213,6 +213,11 @@ Көбірек білу + + %s ішінен іздеу + + Адрестік жолақтан тікелей іздеу + Жаңа Firefox бетін ашу diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index bb414308c..5c07dd030 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -224,6 +224,11 @@ Meer info + + %s doorzoeken + + Rechtstreeks vanuit de adresbalk zoeken + Een nieuw Firefox-tabblad openen diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index 22d1671ca..dce476b44 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -219,6 +219,11 @@ Les meir + + Søk med %s + + Søk direkte frå adresselinja + Opne ei ny Firefox-fane diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml index 2a50264e3..03637f965 100644 --- a/app/src/main/res/values-rm/strings.xml +++ b/app/src/main/res/values-rm/strings.xml @@ -214,6 +214,11 @@ Ulteriuras infurmaziuns + + Tschertgar cun %s + + Tschertgar direct en la trav d\'adressas + Avrir in nov tab da Firefox diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 96d8b30f2..8b70a43d7 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -217,6 +217,9 @@ Več o tem + + Iščite neposredno iz naslovne vrstice + Odpri nov zavihek v Firefoxu diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index b77fdd693..e9299775e 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -215,6 +215,11 @@ Сазнајте више + + Претражи %s + + Претражи директно из адресне траке + Отворите нови Firefox језичак diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 33703b47f..5854f08e8 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -222,6 +222,11 @@ Läs mer + + Sök med %s + + Sök direkt från adressfältet + Öppna en ny Firefox-flik diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml index 4581b3f7b..8761b6132 100644 --- a/app/src/main/res/values-tg/strings.xml +++ b/app/src/main/res/values-tg/strings.xml @@ -217,6 +217,11 @@ Маълумоти бештар + + Ҷустуҷӯ дар %s + + Ҷустуҷӯи бевосита аз навори нишонӣ + Кушодани варақаи нави Firefox diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index 4ddbbb0ed..17ede797b 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -217,6 +217,11 @@ Alamin + + Hanapin sa %s + + Maghanap direkta mula sa address bar + Magbukas ng bagong Firefox tab diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 0fb24449b..a3f03dd74 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -77,6 +77,8 @@ برخاست کریں + + کیمرے تک رسائی کی ضرورت ہے۔ Android کی ترتیبات پر جائیں ، اجازتیں ٹیپ کریں ، اور اجازت پر ٹیپ کریں۔ سیٹنگز پر جائیں @@ -118,6 +120,8 @@ بُک مارک کی تدوین کریں ایڈ اون + + ایکسٹینشنز یہاں کوئی ایڈونس نہیں ہے @@ -205,6 +209,9 @@ مزید سیکھیں + + %s تلاش کریں + ایک نیا Firefox ٹیب کھولیں @@ -262,6 +269,8 @@ لنکس نجی ٹیب میں کھولیں نجی براؤزنگ میں اسکرین شاٹس کی اجازت دیں + + اگر اجازت دی جائے تو ، جب ایک سے زیادہ اطلاقات کھلے ہیں تو نجی ٹیبز بھی نظر آئیں گے نجی براؤزنگ شارٹکٹ شامل کریں @@ -345,6 +354,12 @@ مجموعہ کرنے والا مالک (صارف شناخت) + + + ایڈ آن کی معاونت نہیں ہے + + ایڈ آن پہلے ہی نصب ہے + ابھی sync کریں @@ -478,6 +493,11 @@ آلہ کے تھیم پر عمل کریں + + + تازہ کرنے کے لیے کھینچیں + + ٹول بار کو چھپانے کے لئے اسکرول کریں ٹیبز کو کھولنے کے لئے ٹول بار کو سوائپ کریں @@ -500,6 +520,10 @@ دیگر نشانیاں سابقات + + نیا ٹیب + + صفحے میں تلاش کریں سینک ہو چکے ٹیبز @@ -530,6 +554,8 @@ ٹیبس + + ٹیب ویو فہرست @@ -595,6 +621,8 @@ بند كریں منتخب شدہ ٹیبز کا اشتراک کریں + + منتخب کردہ ٹیبز مینو مجموعہ سے ٹیب کو ہٹا دیں @@ -693,10 +721,14 @@ ڈاؤن لوڈ حذف کریں + + کیا آپ واقعی اپنے ڈاؤن لوڈ صاف کرنا چاہتے ہیں؟ ڈاؤن لوڈز کو ہٹا دیا گیا %1$s ہٹائیں + + ڈاؤن لوڈ فائلیں نہیں ہیں %1$d منتخب کیا گیا @@ -829,6 +861,8 @@ مقام اعلانات + + مستقل اسٹوریج DRM کے زیرانتظام مواد @@ -846,16 +880,22 @@ چالو بند - + آڈیو اور ویڈیو کی اجازت دیں + + آڈیو اور ویڈیو کی اجازت دیں صرف سیلولر ڈیٹا پر آڈیو اور ویڈیو بلاک کریں Wi-Fi پر آڈیو اور ویڈیو چلے گی - + صرف آڈیو بلاک کریں - + + صرف آڈیو کو مسدود کریں + آڈیو اور ویڈیو بلاک کریں + + آڈیو اور ویڈیو کو مسدود کریں چالو @@ -1050,6 +1090,8 @@ ذخیرہ کار جگہ کو خالی کرتا ہے سائٹ کی اجازت + + ڈاؤن لوڈز براؤزنگ کا ڈیٹا مٹائیں From dd1e51aed3d16dff4376a489935e3f2b2942c64b Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 26 Feb 2021 01:26:04 +0000 Subject: [PATCH 013/149] Update Android Components version to 74.0.20210225190305. --- 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 d60ce5e93..e55c8e35d 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 = "74.0.20210225143132" + const val VERSION = "74.0.20210225190305" } From c97de946402a213ada9af8f29a3c79389c9cf943 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 26 Feb 2021 05:00:57 +0000 Subject: [PATCH 014/149] Update Android Components version to 74.0.20210226044101. --- 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 e55c8e35d..09c6a98fb 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 = "74.0.20210225190305" + const val VERSION = "74.0.20210226044101" } From 489ba6ccc472b93b6222c23bc359b706adc7fdb6 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 26 Feb 2021 15:34:42 +0000 Subject: [PATCH 015/149] Update Android Components version to 74.0.20210226143133. --- 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 09c6a98fb..c842dc30a 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 = "74.0.20210226044101" + const val VERSION = "74.0.20210226143133" } From 319883d95136777db7b2a4b1b3c53a23aee7cc84 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Wed, 24 Feb 2021 15:12:30 -0800 Subject: [PATCH 016/149] No issue: when init profiling, remind to enable setting in app. --- tools/setup-startup-profiling.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/setup-startup-profiling.py b/tools/setup-startup-profiling.py index 1619cb75b..71593a69d 100755 --- a/tools/setup-startup-profiling.py +++ b/tools/setup-startup-profiling.py @@ -41,7 +41,9 @@ def push(id, filename): print('Pushing {} to device.'.format(filename)) run(['adb', 'push', config.name, os.path.join(PATH_PREFIX, filename)]) run(['adb', 'shell', 'am', 'set-debug-app', '--persistent', id]) - print('Startup profiling enabled on all future start ups, possibly even after reinstall. Call script with `deactivate` to disable it.') + print('\nStartup profiling enabled on all future start ups, possibly even after reinstall.') + print('Call script with `deactivate` to disable it.') + print('DON\'T FORGET TO ENABLE \'Remote debugging via USB\' IN THE APP SETTINGS!') finally: os.remove(config.name) From 607d6382f89d9b10cc9628637dc1d0dab7518ca8 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Wed, 24 Feb 2021 22:39:05 +0400 Subject: [PATCH 017/149] Close #17928: Add feature flag for tabs tray refactor --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 5 +++++ .../org/mozilla/fenix/settings/SecretSettingsFragment.kt | 9 +++++++++ app/src/main/java/org/mozilla/fenix/utils/Settings.kt | 8 ++++++++ app/src/main/res/values/preference_keys.xml | 1 + app/src/main/res/values/static_strings.xml | 4 ++++ app/src/main/res/xml/secret_settings_preferences.xml | 6 ++++++ 6 files changed, 33 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index ed9bacea0..0c551e4f3 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -28,4 +28,9 @@ object FeatureFlags { * Shows new three-dot toolbar menu design. */ val toolbarMenuFeature = Config.channel.isDebug + + /** + * Enables the tabs tray re-write with Synced Tabs. + */ + val tabsTrayRewrite = Config.channel.isNightlyOrDebug } diff --git a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt index 54c91d802..a61dd26bc 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt @@ -6,7 +6,10 @@ package org.mozilla.fenix.settings import android.os.Bundle import androidx.preference.PreferenceFragmentCompat +import androidx.preference.SwitchPreference +import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar class SecretSettingsFragment : PreferenceFragmentCompat() { @@ -18,5 +21,11 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.secret_settings_preferences, rootKey) + + requirePreference(R.string.pref_key_new_tabs_tray).apply { + isVisible = FeatureFlags.tabsTrayRewrite + isChecked = context.settings().tabsTrayRewrite + onPreferenceChangeListener = SharedPreferenceUpdater() + } } } 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 e458aabb1..ca1893d7e 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -26,10 +26,12 @@ import mozilla.components.support.ktx.android.content.longPreference import mozilla.components.support.ktx.android.content.stringPreference import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config +import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.components.metrics.MozillaProductDetector import org.mozilla.fenix.components.settings.counterPreference +import org.mozilla.fenix.components.settings.featureFlagPreference import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.getPreferenceKey @@ -319,6 +321,12 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = false ) + var tabsTrayRewrite by featureFlagPreference( + appContext.getPreferenceKey(R.string.pref_key_new_tabs_tray), + default = false, + featureFlag = FeatureFlags.tabsTrayRewrite + ) + fun getTabTimeout(): Long = when { closeTabsAfterOneDay -> ONE_DAY_MS closeTabsAfterOneWeek -> ONE_WEEK_MS diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 35b38f4dd..885c37b06 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -236,6 +236,7 @@ pref_key_close_tabs_after_one_day pref_key_close_tabs_after_one_week pref_key_close_tabs_after_one_month + pref_key_new_tabs_tray pref_key_camera_permissions_needed diff --git a/app/src/main/res/values/static_strings.xml b/app/src/main/res/values/static_strings.xml index 92a50e829..272359bf5 100644 --- a/app/src/main/res/values/static_strings.xml +++ b/app/src/main/res/values/static_strings.xml @@ -34,6 +34,10 @@ Secret Settings Secret Debug Info + + Use new Tabs Tray + + A refactored tabs tray that will include Synced Tabs. Show Synced Tabs in the tabs tray diff --git a/app/src/main/res/xml/secret_settings_preferences.xml b/app/src/main/res/xml/secret_settings_preferences.xml index c9a243d18..9b61c1e2d 100644 --- a/app/src/main/res/xml/secret_settings_preferences.xml +++ b/app/src/main/res/xml/secret_settings_preferences.xml @@ -4,4 +4,10 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + From 968b7bfc78d5059b2b0becae3a3e146b795372b9 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Fri, 26 Feb 2021 17:12:47 -0500 Subject: [PATCH 018/149] For #18198 - Add a feature flag for Credit Cards and Addresses autofill feature (#18200) --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 10 ++++++++++ .../mozilla/fenix/settings/SecretSettingsFragment.kt | 12 ++++++++++++ .../main/java/org/mozilla/fenix/utils/Settings.kt | 12 ++++++++++++ app/src/main/res/values/preference_keys.xml | 6 +++++- app/src/main/res/values/static_strings.xml | 6 +++++- app/src/main/res/xml/secret_settings_preferences.xml | 10 ++++++++++ 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index 0c551e4f3..34890976d 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -19,6 +19,16 @@ object FeatureFlags { */ val nimbusExperiments = Config.channel.isNightlyOrDebug + /** + * Enables the Addresses autofill feature. + */ + val addressesFeature = Config.channel.isNightlyOrDebug + + /** + * Enables the Credit Cards autofill feature. + */ + val creditCardsFeature = Config.channel.isNightlyOrDebug + /** * Enables WebAuthn support. */ diff --git a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt index a61dd26bc..4b965904b 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt @@ -22,6 +22,18 @@ class SecretSettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.secret_settings_preferences, rootKey) + requirePreference(R.string.pref_key_show_address_feature).apply { + isVisible = FeatureFlags.addressesFeature + isChecked = context.settings().addressFeature + onPreferenceChangeListener = SharedPreferenceUpdater() + } + + requirePreference(R.string.pref_key_show_credit_cards_feature).apply { + isVisible = FeatureFlags.creditCardsFeature + isChecked = context.settings().creditCardsFeature + onPreferenceChangeListener = SharedPreferenceUpdater() + } + requirePreference(R.string.pref_key_new_tabs_tray).apply { isVisible = FeatureFlags.tabsTrayRewrite isChecked = context.settings().tabsTrayRewrite 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 ca1893d7e..fb0a0ffe4 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -976,4 +976,16 @@ class Settings(private val appContext: Context) : PreferencesHolder { appContext.getPreferenceKey(R.string.pref_key_swipe_toolbar_switch_tabs), default = true ) + + var creditCardsFeature by featureFlagPreference( + appContext.getPreferenceKey(R.string.pref_key_show_credit_cards_feature), + default = false, + featureFlag = FeatureFlags.creditCardsFeature + ) + + var addressFeature by featureFlagPreference( + appContext.getPreferenceKey(R.string.pref_key_show_address_feature), + default = false, + featureFlag = FeatureFlags.addressesFeature + ) } diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 885c37b06..32fd7cbf1 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -241,11 +241,15 @@ pref_key_camera_permissions_needed pref_key_return_to_browser - + pref_key_secret_debug_info pref_key_leanplum_user_id pref_key_leanplum_device_id pref_key_search_region_home pref_key_search_region_current + + + pref_key_show_credit_cards_feature + pref_key_show_address_feature diff --git a/app/src/main/res/values/static_strings.xml b/app/src/main/res/values/static_strings.xml index 272359bf5..cce937c5c 100644 --- a/app/src/main/res/values/static_strings.xml +++ b/app/src/main/res/values/static_strings.xml @@ -30,15 +30,19 @@ AS + Secret Settings Secret Debug Info + + Enable Address Autofill + + Enable Credit Card Autofill Use new Tabs Tray A refactored tabs tray that will include Synced Tabs. - Show Synced Tabs in the tabs tray diff --git a/app/src/main/res/xml/secret_settings_preferences.xml b/app/src/main/res/xml/secret_settings_preferences.xml index 9b61c1e2d..851a27964 100644 --- a/app/src/main/res/xml/secret_settings_preferences.xml +++ b/app/src/main/res/xml/secret_settings_preferences.xml @@ -4,6 +4,16 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + + Date: Wed, 24 Feb 2021 12:18:12 -0800 Subject: [PATCH 019/149] For #18157: convert clock_ticks_per_second to quantity type. While we could easily move this into the metrics ping, it's better to leave it in the other ping because it's less work and because (I think) we'll be better able to match `framework_secondary` values to the clock ticks if we combine them in the same ping. --- app/metrics.yaml | 31 +++++++++++-------- .../perf/StartupFrameworkStartMeasurement.kt | 2 +- .../StartupFrameworkStartMeasurementTest.kt | 12 +++---- docs/metrics.md | 6 ++-- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 53e09d98e..8e05f3c86 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -3885,12 +3885,13 @@ startup.timeline: time_unit: millisecond description: | The duration the Android framework takes to start before letting us run - code in `*Application.init` when this device has `clock_ticks_per_second` - equal to 100: if it's not equal to 100, then this value is captured in - `framework_secondary`. We split this into two metrics to make it easier - to analyze in GLAM. We split on 100 because when we did our initial brief - analysis - https://sql.telemetry.mozilla.org/queries/75591 - the results - for clocks ticks were overwhelmingly 100. + code in `*Application.init` when this device has + `clock_ticks_per_second_v2` equal to 100: if it's not equal to 100, then + this value is captured in `framework_secondary`. We split this into two + metrics to make it easier to analyze in GLAM. We split on 100 because + when we did our initial brief analysis - + https://sql.telemetry.mozilla.org/queries/75591 - the results for clocks + ticks were overwhelmingly 100. The duration is calculated from `appInitTimestamp - processStartTimestamp`. `processStartTimestamp` is derived from the clock @@ -3898,8 +3899,8 @@ startup.timeline: Therefore, we convert and round our timestamps to clock ticks before computing the difference and convert back to nanoseconds to report. - For debugging purposes, `clock_ticks_per_second`, which may vary between - devices, is also reported as a metric + For debugging purposes, `clock_ticks_per_second_v2`, which may vary + between devices, is also reported as a metric bugs: - https://github.com/mozilla-mobile/fenix/issues/8803 - https://github.com/mozilla-mobile/fenix/issues/17972 @@ -3920,8 +3921,9 @@ startup.timeline: time_unit: millisecond description: | The duration the Android framework takes to start before letting us run - code in `*Application.init` when this device has `clock_ticks_per_second` - not equal to 100. For more details on this metric, see `framework_primary` + code in `*Application.init` when this device has + `clock_ticks_per_second_v2` not equal to 100. For more details on this + metric, see `framework_primary` bugs: - https://github.com/mozilla-mobile/fenix/issues/17972 data_reviews: @@ -3970,19 +3972,22 @@ startup.timeline: - perf-android-fe@mozilla.com - mcomella@mozilla.com expires: "2021-08-01" - clock_ticks_per_second: + clock_ticks_per_second_v2: send_in_pings: - startup-timeline - type: counter + type: quantity + unit: clock ticks per second description: | The number of clock tick time units that occur in one second on this particular device. This value is expected to be used in conjunction with - the `framework_start` metric. + the `framework_primary/secondary` metrics. bugs: - https://github.com/mozilla-mobile/fenix/issues/8803 + - https://github.com/mozilla-mobile/fenix/issues/18157 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626 - https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068 + - https://github.com/mozilla-mobile/fenix/pull/18158#issue-579593943 data_sensitivity: - technical notification_emails: diff --git a/app/src/main/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurement.kt b/app/src/main/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurement.kt index 47953d9b7..a63f0bb61 100644 --- a/app/src/main/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurement.kt +++ b/app/src/main/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurement.kt @@ -57,7 +57,7 @@ internal class StartupFrameworkStartMeasurement( val clockTicksPerSecond = stat.clockTicksPerSecond.also { // framework* is derived from the number of clock ticks per second. To ensure this // value does not throw off our result, we capture it too. - telemetry.clockTicksPerSecond.add(it.toInt()) + telemetry.clockTicksPerSecondV2.set(it) } // In our brief analysis, clock ticks per second was overwhelmingly equal to 100. To make diff --git a/app/src/test/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurementTest.kt b/app/src/test/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurementTest.kt index fa465b2fb..76c32c3ad 100644 --- a/app/src/test/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurementTest.kt +++ b/app/src/test/java/org/mozilla/fenix/perf/StartupFrameworkStartMeasurementTest.kt @@ -11,7 +11,7 @@ import io.mockk.impl.annotations.MockK import io.mockk.spyk import io.mockk.verify import mozilla.components.service.glean.private.BooleanMetricType -import mozilla.components.service.glean.private.CounterMetricType +import mozilla.components.service.glean.private.QuantityMetricType import mozilla.components.service.glean.private.TimespanMetricType import org.junit.Before import org.junit.Test @@ -31,7 +31,7 @@ class StartupFrameworkStartMeasurementTest { @MockK(relaxed = true) private lateinit var frameworkPrimary: TimespanMetricType @MockK(relaxed = true) private lateinit var frameworkSecondary: TimespanMetricType @MockK(relaxed = true) private lateinit var frameworkStartError: BooleanMetricType - @MockK(relaxed = true) private lateinit var clockTicksPerSecond: CounterMetricType + @MockK(relaxed = true) private lateinit var clockTicksPerSecondV2: QuantityMetricType private var clockTicksPerSecondValue = -1L @@ -57,7 +57,7 @@ class StartupFrameworkStartMeasurementTest { every { telemetry.frameworkPrimary } returns frameworkPrimary every { telemetry.frameworkSecondary } returns frameworkSecondary every { telemetry.frameworkStartError } returns frameworkStartError - every { telemetry.clockTicksPerSecond } returns clockTicksPerSecond + every { telemetry.clockTicksPerSecondV2 } returns clockTicksPerSecondV2 metrics = StartupFrameworkStartMeasurement(stat, telemetry, getElapsedRealtimeNanos) } @@ -131,7 +131,7 @@ class StartupFrameworkStartMeasurementTest { val (setMetric, unsetMetric) = getSetAndUnsetMetric(isPrimary) verify(exactly = 1) { setMetric.setRawNanos(any()) } verify { unsetMetric wasNot Called } - verify(exactly = 1) { clockTicksPerSecond.add(any()) } + verify(exactly = 1) { clockTicksPerSecondV2.set(any()) } verify { frameworkStartError wasNot Called } } @@ -150,7 +150,7 @@ class StartupFrameworkStartMeasurementTest { verify { unsetMetric wasNot Called } val expectedClockTicksPerSecond = getExpectedClockTicksPerSecond(isPrimary) - verify { clockTicksPerSecond.add(expectedClockTicksPerSecond.toInt()) } + verify { clockTicksPerSecondV2.set(expectedClockTicksPerSecond) } verify { frameworkStartError wasNot Called } } @@ -158,7 +158,7 @@ class StartupFrameworkStartMeasurementTest { verify { frameworkStartError.set(true) } verify { frameworkPrimary wasNot Called } verify { frameworkSecondary wasNot Called } - verify { clockTicksPerSecond wasNot Called } + verify { clockTicksPerSecondV2 wasNot Called } } private fun getSetAndUnsetMetric(isPrimary: Boolean): Pair { diff --git a/docs/metrics.md b/docs/metrics.md index 5abd72251..24bdcb0df 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -370,9 +370,9 @@ The following metrics are added to the ping: | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| startup.timeline.clock_ticks_per_second |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |The number of clock tick time units that occur in one second on this particular device. This value is expected to be used in conjunction with the `framework_start` metric. |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | -| startup.timeline.framework_primary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second` equal to 100: if it's not equal to 100, then this value is captured in `framework_secondary`. We split this into two metrics to make it easier to analyze in GLAM. We split on 100 because when we did our initial brief analysis - https://sql.telemetry.mozilla.org/queries/75591 - the results for clocks ticks were overwhelmingly 100. The duration is calculated from `appInitTimestamp - processStartTimestamp`. `processStartTimestamp` is derived from the clock tick time unit, which is expected to be less granular than nanoseconds. Therefore, we convert and round our timestamps to clock ticks before computing the difference and convert back to nanoseconds to report. For debugging purposes, `clock_ticks_per_second`, which may vary between devices, is also reported as a metric |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068), [3](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | -| startup.timeline.framework_secondary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second` not equal to 100. For more details on this metric, see `framework_primary` |[1](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | +| startup.timeline.clock_ticks_per_second_v2 |[quantity](https://mozilla.github.io/glean/book/user/metrics/quantity.html) |The number of clock tick time units that occur in one second on this particular device. This value is expected to be used in conjunction with the `framework_primary/secondary` metrics. |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068), [3](https://github.com/mozilla-mobile/fenix/pull/18158#issue-579593943)|
  • unit: clock ticks per second
|2021-08-01 |1 | +| startup.timeline.framework_primary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second_v2` equal to 100: if it's not equal to 100, then this value is captured in `framework_secondary`. We split this into two metrics to make it easier to analyze in GLAM. We split on 100 because when we did our initial brief analysis - https://sql.telemetry.mozilla.org/queries/75591 - the results for clocks ticks were overwhelmingly 100. The duration is calculated from `appInitTimestamp - processStartTimestamp`. `processStartTimestamp` is derived from the clock tick time unit, which is expected to be less granular than nanoseconds. Therefore, we convert and round our timestamps to clock ticks before computing the difference and convert back to nanoseconds to report. For debugging purposes, `clock_ticks_per_second_v2`, which may vary between devices, is also reported as a metric |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068), [3](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | +| startup.timeline.framework_secondary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second_v2` not equal to 100. For more details on this metric, see `framework_primary` |[1](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | | startup.timeline.framework_start_error |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |An error when attempting to record `framework_primary/secondary` - the application init timestamp returned a negative value - which is likely indicative of a bug in the implementation. |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | | startup.timeline.framework_start_read_error |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |An error when attempting to read stats from /proc pseudo-filesystem - privacy managers can block access to reading these files - the application will catch a file reading exception. |[1](https://github.com/mozilla-mobile/fenix/pull/10481), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | From 606103765e57dc521ab339939984d6517754cf94 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sat, 27 Feb 2021 00:07:56 +0000 Subject: [PATCH 020/149] Import l10n. --- app/src/main/res/values-be/strings.xml | 5 +++++ app/src/main/res/values-cs/strings.xml | 2 ++ app/src/main/res/values-es-rCL/strings.xml | 5 +++++ app/src/main/res/values-fr/strings.xml | 5 +++++ app/src/main/res/values-gn/strings.xml | 6 ++++++ app/src/main/res/values-hr/strings.xml | 4 ++-- app/src/main/res/values-ka/strings.xml | 5 +++++ app/src/main/res/values-uk/strings.xml | 4 ++-- app/src/main/res/values-vi/strings.xml | 5 +++++ app/src/main/res/values-zh-rCN/strings.xml | 2 +- 10 files changed, 38 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 10f6219ff..df41cc5be 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -216,6 +216,11 @@ Даведацца больш + + Пошук у %s + + Пошук наўпрост з адраснага радка + Адкрыць новую картку Firefox diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index fc05452c1..6b80e461f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -1125,6 +1125,8 @@ Uvolní využitý prostor na zařízení Oprávnění serverů + + Stažené soubory Smazat soukromá data diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 8479fbabf..4eb72f3c6 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -215,6 +215,11 @@ Aprender más + + Buscar %s + + Buscar directamente desde la barra de direcciones + Abrir una nueva pestaña de Firefox diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 342192fed..165b91236 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -220,6 +220,11 @@ En savoir plus + + Recherche %s + + Recherchez directement depuis la barre d’adresse + Ouvrir un nouvel onglet dans Firefox diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml index c2d074cb6..f018f67b1 100644 --- a/app/src/main/res/values-gn/strings.xml +++ b/app/src/main/res/values-gn/strings.xml @@ -220,6 +220,12 @@ Kuaave + + Eheka %s + + + Eheka kundaharape renda guive + Embojuruja Firefox rendayke pyahu diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 2ee173ddd..efec04f2a 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -498,9 +498,9 @@ - Svijetli + Svijetla - Tamni + Tamna Postavljeno u postavkama za štednju baterije diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index a8f0fd919..f71f9b1ce 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -213,6 +213,11 @@ ვრცლად + + საძიებოდ %s + + მოიძიეთ პირდაპირ მისამართების ველიდან + ახალი Firefox-ჩანართის გახსნა diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index b905dcc46..9dd9736c7 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -69,7 +69,7 @@ - Додайте ярлик для відкриття приватних вкладок з головного екрану. + Додайте ярлик для відкриття приватних вкладок з головного екрана. Додати ярлик @@ -527,7 +527,7 @@ Сеанси - Знімки екрану + Знімки екрана Завантаження diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index d56306626..00825b2dc 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -217,6 +217,11 @@ Tìm hiểu thêm + + Tìm kiếm %s + + Tìm kiếm trực tiếp từ thanh địa chỉ + Mở một thẻ Firefox mới diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index a5cd3cf80..97c3776fe 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -227,7 +227,7 @@ 详细了解 - 搜索 %s + %s 上搜索 直接从地址栏搜索 From ccbca2cf78950182278308baabeba5ee0028eb59 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Fri, 26 Feb 2021 21:17:11 -0500 Subject: [PATCH 021/149] For #18202 - Refactor BiometricPromptFeature out of logins into settings --- .../{logins => }/biometric/BiometricPromptFeature.kt | 6 +++--- .../settings/{logins => }/biometric/ext/BiometricManager.kt | 2 +- .../settings/logins/fragment/SavedLoginsAuthFragment.kt | 2 +- .../{logins => }/biometric/BiometricPromptFeatureTest.kt | 6 +++--- .../{logins => }/biometric/ext/BiometricManagerKtTest.kt | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) rename app/src/main/java/org/mozilla/fenix/settings/{logins => }/biometric/BiometricPromptFeature.kt (94%) rename app/src/main/java/org/mozilla/fenix/settings/{logins => }/biometric/ext/BiometricManager.kt (94%) rename app/src/test/java/org/mozilla/fenix/settings/{logins => }/biometric/BiometricPromptFeatureTest.kt (95%) rename app/src/test/java/org/mozilla/fenix/settings/{logins => }/biometric/ext/BiometricManagerKtTest.kt (96%) diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/biometric/BiometricPromptFeature.kt b/app/src/main/java/org/mozilla/fenix/settings/biometric/BiometricPromptFeature.kt similarity index 94% rename from app/src/main/java/org/mozilla/fenix/settings/logins/biometric/BiometricPromptFeature.kt rename to app/src/main/java/org/mozilla/fenix/settings/biometric/BiometricPromptFeature.kt index 05ef9e3ae..5380fb73e 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/biometric/BiometricPromptFeature.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/biometric/BiometricPromptFeature.kt @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.mozilla.fenix.settings.logins.biometric +package org.mozilla.fenix.settings.biometric import android.content.Context import android.os.Build.VERSION.SDK_INT @@ -16,8 +16,8 @@ import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import mozilla.components.support.base.feature.LifecycleAwareFeature import mozilla.components.support.base.log.logger.Logger -import org.mozilla.fenix.settings.logins.biometric.ext.isEnrolled -import org.mozilla.fenix.settings.logins.biometric.ext.isHardwareAvailable +import org.mozilla.fenix.settings.biometric.ext.isEnrolled +import org.mozilla.fenix.settings.biometric.ext.isHardwareAvailable /** * A [LifecycleAwareFeature] for the Android Biometric API to prompt for user authentication. diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/biometric/ext/BiometricManager.kt b/app/src/main/java/org/mozilla/fenix/settings/biometric/ext/BiometricManager.kt similarity index 94% rename from app/src/main/java/org/mozilla/fenix/settings/logins/biometric/ext/BiometricManager.kt rename to app/src/main/java/org/mozilla/fenix/settings/biometric/ext/BiometricManager.kt index 323925d7d..7b3788d97 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/biometric/ext/BiometricManager.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/biometric/ext/BiometricManager.kt @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.mozilla.fenix.settings.logins.biometric.ext +package org.mozilla.fenix.settings.biometric.ext import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_WEAK diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt index 570d92392..5602571a3 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt @@ -32,7 +32,7 @@ import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.ext.runIfFragmentIsAttached import org.mozilla.fenix.settings.SharedPreferenceUpdater -import org.mozilla.fenix.settings.logins.biometric.BiometricPromptFeature +import org.mozilla.fenix.settings.biometric.BiometricPromptFeature import org.mozilla.fenix.settings.logins.SyncLoginsPreferenceView import org.mozilla.fenix.settings.requirePreference diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/biometric/BiometricPromptFeatureTest.kt b/app/src/test/java/org/mozilla/fenix/settings/biometric/BiometricPromptFeatureTest.kt similarity index 95% rename from app/src/test/java/org/mozilla/fenix/settings/logins/biometric/BiometricPromptFeatureTest.kt rename to app/src/test/java/org/mozilla/fenix/settings/biometric/BiometricPromptFeatureTest.kt index c91a99441..66a081aac 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/biometric/BiometricPromptFeatureTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/biometric/BiometricPromptFeatureTest.kt @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.mozilla.fenix.settings.logins.biometric +package org.mozilla.fenix.settings.biometric import android.os.Build.VERSION_CODES.M import android.os.Build.VERSION_CODES.N @@ -30,8 +30,8 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.helpers.FenixRobolectricTestRunner -import org.mozilla.fenix.settings.logins.biometric.ext.isEnrolled -import org.mozilla.fenix.settings.logins.biometric.ext.isHardwareAvailable +import org.mozilla.fenix.settings.biometric.ext.isEnrolled +import org.mozilla.fenix.settings.biometric.ext.isHardwareAvailable import org.robolectric.annotation.Config @RunWith(FenixRobolectricTestRunner::class) diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/biometric/ext/BiometricManagerKtTest.kt b/app/src/test/java/org/mozilla/fenix/settings/biometric/ext/BiometricManagerKtTest.kt similarity index 96% rename from app/src/test/java/org/mozilla/fenix/settings/logins/biometric/ext/BiometricManagerKtTest.kt rename to app/src/test/java/org/mozilla/fenix/settings/biometric/ext/BiometricManagerKtTest.kt index 26b77a692..dd66dbc71 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/biometric/ext/BiometricManagerKtTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/biometric/ext/BiometricManagerKtTest.kt @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.mozilla.fenix.settings.logins.biometric.ext +package org.mozilla.fenix.settings.biometric.ext import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE From e7f280c553f16ea03eda470f43b93482e606a9d4 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 27 Feb 2021 15:35:14 +0000 Subject: [PATCH 022/149] Update Android Components version to 74.0.20210227143138. --- 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 c842dc30a..589dc17c8 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 = "74.0.20210226143133" + const val VERSION = "74.0.20210227143138" } From 2b07a164744e2016f4a872f4f53883d61068b205 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sun, 28 Feb 2021 00:03:54 +0000 Subject: [PATCH 023/149] Import l10n. --- app/src/main/res/values-ka/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 5 +++++ app/src/main/res/values-pl/strings.xml | 5 +++++ app/src/main/res/values-sk/strings.xml | 17 ++++++++++++++--- app/src/main/res/values-su/strings.xml | 17 ++++++++++++++--- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index f71f9b1ce..fd46c0b37 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -972,7 +972,7 @@ ბოლოს გამოყენებული - Sync შესვლა + დასინქრონებაში შესვლა ყველა მოწყობილობაზე გაგზავნა diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index cba115244..9b5172f10 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -216,6 +216,11 @@ Sužinoti daugiau + + Ieškoti „%s“ + + Ieškokite tiesiai iš adreso lauko + Atverti naują „Firefox“ kortelę diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7bb5a4f72..1818b0a44 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -220,6 +220,11 @@ Więcej informacji + + Szukaj w %s + + Szukaj prosto z paska adresu + Otwórz nową kartę w Firefoksie diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 81e5a7464..9c6288eb9 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -220,6 +220,11 @@ Ďalšie informácie + + Hľadať cez %s + + Vyhľadať na webe priamo z panela s adresou + Otvoriť novú kartu vo Firefoxe @@ -894,16 +899,22 @@ Vypnutá - + Povoliť zvuk a video + + Povoliť zvuk a video Blokovať automatické prehrávanie zvuku a videí pri pripojení cez mobilné dáta Zvuk a video sa bude automaticky prehrávať len na Wi-Fi - + Blokovať len zvuk - + + Blokovať len zvuk + Blokovať zvuk a video + + Blokovať zvuk a video Zapnuté diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index 18bae542f..4dc5c7319 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -216,6 +216,11 @@ Lenyepan + + Paluruh %s + + Paluruh langsung tina bilah alamat + Buka tab Firefox anyar @@ -893,16 +898,22 @@ Hurung Pareum - + Ngidinan sora jeung pidéo + + Idinan audio jeung pidéo Blokir sora jeung pidéo dina data sélulér wungkul Sora jeung pidéo bakal dimaénkeun dina Wi-Fi - + Blokir sora hungkul - + + Peungpeuk audio hungkul + Blokir sora jueng pidéo + + Peungpeuk audio jeung pidéo Hurung From 3d9fe3e1caccd51dc6343d8e53ffe446871b2514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Delphine=20Leb=C3=A9del?= Date: Sat, 27 Feb 2021 17:28:42 -0800 Subject: [PATCH 024/149] Added kmr and tl locales for v87 (#18133) --- l10n-release.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/l10n-release.toml b/l10n-release.toml index 8bc678f7f..02dac9510 100644 --- a/l10n-release.toml +++ b/l10n-release.toml @@ -52,6 +52,7 @@ locales = [ "ka", "kab", "kk", + "kmr", "kn", "ko", "lij", @@ -82,6 +83,7 @@ locales = [ "te", "tg", "th", + "tl", "tr", "trs", "uk", @@ -91,4 +93,3 @@ locales = [ "zh-CN", "zh-TW", ] - From d8dd809ed4d9c16a89b84cbcd5ba169bb026e279 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Mon, 22 Feb 2021 18:46:39 +0100 Subject: [PATCH 025/149] Fix metric types of engine telemetry. --- app/metrics.yaml | 8 ++-- .../org/mozilla/fenix/TelemetryMiddleware.kt | 18 +++---- .../mozilla/fenix/TelemetryMiddlewareTest.kt | 47 ++++++++++--------- docs/metrics.md | 6 +-- 4 files changed, 40 insertions(+), 39 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 8e05f3c86..8539e4519 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4487,8 +4487,8 @@ contextual_menu: - fenix-core@mozilla.com expires: "2021-06-01" -engine: - tab_kills: +engine_tab: + kills: type: labeled_counter labels: - foreground @@ -4507,7 +4507,7 @@ engine: - skaspari@mozilla.com expires: "2021-12-31" kill_foreground_age: - type: timespan + type: timing_distribution time_unit: millisecond description: | Measures the age of the engine session of a foreground (selected) tab @@ -4523,7 +4523,7 @@ engine: - skaspari@mozilla.com expires: "2021-12-31" kill_background_age: - type: timespan + type: timing_distribution time_unit: millisecond description: | Measures the age of the engine session of a background tab at the diff --git a/app/src/main/java/org/mozilla/fenix/TelemetryMiddleware.kt b/app/src/main/java/org/mozilla/fenix/TelemetryMiddleware.kt index 53a55bdfd..d4dad123e 100644 --- a/app/src/main/java/org/mozilla/fenix/TelemetryMiddleware.kt +++ b/app/src/main/java/org/mozilla/fenix/TelemetryMiddleware.kt @@ -24,7 +24,7 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry import org.mozilla.fenix.utils.Settings -import org.mozilla.fenix.GleanMetrics.Engine as EngineMetrics +import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics /** * [Middleware] to record telemetry in response to [BrowserAction]s. @@ -138,24 +138,24 @@ class TelemetryMiddleware( } val isSelected = tab.id == state.selectedTabId - val ageNanos = tab.engineState.ageNanos() + val age = tab.engineState.age() // Increment the counter of killed foreground/background tabs val tabKillLabel = if (isSelected) { "foreground" } else { "background" } - EngineMetrics.tabKills[tabKillLabel].add() + EngineMetrics.kills[tabKillLabel].add() // Record the age of the engine session of the killed foreground/background tab. - if (isSelected && ageNanos != null) { - EngineMetrics.killForegroundAge.setRawNanos(ageNanos) - } else if (ageNanos != null) { - EngineMetrics.killBackgroundAge.setRawNanos(ageNanos) + if (isSelected && age != null) { + EngineMetrics.killForegroundAge.accumulateSamples(listOf(age).toLongArray()) + } else if (age != null) { + EngineMetrics.killBackgroundAge.accumulateSamples(listOf(age).toLongArray()) } } } @Suppress("MagicNumber") -private fun EngineState.ageNanos(): Long? { +private fun EngineState.age(): Long? { val timestamp = (timestamp ?: return null) val now = Clock.elapsedRealtime() - return (now - timestamp) * 1_000_000 + return (now - timestamp) } diff --git a/app/src/test/java/org/mozilla/fenix/TelemetryMiddlewareTest.kt b/app/src/test/java/org/mozilla/fenix/TelemetryMiddlewareTest.kt index 3f086f68f..55af22ff9 100644 --- a/app/src/test/java/org/mozilla/fenix/TelemetryMiddlewareTest.kt +++ b/app/src/test/java/org/mozilla/fenix/TelemetryMiddlewareTest.kt @@ -25,10 +25,11 @@ import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.After -import org.junit.Assert import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule import org.junit.Test @@ -38,7 +39,7 @@ import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry import org.mozilla.fenix.utils.Settings -import org.mozilla.fenix.GleanMetrics.Engine as EngineMetrics +import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics @RunWith(FenixRobolectricTestRunner::class) @ExperimentalCoroutinesApi @@ -284,14 +285,14 @@ class TelemetryMiddlewareTest { selectedTabId = "foreground" )).joinBlocking() - Assert.assertFalse(EngineMetrics.tabKills["foreground"].testHasValue()) - Assert.assertFalse(EngineMetrics.tabKills["background"].testHasValue()) + assertFalse(EngineMetrics.kills["foreground"].testHasValue()) + assertFalse(EngineMetrics.kills["background"].testHasValue()) store.dispatch( EngineAction.KillEngineSessionAction("foreground") ).joinBlocking() - Assert.assertTrue(EngineMetrics.tabKills["foreground"].testHasValue()) + assertTrue(EngineMetrics.kills["foreground"].testHasValue()) } @Test @@ -305,24 +306,24 @@ class TelemetryMiddlewareTest { selectedTabId = "foreground" )).joinBlocking() - Assert.assertFalse(EngineMetrics.tabKills["foreground"].testHasValue()) - Assert.assertFalse(EngineMetrics.tabKills["background"].testHasValue()) + assertFalse(EngineMetrics.kills["foreground"].testHasValue()) + assertFalse(EngineMetrics.kills["background"].testHasValue()) store.dispatch( EngineAction.KillEngineSessionAction("background_pocket") ).joinBlocking() - Assert.assertFalse(EngineMetrics.tabKills["foreground"].testHasValue()) - Assert.assertTrue(EngineMetrics.tabKills["background"].testHasValue()) - assertEquals(1, EngineMetrics.tabKills["background"].testGetValue()) + assertFalse(EngineMetrics.kills["foreground"].testHasValue()) + assertTrue(EngineMetrics.kills["background"].testHasValue()) + assertEquals(1, EngineMetrics.kills["background"].testGetValue()) store.dispatch( EngineAction.KillEngineSessionAction("background_verge") ).joinBlocking() - Assert.assertFalse(EngineMetrics.tabKills["foreground"].testHasValue()) - Assert.assertTrue(EngineMetrics.tabKills["background"].testHasValue()) - assertEquals(2, EngineMetrics.tabKills["background"].testGetValue()) + assertFalse(EngineMetrics.kills["foreground"].testHasValue()) + assertTrue(EngineMetrics.kills["background"].testHasValue()) + assertEquals(2, EngineMetrics.kills["background"].testGetValue()) } @Test @@ -343,8 +344,8 @@ class TelemetryMiddlewareTest { engineSession = mock() )).joinBlocking() - Assert.assertFalse(EngineMetrics.killForegroundAge.testHasValue()) - Assert.assertFalse(EngineMetrics.killBackgroundAge.testHasValue()) + assertFalse(EngineMetrics.killForegroundAge.testHasValue()) + assertFalse(EngineMetrics.killBackgroundAge.testHasValue()) clock.elapsedTime = 500 @@ -352,9 +353,9 @@ class TelemetryMiddlewareTest { EngineAction.KillEngineSessionAction("foreground") ).joinBlocking() - Assert.assertTrue(EngineMetrics.killForegroundAge.testHasValue()) - Assert.assertFalse(EngineMetrics.killBackgroundAge.testHasValue()) - assertEquals(400, EngineMetrics.killForegroundAge.testGetValue()) + assertTrue(EngineMetrics.killForegroundAge.testHasValue()) + assertFalse(EngineMetrics.killBackgroundAge.testHasValue()) + assertEquals(400_000_000, EngineMetrics.killForegroundAge.testGetValue().sum) } @Test @@ -377,16 +378,16 @@ class TelemetryMiddlewareTest { clock.elapsedTime = 700 - Assert.assertFalse(EngineMetrics.killForegroundAge.testHasValue()) - Assert.assertFalse(EngineMetrics.killBackgroundAge.testHasValue()) + assertFalse(EngineMetrics.killForegroundAge.testHasValue()) + assertFalse(EngineMetrics.killBackgroundAge.testHasValue()) store.dispatch( EngineAction.KillEngineSessionAction("background_pocket") ).joinBlocking() - Assert.assertTrue(EngineMetrics.killBackgroundAge.testHasValue()) - Assert.assertFalse(EngineMetrics.killForegroundAge.testHasValue()) - assertEquals(600, EngineMetrics.killBackgroundAge.testGetValue()) + assertTrue(EngineMetrics.killBackgroundAge.testHasValue()) + assertFalse(EngineMetrics.killForegroundAge.testHasValue()) + assertEquals(600_000_000, EngineMetrics.killBackgroundAge.testGetValue().sum) } } diff --git a/docs/metrics.md b/docs/metrics.md index 24bdcb0df..565873a1a 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -280,9 +280,9 @@ The following metrics are added to the ping: | browser.search.ad_clicks |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records clicks of adverts on SERP pages. The key format is ‘’. |[1](https://github.com/mozilla-mobile/fenix/pull/10112), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | browser.search.in_content |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records the type of interaction a user has on SERP pages. |[1](https://github.com/mozilla-mobile/fenix/pull/10167), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | browser.search.with_ads |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records counts of SERP pages with adverts displayed. The key format is ‘’. |[1](https://github.com/mozilla-mobile/fenix/pull/10112), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| engine.kill_background_age |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |Measures the age of the engine session of a background tab at the time its content process got killed. |[1](https://github.com/mozilla-mobile/fenix/pull/17864)||2021-12-31 |1 | -| engine.kill_foreground_age |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |Measures the age of the engine session of a foreground (selected) tab at the time its content process got killed. |[1](TBD)||2021-12-31 |1 | -| engine.tab_kills |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |How often was the content process of a foreground (selected) or background tab killed. |[1](https://github.com/mozilla-mobile/fenix/pull/17864)|
  • foreground
  • background
|2021-12-31 |1 | +| engine_tab.kill_background_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a background tab at the time its content process got killed. |[1](https://github.com/mozilla-mobile/fenix/pull/17864)||2021-12-31 |1 | +| engine_tab.kill_foreground_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a foreground (selected) tab at the time its content process got killed. |[1](TBD)||2021-12-31 |1 | +| engine_tab.kills |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |How often was the content process of a foreground (selected) or background tab killed. |[1](https://github.com/mozilla-mobile/fenix/pull/17864)|
  • foreground
  • background
|2021-12-31 |1 | | events.normal_and_private_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This includes private browsing. This does not include background page requests and URIs from embedded pages but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[1](https://github.com/mozilla-mobile/fenix/pull/17935)||2022-08-01 |2 | | events.total_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This does not include background page requests and URIs from embedded pages or private browsing but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[1](https://github.com/mozilla-mobile/fenix/pull/1785), [2](https://github.com/mozilla-mobile/fenix/pull/8314), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | metrics.adjust_ad_group |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust ad group ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[1](https://github.com/mozilla-mobile/fenix/pull/9253), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From b713561110b27cc579dcbd521ed5b7cb3ef59167 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Mon, 1 Mar 2021 15:35:33 +0000 Subject: [PATCH 026/149] Update Android Components version to 74.0.20210301143120. --- 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 589dc17c8..56da1c801 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 = "74.0.20210227143138" + const val VERSION = "74.0.20210301143120" } From 51c2830deef806067c70ac345185fd44f6d160ac Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Tue, 2 Mar 2021 00:04:27 +0000 Subject: [PATCH 027/149] Import l10n. --- app/src/main/res/values-el/strings.xml | 5 +++++ app/src/main/res/values-en-rGB/strings.xml | 5 +++++ app/src/main/res/values-es-rES/strings.xml | 5 +++++ app/src/main/res/values-ru/strings.xml | 2 +- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 11643d358..ae6fb3763 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -223,6 +223,11 @@ Μάθετε περισσότερα + + Αναζήτηση %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 9ea65be1e..1674779ea 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -215,6 +215,11 @@ Learn more + + Search %s + + Search directly from the address bar + Open a new Firefox tab diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 227f8c447..17f9f0c97 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -221,6 +221,11 @@ Saber más + + Buscar %s + + Buscar directamente desde la barra de direcciones + Abrir una nueva pestaña de Firefox diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 648ba5d36..f75fd6a12 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1233,7 +1233,7 @@ Автоматическая приватность - Настройки конфиденциальности и безопасности блокируют трекеры, вредоносные программы, и компании, которые вас отслеживают. + Настройки приватности и безопасности блокируют трекеры, вредоносные программы, и компании, которые вас отслеживают. Стандартная (по умолчанию) From f83ed1308904621b872493ed37bc0f32c30b06f1 Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 1 Mar 2021 18:25:26 +0200 Subject: [PATCH 028/149] For #18227: Also update icon on search engine edit. --- .../fenix/settings/search/EditCustomSearchEngineFragment.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt index bc70833fe..b4fd0687b 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/search/EditCustomSearchEngineFragment.kt @@ -22,6 +22,7 @@ import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import mozilla.components.browser.icons.IconRequest import mozilla.components.browser.state.search.SearchEngine import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity @@ -118,7 +119,8 @@ class EditCustomSearchEngineFragment : Fragment(R.layout.fragment_add_search_eng SearchStringValidator.Result.Success -> { val update = searchEngine.copy( name = name, - resultUrls = listOf(searchString.toSearchUrl()) + resultUrls = listOf(searchString.toSearchUrl()), + icon = requireComponents.core.icons.loadIcon(IconRequest(searchString)).await().bitmap ) requireComponents.useCases.searchUseCases.addSearchEngine(update) From 3d817204c266110ca9179ec84a263b2417a76550 Mon Sep 17 00:00:00 2001 From: AndiAJ Date: Fri, 26 Feb 2021 12:22:07 +0200 Subject: [PATCH 029/149] For #18053 Change and fix Intermittent UI test verifyReaderViewToggle --- .../org/mozilla/fenix/ui/ReaderViewTest.kt | 31 +++++++++++----- .../fenix/ui/robots/NavigationToolbarRobot.kt | 37 +++++++++++++++++-- 2 files changed, 54 insertions(+), 14 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt index 3d37cf44e..e4b9ca94d 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/ReaderViewTest.kt @@ -5,22 +5,22 @@ package org.mozilla.fenix.ui import android.view.View +import androidx.test.espresso.IdlingRegistry 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.ui.robots.navigationToolbar -import androidx.test.espresso.IdlingRegistry -import org.junit.Ignore import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.R import org.mozilla.fenix.helpers.AndroidAssetDispatcher -import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.TestAssetHelper +import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.mDevice +import org.mozilla.fenix.ui.robots.navigationToolbar /** * Tests for verifying basic functionality of content context menus @@ -125,6 +125,15 @@ class ReaderViewTest { toggleReaderView() mDevice.waitForIdle() } + browserScreen { + verifyPageContent(estimatedReadingTime) + } + navigationToolbar { + verifyCloseReaderViewDetected(true) + toggleReaderView() + mDevice.waitForIdle() + verifyReaderViewDetected(true) + } if (!FeatureFlags.toolbarMenuFeature) { browserScreen { @@ -134,12 +143,14 @@ class ReaderViewTest { }.closeBrowserMenuToBrowser { } } - navigationToolbar { - toggleReaderView() - mDevice.waitForIdle() - }.openThreeDotMenu { - verifyReaderViewAppearance(false) - }.close { } + if (!FeatureFlags.toolbarMenuFeature) { + navigationToolbar { + toggleReaderView() + mDevice.waitForIdle() + }.openThreeDotMenu { + verifyReaderViewAppearance(false) + }.close { } + } } @Test diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt index 1a0ad0075..32af056df 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt @@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.Espresso.onView import androidx.test.espresso.IdlingRegistry import androidx.test.espresso.IdlingResource -import androidx.test.espresso.ViewInteraction import androidx.test.espresso.action.ViewActions import androidx.test.espresso.action.ViewActions.pressImeActionButton import androidx.test.espresso.action.ViewActions.replaceText @@ -60,12 +59,21 @@ class NavigationToolbarRobot { fun verifyTabButtonShortcutMenuItems() = assertTabButtonShortcutMenuItems() - fun verifyReaderViewDetected(visible: Boolean = false): ViewInteraction = + fun verifyReaderViewDetected(visible: Boolean = false) = assertReaderViewDetected(visible) + fun verifyCloseReaderViewDetected(visible: Boolean = false) = + assertCloseReaderViewDetected(visible) + fun typeSearchTerm(searchTerm: String) = awesomeBar().perform(typeText(searchTerm)) - fun toggleReaderView() = readerViewToggle().click() + fun toggleReaderView() { + mDevice.findObject(UiSelector() + .resourceId("$packageName:id/mozac_browser_toolbar_page_actions")) + .waitForExists(waitingTime) + + readerViewToggle().click() + } class Transition { @@ -312,7 +320,11 @@ private fun goBackButton() = mDevice.pressBack() private fun readerViewToggle() = onView(withParent(withId(R.id.mozac_browser_toolbar_page_actions))) -private fun assertReaderViewDetected(visible: Boolean) = +private fun assertReaderViewDetected(visible: Boolean) { + mDevice.findObject(UiSelector() + .description("Reader view")) + .waitForExists(waitingTime) + onView( allOf( withParent(withId(R.id.mozac_browser_toolbar_page_actions)), @@ -322,6 +334,23 @@ private fun assertReaderViewDetected(visible: Boolean) = if (visible) matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)) else ViewAssertions.doesNotExist() ) +} + +private fun assertCloseReaderViewDetected(visible: Boolean) { + mDevice.findObject(UiSelector() + .description("Close reader view")) + .waitForExists(waitingTime) + + onView( + allOf( + withParent(withId(R.id.mozac_browser_toolbar_page_actions)), + withContentDescription("Close reader view") + ) + ).check( + if (visible) matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)) + else ViewAssertions.doesNotExist() + ) +} inline fun runWithIdleRes(ir: IdlingResource?, pendingCheck: () -> Unit) { try { From 39c9ea686a2900d674ce82f00a63f002185caa20 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Tue, 2 Mar 2021 11:28:50 -0500 Subject: [PATCH 030/149] Update metrics.md (#18259) --- docs/metrics.md | 569 ++++++++++++++++++++++++------------------------ 1 file changed, 289 insertions(+), 280 deletions(-) diff --git a/docs/metrics.md b/docs/metrics.md index 565873a1a..580bbbe35 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -1,18 +1,18 @@ # Metrics + This document enumerates the metrics collected by this project using the [Glean SDK](https://mozilla.github.io/glean/book/index.html). This project may depend on other projects which also collect metrics. This means you might have to go searching through the dependency tree to get a full picture of everything collected by this project. # Pings - - [activation](#activation) - - [events](#events) - - [first-session](#first-session) - - [metrics](#metrics) - - [startup-timeline](#startup-timeline) - +- [activation](#activation) +- [events](#events) +- [first-session](#first-session) +- [metrics](#metrics) +- [startup-timeline](#startup-timeline) ## activation @@ -31,12 +31,14 @@ an hashed version of the Google Advertising ID. - - -The following metrics are added to the ping: +All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections. + +In addition to those built-in metrics, the following metrics are added to the ping: | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| activation.activation_id |[uuid](https://mozilla.github.io/glean/book/user/metrics/uuid.html) |An alternate identifier, not correlated with the client_id, generated once and only sent with the activation ping. |[1](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |4 | -| activation.identifier |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A hashed and salted version of the Google Advertising ID from the device. This will never be sent in a ping that also contains the client_id. |[1](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |4 | +| activation.activation_id |[uuid](https://mozilla.github.io/glean/book/user/metrics/uuid.html) |An alternate identifier, not correlated with the client_id, generated once and only sent with the activation ping. |[mozilla-mobile/fenix#1707](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |4 | +| activation.identifier |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A hashed and salted version of the Google Advertising ID from the device. This will never be sent in a ping that also contains the client_id. |[mozilla-mobile/fenix#1707](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |4 | ## events @@ -44,198 +46,200 @@ This is a built-in ping that is assembled out of the box by the Glean SDK. See the Glean SDK documentation for the [`events` ping](https://mozilla.github.io/glean/book/user/pings/events.html). -The following metrics are added to the ping: +All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections. + +In addition to those built-in metrics, the following metrics are added to the ping: | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| about_page.privacy_notice_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Privacy notice" item from About page |[1](https://github.com/mozilla-mobile/fenix/pull/8047), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| about_page.support_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Support" item from About page |[1](https://github.com/mozilla-mobile/fenix/pull/8047), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.open_addon_in_toolbar_menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user interacted with an installed add-on in the toolbar menu |[1](https://github.com/mozilla-mobile/fenix/pull/8318), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • addon_id: The id of the add-on that was interacted with in the toolbar menu
|2021-04-01 |2 | -| addons.open_addons_in_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed "Add-ons" from the Settings |[1](https://github.com/mozilla-mobile/fenix/pull/8318), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[1](https://github.com/mozilla-mobile/fenix/pull/7968), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING'
|2021-04-01 |2 | -| autoplay.setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their autoplay setting to either block_cellular, block_audio, or block_all. |[1](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)|
  • autoplay_setting: The new setting for autoplay: block_cellular, block_audio, or block_all.
|2021-08-01 |2 | -| autoplay.visited_setting |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user visited the autoplay settings screen |[1](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)||2021-08-01 |2 | -| banner_open_in_app.dismissed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'dismiss' on Open in App banner. |[1](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | -| banner_open_in_app.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Open in App banner was shown. |[1](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | -| banner_open_in_app.go_to_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'go to settings' on Open in App banner. |[1](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | -| bookmarks_management.copied |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user copied a bookmark. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.edited |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user edited the title and/or URL of an existing bookmark. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.folder_add |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a new bookmark folder. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.folder_remove |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark folder. |[1](https://github.com/mozilla-mobile/fenix/pull/3724), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.moved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user moved an existing bookmark or folder to another folder. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.multi_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed multiple bookmarks at once. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.open_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new tab. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.open_in_new_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new tabs. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.open_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new private tab. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.open_in_private_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new private tabs. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark item. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user shared a bookmark. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.add_tab_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the "add tab" button in the three dot menu of collections |[1](https://github.com/mozilla-mobile/fenix/pull/4358), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.all_tabs_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped "open tabs" from collection menu |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.long_press |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user long pressed on a tab, triggering the collection creation screen |[1](https://github.com/mozilla-mobile/fenix/pull/4358), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped delete collection from collection menu |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.rename_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "rename collection" button in the three dot menu |[1](https://github.com/mozilla-mobile/fenix/pull/4539), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.renamed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user renamed a collection |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.save_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "save to collection" button on either the home or browser screen, triggering the collection creation screen to open (tab_select_opened) |[1](https://github.com/mozilla-mobile/fenix/pull/4358), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • from_screen: A string representing the screen from which the user pressed the save button. Currently one of: `browserMenu`, `homeMenu` or `home`
|2021-04-01 |2 | -| collections.saved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to a new collection |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-04-01 |1, 2 | -| collections.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped share collection |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tab_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped remove tab from collection tab list |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tab_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user restored a tab from collection tab list |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tab_select_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the select tabs screen (the first step of the collection creation flow) |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tabs_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to an existing collection |[1](https://github.com/mozilla-mobile/fenix/pull/3935), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-04-01 |1, 2 | -| context_menu.item_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped an item in the browsers context menu |[1](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [3](https://github.com/mozilla-mobile/fenix/issues/16076#issuecomment-726216734)|
  • named: The name of the item that was tapped. Available items are: ``` open_in_new_tab, open_in_private_tab, open_image_in_new_tab, save_image, share_link, copy_link, copy_image_location, share_image ```
|2021-04-01 |2 | -| contextual_hint.tracking_protection.dismiss |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was dismissed by pressing the close button |[1](https://github.com/mozilla-mobile/fenix/pull/11923), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| contextual_hint.tracking_protection.display |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was displayed. |[1](https://github.com/mozilla-mobile/fenix/pull/11923), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| contextual_hint.tracking_protection.inside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped inside of the etp contextual hint (which brings up the etp panel for this site). |[1](https://github.com/mozilla-mobile/fenix/pull/11923), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| contextual_hint.tracking_protection.outside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped outside of the etp contextual hint (which has no effect). |[1](https://github.com/mozilla-mobile/fenix/pull/11923), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| contextual_menu.copy_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'copy' option was used. |[1](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | -| contextual_menu.search_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'search' option was used. |[1](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | -| contextual_menu.select_all_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'select all' option was used. |[1](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | -| contextual_menu.share_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'share' option was used. |[1](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | -| crash_reporter.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was closed |[1](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • crash_submitted: A boolean that tells us whether or not the user submitted a crash report
|2021-04-01 |2 | -| crash_reporter.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was displayed |[1](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| custom_tab.action_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the action button provided by the launching app |[1](https://github.com/mozilla-mobile/fenix/pull/1697), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| custom_tab.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the custom tab |[1](https://github.com/mozilla-mobile/fenix/pull/1697), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| custom_tab.menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the custom tabs menu |[1](https://github.com/mozilla-mobile/fenix/pull/1697), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.cancel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user cancelled a download in the download notification |[1](https://github.com/mozilla-mobile/fenix/pull/6554), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.in_app_open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the in-app notification link |[1](https://github.com/mozilla-mobile/fenix/pull/6554), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.in_app_try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the in-app notification link |[1](https://github.com/mozilla-mobile/fenix/pull/6554), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the download notification |[1](https://github.com/mozilla-mobile/fenix/pull/6554), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user paused a download in the download notification |[1](https://github.com/mozilla-mobile/fenix/pull/6554), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.resume |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user resumed a download in the download notification |[1](https://github.com/mozilla-mobile/fenix/pull/6554), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the download notification |[1](https://github.com/mozilla-mobile/fenix/pull/6554), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| downloads_management.downloads_screen_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for the number of times users access the "Downloads" folder inside the app. |[1](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | -| downloads_management.item_deleted |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user deletes one / more downloads at a time. |[1](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | -| downloads_management.item_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user tap to opens a download from inside the "Downloads" folder. |[1](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | -| downloads_misc.download_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how many times something is downloaded in the app. |[1](https://github.com/mozilla-mobile/fenix/pull/16730)||2021-04-01 | | -| error_page.visited_error |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user encountered an error page |[1](https://github.com/mozilla-mobile/fenix/pull/2491#issuecomment-492414486), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • error_type: The error type of the error page encountered
|2021-04-01 |2 | -| events.app_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the app (from cold start, to the homescreen or browser) |[1](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The method used to open Fenix. Possible values are: `app_icon`, `custom_tab` or `link`
|2021-04-01 |2 | -| events.app_opened_all_startup |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the app to the HomeActivity. The HomeActivity encompasses the home screen, browser screen, settings screen, collections and other screens in the nav_graph. This differs from the app_opened probe because it measures all startups, not just cold startup. Note: There is a short gap between the time application goes into background and the time android reports the application going into the background. Note: This metric does not record souce when app opened from task switcher: open application -> press home button -> open recent tasks -> choose fenix. In this case will report [source = unknown, type = hot, has_saved_instance_state = false]. |[1](https://github.com/mozilla-mobile/fenix/pull/12114#pullrequestreview-445245341), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [3](https://github.com/mozilla-mobile/fenix/pull/13494#pullrequestreview-474050499), [4](https://github.com/mozilla-mobile/fenix/pull/15605#issuecomment-702365594)|
  • first_frame_pre_draw_nanos: the number of nanoseconds the application took to launch. This is the time difference between application launch(user pressing app_icon, launching a link) and until the first view is about to be drawn on the screen. If the time is not captured, this extra key will not be reported.
  • has_saved_instance_state: boolean value whether or not startup type has a savedInstance. using savedInstance, HomeActivity's previous state can be restored. This is an optional key since it is not applicable to all the cases. for example, when we are doing a hot start up, we cant have a savedInstanceState therefore we report only [APP_ICON, HOT] instead of [APP_ICON, HOT, false].
  • source: The method used to open Fenix. Possible values are `app_icon`, `custom_tab`, `link` or `unknown`. unknown is for startup sources where we can't pinpoint the cause. One UNKNOWN case is the app switcher where we don't know what variables to check to ensure this startup wasn't caused by something else.
  • type: the startup type for opening fenix. the application and HomeActivity either needs to be created or started again. possible values are `cold`, `warm`, `hot` or `error`. Error is for impossible cases. Please file a bug if you see the error case. app created AND HomeActivity created = cold app started AND HomeActivity created = warm app started AND HomeActivity started = hot app created AND HomeActivity started = error Some applications such as gmail launches the default browser in the background. So when we eventually click a link, browser is already started in the background. This means that custom_tab will mostly report `warm` startup type.
|2021-06-01 |2 | -| events.app_received_intent |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The system received an Intent for the HomeActivity. An intent is received an external entity wants to the app to display content. Intents can be received when the app is closed – at which point the app will be opened – or when the app is already opened – at which point the already open app will make changes such as loading a url. This can be used loosely as a heuristic for when the user requested to open the app. The HomeActivity encompasses the home screen and browser screen but may include other screens. This differs from the app_opened probe because it measures all startups, not just cold startup. |[1](https://github.com/mozilla-mobile/fenix/pull/11940/), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The method used to open Fenix. Possible values are `app_icon`, `custom_tab`, `link` or `unknown`
|2021-06-01 | | -| events.browser_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A browser menu item was tapped |[1](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [2](https://github.com/mozilla-mobile/fenix/pull/5098#issuecomment-529658996), [3](https://github.com/mozilla-mobile/fenix/pull/6310), [4](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • item: A string containing the name of the item the user tapped. These items include: Settings, Help, Desktop Site toggle on/off, Find in Page, New Tab, Private Tab, Share, Report Site Issue, Back/Forward button, Reload Button, Quit, Reader Mode On, Reader Mode Off, Open In app, Add To Top Sites, Add-ons Manager, Bookmarks, History
|2021-04-01 |2 | -| events.copy_url_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that a user has selected copy option when long pressing on url bar. |[1](https://github.com/mozilla-mobile/fenix/pull/16915)||2021-05-10 |2 | -| events.entered_url |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user entered a url |[1](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • autocomplete: A boolean that tells us whether the URL was autofilled by an Autocomplete suggestion
|2021-04-01 |2 | -| events.opened_link |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a link with Fenix |[1](https://github.com/mozilla-mobile/fenix/pull/5975), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • mode: The mode the link was opened in. Either 'PRIVATE' or 'NORMAL'. N.B.: this probe may be incorrectly implemented: see https://github.com/mozilla-mobile/fenix/issues/14133
|2021-04-01 |2 | -| events.performed_search |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user performed a search |[1](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [2](https://github.com/mozilla-mobile/fenix/pull/1677), [3](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: A string that tells us how the user performed the search. Possible values are: * default.action * default.suggestion * shortcut.action * shortcut.suggestion
|2021-04-01 |2 | -| events.preference_toggled |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user toggled a boolean preference in settings |[1](https://github.com/mozilla-mobile/fenix/pull/1896), [2](https://github.com/mozilla-mobile/fenix/pull/5704), [3](https://github.com/mozilla-mobile/fenix/pull/5886), [4](https://github.com/mozilla-mobile/fenix/pull/5975), [5](https://github.com/mozilla-mobile/fenix/pull/6352), [6](https://github.com/mozilla-mobile/fenix/pull/6601), [7](https://github.com/mozilla-mobile/fenix/pull/6746), [8](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • enabled: Whether or not the preference is *now* enabled
  • preference_key: The preference key for the boolean (true/false) preference the user toggled. We currently track: show_search_suggestions, remote_debugging, telemetry, tracking_protection, search_bookmarks, search_browsing_history, show_clipboard_suggestions, show_search_shortcuts, open_links_in_a_private_tab (bug in implementation https://github.com/mozilla-mobile/fenix/issues/7384), pref_key_sync_logins, pref_key_sync_bookmarks, pref_key_sync_history, pref_key_show_voice_search, and pref_key_show_search_suggestions_in_private.
|2021-06-01 |1, 2 | -| events.recently_closed_tabs_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that the user has accessed recently closed tabs list. |[1](https://github.com/mozilla-mobile/fenix/pull/16739)||2021-05-10 |2 | -| events.search_bar_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the search bar |[1](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The view the user was on when they initiated the search (For example: `Home` or `Browser`)
|2021-04-01 |2 | -| events.synced_tab_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that a synced tab was opened. |[1](https://github.com/mozilla-mobile/fenix/pull/16727)||2021-05-10 |2 | -| events.tab_counter_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A tab counter menu item was tapped |[1](https://github.com/mozilla-mobile/fenix/pull/11533), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • item: A string containing the name of the item the user tapped. These items are: New tab, New private tab, Close tab
|2021-04-01 |2 | -| events.whats_new_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the "what's new" page button |[1](https://github.com/mozilla-mobile/fenix/pull/5090), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| find_in_page.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the find in page UI |[1](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| find_in_page.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the find in page UI |[1](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| find_in_page.searched_page |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user searched the page |[1](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| history.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the history screen |[1](https://github.com/mozilla-mobile/fenix/pull/3940), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| history.opened_item |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a history item |[1](https://github.com/mozilla-mobile/fenix/pull/3940), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| history.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a history item |[1](https://github.com/mozilla-mobile/fenix/pull/3940), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| history.removed_all |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed all history items |[1](https://github.com/mozilla-mobile/fenix/pull/3940), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| history.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user shared a history item |[1](https://github.com/mozilla-mobile/fenix/pull/3940), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| login_dialog.cancelled |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt was cancelled |[1](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | -| login_dialog.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt was displayed |[1](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | -| login_dialog.never_save |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt "never save" button was pressed |[1](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | -| login_dialog.saved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt "save" button was pressed |[1](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | -| logins.copy_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user copied a piece of a login in saved logins |[1](https://github.com/mozilla-mobile/fenix/pull/6352), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| logins.delete_saved_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user confirms delete of a saved login |[1](https://github.com/mozilla-mobile/fenix/issues/11208), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| logins.open_individual_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed an individual login in saved logins |[1](https://github.com/mozilla-mobile/fenix/pull/6352), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| logins.open_login_editor |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user entered the edit screen for an individual saved login |[1](https://github.com/mozilla-mobile/fenix/issues/11208), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| logins.open_logins |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed Logins in Settings |[1](https://github.com/mozilla-mobile/fenix/pull/6352), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| logins.save_edited_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saves changes made to an individual login |[1](https://github.com/mozilla-mobile/fenix/issues/11208), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| logins.save_logins_setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their setting for asking to save logins |[1](https://github.com/mozilla-mobile/fenix/pull/7767), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • setting: The new setting for saving logins the user selected. Either `ask_to_save` or `never_save`
|2021-08-01 |2 | -| logins.view_password_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user viewed a password in an individual saved login |[1](https://github.com/mozilla-mobile/fenix/pull/6352), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| master_password.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The master password migration dialog was displayed |[1](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 | -| master_password.migration |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Logins were successfully migrated using a master password. |[1](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 | -| media_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pause icon on the media notification |[1](https://github.com/mozilla-mobile/fenix/pull/5520), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| media_notification.play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the play icon on the media notification |[1](https://github.com/mozilla-mobile/fenix/pull/5520), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| media_state.fullscreen |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Video set to fullscreen. |[1](https://github.com/mozilla-mobile/fenix/pull/16833)||2021-08-01 |2 | -| media_state.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Media playback was paused. |[1](https://github.com/mozilla-mobile/fenix/pull/6463), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| media_state.picture_in_picture |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Video set to picture in picture mode. |[1](https://github.com/mozilla-mobile/fenix/pull/16833)||2021-08-01 |2 | -| media_state.play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Media started playing. |[1](https://github.com/mozilla-mobile/fenix/pull/6463), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| media_state.stop |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Media playback has ended. |[1](https://github.com/mozilla-mobile/fenix/pull/6463), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| onboarding.finish |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user taps starts browsing and ends the onboarding experience. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| onboarding.fxa_auto_signin |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The onboarding automatic sign in card was tapped. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| onboarding.fxa_manual_signin |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The onboarding manual sign in card was tapped. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| onboarding.pref_toggled_private_browsing |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The private browsing preference was selected from the onboarding card. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| onboarding.pref_toggled_theme_picker |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The device theme was chosen using the theme picker onboarding card. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • theme: A string that indicates the theme LIGHT, DARK, or FOLLOW DEVICE. Default: FOLLOW DEVICE
|2021-08-01 |2 | -| onboarding.pref_toggled_toolbar_position |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The toolbar position preference was chosen from the onboarding card. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • position: A string that indicates the position of the toolbar TOP or BOTTOM. Default: BOTTOM
|2021-08-01 |2 | -| onboarding.pref_toggled_tracking_prot |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tracking protection preference was chosen from the onboarding card. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • setting: A string that indicates the Tracking Protection policy STANDARD or STRICT. Default: Toggle ON, STANDARD
|2021-08-01 |2 | -| onboarding.privacy_notice |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The onboarding privacy notice card was tapped. |[1](https://github.com/mozilla-mobile/fenix/pull/11867), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| pocket.pocket_top_site_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user clicked on the trending Pocket top site |[1](https://github.com/mozilla-mobile/fenix/pull/8098), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| pocket.pocket_top_site_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed the trending Pocket top site |[1](https://github.com/mozilla-mobile/fenix/pull/8098), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_mode.notification_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the private browsing mode notification itself. |[1](https://github.com/mozilla-mobile/fenix/pull/4968), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_mode.snackbar_undo |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "undo" button in the snackbar that is shown when the garbage icon is tapped. |[1](https://github.com/mozilla-mobile/fenix/pull/4968), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_shortcut.cfr_add_shortcut |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "Add shortcut" button when the contextual feature recommender appeared. |[1](https://github.com/mozilla-mobile/fenix/pull/5194), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_shortcut.cfr_cancel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "No thanks" button when the contextual feature recommender appeared. |[1](https://github.com/mozilla-mobile/fenix/pull/5194), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_shortcut.create_shortcut |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "Add private browsing shortcut" button in settings. |[1](https://github.com/mozilla-mobile/fenix/pull/5194), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_shortcut.pinned_shortcut_priv |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pinned private shortcut in Android home screen, opening up a new private search. |[1](https://github.com/mozilla-mobile/fenix/pull/5194), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_shortcut.static_shortcut_priv |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the long-press shortcut "Open new private tab", opening up a new private search. |[1](https://github.com/mozilla-mobile/fenix/pull/5194), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| private_browsing_shortcut.static_shortcut_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the long-press shortcut "Open new tab", opening up a new search. |[1](https://github.com/mozilla-mobile/fenix/pull/5194), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| progressive_web_app.background |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user puts the PWA into the background. |[1](https://github.com/mozilla-mobile/fenix/pull/11859)|
  • time_ms: The current time in ms when the PWA was backgrounded.
|2021-03-01 |2 | -| progressive_web_app.foreground |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user brings the PWA into the foreground. |[1](https://github.com/mozilla-mobile/fenix/pull/11859)|
  • time_ms: The current time in ms when the PWA was brought to the foreground.
|2021-03-01 |2 | -| progressive_web_app.homescreen_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user taps on PWA homescreen icon |[1](https://github.com/mozilla-mobile/fenix/pull/11859)||2021-03-01 |2 | -| progressive_web_app.install_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user installs a PWA. Could be a shortcut or added to homescreen. |[1](https://github.com/mozilla-mobile/fenix/pull/11859)||2021-03-01 |2 | -| reader_mode.appearance |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the appearance button |[1](https://github.com/mozilla-mobile/fenix/pull/3941), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| reader_mode.available |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Reader mode is available for the current page |[1](https://github.com/mozilla-mobile/fenix/pull/3941), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| reader_mode.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed reader mode |[1](https://github.com/mozilla-mobile/fenix/pull/4328), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| reader_mode.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened reader mode |[1](https://github.com/mozilla-mobile/fenix/pull/3941), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| search_shortcuts.selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected a search shortcut engine to use |[1](https://github.com/mozilla-mobile/fenix/pull/1202#issuecomment-476870449), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • engine: The name of the built-in search engine the user selected as a string
|2021-08-01 | | -| search_suggestions.enable_in_private |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user enabled receiving search suggestions in private sessions |[1](https://github.com/mozilla-mobile/fenix/pull/6746), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| search_widget.new_tab_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed anywhere from the Firefox logo until the start of the microphone icon, opening a new tab search screen. |[1](https://github.com/mozilla-mobile/fenix/pull/4714), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| search_widget.voice_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the microphone icon, opening a new voice search screen. |[1](https://github.com/mozilla-mobile/fenix/pull/4714), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_account.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the sync account page |[1](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_account.send_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user sent the current tab to another FxA device |[1](https://github.com/mozilla-mobile/fenix/pull/5106), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_account.sign_in_to_send_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "sign in to send tab" button inside the share tab menu |[1](https://github.com/mozilla-mobile/fenix/pull/5106), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_account.sync_now |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the sync now button on the sync account page |[1](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_auth.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the sync page |[1](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_auth.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the sync authentication page |[1](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_auth.other_external |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User authenticated via FxA using an unknown mechanism. "Known" mechanisms are currently sign-in, sign-up and pairing |[1](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| sync_auth.paired |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User signed into FxA by pairing with a different Firefox browser, using a QR code |[1](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| sync_auth.recovered |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Account manager automatically recovered FxA authentication state without direct user involvement |[1](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| sync_auth.scan_pairing |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the scan pairing button on the sync authentication page |[1](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_auth.sign_in |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the sign in button on the sync authentication page and was successfully signed in to FxA |[1](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_auth.sign_out |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the sign out button on the sync account page and was successfully signed out of FxA |[1](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_auth.sign_up |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User registered a new Firefox Account, and was signed into it |[1](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| sync_auth.use_email |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user chose to use their email to sign in instead of scanning a QR code, counterpart to "scan_pairing" |[1](https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| sync_auth.use_email_problem |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user chose to use their email to sign in after an account problem |[1](https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tab.media_pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pause icon on a tab from the home screen |[1](https://github.com/mozilla-mobile/fenix/pull/5266), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tab.media_play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the play icon on a tab from the home screen |[1](https://github.com/mozilla-mobile/fenix/pull/5266), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs.setting_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tab settings were opened. |[1](https://github.com/mozilla-mobile/fenix/pull/15811#issuecomment-706402952)||2021-08-01 |2 | -| tabs_tray.cfr.dismiss |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user dismisses the tabs tray CFR. |[1](https://github.com/mozilla-mobile/fenix/pull/17442), [2](https://github.com/mozilla-mobile/fenix/issues/16485#issuecomment-759641324)||2021-08-01 |2 | -| tabs_tray.cfr.go_to_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selects the CFR option to navigate to settings. |[1](https://github.com/mozilla-mobile/fenix/pull/17442), [2](https://github.com/mozilla-mobile/fenix/issues/16485#issuecomment-759641324)||2021-08-01 |2 | -| tabs_tray.close_all_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the close all tabs button in the three dot menu within the tabs tray |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the tabs tray |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.closed_existing_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed an existing tab |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.menu_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened three three dot menu in the tabs tray |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.new_private_tab_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a new private tab |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.new_tab_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a new tab |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.normal_mode_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user switched to normal mode |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the tabs tray |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.opened_existing_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened an existing tab |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.private_mode_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user switched to private mode |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.save_to_collection |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the save to collection button in the tabs tray |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tabs_tray.share_all_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the share all tabs button in the three dot menu within the tabs tray |[1](https://github.com/mozilla-mobile/fenix/pull/12036), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tip.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tip was closed |[1](https://github.com/mozilla-mobile/fenix/pull/9836), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • identifier: The identifier of the tip closed
|2021-08-01 |2 | -| tip.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tip was displayed |[1](https://github.com/mozilla-mobile/fenix/pull/9836), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • identifier: The identifier of the tip displayed
|2021-08-01 |2 | -| tip.pressed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tip's button was pressed |[1](https://github.com/mozilla-mobile/fenix/pull/9836), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • identifier: The identifier of the tip the action was taken on
|2021-08-01 |2 | -| toolbar_settings.changed_position |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user selected a new position for the toolbar |[1](https://github.com/mozilla-mobile/fenix/pull/6608), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • position: A string that indicates the new position of the toolbar TOP or BOTTOM
|2021-08-01 |2 | -| top_sites.long_press |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user long pressed on a top site |[1](https://github.com/mozilla-mobile/fenix/pull/15136), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • type: The type of top site. Options are: "FRECENCY," "DEFAULT," or "PINNED."
|2021-08-01 |2 | -| top_sites.open_default |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a default top site |[1](https://github.com/mozilla-mobile/fenix/pull/10752), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| top_sites.open_frecency |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a frecency top site |[1](https://github.com/mozilla-mobile/fenix/pull/15136), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| top_sites.open_google_search_attribution |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the google top site |[1](https://github.com/mozilla-mobile/fenix/pull/17637)||2021-08-01 |2 | -| top_sites.open_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opens a new tab based on a top site item |[1](https://github.com/mozilla-mobile/fenix/pull/7523), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| top_sites.open_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opens a new private tab based on a top site item |[1](https://github.com/mozilla-mobile/fenix/pull/7523), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| top_sites.open_pinned |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a pinned top site |[1](https://github.com/mozilla-mobile/fenix/pull/15136), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| top_sites.remove |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removes a top site item |[1](https://github.com/mozilla-mobile/fenix/pull/7523), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| top_sites.swipe_carousel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user swiped to change the page of the top sites carousel |[1](https://github.com/mozilla-mobile/fenix/pull/15136), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • page: The page number the carousel is now on
|2021-08-01 |2 | -| tracking_protection.etp_setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their tracking protection level setting to either strict, standard, or custom. |[1](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [2](https://github.com/mozilla-mobile/fenix/pull/11383), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • etp_setting: The new setting for ETP: strict, standard, custom
|2021-08-01 |2 | -| tracking_protection.etp_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened tracking protection settings through settings. |[1](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tracking_protection.etp_shield |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the tracking protection shield icon in toolbar. |[1](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tracking_protection.etp_tracker_list |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed into a list of categorized trackers in tracking protection panel. |[1](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tracking_protection.exception_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a tracking protection exception through the TP toggle in the panel. |[1](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| tracking_protection.panel_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened tracking protection settings from the panel. |[1](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| user_specified_search_engines.custom_engine_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a new custom search engine |[1](https://github.com/mozilla-mobile/fenix/pull/6918), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| user_specified_search_engines.custom_engine_deleted |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user deleted a custom search engine |[1](https://github.com/mozilla-mobile/fenix/pull/6918), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| voice_search.tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected the voice search button on the search screen. |[1](https://github.com/mozilla-mobile/fenix/pull/10785), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| about_page.privacy_notice_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Privacy notice" item from About page |[mozilla-mobile/fenix#8047](https://github.com/mozilla-mobile/fenix/pull/8047), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| about_page.support_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Support" item from About page |[mozilla-mobile/fenix#8047](https://github.com/mozilla-mobile/fenix/pull/8047), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| addons.open_addon_in_toolbar_menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user interacted with an installed add-on in the toolbar menu |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • addon_id: The id of the add-on that was interacted with in the toolbar menu
|2021-04-01 |2 | +| addons.open_addons_in_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed "Add-ons" from the Settings |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[mozilla-mobile/fenix#7968](https://github.com/mozilla-mobile/fenix/pull/7968), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING'
|2021-04-01 |2 | +| autoplay.setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their autoplay setting to either block_cellular, block_audio, or block_all. |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)|
  • autoplay_setting: The new setting for autoplay: block_cellular, block_audio, or block_all.
|2021-08-01 |2 | +| autoplay.visited_setting |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user visited the autoplay settings screen |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)||2021-08-01 |2 | +| banner_open_in_app.dismissed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'dismiss' on Open in App banner. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | +| banner_open_in_app.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Open in App banner was shown. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | +| banner_open_in_app.go_to_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'go to settings' on Open in App banner. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | +| bookmarks_management.copied |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user copied a bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.edited |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user edited the title and/or URL of an existing bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.folder_add |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a new bookmark folder. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.folder_remove |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark folder. |[mozilla-mobile/fenix#3724](https://github.com/mozilla-mobile/fenix/pull/3724), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.moved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user moved an existing bookmark or folder to another folder. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.multi_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed multiple bookmarks at once. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.open_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.open_in_new_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new tabs. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.open_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new private tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.open_in_private_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new private tabs. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark item. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user shared a bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| collections.add_tab_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the "add tab" button in the three dot menu of collections |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| collections.all_tabs_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped "open tabs" from collection menu |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | +| collections.long_press |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user long pressed on a tab, triggering the collection creation screen |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| collections.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped delete collection from collection menu |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | +| collections.rename_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "rename collection" button in the three dot menu |[mozilla-mobile/fenix#4539](https://github.com/mozilla-mobile/fenix/pull/4539), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| collections.renamed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user renamed a collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | +| collections.save_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "save to collection" button on either the home or browser screen, triggering the collection creation screen to open (tab_select_opened) |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • from_screen: A string representing the screen from which the user pressed the save button. Currently one of: `browserMenu`, `homeMenu` or `home`
|2021-04-01 |2 | +| collections.saved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to a new collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-04-01 |1, 2 | +| collections.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped share collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | +| collections.tab_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped remove tab from collection tab list |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | +| collections.tab_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user restored a tab from collection tab list |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | +| collections.tab_select_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the select tabs screen (the first step of the collection creation flow) |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | +| collections.tabs_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to an existing collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-04-01 |1, 2 | +| context_menu.item_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped an item in the browsers context menu |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix/issues/16076](https://github.com/mozilla-mobile/fenix/issues/16076#issuecomment-726216734)|
  • named: The name of the item that was tapped. Available items are: ``` open_in_new_tab, open_in_private_tab, open_image_in_new_tab, save_image, share_link, copy_link, copy_image_location, share_image ```
|2021-04-01 |2 | +| contextual_hint.tracking_protection.dismiss |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was dismissed by pressing the close button |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| contextual_hint.tracking_protection.display |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was displayed. |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| contextual_hint.tracking_protection.inside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped inside of the etp contextual hint (which brings up the etp panel for this site). |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| contextual_hint.tracking_protection.outside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped outside of the etp contextual hint (which has no effect). |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| contextual_menu.copy_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'copy' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | +| contextual_menu.search_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'search' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | +| contextual_menu.select_all_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'select all' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | +| contextual_menu.share_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'share' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | +| crash_reporter.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was closed |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • crash_submitted: A boolean that tells us whether or not the user submitted a crash report
|2021-04-01 |2 | +| crash_reporter.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was displayed |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| custom_tab.action_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the action button provided by the launching app |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| custom_tab.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the custom tab |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| custom_tab.menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the custom tabs menu |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| download_notification.cancel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user cancelled a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| download_notification.in_app_open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the in-app notification link |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| download_notification.in_app_try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the in-app notification link |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| download_notification.open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| download_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user paused a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| download_notification.resume |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user resumed a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| download_notification.try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| downloads_management.downloads_screen_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for the number of times users access the "Downloads" folder inside the app. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | +| downloads_management.item_deleted |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user deletes one / more downloads at a time. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | +| downloads_management.item_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user tap to opens a download from inside the "Downloads" folder. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | +| downloads_misc.download_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how many times something is downloaded in the app. |[mozilla-mobile/fenix#16730](https://github.com/mozilla-mobile/fenix/pull/16730)||2021-04-01 | | +| error_page.visited_error |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user encountered an error page |[mozilla-mobile/fenix#2491](https://github.com/mozilla-mobile/fenix/pull/2491#issuecomment-492414486), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • error_type: The error type of the error page encountered
|2021-04-01 |2 | +| events.app_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the app (from cold start, to the homescreen or browser) |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The method used to open Fenix. Possible values are: `app_icon`, `custom_tab` or `link`
|2021-04-01 |2 | +| events.app_opened_all_startup |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the app to the HomeActivity. The HomeActivity encompasses the home screen, browser screen, settings screen, collections and other screens in the nav_graph. This differs from the app_opened probe because it measures all startups, not just cold startup. Note: There is a short gap between the time application goes into background and the time android reports the application going into the background. Note: This metric does not record souce when app opened from task switcher: open application -> press home button -> open recent tasks -> choose fenix. In this case will report [source = unknown, type = hot, has_saved_instance_state = false]. |[mozilla-mobile/fenix#12114](https://github.com/mozilla-mobile/fenix/pull/12114#pullrequestreview-445245341), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#13494](https://github.com/mozilla-mobile/fenix/pull/13494#pullrequestreview-474050499), [mozilla-mobile/fenix#15605](https://github.com/mozilla-mobile/fenix/pull/15605#issuecomment-702365594)|
  • first_frame_pre_draw_nanos: the number of nanoseconds the application took to launch. This is the time difference between application launch(user pressing app_icon, launching a link) and until the first view is about to be drawn on the screen. If the time is not captured, this extra key will not be reported.
  • has_saved_instance_state: boolean value whether or not startup type has a savedInstance. using savedInstance, HomeActivity's previous state can be restored. This is an optional key since it is not applicable to all the cases. for example, when we are doing a hot start up, we cant have a savedInstanceState therefore we report only [APP_ICON, HOT] instead of [APP_ICON, HOT, false].
  • source: The method used to open Fenix. Possible values are `app_icon`, `custom_tab`, `link` or `unknown`. unknown is for startup sources where we can't pinpoint the cause. One UNKNOWN case is the app switcher where we don't know what variables to check to ensure this startup wasn't caused by something else.
  • type: the startup type for opening fenix. the application and HomeActivity either needs to be created or started again. possible values are `cold`, `warm`, `hot` or `error`. Error is for impossible cases. Please file a bug if you see the error case. app created AND HomeActivity created = cold app started AND HomeActivity created = warm app started AND HomeActivity started = hot app created AND HomeActivity started = error Some applications such as gmail launches the default browser in the background. So when we eventually click a link, browser is already started in the background. This means that custom_tab will mostly report `warm` startup type.
|2021-06-01 |2 | +| events.app_received_intent |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The system received an Intent for the HomeActivity. An intent is received an external entity wants to the app to display content. Intents can be received when the app is closed – at which point the app will be opened – or when the app is already opened – at which point the already open app will make changes such as loading a url. This can be used loosely as a heuristic for when the user requested to open the app. The HomeActivity encompasses the home screen and browser screen but may include other screens. This differs from the app_opened probe because it measures all startups, not just cold startup. |[mozilla-mobile/fenix#11940/](https://github.com/mozilla-mobile/fenix/pull/11940/), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The method used to open Fenix. Possible values are `app_icon`, `custom_tab`, `link` or `unknown`
|2021-06-01 | | +| events.browser_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A browser menu item was tapped |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#5098](https://github.com/mozilla-mobile/fenix/pull/5098#issuecomment-529658996), [mozilla-mobile/fenix#6310](https://github.com/mozilla-mobile/fenix/pull/6310), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • item: A string containing the name of the item the user tapped. These items include: Settings, Help, Desktop Site toggle on/off, Find in Page, New Tab, Private Tab, Share, Report Site Issue, Back/Forward button, Reload Button, Quit, Reader Mode On, Reader Mode Off, Open In app, Add To Top Sites, Add-ons Manager, Bookmarks, History
|2021-04-01 |2 | +| events.copy_url_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that a user has selected copy option when long pressing on url bar. |[mozilla-mobile/fenix#16915](https://github.com/mozilla-mobile/fenix/pull/16915)||2021-05-10 |2 | +| events.entered_url |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user entered a url |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • autocomplete: A boolean that tells us whether the URL was autofilled by an Autocomplete suggestion
|2021-04-01 |2 | +| events.opened_link |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a link with Fenix |[mozilla-mobile/fenix#5975](https://github.com/mozilla-mobile/fenix/pull/5975), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • mode: The mode the link was opened in. Either 'PRIVATE' or 'NORMAL'. N.B.: this probe may be incorrectly implemented: see https://github.com/mozilla-mobile/fenix/issues/14133
|2021-04-01 |2 | +| events.performed_search |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user performed a search |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#1677](https://github.com/mozilla-mobile/fenix/pull/1677), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: A string that tells us how the user performed the search. Possible values are: * default.action * default.suggestion * shortcut.action * shortcut.suggestion
|2021-04-01 |2 | +| events.preference_toggled |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user toggled a boolean preference in settings |[mozilla-mobile/fenix#1896](https://github.com/mozilla-mobile/fenix/pull/1896), [mozilla-mobile/fenix#5704](https://github.com/mozilla-mobile/fenix/pull/5704), [mozilla-mobile/fenix#5886](https://github.com/mozilla-mobile/fenix/pull/5886), [mozilla-mobile/fenix#5975](https://github.com/mozilla-mobile/fenix/pull/5975), [mozilla-mobile/fenix#6352](https://github.com/mozilla-mobile/fenix/pull/6352), [mozilla-mobile/fenix#6601](https://github.com/mozilla-mobile/fenix/pull/6601), [mozilla-mobile/fenix#6746](https://github.com/mozilla-mobile/fenix/pull/6746), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • enabled: Whether or not the preference is *now* enabled
  • preference_key: The preference key for the boolean (true/false) preference the user toggled. We currently track: show_search_suggestions, remote_debugging, telemetry, tracking_protection, search_bookmarks, search_browsing_history, show_clipboard_suggestions, show_search_shortcuts, open_links_in_a_private_tab (bug in implementation https://github.com/mozilla-mobile/fenix/issues/7384), pref_key_sync_logins, pref_key_sync_bookmarks, pref_key_sync_history, pref_key_show_voice_search, and pref_key_show_search_suggestions_in_private.
|2021-06-01 |1, 2 | +| events.recently_closed_tabs_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that the user has accessed recently closed tabs list. |[mozilla-mobile/fenix#16739](https://github.com/mozilla-mobile/fenix/pull/16739)||2021-05-10 |2 | +| events.search_bar_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the search bar |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The view the user was on when they initiated the search (For example: `Home` or `Browser`)
|2021-04-01 |2 | +| events.synced_tab_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that a synced tab was opened. |[mozilla-mobile/fenix#16727](https://github.com/mozilla-mobile/fenix/pull/16727)||2021-05-10 |2 | +| events.tab_counter_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A tab counter menu item was tapped |[mozilla-mobile/fenix#11533](https://github.com/mozilla-mobile/fenix/pull/11533), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • item: A string containing the name of the item the user tapped. These items are: New tab, New private tab, Close tab
|2021-04-01 |2 | +| events.whats_new_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the "what's new" page button |[mozilla-mobile/fenix#5090](https://github.com/mozilla-mobile/fenix/pull/5090), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| find_in_page.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the find in page UI |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| find_in_page.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the find in page UI |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| find_in_page.searched_page |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user searched the page |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| history.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the history screen |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| history.opened_item |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a history item |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| history.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a history item |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| history.removed_all |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed all history items |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| history.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user shared a history item |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| login_dialog.cancelled |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt was cancelled |[mozilla-mobile/fenix#13050](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | +| login_dialog.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt was displayed |[mozilla-mobile/fenix#13050](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | +| login_dialog.never_save |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt "never save" button was pressed |[mozilla-mobile/fenix#13050](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | +| login_dialog.saved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The login dialog prompt "save" button was pressed |[mozilla-mobile/fenix#13050](https://github.com/mozilla-mobile/fenix/pull/13050)||2021-08-01 |2 | +| logins.copy_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user copied a piece of a login in saved logins |[mozilla-mobile/fenix#6352](https://github.com/mozilla-mobile/fenix/pull/6352), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| logins.delete_saved_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user confirms delete of a saved login |[mozilla-mobile/fenix/issues/11208](https://github.com/mozilla-mobile/fenix/issues/11208), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| logins.open_individual_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed an individual login in saved logins |[mozilla-mobile/fenix#6352](https://github.com/mozilla-mobile/fenix/pull/6352), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| logins.open_login_editor |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user entered the edit screen for an individual saved login |[mozilla-mobile/fenix/issues/11208](https://github.com/mozilla-mobile/fenix/issues/11208), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| logins.open_logins |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed Logins in Settings |[mozilla-mobile/fenix#6352](https://github.com/mozilla-mobile/fenix/pull/6352), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| logins.save_edited_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saves changes made to an individual login |[mozilla-mobile/fenix/issues/11208](https://github.com/mozilla-mobile/fenix/issues/11208), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| logins.save_logins_setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their setting for asking to save logins |[mozilla-mobile/fenix#7767](https://github.com/mozilla-mobile/fenix/pull/7767), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • setting: The new setting for saving logins the user selected. Either `ask_to_save` or `never_save`
|2021-08-01 |2 | +| logins.view_password_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user viewed a password in an individual saved login |[mozilla-mobile/fenix#6352](https://github.com/mozilla-mobile/fenix/pull/6352), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| master_password.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The master password migration dialog was displayed |[mozilla-mobile/fenix#14468](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 | +| master_password.migration |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Logins were successfully migrated using a master password. |[mozilla-mobile/fenix#14468](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 | +| media_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pause icon on the media notification |[mozilla-mobile/fenix#5520](https://github.com/mozilla-mobile/fenix/pull/5520), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| media_notification.play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the play icon on the media notification |[mozilla-mobile/fenix#5520](https://github.com/mozilla-mobile/fenix/pull/5520), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| media_state.fullscreen |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Video set to fullscreen. |[mozilla-mobile/fenix#16833](https://github.com/mozilla-mobile/fenix/pull/16833)||2021-08-01 |2 | +| media_state.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Media playback was paused. |[mozilla-mobile/fenix#6463](https://github.com/mozilla-mobile/fenix/pull/6463), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| media_state.picture_in_picture |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Video set to picture in picture mode. |[mozilla-mobile/fenix#16833](https://github.com/mozilla-mobile/fenix/pull/16833)||2021-08-01 |2 | +| media_state.play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Media started playing. |[mozilla-mobile/fenix#6463](https://github.com/mozilla-mobile/fenix/pull/6463), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| media_state.stop |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Media playback has ended. |[mozilla-mobile/fenix#6463](https://github.com/mozilla-mobile/fenix/pull/6463), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| onboarding.finish |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user taps starts browsing and ends the onboarding experience. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| onboarding.fxa_auto_signin |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The onboarding automatic sign in card was tapped. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| onboarding.fxa_manual_signin |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The onboarding manual sign in card was tapped. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| onboarding.pref_toggled_private_browsing |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The private browsing preference was selected from the onboarding card. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| onboarding.pref_toggled_theme_picker |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The device theme was chosen using the theme picker onboarding card. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • theme: A string that indicates the theme LIGHT, DARK, or FOLLOW DEVICE. Default: FOLLOW DEVICE
|2021-08-01 |2 | +| onboarding.pref_toggled_toolbar_position |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The toolbar position preference was chosen from the onboarding card. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • position: A string that indicates the position of the toolbar TOP or BOTTOM. Default: BOTTOM
|2021-08-01 |2 | +| onboarding.pref_toggled_tracking_prot |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tracking protection preference was chosen from the onboarding card. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • setting: A string that indicates the Tracking Protection policy STANDARD or STRICT. Default: Toggle ON, STANDARD
|2021-08-01 |2 | +| onboarding.privacy_notice |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The onboarding privacy notice card was tapped. |[mozilla-mobile/fenix#11867](https://github.com/mozilla-mobile/fenix/pull/11867), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| pocket.pocket_top_site_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user clicked on the trending Pocket top site |[mozilla-mobile/fenix#8098](https://github.com/mozilla-mobile/fenix/pull/8098), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| pocket.pocket_top_site_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed the trending Pocket top site |[mozilla-mobile/fenix#8098](https://github.com/mozilla-mobile/fenix/pull/8098), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_mode.notification_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the private browsing mode notification itself. |[mozilla-mobile/fenix#4968](https://github.com/mozilla-mobile/fenix/pull/4968), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_mode.snackbar_undo |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "undo" button in the snackbar that is shown when the garbage icon is tapped. |[mozilla-mobile/fenix#4968](https://github.com/mozilla-mobile/fenix/pull/4968), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_shortcut.cfr_add_shortcut |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "Add shortcut" button when the contextual feature recommender appeared. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_shortcut.cfr_cancel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "No thanks" button when the contextual feature recommender appeared. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_shortcut.create_shortcut |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "Add private browsing shortcut" button in settings. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_shortcut.pinned_shortcut_priv |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pinned private shortcut in Android home screen, opening up a new private search. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_shortcut.static_shortcut_priv |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the long-press shortcut "Open new private tab", opening up a new private search. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| private_browsing_shortcut.static_shortcut_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the long-press shortcut "Open new tab", opening up a new search. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| progressive_web_app.background |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user puts the PWA into the background. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)|
  • time_ms: The current time in ms when the PWA was backgrounded.
|2021-03-01 |2 | +| progressive_web_app.foreground |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user brings the PWA into the foreground. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)|
  • time_ms: The current time in ms when the PWA was brought to the foreground.
|2021-03-01 |2 | +| progressive_web_app.homescreen_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user taps on PWA homescreen icon |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)||2021-03-01 |2 | +| progressive_web_app.install_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user installs a PWA. Could be a shortcut or added to homescreen. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)||2021-03-01 |2 | +| reader_mode.appearance |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the appearance button |[mozilla-mobile/fenix#3941](https://github.com/mozilla-mobile/fenix/pull/3941), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| reader_mode.available |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Reader mode is available for the current page |[mozilla-mobile/fenix#3941](https://github.com/mozilla-mobile/fenix/pull/3941), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| reader_mode.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed reader mode |[mozilla-mobile/fenix#4328](https://github.com/mozilla-mobile/fenix/pull/4328), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| reader_mode.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened reader mode |[mozilla-mobile/fenix#3941](https://github.com/mozilla-mobile/fenix/pull/3941), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| search_shortcuts.selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected a search shortcut engine to use |[mozilla-mobile/fenix#1202](https://github.com/mozilla-mobile/fenix/pull/1202#issuecomment-476870449), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • engine: The name of the built-in search engine the user selected as a string
|2021-08-01 | | +| search_suggestions.enable_in_private |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user enabled receiving search suggestions in private sessions |[mozilla-mobile/fenix#6746](https://github.com/mozilla-mobile/fenix/pull/6746), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| search_widget.new_tab_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed anywhere from the Firefox logo until the start of the microphone icon, opening a new tab search screen. |[mozilla-mobile/fenix#4714](https://github.com/mozilla-mobile/fenix/pull/4714), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| search_widget.voice_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the microphone icon, opening a new voice search screen. |[mozilla-mobile/fenix#4714](https://github.com/mozilla-mobile/fenix/pull/4714), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_account.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the sync account page |[mozilla-mobile/fenix#2745](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_account.send_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user sent the current tab to another FxA device |[mozilla-mobile/fenix#5106](https://github.com/mozilla-mobile/fenix/pull/5106), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_account.sign_in_to_send_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "sign in to send tab" button inside the share tab menu |[mozilla-mobile/fenix#5106](https://github.com/mozilla-mobile/fenix/pull/5106), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_account.sync_now |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the sync now button on the sync account page |[mozilla-mobile/fenix#2745](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_auth.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the sync page |[mozilla-mobile/fenix#2745](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_auth.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the sync authentication page |[mozilla-mobile/fenix#2745](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_auth.other_external |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User authenticated via FxA using an unknown mechanism. "Known" mechanisms are currently sign-in, sign-up and pairing |[mozilla-mobile/fenix#4931](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| sync_auth.paired |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User signed into FxA by pairing with a different Firefox browser, using a QR code |[mozilla-mobile/fenix#4931](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| sync_auth.recovered |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Account manager automatically recovered FxA authentication state without direct user involvement |[mozilla-mobile/fenix#4931](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| sync_auth.scan_pairing |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the scan pairing button on the sync authentication page |[mozilla-mobile/fenix#2745](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_auth.sign_in |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the sign in button on the sync authentication page and was successfully signed in to FxA |[mozilla-mobile/fenix#2745](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_auth.sign_out |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the sign out button on the sync account page and was successfully signed out of FxA |[mozilla-mobile/fenix#2745](https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_auth.sign_up |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User registered a new Firefox Account, and was signed into it |[mozilla-mobile/fenix#4931](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| sync_auth.use_email |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user chose to use their email to sign in instead of scanning a QR code, counterpart to "scan_pairing" |[mozilla-mobile/fenix#9835](https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| sync_auth.use_email_problem |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user chose to use their email to sign in after an account problem |[mozilla-mobile/fenix#9835](https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tab.media_pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pause icon on a tab from the home screen |[mozilla-mobile/fenix#5266](https://github.com/mozilla-mobile/fenix/pull/5266), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tab.media_play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the play icon on a tab from the home screen |[mozilla-mobile/fenix#5266](https://github.com/mozilla-mobile/fenix/pull/5266), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs.setting_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tab settings were opened. |[mozilla-mobile/fenix#15811](https://github.com/mozilla-mobile/fenix/pull/15811#issuecomment-706402952)||2021-08-01 |2 | +| tabs_tray.cfr.dismiss |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user dismisses the tabs tray CFR. |[mozilla-mobile/fenix#17442](https://github.com/mozilla-mobile/fenix/pull/17442), [mozilla-mobile/fenix/issues/16485](https://github.com/mozilla-mobile/fenix/issues/16485#issuecomment-759641324)||2021-08-01 |2 | +| tabs_tray.cfr.go_to_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selects the CFR option to navigate to settings. |[mozilla-mobile/fenix#17442](https://github.com/mozilla-mobile/fenix/pull/17442), [mozilla-mobile/fenix/issues/16485](https://github.com/mozilla-mobile/fenix/issues/16485#issuecomment-759641324)||2021-08-01 |2 | +| tabs_tray.close_all_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the close all tabs button in the three dot menu within the tabs tray |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the tabs tray |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.closed_existing_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed an existing tab |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.menu_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened three three dot menu in the tabs tray |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.new_private_tab_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a new private tab |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.new_tab_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a new tab |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.normal_mode_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user switched to normal mode |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the tabs tray |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.opened_existing_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened an existing tab |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.private_mode_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user switched to private mode |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.save_to_collection |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the save to collection button in the tabs tray |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tabs_tray.share_all_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the share all tabs button in the three dot menu within the tabs tray |[mozilla-mobile/fenix#12036](https://github.com/mozilla-mobile/fenix/pull/12036), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tip.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tip was closed |[mozilla-mobile/fenix#9836](https://github.com/mozilla-mobile/fenix/pull/9836), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • identifier: The identifier of the tip closed
|2021-08-01 |2 | +| tip.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tip was displayed |[mozilla-mobile/fenix#9836](https://github.com/mozilla-mobile/fenix/pull/9836), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • identifier: The identifier of the tip displayed
|2021-08-01 |2 | +| tip.pressed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tip's button was pressed |[mozilla-mobile/fenix#9836](https://github.com/mozilla-mobile/fenix/pull/9836), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • identifier: The identifier of the tip the action was taken on
|2021-08-01 |2 | +| toolbar_settings.changed_position |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user selected a new position for the toolbar |[mozilla-mobile/fenix#6608](https://github.com/mozilla-mobile/fenix/pull/6608), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • position: A string that indicates the new position of the toolbar TOP or BOTTOM
|2021-08-01 |2 | +| top_sites.long_press |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user long pressed on a top site |[mozilla-mobile/fenix#15136](https://github.com/mozilla-mobile/fenix/pull/15136), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • type: The type of top site. Options are: "FRECENCY," "DEFAULT," or "PINNED."
|2021-08-01 |2 | +| top_sites.open_default |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a default top site |[mozilla-mobile/fenix#10752](https://github.com/mozilla-mobile/fenix/pull/10752), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| top_sites.open_frecency |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a frecency top site |[mozilla-mobile/fenix#15136](https://github.com/mozilla-mobile/fenix/pull/15136), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| top_sites.open_google_search_attribution |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the google top site |[mozilla-mobile/fenix#17637](https://github.com/mozilla-mobile/fenix/pull/17637)||2021-08-01 |2 | +| top_sites.open_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opens a new tab based on a top site item |[mozilla-mobile/fenix#7523](https://github.com/mozilla-mobile/fenix/pull/7523), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| top_sites.open_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opens a new private tab based on a top site item |[mozilla-mobile/fenix#7523](https://github.com/mozilla-mobile/fenix/pull/7523), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| top_sites.open_pinned |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a pinned top site |[mozilla-mobile/fenix#15136](https://github.com/mozilla-mobile/fenix/pull/15136), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| top_sites.remove |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removes a top site item |[mozilla-mobile/fenix#7523](https://github.com/mozilla-mobile/fenix/pull/7523), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| top_sites.swipe_carousel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user swiped to change the page of the top sites carousel |[mozilla-mobile/fenix#15136](https://github.com/mozilla-mobile/fenix/pull/15136), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • page: The page number the carousel is now on
|2021-08-01 |2 | +| tracking_protection.etp_setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their tracking protection level setting to either strict, standard, or custom. |[mozilla-mobile/fenix#5414](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [mozilla-mobile/fenix#11383](https://github.com/mozilla-mobile/fenix/pull/11383), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • etp_setting: The new setting for ETP: strict, standard, custom
|2021-08-01 |2 | +| tracking_protection.etp_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened tracking protection settings through settings. |[mozilla-mobile/fenix#5414](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tracking_protection.etp_shield |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the tracking protection shield icon in toolbar. |[mozilla-mobile/fenix#5414](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tracking_protection.etp_tracker_list |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed into a list of categorized trackers in tracking protection panel. |[mozilla-mobile/fenix#5414](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tracking_protection.exception_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a tracking protection exception through the TP toggle in the panel. |[mozilla-mobile/fenix#5414](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| tracking_protection.panel_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened tracking protection settings from the panel. |[mozilla-mobile/fenix#5414](https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| user_specified_search_engines.custom_engine_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a new custom search engine |[mozilla-mobile/fenix#6918](https://github.com/mozilla-mobile/fenix/pull/6918), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| user_specified_search_engines.custom_engine_deleted |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user deleted a custom search engine |[mozilla-mobile/fenix#6918](https://github.com/mozilla-mobile/fenix/pull/6918), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| voice_search.tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected the voice search button on the search screen. |[mozilla-mobile/fenix#10785](https://github.com/mozilla-mobile/fenix/pull/10785), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | ## first-session @@ -253,15 +257,17 @@ This ping includes the [client id](https://mozilla.github.io/glean/book/user/pin - -The following metrics are added to the ping: +All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections. + +In addition to those built-in metrics, the following metrics are added to the ping: | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| first_session.adgroup |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the AdGroup that was used to source this installation. |[1](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586480836), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| first_session.campaign |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the campaign that is responsible for this installation. |[1](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| first_session.creative |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The identifier of the creative material that the user interacted with. |[1](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| first_session.network |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the Network that sourced this installation. |[1](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| first_session.timestamp |[datetime](https://mozilla.github.io/glean/book/user/metrics/datetime.html) |The Glean generated date and time of the installation. This is unique per app install, though the rest of the data in this ping is from Adjust and will remain static across installs. |[1](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| first_session.adgroup |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the AdGroup that was used to source this installation. |[mozilla-mobile/fenix#8074](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586480836), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| first_session.campaign |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the campaign that is responsible for this installation. |[mozilla-mobile/fenix#8074](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| first_session.creative |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The identifier of the creative material that the user interacted with. |[mozilla-mobile/fenix#8074](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| first_session.network |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the Network that sourced this installation. |[mozilla-mobile/fenix#8074](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| first_session.timestamp |[datetime](https://mozilla.github.io/glean/book/user/metrics/datetime.html) |The Glean generated date and time of the installation. This is unique per app install, though the rest of the data in this ping is from Adjust and will remain static across installs. |[mozilla-mobile/fenix#8074](https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | ## metrics @@ -269,78 +275,80 @@ This is a built-in ping that is assembled out of the box by the Glean SDK. See the Glean SDK documentation for the [`metrics` ping](https://mozilla.github.io/glean/book/user/pings/metrics.html). -The following metrics are added to the ping: +All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections. + +In addition to those built-in metrics, the following metrics are added to the ping: | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| addons.enabled_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all enabled add-ons on the device. |[1](https://github.com/mozilla-mobile/fenix/pull/11080), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.has_enabled_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has enabled add-ons on the device. |[1](https://github.com/mozilla-mobile/fenix/pull/8318), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.has_installed_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has installed add-ons on the device. |[1](https://github.com/mozilla-mobile/fenix/pull/8318), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.installed_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all installed add-ons on the device. |[1](https://github.com/mozilla-mobile/fenix/pull/11080), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| browser.search.ad_clicks |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records clicks of adverts on SERP pages. The key format is ‘’. |[1](https://github.com/mozilla-mobile/fenix/pull/10112), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| browser.search.in_content |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records the type of interaction a user has on SERP pages. |[1](https://github.com/mozilla-mobile/fenix/pull/10167), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| browser.search.with_ads |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records counts of SERP pages with adverts displayed. The key format is ‘’. |[1](https://github.com/mozilla-mobile/fenix/pull/10112), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| engine_tab.kill_background_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a background tab at the time its content process got killed. |[1](https://github.com/mozilla-mobile/fenix/pull/17864)||2021-12-31 |1 | -| engine_tab.kill_foreground_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a foreground (selected) tab at the time its content process got killed. |[1](TBD)||2021-12-31 |1 | -| engine_tab.kills |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |How often was the content process of a foreground (selected) or background tab killed. |[1](https://github.com/mozilla-mobile/fenix/pull/17864)|
  • foreground
  • background
|2021-12-31 |1 | -| events.normal_and_private_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This includes private browsing. This does not include background page requests and URIs from embedded pages but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[1](https://github.com/mozilla-mobile/fenix/pull/17935)||2022-08-01 |2 | -| events.total_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This does not include background page requests and URIs from embedded pages or private browsing but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[1](https://github.com/mozilla-mobile/fenix/pull/1785), [2](https://github.com/mozilla-mobile/fenix/pull/8314), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.adjust_ad_group |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust ad group ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[1](https://github.com/mozilla-mobile/fenix/pull/9253), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.adjust_campaign |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust campaign ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[1](https://github.com/mozilla-mobile/fenix/pull/5579), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | -| metrics.adjust_creative |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust creative ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[1](https://github.com/mozilla-mobile/fenix/pull/9253), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.adjust_network |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust network ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[1](https://github.com/mozilla-mobile/fenix/pull/9253), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.close_tab_setting |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string that indicates the setting for tab closing: MANUAL, ONE_DAY, ONE_WEEK, ONE_MONTH |[1](https://github.com/mozilla-mobile/fenix/pull/15811#issuecomment-706402952)||2021-08-01 |2 | -| metrics.default_browser |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Is Fenix the default browser? |[1](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.default_moz_browser |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the default browser on device if and only if it's a Mozilla owned product |[1](https://github.com/mozilla-mobile/fenix/pull/1953/), [2](https://github.com/mozilla-mobile/fenix/pull/5216), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| metrics.desktop_bookmarks_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many bookmarks a user has in the desktop folder. This value will only be set if the user has at least *one* bookmark. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `desktop_bookmarks_count` ping and 0 bookmarks, please see `has_desktop_bookmarks`. |[1](https://github.com/mozilla-mobile/fenix/pull/16942), [2](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | -| metrics.distribution_id |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the distribution identifier. This is currently used to identify installs from Mozilla Online. |[1](https://github.com/mozilla-mobile/fenix/issues/16075)||never |1 | -| metrics.has_desktop_bookmarks |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has bookmarks in the desktop folder |[1](https://github.com/mozilla-mobile/fenix/pull/16942), [2](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | -| metrics.has_mobile_bookmarks |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has bookmarks in the mobile folder |[1](https://github.com/mozilla-mobile/fenix/pull/16942), [2](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | -| metrics.has_open_tabs |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has any open NORMAL tabs. |[1](https://github.com/mozilla-mobile/fenix/pull/12024), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.has_recent_pwas |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has recently used PWAs. See recently_used_pwa_count for the actual count. |[1](https://github.com/mozilla-mobile/fenix/pull/11982#pullrequestreview-437963817), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.has_top_sites |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has top sites |[1](https://github.com/mozilla-mobile/fenix/pull/9556), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.mobile_bookmarks_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many bookmarks a user has in the mobile folder. This value will only be set if the user has at least *one* bookmark. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `mobile_bookmarks_count` ping and 0 bookmarks, please see `has_mobile_bookmarks`. |[1](https://github.com/mozilla-mobile/fenix/pull/16942), [2](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | -| metrics.mozilla_products |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all the Mozilla products installed on device. We currently scan for: Firefox, Firefox Beta, Firefox Aurora, Firefox Nightly, Firefox Fdroid, Firefox Lite, Reference Browser, Reference Browser Debug, Fenix, Focus, and Lockwise. |[1](https://github.com/mozilla-mobile/fenix/pull/1953/), [2](https://github.com/mozilla-mobile/fenix/pull/5216), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| metrics.recently_used_pwa_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many PWAs a user has recently used. Threshold for "recency" set in HomeActivity#PWA_RECENTLY_USED_THRESHOLD. Currently we are not told by the OS when a PWA is removed by the user, so we use the "recently used" heuristic to judge how many PWAs are still active, as a proxy for "installed". This value will only be set if the user has at least *one* recently used PWA. If they have 0, this metric will not be sent, resulting in a null value during analysis on the server-side. To disambiguate between a failed `recently_used_pwa_count` metric and 0 recent PWAs, please see `has_recent_pwas`. |[1](https://github.com/mozilla-mobile/fenix/pull/11982#pullrequestreview-437963817), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.search_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The labels for this counter are `.`. If the search engine is bundled with Fenix `search-engine-name` will be the name of the search engine. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be `custom`. `source` will be: `action`, `suggestion`, `widget`, `shortcut`, `topsite` (depending on the source from which the search started). Also added the `other` option for the source but it should never enter on this case. |[1](https://github.com/mozilla-mobile/fenix/pull/1677), [2](https://github.com/mozilla-mobile/fenix/pull/5216), [3](https://github.com/mozilla-mobile/fenix/pull/7310), [4](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| metrics.search_widget_installed |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the search widget is installed |[1](https://github.com/mozilla-mobile/fenix/pull/10958), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.tab_view_setting |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string that indicates the setting for tab view: GRID, LIST |[1](https://github.com/mozilla-mobile/fenix/pull/15811#issuecomment-706402952)||2021-08-01 |2 | -| metrics.tabs_open_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many NORMAL tabs a user has open. This value will only be set if the user has at least *one* open tab. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `tabs_open_count` ping and 0 open tabs, please see `has_open_tabs`. |[1](https://github.com/mozilla-mobile/fenix/pull/12024), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.toolbar_position |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string that indicates the new position of the toolbar TOP or BOTTOM |[1](https://github.com/mozilla-mobile/fenix/pull/6608), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| metrics.top_sites_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many top sites a user has. This value will only be set if the user has at least *one* top site. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `top_sites_count` ping and 0 top sites, please see `has_top_sites`. |[1](https://github.com/mozilla-mobile/fenix/pull/9556), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| perf.awesomebar.bookmark_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a bookmarks awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.awesomebar.clipboard_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a clipboard awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.awesomebar.history_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a history awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.awesomebar.search_engine_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a search engine awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.awesomebar.session_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a session awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.awesomebar.shortcuts_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a shortcuts awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.awesomebar.synced_tabs_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a synced tabs awesomebar suggestion query. |[1](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.startup.application_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `FenixApplication.onCreate` in the main process. |[1](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | -| perf.startup.home_activity_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeActivity.onCreate`. |[1](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | -| preferences.accessibility_services |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has touch exploration or switch services enabled. These are built into the Android OS, not Fenix prefs. default: "" |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.open_links_in_a_private_tab |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled open links in a private tab. default: false |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.open_links_in_app |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has the open links in apps feature enabled. default: false |[1](https://github.com/mozilla-mobile/fenix/pull/11446), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.remote_debugging |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has remote debugging enabled default: false |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.search_bookmarks |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled bookmark search suggestions default: true |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.search_browsing_history |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled browsing history suggestions. default: true |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.search_suggestions_private |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled showing search suggestions in private mode. default: false (we prompt the user, asking them to make a selection) |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.show_clipboard_suggestions |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled clipboard search suggestions. default: true |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.show_search_shortcuts |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled search shortcuts. default: true |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.show_search_suggestions |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has search suggestions enabled default: true |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.show_voice_search |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled the voice search button. default: true |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.sync |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user is signed into FxA default: false |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.sync_items |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |The list of items the user has chosen to sync with FxA. default: "" if the user is signed out. Otherwise defaults to whatever is set in their FxA account. New accounts set: [bookmarks, history, passwords, tabs] |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.telemetry |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has telemetry enabled. Note we should never receive a "false" value for this since telemetry would not send in that case. default: true |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.theme |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |The theme the user has enabled. "light," "dark," "system," or "battery" default: "system" for API 28+, else "light" |[1](https://github.com/mozilla-mobile/fenix/pull/11446), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.toolbar_position |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |The position of the toolbar default: bottom (defaults to top if the user has accessibility services) |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| preferences.tracking_protection |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |What type of enhanced tracking protection the user has enabled. "standard," "strict," "custom," or "" (if disabled) default: "standard" |[1](https://github.com/mozilla-mobile/fenix/pull/11211), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| search.default_engine.code |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |If the search engine is pre-loaded with Fenix this value will be the search engine identifier. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be "custom" |[1](https://github.com/mozilla-mobile/fenix/pull/1606), [2](https://github.com/mozilla-mobile/fenix/pull/5216), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| search.default_engine.name |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |If the search engine is pre-loaded with Fenix this value will be the search engine name. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be "custom" |[1](https://github.com/mozilla-mobile/fenix/pull/1606), [2](https://github.com/mozilla-mobile/fenix/pull/5216), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| search.default_engine.submission_url |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |If the search engine is pre-loaded with Fenix this value will be he base URL we use to build the search query for the search engine. For example: https://mysearchengine.com/?query=%s. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be "custom" |[1](https://github.com/mozilla-mobile/fenix/pull/1606), [2](https://github.com/mozilla-mobile/fenix/pull/5216), [3](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | -| storage.stats.app_bytes |[memory_distribution](https://mozilla.github.io/glean/book/user/metrics/memory_distribution.html) |The size of the app's APK and related files as installed: this is expected to be larger than download size. This is the output of [StorageStats.getAppBytes](https://developer.android.com/reference/android/app/usage/StorageStats#getAppBytes()) so see that for details. This value is only available on Android 8+. A similar value may be available on the Google Play dashboard: we can use this value to see if that value is reliable enough. |[1](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [2](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | -| storage.stats.cache_bytes |[memory_distribution](https://mozilla.github.io/glean/book/user/metrics/memory_distribution.html) |The size of all cached data in the app. This is the output of [StorageStats.getCacheBytes](https://developer.android.com/reference/android/app/usage/StorageStats#getCacheBytes()) so see that for details. This value is only available on Android 8+. |[1](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [2](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | -| storage.stats.data_dir_bytes |[memory_distribution](https://mozilla.github.io/glean/book/user/metrics/memory_distribution.html) |The size of all data minus `cache_bytes`. This is the output of [StorageStats.getDataBytes](https://developer.android.com/reference/android/app/usage/StorageStats#getDataBytes()) except we subtract the value of `cache_bytes` so the cache is not measured redundantly; see that method for details. This value is only available on Android 8+. |[1](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [2](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | -| storage.stats.query_stats_duration |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |How long it took to query the device for the StorageStats that contain the file size information. The docs say it may be expensive so we want to ensure it's not too expensive. This value is only available on Android 8+. |[1](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [2](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | +| addons.enabled_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all enabled add-ons on the device. |[mozilla-mobile/fenix#11080](https://github.com/mozilla-mobile/fenix/pull/11080), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| addons.has_enabled_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has enabled add-ons on the device. |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| addons.has_installed_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has installed add-ons on the device. |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| addons.installed_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all installed add-ons on the device. |[mozilla-mobile/fenix#11080](https://github.com/mozilla-mobile/fenix/pull/11080), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| browser.search.ad_clicks |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records clicks of adverts on SERP pages. The key format is ‘’. |[mozilla-mobile/fenix#10112](https://github.com/mozilla-mobile/fenix/pull/10112), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| browser.search.in_content |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records the type of interaction a user has on SERP pages. |[mozilla-mobile/fenix#10167](https://github.com/mozilla-mobile/fenix/pull/10167), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| browser.search.with_ads |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records counts of SERP pages with adverts displayed. The key format is ‘’. |[mozilla-mobile/fenix#10112](https://github.com/mozilla-mobile/fenix/pull/10112), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| engine_tab.kill_background_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a background tab at the time its content process got killed. |[mozilla-mobile/fenix#17864](https://github.com/mozilla-mobile/fenix/pull/17864)||2021-12-31 |1 | +| engine_tab.kill_foreground_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a foreground (selected) tab at the time its content process got killed. |[Review 1](TBD)||2021-12-31 |1 | +| engine_tab.kills |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |How often was the content process of a foreground (selected) or background tab killed. |[mozilla-mobile/fenix#17864](https://github.com/mozilla-mobile/fenix/pull/17864)|
  • foreground
  • background
|2021-12-31 |1 | +| events.normal_and_private_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This includes private browsing. This does not include background page requests and URIs from embedded pages but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[mozilla-mobile/fenix#17935](https://github.com/mozilla-mobile/fenix/pull/17935)||2022-08-01 |2 | +| events.total_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This does not include background page requests and URIs from embedded pages or private browsing but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[mozilla-mobile/fenix#1785](https://github.com/mozilla-mobile/fenix/pull/1785), [mozilla-mobile/fenix#8314](https://github.com/mozilla-mobile/fenix/pull/8314), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.adjust_ad_group |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust ad group ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[mozilla-mobile/fenix#9253](https://github.com/mozilla-mobile/fenix/pull/9253), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.adjust_campaign |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust campaign ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[mozilla-mobile/fenix#5579](https://github.com/mozilla-mobile/fenix/pull/5579), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | +| metrics.adjust_creative |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust creative ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[mozilla-mobile/fenix#9253](https://github.com/mozilla-mobile/fenix/pull/9253), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.adjust_network |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the Adjust network ID from which the user installed Fenix. This will not send on the first session the user runs. If the install is organic, this will be empty. |[mozilla-mobile/fenix#9253](https://github.com/mozilla-mobile/fenix/pull/9253), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.close_tab_setting |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string that indicates the setting for tab closing: MANUAL, ONE_DAY, ONE_WEEK, ONE_MONTH |[mozilla-mobile/fenix#15811](https://github.com/mozilla-mobile/fenix/pull/15811#issuecomment-706402952)||2021-08-01 |2 | +| metrics.default_browser |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Is Fenix the default browser? |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.default_moz_browser |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |The name of the default browser on device if and only if it's a Mozilla owned product |[mozilla-mobile/fenix#1953/](https://github.com/mozilla-mobile/fenix/pull/1953/), [mozilla-mobile/fenix#5216](https://github.com/mozilla-mobile/fenix/pull/5216), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| metrics.desktop_bookmarks_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many bookmarks a user has in the desktop folder. This value will only be set if the user has at least *one* bookmark. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `desktop_bookmarks_count` ping and 0 bookmarks, please see `has_desktop_bookmarks`. |[mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942), [mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | +| metrics.distribution_id |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string containing the distribution identifier. This is currently used to identify installs from Mozilla Online. |[mozilla-mobile/fenix/issues/16075](https://github.com/mozilla-mobile/fenix/issues/16075)||never |1 | +| metrics.has_desktop_bookmarks |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has bookmarks in the desktop folder |[mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942), [mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | +| metrics.has_mobile_bookmarks |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has bookmarks in the mobile folder |[mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942), [mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | +| metrics.has_open_tabs |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has any open NORMAL tabs. |[mozilla-mobile/fenix#12024](https://github.com/mozilla-mobile/fenix/pull/12024), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.has_recent_pwas |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has recently used PWAs. See recently_used_pwa_count for the actual count. |[mozilla-mobile/fenix#11982](https://github.com/mozilla-mobile/fenix/pull/11982#pullrequestreview-437963817), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.has_top_sites |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |A boolean that indicates if the user has top sites |[mozilla-mobile/fenix#9556](https://github.com/mozilla-mobile/fenix/pull/9556), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.mobile_bookmarks_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many bookmarks a user has in the mobile folder. This value will only be set if the user has at least *one* bookmark. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `mobile_bookmarks_count` ping and 0 bookmarks, please see `has_mobile_bookmarks`. |[mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942), [mozilla-mobile/fenix#16942](https://github.com/mozilla-mobile/fenix/pull/16942#issuecomment-742794701)||2021-08-01 |2 | +| metrics.mozilla_products |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all the Mozilla products installed on device. We currently scan for: Firefox, Firefox Beta, Firefox Aurora, Firefox Nightly, Firefox Fdroid, Firefox Lite, Reference Browser, Reference Browser Debug, Fenix, Focus, and Lockwise. |[mozilla-mobile/fenix#1953/](https://github.com/mozilla-mobile/fenix/pull/1953/), [mozilla-mobile/fenix#5216](https://github.com/mozilla-mobile/fenix/pull/5216), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| metrics.recently_used_pwa_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many PWAs a user has recently used. Threshold for "recency" set in HomeActivity#PWA_RECENTLY_USED_THRESHOLD. Currently we are not told by the OS when a PWA is removed by the user, so we use the "recently used" heuristic to judge how many PWAs are still active, as a proxy for "installed". This value will only be set if the user has at least *one* recently used PWA. If they have 0, this metric will not be sent, resulting in a null value during analysis on the server-side. To disambiguate between a failed `recently_used_pwa_count` metric and 0 recent PWAs, please see `has_recent_pwas`. |[mozilla-mobile/fenix#11982](https://github.com/mozilla-mobile/fenix/pull/11982#pullrequestreview-437963817), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.search_count |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |The labels for this counter are `.`. If the search engine is bundled with Fenix `search-engine-name` will be the name of the search engine. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be `custom`. `source` will be: `action`, `suggestion`, `widget`, `shortcut`, `topsite` (depending on the source from which the search started). Also added the `other` option for the source but it should never enter on this case. |[mozilla-mobile/fenix#1677](https://github.com/mozilla-mobile/fenix/pull/1677), [mozilla-mobile/fenix#5216](https://github.com/mozilla-mobile/fenix/pull/5216), [mozilla-mobile/fenix#7310](https://github.com/mozilla-mobile/fenix/pull/7310), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| metrics.search_widget_installed |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the search widget is installed |[mozilla-mobile/fenix#10958](https://github.com/mozilla-mobile/fenix/pull/10958), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.tab_view_setting |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string that indicates the setting for tab view: GRID, LIST |[mozilla-mobile/fenix#15811](https://github.com/mozilla-mobile/fenix/pull/15811#issuecomment-706402952)||2021-08-01 |2 | +| metrics.tabs_open_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many NORMAL tabs a user has open. This value will only be set if the user has at least *one* open tab. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `tabs_open_count` ping and 0 open tabs, please see `has_open_tabs`. |[mozilla-mobile/fenix#12024](https://github.com/mozilla-mobile/fenix/pull/12024), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.toolbar_position |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A string that indicates the new position of the toolbar TOP or BOTTOM |[mozilla-mobile/fenix#6608](https://github.com/mozilla-mobile/fenix/pull/6608), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| metrics.top_sites_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter that indicates how many top sites a user has. This value will only be set if the user has at least *one* top site. If they have 0, this ping will not get sent, resulting in a null value. To disambiguate between a failed `top_sites_count` ping and 0 top sites, please see `has_top_sites`. |[mozilla-mobile/fenix#9556](https://github.com/mozilla-mobile/fenix/pull/9556), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| perf.awesomebar.bookmark_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a bookmarks awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | +| perf.awesomebar.clipboard_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a clipboard awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | +| perf.awesomebar.history_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a history awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | +| perf.awesomebar.search_engine_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a search engine awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | +| perf.awesomebar.session_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a session awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | +| perf.awesomebar.shortcuts_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a shortcuts awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | +| perf.awesomebar.synced_tabs_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a synced tabs awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | +| perf.startup.application_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `FenixApplication.onCreate` in the main process. |[mozilla-mobile/fenix#17973](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | +| perf.startup.home_activity_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeActivity.onCreate`. |[mozilla-mobile/fenix#17973](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | +| preferences.accessibility_services |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has touch exploration or switch services enabled. These are built into the Android OS, not Fenix prefs. default: "" |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.open_links_in_a_private_tab |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled open links in a private tab. default: false |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.open_links_in_app |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has the open links in apps feature enabled. default: false |[mozilla-mobile/fenix#11446](https://github.com/mozilla-mobile/fenix/pull/11446), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.remote_debugging |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has remote debugging enabled default: false |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.search_bookmarks |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled bookmark search suggestions default: true |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.search_browsing_history |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled browsing history suggestions. default: true |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.search_suggestions_private |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled showing search suggestions in private mode. default: false (we prompt the user, asking them to make a selection) |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.show_clipboard_suggestions |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled clipboard search suggestions. default: true |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.show_search_shortcuts |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled search shortcuts. default: true |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.show_search_suggestions |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has search suggestions enabled default: true |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.show_voice_search |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled the voice search button. default: true |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.sync |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user is signed into FxA default: false |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.sync_items |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |The list of items the user has chosen to sync with FxA. default: "" if the user is signed out. Otherwise defaults to whatever is set in their FxA account. New accounts set: [bookmarks, history, passwords, tabs] |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.telemetry |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has telemetry enabled. Note we should never receive a "false" value for this since telemetry would not send in that case. default: true |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.theme |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |The theme the user has enabled. "light," "dark," "system," or "battery" default: "system" for API 28+, else "light" |[mozilla-mobile/fenix#11446](https://github.com/mozilla-mobile/fenix/pull/11446), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.toolbar_position |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |The position of the toolbar default: bottom (defaults to top if the user has accessibility services) |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| preferences.tracking_protection |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |What type of enhanced tracking protection the user has enabled. "standard," "strict," "custom," or "" (if disabled) default: "standard" |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| search.default_engine.code |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |If the search engine is pre-loaded with Fenix this value will be the search engine identifier. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be "custom" |[mozilla-mobile/fenix#1606](https://github.com/mozilla-mobile/fenix/pull/1606), [mozilla-mobile/fenix#5216](https://github.com/mozilla-mobile/fenix/pull/5216), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| search.default_engine.name |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |If the search engine is pre-loaded with Fenix this value will be the search engine name. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be "custom" |[mozilla-mobile/fenix#1606](https://github.com/mozilla-mobile/fenix/pull/1606), [mozilla-mobile/fenix#5216](https://github.com/mozilla-mobile/fenix/pull/5216), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| search.default_engine.submission_url |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |If the search engine is pre-loaded with Fenix this value will be he base URL we use to build the search query for the search engine. For example: https://mysearchengine.com/?query=%s. If it's a custom search engine (defined: https://github.com/mozilla-mobile/fenix/issues/1607) the value will be "custom" |[mozilla-mobile/fenix#1606](https://github.com/mozilla-mobile/fenix/pull/1606), [mozilla-mobile/fenix#5216](https://github.com/mozilla-mobile/fenix/pull/5216), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | +| storage.stats.app_bytes |[memory_distribution](https://mozilla.github.io/glean/book/user/metrics/memory_distribution.html) |The size of the app's APK and related files as installed: this is expected to be larger than download size. This is the output of [StorageStats.getAppBytes](https://developer.android.com/reference/android/app/usage/StorageStats#getAppBytes()) so see that for details. This value is only available on Android 8+. A similar value may be available on the Google Play dashboard: we can use this value to see if that value is reliable enough. |[mozilla-mobile/fenix#12876](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [mozilla-mobile/fenix#17704](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | +| storage.stats.cache_bytes |[memory_distribution](https://mozilla.github.io/glean/book/user/metrics/memory_distribution.html) |The size of all cached data in the app. This is the output of [StorageStats.getCacheBytes](https://developer.android.com/reference/android/app/usage/StorageStats#getCacheBytes()) so see that for details. This value is only available on Android 8+. |[mozilla-mobile/fenix#12876](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [mozilla-mobile/fenix#17704](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | +| storage.stats.data_dir_bytes |[memory_distribution](https://mozilla.github.io/glean/book/user/metrics/memory_distribution.html) |The size of all data minus `cache_bytes`. This is the output of [StorageStats.getDataBytes](https://developer.android.com/reference/android/app/usage/StorageStats#getDataBytes()) except we subtract the value of `cache_bytes` so the cache is not measured redundantly; see that method for details. This value is only available on Android 8+. |[mozilla-mobile/fenix#12876](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [mozilla-mobile/fenix#17704](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | +| storage.stats.query_stats_duration |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |How long it took to query the device for the StorageStats that contain the file size information. The docs say it may be expensive so we want to ensure it's not too expensive. This value is only available on Android 8+. |[mozilla-mobile/fenix#12876](https://github.com/mozilla-mobile/fenix/pull/12876#issuecomment-666770732), [mozilla-mobile/fenix#17704](https://github.com/mozilla-mobile/fenix/pull/17704#issue-564299127)||2021-08-01 |1, 2 | ## startup-timeline @@ -366,16 +374,17 @@ This ping includes the [client id](https://mozilla.github.io/glean/book/user/pin - - -The following metrics are added to the ping: +All Glean pings contain built-in metrics in the [`ping_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-ping_info-section) and [`client_info`](https://mozilla.github.io/glean/book/user/pings/index.html#the-client_info-section) sections. + +In addition to those built-in metrics, the following metrics are added to the ping: | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| startup.timeline.clock_ticks_per_second_v2 |[quantity](https://mozilla.github.io/glean/book/user/metrics/quantity.html) |The number of clock tick time units that occur in one second on this particular device. This value is expected to be used in conjunction with the `framework_primary/secondary` metrics. |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068), [3](https://github.com/mozilla-mobile/fenix/pull/18158#issue-579593943)|
  • unit: clock ticks per second
|2021-08-01 |1 | -| startup.timeline.framework_primary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second_v2` equal to 100: if it's not equal to 100, then this value is captured in `framework_secondary`. We split this into two metrics to make it easier to analyze in GLAM. We split on 100 because when we did our initial brief analysis - https://sql.telemetry.mozilla.org/queries/75591 - the results for clocks ticks were overwhelmingly 100. The duration is calculated from `appInitTimestamp - processStartTimestamp`. `processStartTimestamp` is derived from the clock tick time unit, which is expected to be less granular than nanoseconds. Therefore, we convert and round our timestamps to clock ticks before computing the difference and convert back to nanoseconds to report. For debugging purposes, `clock_ticks_per_second_v2`, which may vary between devices, is also reported as a metric |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068), [3](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | -| startup.timeline.framework_secondary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second_v2` not equal to 100. For more details on this metric, see `framework_primary` |[1](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | -| startup.timeline.framework_start_error |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |An error when attempting to record `framework_primary/secondary` - the application init timestamp returned a negative value - which is likely indicative of a bug in the implementation. |[1](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | -| startup.timeline.framework_start_read_error |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |An error when attempting to read stats from /proc pseudo-filesystem - privacy managers can block access to reading these files - the application will catch a file reading exception. |[1](https://github.com/mozilla-mobile/fenix/pull/10481), [2](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | - +| startup.timeline.clock_ticks_per_second_v2 |[quantity](https://mozilla.github.io/glean/book/user/metrics/quantity.html) |The number of clock tick time units that occur in one second on this particular device. This value is expected to be used in conjunction with the `framework_primary/secondary` metrics. |[mozilla-mobile/fenix#9788](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068), [mozilla-mobile/fenix#18158](https://github.com/mozilla-mobile/fenix/pull/18158#issue-579593943)|
  • unit: clock ticks per second
|2021-08-01 |1 | +| startup.timeline.framework_primary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second_v2` equal to 100: if it's not equal to 100, then this value is captured in `framework_secondary`. We split this into two metrics to make it easier to analyze in GLAM. We split on 100 because when we did our initial brief analysis - https://sql.telemetry.mozilla.org/queries/75591 - the results for clocks ticks were overwhelmingly 100. The duration is calculated from `appInitTimestamp - processStartTimestamp`. `processStartTimestamp` is derived from the clock tick time unit, which is expected to be less granular than nanoseconds. Therefore, we convert and round our timestamps to clock ticks before computing the difference and convert back to nanoseconds to report. For debugging purposes, `clock_ticks_per_second_v2`, which may vary between devices, is also reported as a metric |[mozilla-mobile/fenix#9788](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068), [mozilla-mobile/fenix#18043](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | +| startup.timeline.framework_secondary |[timespan](https://mozilla.github.io/glean/book/user/metrics/timespan.html) |The duration the Android framework takes to start before letting us run code in `*Application.init` when this device has `clock_ticks_per_second_v2` not equal to 100. For more details on this metric, see `framework_primary` |[mozilla-mobile/fenix#18043](https://github.com/mozilla-mobile/fenix/pull/18043#issue-575389284)||2021-08-01 |1 | +| startup.timeline.framework_start_error |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |An error when attempting to record `framework_primary/secondary` - the application init timestamp returned a negative value - which is likely indicative of a bug in the implementation. |[mozilla-mobile/fenix#9788](https://github.com/mozilla-mobile/fenix/pull/9788#pullrequestreview-394228626), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | +| startup.timeline.framework_start_read_error |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |An error when attempting to read stats from /proc pseudo-filesystem - privacy managers can block access to reading these files - the application will catch a file reading exception. |[mozilla-mobile/fenix#10481](https://github.com/mozilla-mobile/fenix/pull/10481), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1 | Data categories are [defined here](https://wiki.mozilla.org/Firefox/Data_Collection). From 22a8de0aa9ac71c78a85eeab7789ee0fe60d2c83 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 2 Mar 2021 15:37:18 +0000 Subject: [PATCH 031/149] Update Android Components version to 74.0.20210302143118. --- 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 56da1c801..05364c038 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 = "74.0.20210301143120" + const val VERSION = "74.0.20210302143118" } From 85c6ef2cf7f3520b8fa1e410146d364f6feb3741 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Wed, 3 Mar 2021 00:05:07 +0000 Subject: [PATCH 032/149] Import l10n. --- app/src/main/res/values-uk/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 9dd9736c7..429f94e54 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -1090,7 +1090,7 @@ Видалити дані перегляду - Відкрити вкладки + Відкриті вкладки Вкладок: %d From dabc658c5c812a9a9ea5358c6c52d77340c19a21 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Tue, 2 Mar 2021 15:55:11 +0100 Subject: [PATCH 033/149] metrics.yaml: Update data review link of engine_tab.kill_foreground_age metric. --- app/metrics.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 8539e4519..4670b97b3 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4515,7 +4515,7 @@ engine_tab: bugs: - https://github.com/mozilla-mobile/android-components/issues/9366 data_reviews: - - TBD + - https://github.com/mozilla-mobile/fenix/pull/17864 data_sensitivity: - technical notification_emails: From 8f5244d528ddad80cab46c384889acc56432b1db Mon Sep 17 00:00:00 2001 From: "Vitaly V. Pinchuk" Date: Wed, 3 Mar 2021 15:34:48 +0300 Subject: [PATCH 034/149] Closes #18150: select tabs button not displayed (#18216) For #18150: Improve showing/hiding of "Select tabs" button in tabs tray Payload argument is unavailable after first call of notifyItemChanged() as the whole View need to be updated. Inject a "isPrivate" lambda in the adapter so it will always know what tabs are currently showing and so always ensure the expected behavior. --- .../java/org/mozilla/fenix/ui/SmokeTest.kt | 27 +++++++++++++++++++ .../mozilla/fenix/ui/robots/TabDrawerRobot.kt | 5 ++++ .../tabtray/SaveToCollectionsButtonAdapter.kt | 4 +-- .../org/mozilla/fenix/tabtray/TabTrayView.kt | 3 ++- 4 files changed, 36 insertions(+), 3 deletions(-) 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 78693bf7c..798cfd627 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -1055,6 +1055,33 @@ class SmokeTest { } } + @Test + fun selectTabsButtonVisibilityTest() { + homeScreen { + }.dismissOnboarding() + + val firstWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) + val secondWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 2) + + navigationToolbar { + }.enterURLAndEnterToBrowser(firstWebPage.url) { + mDevice.waitForIdle() + }.openTabDrawer { + }.openNewTab { + }.submitQuery(secondWebPage.url.toString()) { + mDevice.waitForIdle() + }.openTabDrawer { + }.toggleToPrivateTabs { + }.openNewTab { + }.dismissSearchBar { } + + homeScreen { + }.openTabDrawer { + }.toggleToNormalTabs { + verifySelectTabsButton() + } + } + @Test fun privateTabsTrayWithOpenedTabTest() { val website = TestAssetHelper.getGenericAsset(mockWebServer, 1) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt index 0f84a9ef0..745701837 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt @@ -77,6 +77,7 @@ class TabDrawerRobot { fun verifyPrivateModeSelected() = assertPrivateModeSelected() fun verifyNormalModeSelected() = assertNormalModeSelected() fun verifyNewTabButton() = assertNewTabButton() + fun verifySelectTabsButton() = assertSelectTabsButton() fun verifyTabTrayOverflowMenu(visibility: Boolean) = assertTabTrayOverflowButton(visibility) fun verifyTabTrayIsClosed() = assertTabTrayDoesNotExist() @@ -391,6 +392,10 @@ private fun assertNewTabButton() = onView(withId(R.id.new_tab_button)) .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) +private fun assertSelectTabsButton() = + onView(withText("Select tabs")) + .check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE))) + private fun assertNormalModeSelected() = normalBrowsingButton() .check(matches(ViewMatchers.isSelected())) diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt index 39dc062b6..19ea89a2a 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/SaveToCollectionsButtonAdapter.kt @@ -23,7 +23,7 @@ import org.mozilla.fenix.tabtray.SaveToCollectionsButtonAdapter.ViewHolder */ class SaveToCollectionsButtonAdapter( private val interactor: TabTrayInteractor, - private val isPrivate: Boolean = false + private val isPrivate: () -> Boolean = { false } ) : ListAdapter(DiffCallback) { init { @@ -66,7 +66,7 @@ class SaveToCollectionsButtonAdapter( } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - holder.itemView.isVisible = !isPrivate && + holder.itemView.isVisible = !isPrivate() && interactor.onModeRequested() is TabTrayDialogFragmentState.Mode.Normal } diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index db3768a32..5b051fbbe 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -92,7 +92,8 @@ class TabTrayView( private var multiselectMenu: BrowserMenu? = null private var tabsTouchHelper: TabsTouchHelper - private val collectionsButtonAdapter = SaveToCollectionsButtonAdapter(interactor, isPrivate) + private val collectionsButtonAdapter = + SaveToCollectionsButtonAdapter(interactor) { isPrivateModeSelected } private var hasLoaded = false From 05a14efda7987e0efdbc67c58415d10cbcbfc6d7 Mon Sep 17 00:00:00 2001 From: mcarare Date: Tue, 2 Mar 2021 16:08:19 +0200 Subject: [PATCH 035/149] For #18228: Populate menu options in onResume along with toolbar init. --- .../fenix/settings/logins/fragment/SavedLoginsFragment.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt index 9339dcdbe..5cc4fbce1 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt @@ -64,11 +64,6 @@ class SavedLoginsFragment : Fragment() { initToolbar() } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setHasOptionsMenu(true) - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -164,6 +159,7 @@ class SavedLoginsFragment : Fragment() { ) = (activity as HomeActivity).openToBrowserAndLoad(searchTermOrURL, newTab, from) private fun initToolbar() { + setHasOptionsMenu(true) showToolbar(getString(R.string.preferences_passwords_saved_logins)) (activity as HomeActivity).getSupportActionBarAndInflateIfNecessary() .setDisplayShowTitleEnabled(false) From 80046c6978144f0c85cfe77430d26a4fc4a0ab64 Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 1 Mar 2021 14:47:30 +0200 Subject: [PATCH 036/149] For #18195: Fix speech recognition for voice search in widget. --- app/src/main/AndroidManifest.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b2095bb1..585fba1d8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,10 @@ + + + Date: Wed, 3 Mar 2021 16:25:49 +0200 Subject: [PATCH 037/149] Update documentation after PR 18257. --- docs/metrics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/metrics.md b/docs/metrics.md index 580bbbe35..0ecbf2827 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -289,7 +289,7 @@ In addition to those built-in metrics, the following metrics are added to the pi | browser.search.in_content |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records the type of interaction a user has on SERP pages. |[mozilla-mobile/fenix#10167](https://github.com/mozilla-mobile/fenix/pull/10167), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | browser.search.with_ads |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records counts of SERP pages with adverts displayed. The key format is ‘’. |[mozilla-mobile/fenix#10112](https://github.com/mozilla-mobile/fenix/pull/10112), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | engine_tab.kill_background_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a background tab at the time its content process got killed. |[mozilla-mobile/fenix#17864](https://github.com/mozilla-mobile/fenix/pull/17864)||2021-12-31 |1 | -| engine_tab.kill_foreground_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a foreground (selected) tab at the time its content process got killed. |[Review 1](TBD)||2021-12-31 |1 | +| engine_tab.kill_foreground_age |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Measures the age of the engine session of a foreground (selected) tab at the time its content process got killed. |[mozilla-mobile/fenix#17864](https://github.com/mozilla-mobile/fenix/pull/17864)||2021-12-31 |1 | | engine_tab.kills |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |How often was the content process of a foreground (selected) or background tab killed. |[mozilla-mobile/fenix#17864](https://github.com/mozilla-mobile/fenix/pull/17864)|
  • foreground
  • background
|2021-12-31 |1 | | events.normal_and_private_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This includes private browsing. This does not include background page requests and URIs from embedded pages but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[mozilla-mobile/fenix#17935](https://github.com/mozilla-mobile/fenix/pull/17935)||2022-08-01 |2 | | events.total_uri_count |[counter](https://mozilla.github.io/glean/book/user/metrics/counter.html) |A counter of URIs visited by the user in the current session, including page reloads. This does not include background page requests and URIs from embedded pages or private browsing but may be incremented without user interaction by website scripts that programmatically redirect to a new location. |[mozilla-mobile/fenix#1785](https://github.com/mozilla-mobile/fenix/pull/1785), [mozilla-mobile/fenix#8314](https://github.com/mozilla-mobile/fenix/pull/8314), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From 67c8345364f38b56844f4c13ba1afafc5f0c59b7 Mon Sep 17 00:00:00 2001 From: Oana Horvath Date: Mon, 22 Feb 2021 10:50:47 +0200 Subject: [PATCH 038/149] For #18040: no network access startup test --- .../org/mozilla/fenix/helpers/TestHelper.kt | 34 ++++++ .../NetworkConnectionIdlingResource.kt | 48 +++++++++ .../fenix/ui/NoNetworkAccessStartupTests.kt | 102 ++++++++++++++++++ 3 files changed, 184 insertions(+) create mode 100644 app/src/androidTest/java/org/mozilla/fenix/helpers/idlingresource/NetworkConnectionIdlingResource.kt create mode 100644 app/src/androidTest/java/org/mozilla/fenix/ui/NoNetworkAccessStartupTests.kt 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 9dffa1728..8d4a01f4c 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt @@ -11,13 +11,16 @@ import android.net.Uri import android.os.Build import android.os.Environment import androidx.preference.PreferenceManager +import androidx.test.espresso.Espresso import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.IdlingRegistry import androidx.test.espresso.action.ViewActions.longClick import androidx.test.espresso.assertion.ViewAssertions import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.By +import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiScrollable import androidx.test.uiautomator.UiSelector import androidx.test.uiautomator.Until @@ -26,6 +29,7 @@ import org.hamcrest.CoreMatchers import org.hamcrest.CoreMatchers.allOf import org.mozilla.fenix.R import org.mozilla.fenix.helpers.ext.waitNotNull +import org.mozilla.fenix.helpers.idlingresource.NetworkConnectionIdlingResource import org.mozilla.fenix.ui.robots.mDevice import java.io.File @@ -117,4 +121,34 @@ object TestHelper { } } } + + fun setNetworkEnabled(enabled: Boolean) { + val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + val networkDisconnectedIdlingResource = NetworkConnectionIdlingResource(false) + val networkConnectedIdlingResource = NetworkConnectionIdlingResource(true) + + when (enabled) { + true -> { + mDevice.executeShellCommand("svc data enable") + mDevice.executeShellCommand("svc wifi enable") + + // Wait for network connection to be completely enabled + IdlingRegistry.getInstance().register(networkConnectedIdlingResource) + Espresso.onIdle { + IdlingRegistry.getInstance().unregister(networkConnectedIdlingResource) + } + } + + false -> { + mDevice.executeShellCommand("svc data disable") + mDevice.executeShellCommand("svc wifi disable") + + // Wait for network connection to be completely disabled + IdlingRegistry.getInstance().register(networkDisconnectedIdlingResource) + Espresso.onIdle { + IdlingRegistry.getInstance().unregister(networkDisconnectedIdlingResource) + } + } + } + } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/idlingresource/NetworkConnectionIdlingResource.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/idlingresource/NetworkConnectionIdlingResource.kt new file mode 100644 index 000000000..f5b3b4364 --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/idlingresource/NetworkConnectionIdlingResource.kt @@ -0,0 +1,48 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.helpers.idlingresource + +import android.net.ConnectivityManager +import androidx.core.content.getSystemService +import androidx.test.espresso.IdlingResource +import androidx.test.platform.app.InstrumentationRegistry +import org.mozilla.fenix.ext.isOnline + +/** + * An IdlingResource implementation that waits until the network connection is online or offline. + * The networkConnected parameter sets the expected connection status. + * Only after connecting/disconnecting has completed further actions will be performed. + */ + +class NetworkConnectionIdlingResource(private val networkConnected: Boolean) : IdlingResource { + private var resourceCallback: IdlingResource.ResourceCallback? = null + private val connectionManager = + InstrumentationRegistry.getInstrumentation().context.getSystemService() + + override fun getName(): String { + return this::javaClass.name + } + + override fun isIdleNow(): Boolean { + val idle = + if (networkConnected) { + isOnline() + } else { + !isOnline() + } + if (idle) + resourceCallback?.onTransitionToIdle() + return idle + } + + override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { + if (callback != null) + resourceCallback = callback + } + + private fun isOnline(): Boolean { + return connectionManager!!.isOnline() + } +} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NoNetworkAccessStartupTests.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NoNetworkAccessStartupTests.kt new file mode 100644 index 000000000..c1c2d582e --- /dev/null +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NoNetworkAccessStartupTests.kt @@ -0,0 +1,102 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.ui + +import androidx.core.net.toUri +import org.junit.After +import org.junit.Rule +import org.junit.Test +import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.HomeActivityTestRule +import org.mozilla.fenix.helpers.TestHelper.packageName +import org.mozilla.fenix.helpers.TestHelper.setNetworkEnabled +import org.mozilla.fenix.helpers.TestHelper.verifyUrl +import org.mozilla.fenix.ui.robots.browserScreen +import org.mozilla.fenix.ui.robots.homeScreen +import org.mozilla.fenix.ui.robots.navigationToolbar + +/** + * Tests to verify some main UI flows with Network connection off + * + */ + +class NoNetworkAccessStartupTests { + + @get:Rule + val activityTestRule = HomeActivityTestRule(launchActivity = false) + + @After + fun tearDown() { + // Restoring network connection + setNetworkEnabled(true) + } + + @Test + // Based on STR from https://github.com/mozilla-mobile/fenix/issues/16886 + fun noNetworkConnectionStartupTest() { + setNetworkEnabled(false) + + activityTestRule.launchActivity(null) + + homeScreen { + }.dismissOnboarding() + homeScreen { + verifyHomeScreen() + } + } + + @Test + // Based on STR from https://github.com/mozilla-mobile/fenix/issues/16886 + fun networkInterruptedFromBrowserToHomeTest() { + val url = "example.com" + + activityTestRule.launchActivity(null) + + navigationToolbar { + }.enterURLAndEnterToBrowser(url.toUri()) {} + + setNetworkEnabled(false) + + browserScreen { + }.goToHomescreen { + verifyHomeScreen() + } + } + + @Test + fun testPageReloadAfterNetworkInterrupted() { + val url = "example.com" + + activityTestRule.launchActivity(null) + + navigationToolbar { + }.enterURLAndEnterToBrowser(url.toUri()) {} + + setNetworkEnabled(false) + + browserScreen { + }.openThreeDotMenu { + }.refreshPage {} + } + + @Test + fun testSignInPageWithNoNetworkConnection() { + setNetworkEnabled(false) + + activityTestRule.launchActivity(null) + + homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openTurnOnSyncMenu { + tapOnUseEmailToSignIn() + verifyUrl( + "firefox.com", + "$packageName:id/mozac_browser_toolbar_url_view", + R.id.mozac_browser_toolbar_url_view + ) + } + } +} From 62bd3b4f95fe73984dc7606769b4514a0f31e96e Mon Sep 17 00:00:00 2001 From: mcarare Date: Fri, 26 Feb 2021 16:05:41 +0200 Subject: [PATCH 039/149] For #18009: Correctly report items in adapter for a11y services. --- .../viewholders/TopSiteViewHolder.kt | 6 ++++ .../utils/AccessibilityGridLayoutManager.kt | 32 +++++++++++++++++++ .../main/res/layout/component_top_sites.xml | 4 +-- 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/utils/AccessibilityGridLayoutManager.kt diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt index 7f1d9b91e..8dae73310 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/viewholders/TopSiteViewHolder.kt @@ -11,6 +11,7 @@ import mozilla.components.feature.top.sites.TopSite import org.mozilla.fenix.R import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor import org.mozilla.fenix.home.sessioncontrol.viewholders.topsites.TopSitesAdapter +import org.mozilla.fenix.utils.AccessibilityGridLayoutManager class TopSiteViewHolder( view: View, @@ -20,8 +21,12 @@ class TopSiteViewHolder( private val topSitesAdapter = TopSitesAdapter(interactor) init { + val gridLayoutManager = + AccessibilityGridLayoutManager(view.context, SPAN_COUNT) + view.top_sites_list.apply { adapter = topSitesAdapter + layoutManager = gridLayoutManager } } @@ -31,5 +36,6 @@ class TopSiteViewHolder( companion object { const val LAYOUT_ID = R.layout.component_top_sites + const val SPAN_COUNT = 4 } } diff --git a/app/src/main/java/org/mozilla/fenix/utils/AccessibilityGridLayoutManager.kt b/app/src/main/java/org/mozilla/fenix/utils/AccessibilityGridLayoutManager.kt new file mode 100644 index 000000000..0e8aea036 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/utils/AccessibilityGridLayoutManager.kt @@ -0,0 +1,32 @@ +/* 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 + +import android.content.Context +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView + +/** + * A GridLayoutManager that can be used to override methods in Android implementation + * to improve ayy1 or fix a11y issues. + */ +class AccessibilityGridLayoutManager( + context: Context, + spanCount: Int +) : GridLayoutManager( + context, + spanCount +) { + override fun getColumnCountForAccessibility( + recycler: RecyclerView.Recycler, + state: RecyclerView.State + ): Int { + return if (itemCount < spanCount) { + itemCount + } else { + super.getColumnCountForAccessibility(recycler, state) + } + } +} diff --git a/app/src/main/res/layout/component_top_sites.xml b/app/src/main/res/layout/component_top_sites.xml index 41f5a29b7..74a5bae39 100644 --- a/app/src/main/res/layout/component_top_sites.xml +++ b/app/src/main/res/layout/component_top_sites.xml @@ -24,7 +24,7 @@ to keep layout_width="match_parent"--> android:clipToPadding="false" android:overScrollMode="never" android:nestedScrollingEnabled="false" - app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" - app:spanCount="4" + tools:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + tools:spanCount="4" tools:listitem="@layout/top_site_item" /> From 49522d1a6d1816ef0157be88c9adb2cfef642b02 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 3 Mar 2021 15:35:00 +0000 Subject: [PATCH 040/149] Update Android Components version to 74.0.20210303143143. --- 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 05364c038..09bacf169 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 = "74.0.20210302143118" + const val VERSION = "74.0.20210303143143" } From 57b7601752fb6f8e51276697171f74a63bffb3ae Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Thu, 4 Mar 2021 00:07:55 +0000 Subject: [PATCH 041/149] Import l10n. --- app/src/main/res/values-cak/strings.xml | 3 +++ app/src/main/res/values-co/strings.xml | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/app/src/main/res/values-cak/strings.xml b/app/src/main/res/values-cak/strings.xml index b2f1ce800..67e428115 100644 --- a/app/src/main/res/values-cak/strings.xml +++ b/app/src/main/res/values-cak/strings.xml @@ -224,6 +224,9 @@ Tetamäx ch\'aqa\' chik + + Tikanöx %s + Tijaq jun k\'ak\'a\' ruwi\' Firefox diff --git a/app/src/main/res/values-co/strings.xml b/app/src/main/res/values-co/strings.xml index c8b6b8817..4fd224a3c 100644 --- a/app/src/main/res/values-co/strings.xml +++ b/app/src/main/res/values-co/strings.xml @@ -221,6 +221,11 @@ Sapene di più + + Ricercà in %s + + Ricercà direttamente da a barra d’indirizzu + Apre una nova unghjetta in Firefox From cf483ef58094c38c8b92cd13ec0f4d69501982bb Mon Sep 17 00:00:00 2001 From: Mugurell Date: Wed, 24 Feb 2021 19:27:27 +0200 Subject: [PATCH 042/149] For #18034 - Don't animate the toolbar while the tab is loading Use the new controller offered by AC to resolve some browser layout issues and also offer an experience consistent with that of other browsers. --- .../mozilla/fenix/components/toolbar/ToolbarIntegration.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt index fca3accc6..aaa867144 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt @@ -19,6 +19,7 @@ import mozilla.components.concept.engine.Engine import mozilla.components.concept.storage.HistoryStorage import mozilla.components.feature.tabs.toolbar.TabCounterToolbarButton import mozilla.components.feature.toolbar.ToolbarAutocompleteFeature +import mozilla.components.feature.toolbar.ToolbarBehaviorController import mozilla.components.feature.toolbar.ToolbarFeature import mozilla.components.feature.toolbar.ToolbarPresenter import mozilla.components.support.base.feature.LifecycleAwareFeature @@ -53,6 +54,8 @@ abstract class ToolbarIntegration( private val menuPresenter = MenuPresenter(toolbar, context.components.core.store, sessionId) + private val toolbarController = ToolbarBehaviorController(toolbar, store, sessionId) + init { toolbar.display.menuBuilder = toolbarMenu.menuBuilder toolbar.private = isPrivate @@ -61,11 +64,13 @@ abstract class ToolbarIntegration( override fun start() { menuPresenter.start() toolbarPresenter.start() + toolbarController.start() } override fun stop() { menuPresenter.stop() toolbarPresenter.stop() + toolbarController.stop() } fun invalidateMenu() { From 8b7279ebe48fc225326aeecaeac8a66804d84650 Mon Sep 17 00:00:00 2001 From: Jan-Erik Rediger Date: Thu, 4 Mar 2021 17:22:56 +0100 Subject: [PATCH 043/149] Pass auto-generated build info (version code and name) to Glean (#18230) This also re-generated the Glean docs due to an update of the bundled glean-parser. --- .../java/org/mozilla/fenix/glean/BaselinePingTest.kt | 8 +++++--- app/src/main/java/org/mozilla/fenix/FenixApplication.kt | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/glean/BaselinePingTest.kt b/app/src/androidTest/java/org/mozilla/fenix/glean/BaselinePingTest.kt index c3a26ae21..fe941a86e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/glean/BaselinePingTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/glean/BaselinePingTest.kt @@ -27,6 +27,7 @@ import org.junit.BeforeClass import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.GleanMetrics.GleanBuildInfo import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.helpers.HomeActivityTestRule @@ -85,9 +86,10 @@ class BaselinePingTest { // we need to do this on the main thread, as the Glean SDK requires it. GlobalScope.launch(Dispatchers.Main.immediate) { Glean.initialize( - ApplicationProvider.getApplicationContext(), - true, - Configuration(httpClient = httpClient) + applicationContext = ApplicationProvider.getApplicationContext(), + uploadEnabled = true, + configuration = Configuration(httpClient = httpClient), + buildInfo = GleanBuildInfo.buildInfo ) } } diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index d3ddf601b..2b18c803d 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -39,6 +39,7 @@ 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.fenix.GleanMetrics.GleanBuildInfo import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.components.Components import org.mozilla.fenix.components.metrics.MetricServiceType @@ -111,7 +112,8 @@ open class FenixApplication : LocaleAwareApplication(), Provider { httpClient = ConceptFetchHttpUploader( lazy(LazyThreadSafetyMode.NONE) { components.core.client } )), - uploadEnabled = telemetryEnabled + uploadEnabled = telemetryEnabled, + buildInfo = GleanBuildInfo.buildInfo ) } From 42cc4cb452a34ca8c6fcdcb7340e97945b4871c2 Mon Sep 17 00:00:00 2001 From: Elise Richards Date: Thu, 4 Mar 2021 17:22:13 -0600 Subject: [PATCH 044/149] For #17802: Match the design for three-dot menu navigation (#17875) * Feature flag for toolbar menu redesign. Add new items to menu and reorder. * Handle toolbar items in menu controller * Remove bookmark from toolbar nav * Respect toolbar position * Inline toolbar orientation checks * Add Todos for bookmark UI tests * Make variable names consistent --- .../org/mozilla/fenix/ui/BookmarksTest.kt | 2 + .../mozilla/fenix/ui/SettingsBasicsTest.kt | 2 + .../java/org/mozilla/fenix/ui/SmokeTest.kt | 2 + .../components/toolbar/DefaultToolbarMenu.kt | 91 ++++++++++--------- 4 files changed, 55 insertions(+), 42 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/BookmarksTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/BookmarksTest.kt index 3b50a489f..e4893305b 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/BookmarksTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/BookmarksTest.kt @@ -12,6 +12,7 @@ import mozilla.appservices.places.BookmarkRoot 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 @@ -31,6 +32,7 @@ import org.mozilla.fenix.ui.robots.navigationToolbar /** * Tests for verifying basic functionality of bookmarks */ +@Ignore("To be re-implemented in https://github.com/mozilla-mobile/fenix/issues/17979") class BookmarksTest { /* ktlint-disable no-blank-line-before-rbrace */ // This imposes unreadable grouping. 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 14d03757a..a20877bd3 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsBasicsTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsBasicsTest.kt @@ -10,6 +10,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.FenixApplication @@ -105,6 +106,7 @@ class SettingsBasicsTest { } @Test + @Ignore("To be re-implemented in https://github.com/mozilla-mobile/fenix/issues/17979") fun toggleShowVisitedSitesAndBookmarks() { // Bookmarks a few websites, toggles the history and bookmarks setting to off, then verifies if the visited and bookmarked websites do not show in the suggestions. val page1 = getGenericAsset(mockWebServer, 1) 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 798cfd627..4f98efed7 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -322,6 +322,7 @@ class SmokeTest { @Test // Verifies the Bookmark button in a tab's 3 dot menu + @Ignore("To be re-implemented in https://github.com/mozilla-mobile/fenix/issues/17979") fun mainMenuBookmarkButtonTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) @@ -979,6 +980,7 @@ class SmokeTest { @Test // Verifies that deleting a Bookmarks folder also removes the item from inside it. + @Ignore("To be re-implemented in https://github.com/mozilla-mobile/fenix/issues/17799") fun deleteNonEmptyBookmarkFolderTest() { val website = TestAssetHelper.getGenericAsset(mockWebServer, 1) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index 10018c227..256c4341e 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -63,10 +63,11 @@ class DefaultToolbarMenu( val isPinningSupported: Boolean ) : ToolbarMenu { - private var currentUrlIsBookmarked = false + private var isCurrentUrlBookmarked = false private var isBookmarkedJob: Job? = null - - private val selectedSession: TabSessionState? get() = store.state.selectedTab + private val isTopToolbarSelected = shouldReverseItems + private val selectedSession: TabSessionState? + get() = store.state.selectedTab override val menuBuilder by lazy { WebExtensionBrowserMenuBuilder( @@ -146,24 +147,28 @@ class DefaultToolbarMenu( registerForIsBookmarkedUpdates() - val bookmark = BrowserMenuItemToolbar.TwoStateButton( - primaryImageResource = R.drawable.ic_bookmark_filled, - primaryContentDescription = context.getString(R.string.browser_menu_edit_bookmark), - primaryImageTintResource = primaryTextColor(), - // TwoStateButton.isInPrimaryState must be synchronous, and checking bookmark state is - // relatively slow. The best we can do here is periodically compute and cache a new "is - // bookmarked" state, and use that whenever the menu has been opened. - isInPrimaryState = { currentUrlIsBookmarked }, - secondaryImageResource = R.drawable.ic_bookmark_outline, - secondaryContentDescription = context.getString(R.string.browser_menu_bookmark), - secondaryImageTintResource = primaryTextColor(), - disableInSecondaryState = false - ) { - if (!currentUrlIsBookmarked) currentUrlIsBookmarked = true - onItemTapped.invoke(ToolbarMenu.Item.Bookmark) - } + if (FeatureFlags.toolbarMenuFeature) { + BrowserMenuItemToolbar(listOf(back, forward, share, refresh)) + } else { + val bookmark = BrowserMenuItemToolbar.TwoStateButton( + primaryImageResource = R.drawable.ic_bookmark_filled, + primaryContentDescription = context.getString(R.string.browser_menu_edit_bookmark), + primaryImageTintResource = primaryTextColor(), + // TwoStateButton.isInPrimaryState must be synchronous, and checking bookmark state is + // relatively slow. The best we can do here is periodically compute and cache a new "is + // bookmarked" state, and use that whenever the menu has been opened. + isInPrimaryState = { isCurrentUrlBookmarked }, + secondaryImageResource = R.drawable.ic_bookmark_outline, + secondaryContentDescription = context.getString(R.string.browser_menu_bookmark), + secondaryImageTintResource = primaryTextColor(), + disableInSecondaryState = false + ) { + if (!isCurrentUrlBookmarked) isCurrentUrlBookmarked = true + onItemTapped.invoke(ToolbarMenu.Item.Bookmark) + } - BrowserMenuItemToolbar(listOf(back, forward, bookmark, share, refresh)) + BrowserMenuItemToolbar(listOf(back, forward, bookmark, share, refresh)) + } } // Predicates that need to be repeatedly called as the session changes @@ -469,26 +474,28 @@ class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.Settings) } - val menuItems = listOfNotNull( - newTabItem, - BrowserMenuDivider(), - bookmarksItem, - historyItem, - downloadsItem, - extensionsItem, - syncedTabsItem, - BrowserMenuDivider(), - findInPageItem, - desktopSiteItem, - BrowserMenuDivider(), - addToHomeScreenItem.apply { visible = ::canAddToHomescreen }, - addToTopSitesItem, - saveToCollectionItem, - BrowserMenuDivider(), - settingsItem, - BrowserMenuDivider(), - menuToolbar - ) + val menuItems = + listOfNotNull( + if (isTopToolbarSelected) menuToolbar else null, + newTabItem, + BrowserMenuDivider(), + bookmarksItem, + historyItem, + downloadsItem, + extensionsItem, + syncedTabsItem, + BrowserMenuDivider(), + findInPageItem, + desktopSiteItem, + BrowserMenuDivider(), + addToHomeScreenItem.apply { visible = ::canAddToHomescreen }, + addToTopSitesItem, + saveToCollectionItem, + BrowserMenuDivider(), + settingsItem, + if (isTopToolbarSelected) null else BrowserMenuDivider(), + if (isTopToolbarSelected) null else menuToolbar + ) menuItems } @@ -512,7 +519,7 @@ class DefaultToolbarMenu( ) } .collect { - currentUrlIsBookmarked = false + isCurrentUrlBookmarked = false updateCurrentUrlIsBookmarked(it.content.url) } } @@ -522,7 +529,7 @@ class DefaultToolbarMenu( internal fun updateCurrentUrlIsBookmarked(newUrl: String) { isBookmarkedJob?.cancel() isBookmarkedJob = lifecycleOwner.lifecycleScope.launch { - currentUrlIsBookmarked = bookmarksStorage + isCurrentUrlBookmarked = bookmarksStorage .getBookmarksWithUrl(newUrl) .any { it.url == newUrl } } From 7d2c3071ee416c8ead84efd9a9cf102979f909d8 Mon Sep 17 00:00:00 2001 From: Mugurell Date: Mon, 1 Mar 2021 18:12:35 +0200 Subject: [PATCH 045/149] For #17963 - Present Fenix as a browser app to the system Fenix will now be able to be started from a call to Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER) For more info: https://developer.android.com/reference/android/content/Intent#CATEGORY_APP_BROWSER --- app/src/main/AndroidManifest.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 585fba1d8..2b9d15bd9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -145,6 +145,15 @@ android:exported="true" android:excludeFromRecents="true" > + + + + + + + From 895f3541d81cb9ac5944f31a89c62845afcac608 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 5 Mar 2021 15:35:37 +0000 Subject: [PATCH 046/149] Update Android Components version to 74.0.20210305144553. --- 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 09bacf169..b026d525c 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 = "74.0.20210303143143" + const val VERSION = "74.0.20210305144553" } From 71edc96832d4165310448fd4421dd6a98b317a17 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sat, 6 Mar 2021 00:05:40 +0000 Subject: [PATCH 047/149] Import l10n. --- app/src/main/res/values-cak/strings.xml | 3 +++ app/src/main/res/values-pt-rBR/strings.xml | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-cak/strings.xml b/app/src/main/res/values-cak/strings.xml index 67e428115..31e5e777d 100644 --- a/app/src/main/res/values-cak/strings.xml +++ b/app/src/main/res/values-cak/strings.xml @@ -227,6 +227,9 @@ Tikanöx %s + + Tikanöx pa kikajtz\'ik ochochib\'äl + Tijaq jun k\'ak\'a\' ruwi\' Firefox diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 68aa5db1b..782719263 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -1200,7 +1200,7 @@ The first parameter is the name of the app (e.g. Firefox Preview) --> As configurações de privacidade e segurança bloqueiam rastreadores, código malicioso (malware) e empresas que seguem você. - Padrão (predefinido) + Normal (padrão) Bloqueia menos rastreadores. As páginas são carregadas normalmente. @@ -1300,11 +1300,11 @@ Saiba mais - Padrão (predefinido) + Normal (padrão) Bloqueia menos rastreadores. As páginas são carregadas normalmente. - O que é bloqueado pela proteção padrão contra rastreamento + O que é bloqueado pela proteção normal contra rastreamento Rigoroso From 303316b677cdbd8253ebe4271167f860ca60f9cd Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 6 Mar 2021 15:36:05 +0000 Subject: [PATCH 048/149] Update Android Components version to 74.0.20210306143127. --- 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 b026d525c..b5b3d32c0 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 = "74.0.20210305144553" + const val VERSION = "74.0.20210306143127" } From 726cc3f466da11afb1dfcb1428b39327a6b5615e Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sun, 7 Mar 2021 00:05:32 +0000 Subject: [PATCH 049/149] Import l10n. --- app/src/main/res/values-pa-rIN/strings.xml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index e65606abf..4525a7def 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -224,6 +224,11 @@ ਹੋਰ ਜਾਣੋ + + %s ਖੋਜ + + ਸਿਰਨਾਵਾਂ ਪੱਟੀ ਵਿੱਚੋਂ ਸਿ਼ੱਧਾ ਖੋਜੋ + ਨਵੀਂ Firefox ਟੈਬ ਖੋਲ੍ਹੋ @@ -902,16 +907,22 @@ ਬੰਦ - + ਆਡੀਓ ਅਤੇ ਵੀਡਿਓ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ + + ਆਡੀਓ ਤੇ ਵੀਡੀਓ ਦੀ ਮਨਜ਼ੂਰੀ ਦਿਓ ਸਿਰਫ਼ ਸੈਲੂਲਰ ਡਾਟਾ ਤੋਂ ਆਡੀਓ ਅਤੇ ਵੀਡੀਓ ਉੱਤੇ ਰੋਕ ਲਾਓ Wi-Fi ਉੱਤੇ ਆਡੀਓ ਤੇ ਵੀਡੀਓ ਚਲਾਏ ਜਾਣਗੇ - + ਸਿਰਫ਼ ਆਡੀਓ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ - + + ਸਿਰਫ਼ ਆਡੀਓ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਓ + ਆਡੀਓ ਅਤੇ ਵੀਡਿਓ ਤੇ ਪਾਬੰਦੀ ਲਾਓ + + ਆਡੀਓ ਅਤੇ ਵੀਡਿਓ \'ਤੇ ਪਾਬੰਦੀ ਲਾਓ ਚਾਲੂ From 502f079a1f517b48bdc6cee52cc2549fa070c17d Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 7 Mar 2021 15:34:56 +0000 Subject: [PATCH 050/149] Update Android Components version to 74.0.20210307143117. --- 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 b5b3d32c0..a4c169c32 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 = "74.0.20210306143127" + const val VERSION = "74.0.20210307143117" } From 6e2d3b708518cc0e997202b7be0acd545680ea81 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Mon, 8 Mar 2021 00:05:24 +0000 Subject: [PATCH 051/149] Import l10n. --- app/src/main/res/values-br/strings.xml | 23 ++++++++++++++++++++--- app/src/main/res/values-ca/strings.xml | 17 ++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 1a141ea80..5dbe8b20e 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -128,6 +128,8 @@ Embann ar sined Askouezhioù + + Askouezhioù Nʼeus tamm askouezh ebet amañ @@ -212,6 +214,11 @@ Gouzout hirocʼh + + Klask %s + + Klask war-eeun eus ar varrenn chomlec’h + Digeriñ un ivinell Firefox nevez @@ -523,6 +530,10 @@ Sinedoù all Roll istor + + Ivinell nevez + + Kavout er bajenn Ivinelloù goubredet @@ -873,17 +884,23 @@ Gweredekaet Diweredekaet - + Aotren an aodio ha video + + Aotren an aodio ha video Stankañ an aodio hag ar video pa vez war ar roadennoù hezoug nemetken An aodio hag ar video a vo lennet war ar Wi-Fi - + Stankañ an aodio nemetken - + + Stankañ an aodio nemetken + Stankañ an aodio hag ar video + + Stankañ an aodio hag ar video Gweredekaet diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index dbff35f4c..aa6013a6b 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -218,6 +218,11 @@ Més informació + + Cerca amb %s + + Cerca directament des de la barra d’adreces + Obre una pestanya nova del Firefox @@ -889,16 +894,22 @@ Activada Desactivada - + Permet àudio i vídeo + + Permet àudio i vídeo Bloca àudio i vídeo només amb dades mòbils L’àudio i el vídeo es reproduiran amb Wi-Fi - + Bloca només àudio - + + Bloca només àudio + Bloca àudio i vídeo + + Bloca àudio i vídeo Activat From 9ac54fc06a5f772cb335cdd8f0189809ecfeeaa4 Mon Sep 17 00:00:00 2001 From: Oana Horvath Date: Thu, 4 Mar 2021 17:52:41 +0200 Subject: [PATCH 052/149] For #18325: dismiss GooglePlay ToS dialog after UI test --- .../java/org/mozilla/fenix/ui/SettingsAboutTest.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAboutTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAboutTest.kt index ba101f0c9..8ef45be4b 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAboutTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAboutTest.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.ui import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.UiSelector import okhttp3.mockwebserver.MockWebServer import org.junit.Rule import org.junit.Before @@ -15,6 +16,7 @@ import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.ui.robots.clickRateButtonGooglePlay import org.mozilla.fenix.ui.robots.homeScreen +import org.mozilla.fenix.ui.robots.mDevice /** * Tests for verifying the main three dot menu options @@ -65,8 +67,10 @@ class SettingsAboutTest { }.openSettings { clickRateButtonGooglePlay() verifyGooglePlayRedirect() + // press back to return to the app, or accept ToS if still visible + mDevice.pressBack() + dismissGooglePlayToS() } - } @Test @@ -79,3 +83,9 @@ class SettingsAboutTest { } } } + +private fun dismissGooglePlayToS() { + if (mDevice.findObject(UiSelector().textContains("Terms of Service")).exists()) { + mDevice.findObject(UiSelector().textContains("ACCEPT")).click() + } +} From 8c519994f0a42e9b59a88ae30096ac02881ead4e Mon Sep 17 00:00:00 2001 From: mcarare Date: Thu, 4 Mar 2021 14:12:16 +0200 Subject: [PATCH 053/149] For #18312: Do not update secure flag on pausing logins fragments. The flags are already properly set for activity and thus for other fragments. --- app/src/main/java/org/mozilla/fenix/ext/Fragment.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/ext/Fragment.kt b/app/src/main/java/org/mozilla/fenix/ext/Fragment.kt index 4275dd801..1eb2cb27b 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Fragment.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Fragment.kt @@ -13,7 +13,6 @@ import androidx.navigation.NavOptions import androidx.navigation.fragment.NavHostFragment.findNavController import androidx.navigation.fragment.findNavController import mozilla.components.concept.base.crash.Breadcrumb -import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.NavHostActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.Components @@ -66,7 +65,6 @@ fun Fragment.hideToolbar() { * */ fun Fragment.redirectToReAuth(destinations: List, currentDestination: Int?) { - (activity as? HomeActivity)?.updateSecureWindowFlags() if (currentDestination !in destinations) { findNavController().popBackStack(R.id.savedLoginsAuthFragment, false) } From 5c7a01ba6fa8647067c20ad997404b9bb1d33e51 Mon Sep 17 00:00:00 2001 From: Mihai Adrian Carare <48995920+mcarare@users.noreply.github.com> Date: Mon, 8 Mar 2021 19:24:27 +0200 Subject: [PATCH 054/149] For #17971: Add Reader view appearance controls in three-dot main menu. (#18340) --- .../toolbar/BrowserToolbarMenuController.kt | 4 ++-- .../fenix/components/toolbar/DefaultToolbarMenu.kt | 11 ++++++++++- .../mozilla/fenix/components/toolbar/ToolbarMenu.kt | 2 +- app/src/main/res/values/strings.xml | 2 ++ .../DefaultBrowserToolbarMenuControllerTest.kt | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt index d72f9b133..e5bc0f71e 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt @@ -143,7 +143,7 @@ class DefaultBrowserToolbarMenuController( deleteAndQuit(activity, scope, snackbar) } - is ToolbarMenu.Item.ReaderModeAppearance -> { + is ToolbarMenu.Item.CustomizeReaderView -> { readerModeController.showControls() metrics.track(Event.ReaderModeAppearanceOpened) } @@ -361,7 +361,7 @@ class DefaultBrowserToolbarMenuController( is ToolbarMenu.Item.OpenInFenix -> Event.BrowserMenuItemTapped.Item.OPEN_IN_FENIX is ToolbarMenu.Item.InstallToHomeScreen -> Event.BrowserMenuItemTapped.Item.ADD_TO_HOMESCREEN is ToolbarMenu.Item.Quit -> Event.BrowserMenuItemTapped.Item.QUIT - is ToolbarMenu.Item.ReaderModeAppearance -> + is ToolbarMenu.Item.CustomizeReaderView -> Event.BrowserMenuItemTapped.Item.READER_MODE_APPEARANCE is ToolbarMenu.Item.OpenInApp -> Event.BrowserMenuItemTapped.Item.OPEN_IN_APP // todo === End === diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index 256c4341e..3cdd45f39 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -22,6 +22,7 @@ import mozilla.components.browser.menu.item.BrowserMenuHighlightableItem import mozilla.components.browser.menu.item.BrowserMenuImageSwitch import mozilla.components.browser.menu.item.BrowserMenuImageText import mozilla.components.browser.menu.item.BrowserMenuItemToolbar +import mozilla.components.browser.menu.item.SimpleBrowserMenuItem import mozilla.components.browser.menu.item.WebExtensionPlaceholderMenuItem import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.selector.selectedTab @@ -292,7 +293,7 @@ class DefaultToolbarMenu( imageResource = R.drawable.ic_readermode_appearance, iconTintColorResource = primaryTextColor() ) { - onItemTapped.invoke(ToolbarMenu.Item.ReaderModeAppearance) + onItemTapped.invoke(ToolbarMenu.Item.CustomizeReaderView) } val openInApp = BrowserMenuHighlightableItem( @@ -433,6 +434,13 @@ class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.RequestDesktop(checked)) } + val customizeReaderView = SimpleBrowserMenuItem( + label = context.getString(R.string.browser_menu_customize_reader_view), + textColorResource = primaryTextColor() + ) { + onItemTapped.invoke(ToolbarMenu.Item.CustomizeReaderView) + } + val addToHomeScreenItem = BrowserMenuImageText( label = context.getString(R.string.browser_menu_add_to_homescreen), imageResource = R.drawable.ic_add_to_homescreen, @@ -487,6 +495,7 @@ class DefaultToolbarMenu( BrowserMenuDivider(), findInPageItem, desktopSiteItem, + customizeReaderView.apply { visible = ::shouldShowReaderAppearance }, BrowserMenuDivider(), addToHomeScreenItem.apply { visible = ::canAddToHomescreen }, addToTopSitesItem, diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt index 87cb80ae3..126a949e1 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt @@ -27,7 +27,7 @@ interface ToolbarMenu { object Quit : Item() object OpenInApp : Item() object Bookmark : Item() - object ReaderModeAppearance : Item() + object CustomizeReaderView : Item() object Bookmarks : Item() object History : Item() object Downloads : Item() diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 19c22e14b..195b78d79 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -177,6 +177,8 @@ Open in app Appearance + + Customize reader view Unable to connect. Unrecognizable URL scheme. diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt index da473a25d..8420a72d8 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarMenuControllerTest.kt @@ -237,7 +237,7 @@ class DefaultBrowserToolbarMenuControllerTest { @Test fun `WHEN reader mode menu item is pressed THEN handle appearance change`() = runBlockingTest { - val item = ToolbarMenu.Item.ReaderModeAppearance + val item = ToolbarMenu.Item.CustomizeReaderView val controller = createController(scope = this, store = browserStore) From 94425d22acc40f1a6eabb141a763ffc2e37e9d0e Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Mon, 8 Mar 2021 18:24:52 +0000 Subject: [PATCH 055/149] Import l10n. --- app/src/main/res/values-ja/strings.xml | 5 +++++ app/src/main/res/values-pt-rPT/strings.xml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index c0a54e3bc..68f4adecc 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -222,6 +222,11 @@ 詳細情報 + + %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 1cfd4a089..569413f1a 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -218,6 +218,11 @@ Saber mais + + Pesquisar %s + + Pesquisar diretamente a partir da barra de endereço + Abrir um novo separador Firefox From aada45942845a34c9c624d1c446bd7ee6871ee9e Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Mon, 8 Mar 2021 15:21:00 -0500 Subject: [PATCH 056/149] Closes #18163: Use SyncedTabsFacts for Synced Tab Telemetry (#18172) --- app/metrics.yaml | 15 +++++++++++++++ .../org/mozilla/fenix/components/metrics/Event.kt | 2 ++ .../components/metrics/GleanMetricsService.kt | 4 ++++ .../fenix/components/metrics/MetricController.kt | 4 ++++ .../components/metrics/GleanMetricsServiceTest.kt | 8 ++++++++ .../components/metrics/MetricControllerTest.kt | 14 ++++++++++++++ docs/metrics.md | 1 + 7 files changed, 48 insertions(+) diff --git a/app/metrics.yaml b/app/metrics.yaml index 4670b97b3..362102e3a 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4538,3 +4538,18 @@ engine_tab: - fenix-core@mozilla.com - skaspari@mozilla.com expires: "2021-12-31" + +synced_tabs: + synced_tabs_suggestion_clicked: + type: event + description: | + The synced tab suggestion in awesomebar was clicked. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18163 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18172 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" 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 c7e2431ea..bdbdfd819 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 @@ -214,6 +214,8 @@ sealed class Event { object HaveTopSites : Event() object HaveNoTopSites : Event() + object SyncedTabSuggestionClicked : Event() + // Interaction events with extras data class TopSiteSwipeCarousel(val page: Int) : Event() { diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index d122d34a7..3e3304b09 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -53,6 +53,7 @@ import org.mozilla.fenix.GleanMetrics.SearchSuggestions import org.mozilla.fenix.GleanMetrics.SearchWidget import org.mozilla.fenix.GleanMetrics.SyncAccount import org.mozilla.fenix.GleanMetrics.SyncAuth +import org.mozilla.fenix.GleanMetrics.SyncedTabs import org.mozilla.fenix.GleanMetrics.Tab import org.mozilla.fenix.GleanMetrics.Tabs import org.mozilla.fenix.GleanMetrics.TabsTray @@ -749,6 +750,9 @@ private val Event.wrapper: EventWrapper<*>? is Event.BannerOpenInAppGoToSettings -> EventWrapper( { BannerOpenInApp.goToSettings.record(it) } ) + is Event.SyncedTabSuggestionClicked -> EventWrapper( + { SyncedTabs.syncedTabsSuggestionClicked.record(it) } + ) // Don't record other events in Glean: is Event.AddBookmark -> null diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt index 013fd2422..19e220447 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt @@ -22,6 +22,7 @@ import mozilla.components.feature.findinpage.facts.FindInPageFacts import mozilla.components.feature.media.facts.MediaFacts import mozilla.components.feature.prompts.dialog.LoginDialogFacts import mozilla.components.feature.pwa.ProgressiveWebAppFacts +import mozilla.components.feature.syncedtabs.facts.SyncedTabsFacts import mozilla.components.feature.top.sites.facts.TopSitesFacts import mozilla.components.support.base.Component import mozilla.components.support.base.facts.Action @@ -267,6 +268,9 @@ internal class ReleaseMetricController( } null } + Component.FEATURE_SYNCEDTABS to SyncedTabsFacts.Items.SYNCED_TABS_SUGGESTION_CLICKED -> { + Event.SyncedTabSuggestionClicked + } else -> null } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt index 16e932db2..3317d9fcc 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt @@ -20,6 +20,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine +import org.mozilla.fenix.GleanMetrics.SyncedTabs import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.BrowsersCache @@ -85,4 +86,11 @@ class GleanMetricsServiceTest { assertEquals(1, events[0].extra!!.size) assertEquals("APP_ICON", events[0].extra!!["source"]) } + + @Test + fun `synced tab events is correctly recorded`() { + assertFalse(SyncedTabs.syncedTabsSuggestionClicked.testHasValue()) + gleanService.track(Event.SyncedTabSuggestionClicked) + assertTrue(SyncedTabs.syncedTabsSuggestionClicked.testHasValue()) + } } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt index be97fd8a3..c4630c852 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt @@ -227,4 +227,18 @@ class MetricControllerTest { assertEquals(controller.factToEvent(fact), Event.HaveNoTopSites) } + + @Test + fun `tracking synced tab event should be sent to enabled service`() { + val controller = ReleaseMetricController( + listOf(marketingService1), + isDataTelemetryEnabled = { true }, + isMarketingDataTelemetryEnabled = { true } + ) + every { marketingService1.shouldTrack(Event.SyncedTabSuggestionClicked) } returns true + controller.start(MetricServiceType.Marketing) + + controller.track(Event.SyncedTabSuggestionClicked) + verify { marketingService1.track(Event.SyncedTabSuggestionClicked) } + } } diff --git a/docs/metrics.md b/docs/metrics.md index 0ecbf2827..9fa8c0844 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -201,6 +201,7 @@ In addition to those built-in metrics, the following metrics are added to the pi | sync_auth.sign_up |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User registered a new Firefox Account, and was signed into it |[mozilla-mobile/fenix#4931](https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |1, 2 | | sync_auth.use_email |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user chose to use their email to sign in instead of scanning a QR code, counterpart to "scan_pairing" |[mozilla-mobile/fenix#9835](https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | sync_auth.use_email_problem |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user chose to use their email to sign in after an account problem |[mozilla-mobile/fenix#9835](https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| synced_tabs.synced_tabs_suggestion_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The synced tab suggestion in awesomebar was clicked. |[mozilla-mobile/fenix#18172](https://github.com/mozilla-mobile/fenix/pull/18172)||2021-08-01 |2 | | tab.media_pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pause icon on a tab from the home screen |[mozilla-mobile/fenix#5266](https://github.com/mozilla-mobile/fenix/pull/5266), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | tab.media_play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the play icon on a tab from the home screen |[mozilla-mobile/fenix#5266](https://github.com/mozilla-mobile/fenix/pull/5266), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | tabs.setting_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The tab settings were opened. |[mozilla-mobile/fenix#15811](https://github.com/mozilla-mobile/fenix/pull/15811#issuecomment-706402952)||2021-08-01 |2 | From 2322cbdd0ef0e3edb7bb3ac731864cfc79e211b9 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Mon, 8 Mar 2021 16:34:52 -0500 Subject: [PATCH 057/149] Closes #18068: Use AwesomeBarFacts for AwesomeBar Telemetry (#18090) --- app/metrics.yaml | 80 +++++++++++++++++++ .../mozilla/fenix/components/metrics/Event.kt | 6 ++ .../components/metrics/GleanMetricsService.kt | 20 +++++ .../components/metrics/MetricController.kt | 19 +++++ .../metrics/GleanMetricsServiceTest.kt | 30 ++++++- .../metrics/MetricControllerTest.kt | 34 ++++++++ docs/metrics.md | 6 ++ 7 files changed, 194 insertions(+), 1 deletion(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 362102e3a..b48c396bf 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4553,3 +4553,83 @@ synced_tabs: notification_emails: - fenix-core@mozilla.com expires: "2021-08-01" + +awesomebar: + bookmark_suggestion_clicked: + type: event + description: | + The bookmark suggestion in awesomebar was clicked. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18068 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18090 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + clipboard_suggestion_clicked: + type: event + description: | + The clipboard suggestion in awesomebar was clicked. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18068 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18090 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + history_suggestion_clicked: + type: event + description: | + The history suggestion in awesomebar was clicked. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18068 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18090 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + search_action_clicked: + type: event + description: | + The search action in awesomebar was clicked. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18068 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18090 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + search_suggestion_clicked: + type: event + description: | + The search suggestion in awesomebar was clicked. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18068 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18090 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" + opened_tab_suggestion_clicked: + type: event + description: | + The opened tab suggestion in awesomebar was clicked. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18068 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18090 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2021-08-01" 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 bdbdfd819..23240bcf8 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 @@ -215,6 +215,12 @@ sealed class Event { object HaveNoTopSites : Event() object SyncedTabSuggestionClicked : Event() + object BookmarkSuggestionClicked : Event() + object ClipboardSuggestionClicked : Event() + object HistorySuggestionClicked : Event() + object SearchActionClicked : Event() + object SearchSuggestionClicked : Event() + object OpenedTabSuggestionClicked : Event() // Interaction events with extras diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 3e3304b09..7507bac1e 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -17,6 +17,7 @@ import org.mozilla.fenix.GleanMetrics.AboutPage import org.mozilla.fenix.GleanMetrics.Addons import org.mozilla.fenix.GleanMetrics.AppTheme import org.mozilla.fenix.GleanMetrics.Autoplay +import org.mozilla.fenix.GleanMetrics.Awesomebar import org.mozilla.fenix.GleanMetrics.BannerOpenInApp import org.mozilla.fenix.GleanMetrics.BookmarksManagement import org.mozilla.fenix.GleanMetrics.BrowserSearch @@ -754,6 +755,25 @@ private val Event.wrapper: EventWrapper<*>? { SyncedTabs.syncedTabsSuggestionClicked.record(it) } ) + is Event.BookmarkSuggestionClicked -> EventWrapper( + { Awesomebar.bookmarkSuggestionClicked.record(it) } + ) + is Event.ClipboardSuggestionClicked -> EventWrapper( + { Awesomebar.clipboardSuggestionClicked.record(it) } + ) + is Event.HistorySuggestionClicked -> EventWrapper( + { Awesomebar.historySuggestionClicked.record(it) } + ) + is Event.SearchActionClicked -> EventWrapper( + { Awesomebar.searchActionClicked.record(it) } + ) + is Event.SearchSuggestionClicked -> EventWrapper( + { Awesomebar.searchSuggestionClicked.record(it) } + ) + is Event.OpenedTabSuggestionClicked -> EventWrapper( + { Awesomebar.openedTabSuggestionClicked.record(it) } + ) + // Don't record other events in Glean: is Event.AddBookmark -> null is Event.OpenedBookmark -> null diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt index 19e220447..649ace833 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt @@ -10,6 +10,7 @@ import mozilla.components.browser.awesomebar.facts.BrowserAwesomeBarFacts import mozilla.components.browser.menu.facts.BrowserMenuFacts import mozilla.components.browser.toolbar.facts.ToolbarFacts import mozilla.components.concept.awesomebar.AwesomeBar +import mozilla.components.feature.awesomebar.facts.AwesomeBarFacts import mozilla.components.feature.awesomebar.provider.BookmarksStorageSuggestionProvider import mozilla.components.feature.awesomebar.provider.ClipboardSuggestionProvider import mozilla.components.feature.awesomebar.provider.HistoryStorageSuggestionProvider @@ -271,6 +272,24 @@ internal class ReleaseMetricController( Component.FEATURE_SYNCEDTABS to SyncedTabsFacts.Items.SYNCED_TABS_SUGGESTION_CLICKED -> { Event.SyncedTabSuggestionClicked } + Component.FEATURE_AWESOMEBAR to AwesomeBarFacts.Items.BOOKMARK_SUGGESTION_CLICKED -> { + Event.BookmarkSuggestionClicked + } + Component.FEATURE_AWESOMEBAR to AwesomeBarFacts.Items.CLIPBOARD_SUGGESTION_CLICKED -> { + Event.ClipboardSuggestionClicked + } + Component.FEATURE_AWESOMEBAR to AwesomeBarFacts.Items.HISTORY_SUGGESTION_CLICKED -> { + Event.HistorySuggestionClicked + } + Component.FEATURE_AWESOMEBAR to AwesomeBarFacts.Items.SEARCH_ACTION_CLICKED -> { + Event.SearchActionClicked + } + Component.FEATURE_AWESOMEBAR to AwesomeBarFacts.Items.SEARCH_SUGGESTION_CLICKED -> { + Event.SearchSuggestionClicked + } + Component.FEATURE_AWESOMEBAR to AwesomeBarFacts.Items.OPENED_TAB_SUGGESTION_CLICKED -> { + Event.OpenedTabSuggestionClicked + } else -> null } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt index 3317d9fcc..63070c470 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt @@ -17,6 +17,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.GleanMetrics.Awesomebar import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine @@ -88,9 +89,36 @@ class GleanMetricsServiceTest { } @Test - fun `synced tab events is correctly recorded`() { + fun `synced tab event is correctly recorded`() { assertFalse(SyncedTabs.syncedTabsSuggestionClicked.testHasValue()) gleanService.track(Event.SyncedTabSuggestionClicked) assertTrue(SyncedTabs.syncedTabsSuggestionClicked.testHasValue()) } + + @Test + fun `awesomebar events are correctly recorded`() { + assertFalse(Awesomebar.bookmarkSuggestionClicked.testHasValue()) + gleanService.track(Event.BookmarkSuggestionClicked) + assertTrue(Awesomebar.bookmarkSuggestionClicked.testHasValue()) + + assertFalse(Awesomebar.clipboardSuggestionClicked.testHasValue()) + gleanService.track(Event.ClipboardSuggestionClicked) + assertTrue(Awesomebar.clipboardSuggestionClicked.testHasValue()) + + assertFalse(Awesomebar.historySuggestionClicked.testHasValue()) + gleanService.track(Event.HistorySuggestionClicked) + assertTrue(Awesomebar.historySuggestionClicked.testHasValue()) + + assertFalse(Awesomebar.searchActionClicked.testHasValue()) + gleanService.track(Event.SearchActionClicked) + assertTrue(Awesomebar.searchActionClicked.testHasValue()) + + assertFalse(Awesomebar.searchSuggestionClicked.testHasValue()) + gleanService.track(Event.SearchSuggestionClicked) + assertTrue(Awesomebar.searchSuggestionClicked.testHasValue()) + + assertFalse(Awesomebar.openedTabSuggestionClicked.testHasValue()) + gleanService.track(Event.OpenedTabSuggestionClicked) + assertTrue(Awesomebar.openedTabSuggestionClicked.testHasValue()) + } } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt index c4630c852..ba1cfacca 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt @@ -241,4 +241,38 @@ class MetricControllerTest { controller.track(Event.SyncedTabSuggestionClicked) verify { marketingService1.track(Event.SyncedTabSuggestionClicked) } } + + @Test + fun `tracking awesomebar events should be sent to enabled service`() { + val controller = ReleaseMetricController( + listOf(marketingService1), + isDataTelemetryEnabled = { true }, + isMarketingDataTelemetryEnabled = { true } + ) + every { marketingService1.shouldTrack(Event.BookmarkSuggestionClicked) } returns true + every { marketingService1.shouldTrack(Event.ClipboardSuggestionClicked) } returns true + every { marketingService1.shouldTrack(Event.HistorySuggestionClicked) } returns true + every { marketingService1.shouldTrack(Event.SearchActionClicked) } returns true + every { marketingService1.shouldTrack(Event.SearchSuggestionClicked) } returns true + every { marketingService1.shouldTrack(Event.OpenedTabSuggestionClicked) } returns true + controller.start(MetricServiceType.Marketing) + + controller.track(Event.BookmarkSuggestionClicked) + verify { marketingService1.track(Event.BookmarkSuggestionClicked) } + + controller.track(Event.ClipboardSuggestionClicked) + verify { marketingService1.track(Event.ClipboardSuggestionClicked) } + + controller.track(Event.HistorySuggestionClicked) + verify { marketingService1.track(Event.HistorySuggestionClicked) } + + controller.track(Event.SearchActionClicked) + verify { marketingService1.track(Event.SearchActionClicked) } + + controller.track(Event.SearchSuggestionClicked) + verify { marketingService1.track(Event.SearchSuggestionClicked) } + + controller.track(Event.OpenedTabSuggestionClicked) + verify { marketingService1.track(Event.OpenedTabSuggestionClicked) } + } } diff --git a/docs/metrics.md b/docs/metrics.md index 9fa8c0844..16799c38e 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -59,6 +59,12 @@ In addition to those built-in metrics, the following metrics are added to the pi | app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[mozilla-mobile/fenix#7968](https://github.com/mozilla-mobile/fenix/pull/7968), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING'
|2021-04-01 |2 | | autoplay.setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their autoplay setting to either block_cellular, block_audio, or block_all. |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)|
  • autoplay_setting: The new setting for autoplay: block_cellular, block_audio, or block_all.
|2021-08-01 |2 | | autoplay.visited_setting |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user visited the autoplay settings screen |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)||2021-08-01 |2 | +| awesomebar.bookmark_suggestion_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The bookmark suggestion in awesomebar was clicked. |[mozilla-mobile/fenix#18090](https://github.com/mozilla-mobile/fenix/pull/18090)||2021-08-01 |2 | +| awesomebar.clipboard_suggestion_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The clipboard suggestion in awesomebar was clicked. |[mozilla-mobile/fenix#18090](https://github.com/mozilla-mobile/fenix/pull/18090)||2021-08-01 |2 | +| awesomebar.history_suggestion_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The history suggestion in awesomebar was clicked. |[mozilla-mobile/fenix#18090](https://github.com/mozilla-mobile/fenix/pull/18090)||2021-08-01 |2 | +| awesomebar.opened_tab_suggestion_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The opened tab suggestion in awesomebar was clicked. |[mozilla-mobile/fenix#18090](https://github.com/mozilla-mobile/fenix/pull/18090)||2021-08-01 |2 | +| awesomebar.search_action_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The search action in awesomebar was clicked. |[mozilla-mobile/fenix#18090](https://github.com/mozilla-mobile/fenix/pull/18090)||2021-08-01 |2 | +| awesomebar.search_suggestion_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The search suggestion in awesomebar was clicked. |[mozilla-mobile/fenix#18090](https://github.com/mozilla-mobile/fenix/pull/18090)||2021-08-01 |2 | | banner_open_in_app.dismissed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'dismiss' on Open in App banner. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | | banner_open_in_app.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Open in App banner was shown. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | | banner_open_in_app.go_to_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'go to settings' on Open in App banner. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | From 56b08abe0fb464250e1d81518ad966c252aa1a50 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Mon, 8 Mar 2021 17:11:59 -0500 Subject: [PATCH 058/149] Closes #18173: Add Telemetry When User Opens a Bookmark (#18174) --- app/metrics.yaml | 13 +++++ .../components/metrics/GleanMetricsService.kt | 4 +- .../metrics/GleanMetricsServiceTest.kt | 56 +++++++++++++++++++ .../metrics/MetricControllerTest.kt | 55 ++++++++++++++++++ docs/metrics.md | 1 + 5 files changed, 128 insertions(+), 1 deletion(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index b48c396bf..d6eff7b12 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -1545,6 +1545,19 @@ search.default_engine: expires: "2021-08-01" bookmarks_management: + open: + type: event + description: | + A user opened a bookmark. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18173 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18174 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2022-08-01" open_in_new_tab: type: event description: | diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 7507bac1e..20c164d3f 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -191,6 +191,9 @@ private val Event.wrapper: EventWrapper<*>? { Events.browserMenuAction.record(it) }, { Events.browserMenuActionKeys.valueOf(it) } ) + is Event.OpenedBookmark -> EventWrapper( + { BookmarksManagement.open.record(it) } + ) is Event.OpenedBookmarkInNewTab -> EventWrapper( { BookmarksManagement.openInNewTab.record(it) } ) @@ -776,7 +779,6 @@ private val Event.wrapper: EventWrapper<*>? // Don't record other events in Glean: is Event.AddBookmark -> null - is Event.OpenedBookmark -> null is Event.OpenedAppFirstRun -> null is Event.InteractWithSearchURLArea -> null is Event.ClearedPrivateData -> null diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt index 63070c470..8095c5b2b 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt @@ -18,6 +18,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Awesomebar +import org.mozilla.fenix.GleanMetrics.BookmarksManagement import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine @@ -121,4 +122,59 @@ class GleanMetricsServiceTest { gleanService.track(Event.OpenedTabSuggestionClicked) assertTrue(Awesomebar.openedTabSuggestionClicked.testHasValue()) } + + @Test + fun `bookmark events is correctly recorded`() { + assertFalse(BookmarksManagement.open.testHasValue()) + gleanService.track(Event.OpenedBookmark) + assertTrue(BookmarksManagement.open.testHasValue()) + + assertFalse(BookmarksManagement.openInNewTab.testHasValue()) + gleanService.track(Event.OpenedBookmarkInNewTab) + assertTrue(BookmarksManagement.openInNewTab.testHasValue()) + + assertFalse(BookmarksManagement.openInNewTabs.testHasValue()) + gleanService.track(Event.OpenedBookmarksInNewTabs) + assertTrue(BookmarksManagement.openInNewTabs.testHasValue()) + + assertFalse(BookmarksManagement.openInPrivateTab.testHasValue()) + gleanService.track(Event.OpenedBookmarkInPrivateTab) + assertTrue(BookmarksManagement.openInPrivateTab.testHasValue()) + + assertFalse(BookmarksManagement.openInPrivateTabs.testHasValue()) + gleanService.track(Event.OpenedBookmarksInPrivateTabs) + assertTrue(BookmarksManagement.openInPrivateTabs.testHasValue()) + + assertFalse(BookmarksManagement.edited.testHasValue()) + gleanService.track(Event.EditedBookmark) + assertTrue(BookmarksManagement.edited.testHasValue()) + + assertFalse(BookmarksManagement.moved.testHasValue()) + gleanService.track(Event.MovedBookmark) + assertTrue(BookmarksManagement.moved.testHasValue()) + + assertFalse(BookmarksManagement.removed.testHasValue()) + gleanService.track(Event.RemoveBookmark) + assertTrue(BookmarksManagement.removed.testHasValue()) + + assertFalse(BookmarksManagement.multiRemoved.testHasValue()) + gleanService.track(Event.RemoveBookmarks) + assertTrue(BookmarksManagement.multiRemoved.testHasValue()) + + assertFalse(BookmarksManagement.shared.testHasValue()) + gleanService.track(Event.ShareBookmark) + assertTrue(BookmarksManagement.shared.testHasValue()) + + assertFalse(BookmarksManagement.copied.testHasValue()) + gleanService.track(Event.CopyBookmark) + assertTrue(BookmarksManagement.copied.testHasValue()) + + assertFalse(BookmarksManagement.folderAdd.testHasValue()) + gleanService.track(Event.AddBookmarkFolder) + assertTrue(BookmarksManagement.folderAdd.testHasValue()) + + assertFalse(BookmarksManagement.folderRemove.testHasValue()) + gleanService.track(Event.RemoveBookmarkFolder) + assertTrue(BookmarksManagement.folderRemove.testHasValue()) + } } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt index ba1cfacca..50472ab1a 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt @@ -275,4 +275,59 @@ class MetricControllerTest { controller.track(Event.OpenedTabSuggestionClicked) verify { marketingService1.track(Event.OpenedTabSuggestionClicked) } } + + @Test + fun `tracking bookmark events should be sent to enabled service`() { + val controller = ReleaseMetricController( + listOf(marketingService1), + isDataTelemetryEnabled = { true }, + isMarketingDataTelemetryEnabled = { true } + ) + every { marketingService1.shouldTrack(Event.AddBookmark) } returns true + every { marketingService1.shouldTrack(Event.RemoveBookmark) } returns true + every { marketingService1.shouldTrack(Event.OpenedBookmark) } returns true + every { marketingService1.shouldTrack(Event.OpenedBookmarkInNewTab) } returns true + every { marketingService1.shouldTrack(Event.OpenedBookmarksInNewTabs) } returns true + every { marketingService1.shouldTrack(Event.OpenedBookmarkInPrivateTab) } returns true + every { marketingService1.shouldTrack(Event.OpenedBookmarksInPrivateTabs) } returns true + every { marketingService1.shouldTrack(Event.EditedBookmark) } returns true + every { marketingService1.shouldTrack(Event.MovedBookmark) } returns true + every { marketingService1.shouldTrack(Event.ShareBookmark) } returns true + every { marketingService1.shouldTrack(Event.CopyBookmark) } returns true + every { marketingService1.shouldTrack(Event.AddBookmarkFolder) } returns true + every { marketingService1.shouldTrack(Event.RemoveBookmarkFolder) } returns true + every { marketingService1.shouldTrack(Event.RemoveBookmarks) } returns true + + controller.start(MetricServiceType.Marketing) + + controller.track(Event.AddBookmark) + controller.track(Event.RemoveBookmark) + controller.track(Event.OpenedBookmark) + controller.track(Event.OpenedBookmarkInNewTab) + controller.track(Event.OpenedBookmarksInNewTabs) + controller.track(Event.OpenedBookmarkInPrivateTab) + controller.track(Event.OpenedBookmarksInPrivateTabs) + controller.track(Event.EditedBookmark) + controller.track(Event.MovedBookmark) + controller.track(Event.ShareBookmark) + controller.track(Event.CopyBookmark) + controller.track(Event.AddBookmarkFolder) + controller.track(Event.RemoveBookmarkFolder) + controller.track(Event.RemoveBookmarks) + + verify { marketingService1.track(Event.AddBookmark) } + verify { marketingService1.track(Event.RemoveBookmark) } + verify { marketingService1.track(Event.OpenedBookmark) } + verify { marketingService1.track(Event.OpenedBookmarkInNewTab) } + verify { marketingService1.track(Event.OpenedBookmarksInNewTabs) } + verify { marketingService1.track(Event.OpenedBookmarkInPrivateTab) } + verify { marketingService1.track(Event.OpenedBookmarksInPrivateTabs) } + verify { marketingService1.track(Event.EditedBookmark) } + verify { marketingService1.track(Event.MovedBookmark) } + verify { marketingService1.track(Event.ShareBookmark) } + verify { marketingService1.track(Event.CopyBookmark) } + verify { marketingService1.track(Event.AddBookmarkFolder) } + verify { marketingService1.track(Event.RemoveBookmarkFolder) } + verify { marketingService1.track(Event.RemoveBookmarks) } + } } diff --git a/docs/metrics.md b/docs/metrics.md index 16799c38e..d41ec4c1a 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -74,6 +74,7 @@ In addition to those built-in metrics, the following metrics are added to the pi | bookmarks_management.folder_remove |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark folder. |[mozilla-mobile/fenix#3724](https://github.com/mozilla-mobile/fenix/pull/3724), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | | bookmarks_management.moved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user moved an existing bookmark or folder to another folder. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | | bookmarks_management.multi_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed multiple bookmarks at once. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark. |[mozilla-mobile/fenix#18174](https://github.com/mozilla-mobile/fenix/pull/18174)||2022-08-01 |2 | | bookmarks_management.open_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | | bookmarks_management.open_in_new_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new tabs. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | | bookmarks_management.open_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new private tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | From 9049513017bbe74218d4d4ccb6de8e850eaa02f1 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Mon, 8 Mar 2021 19:15:29 -0500 Subject: [PATCH 059/149] Closes #18178: Rework History Telemetry (#18261) --- app/metrics.yaml | 59 +++++++++++++++++-- .../mozilla/fenix/components/metrics/Event.kt | 4 ++ .../components/metrics/GleanMetricsService.kt | 12 ++++ .../fenix/library/history/HistoryFragment.kt | 10 +++- .../metrics/GleanMetricsServiceTest.kt | 20 +++++++ .../metrics/MetricControllerTest.kt | 25 ++++++++ docs/metrics.md | 6 +- 7 files changed, 128 insertions(+), 8 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index d6eff7b12..1b4c35809 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -2117,15 +2117,66 @@ history: description: | A user opened a history item bugs: - - https://github.com/mozilla-mobile/fenix/issues/2362 + - https://github.com/mozilla-mobile/fenix/issues/18178 data_reviews: - - https://github.com/mozilla-mobile/fenix/pull/3940 - - https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068 + - https://github.com/mozilla-mobile/fenix/pull/18261 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-08-01" + expires: "2022-08-01" + opened_item_in_new_tab: + type: event + description: | + A user opened a history item in a new tab + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18178 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18261 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2022-08-01" + opened_items_in_new_tabs: + type: event + description: | + A user opened multiple history items in new tabs + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18178 + data_reviews: + - https://gith ub.com/mozilla-mobile/fenix/pull/18261 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2022-08-01" + opened_item_in_private_tab: + type: event + description: | + A user opened a history item in a private tab + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18178 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18261 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2022-08-01" + opened_items_in_private_tabs: + type: event + description: | + A user opened multiple history items in private tabs + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18178 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18261 + data_sensitivity: + - interaction + notification_emails: + - fenix-core@mozilla.com + expires: "2022-08-01" tip: displayed: 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 23240bcf8..a91932209 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 @@ -73,6 +73,10 @@ sealed class Event { object HistoryOpened : Event() object HistoryItemShared : Event() object HistoryItemOpened : Event() + object HistoryOpenedInNewTab : Event() + object HistoryOpenedInNewTabs : Event() + object HistoryOpenedInPrivateTab : Event() + object HistoryOpenedInPrivateTabs : Event() object HistoryItemRemoved : Event() object HistoryAllItemsRemoved : Event() object ReaderModeAvailable : Event() diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 20c164d3f..dfe1d517d 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -307,6 +307,18 @@ private val Event.wrapper: EventWrapper<*>? is Event.HistoryItemOpened -> EventWrapper( { History.openedItem.record(it) } ) + is Event.HistoryOpenedInNewTab -> EventWrapper( + { History.openedItemInNewTab.record(it) } + ) + is Event.HistoryOpenedInNewTabs -> EventWrapper( + { History.openedItemsInNewTabs.record(it) } + ) + is Event.HistoryOpenedInPrivateTab -> EventWrapper( + { History.openedItemInPrivateTab.record(it) } + ) + is Event.HistoryOpenedInPrivateTabs -> EventWrapper( + { History.openedItemsInPrivateTabs.record(it) } + ) is Event.HistoryItemRemoved -> EventWrapper( { History.removed.record(it) } ) diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt index 259d7ce11..e3a826621 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt @@ -188,7 +188,7 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandl } R.id.open_history_in_new_tabs_multi_select -> { openItemsInNewTab { selectedItem -> - requireComponents.analytics.metrics.track(Event.HistoryItemOpened) + requireComponents.analytics.metrics.track(Event.HistoryOpenedInNewTabs) selectedItem.url } @@ -197,7 +197,7 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandl } R.id.open_history_in_private_tabs_multi_select -> { openItemsInNewTab(private = true) { selectedItem -> - requireComponents.analytics.metrics.track(Event.HistoryItemOpened) + requireComponents.analytics.metrics.track(Event.HistoryOpenedInPrivateTabs) selectedItem.url } @@ -248,7 +248,11 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandl } private fun openItem(item: HistoryItem, mode: BrowsingMode? = null) { - requireComponents.analytics.metrics.track(Event.HistoryItemOpened) + when (mode?.isPrivate) { + true -> requireComponents.analytics.metrics.track(Event.HistoryOpenedInPrivateTab) + false -> requireComponents.analytics.metrics.track(Event.HistoryOpenedInNewTab) + null -> requireComponents.analytics.metrics.track(Event.HistoryItemOpened) + } mode?.let { (activity as HomeActivity).browsingModeManager.mode = it } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt index 8095c5b2b..e46ff7356 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt @@ -20,6 +20,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.GleanMetrics.Awesomebar import org.mozilla.fenix.GleanMetrics.BookmarksManagement import org.mozilla.fenix.GleanMetrics.Events +import org.mozilla.fenix.GleanMetrics.History import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine import org.mozilla.fenix.GleanMetrics.SyncedTabs @@ -177,4 +178,23 @@ class GleanMetricsServiceTest { gleanService.track(Event.RemoveBookmarkFolder) assertTrue(BookmarksManagement.folderRemove.testHasValue()) } + + @Test + fun `History events is correctly recorded`() { + assertFalse(History.openedItemInNewTab.testHasValue()) + gleanService.track(Event.HistoryOpenedInNewTab) + assertTrue(History.openedItemInNewTab.testHasValue()) + + assertFalse(History.openedItemsInNewTabs.testHasValue()) + gleanService.track(Event.HistoryOpenedInNewTabs) + assertTrue(History.openedItemsInNewTabs.testHasValue()) + + assertFalse(History.openedItemInPrivateTab.testHasValue()) + gleanService.track(Event.HistoryOpenedInPrivateTab) + assertTrue(History.openedItemInPrivateTab.testHasValue()) + + assertFalse(History.openedItemsInPrivateTabs.testHasValue()) + gleanService.track(Event.HistoryOpenedInPrivateTabs) + assertTrue(History.openedItemsInPrivateTabs.testHasValue()) + } } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt index 50472ab1a..01fd81be2 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt @@ -330,4 +330,29 @@ class MetricControllerTest { verify { marketingService1.track(Event.RemoveBookmarkFolder) } verify { marketingService1.track(Event.RemoveBookmarks) } } + + @Test + fun `history events should be sent to enabled service`() { + val controller = ReleaseMetricController( + listOf(marketingService1), + isDataTelemetryEnabled = { true }, + isMarketingDataTelemetryEnabled = { true } + ) + every { marketingService1.shouldTrack(Event.HistoryOpenedInNewTab) } returns true + every { marketingService1.shouldTrack(Event.HistoryOpenedInNewTabs) } returns true + every { marketingService1.shouldTrack(Event.HistoryOpenedInPrivateTab) } returns true + every { marketingService1.shouldTrack(Event.HistoryOpenedInPrivateTabs) } returns true + + controller.start(MetricServiceType.Marketing) + + controller.track(Event.HistoryOpenedInNewTab) + controller.track(Event.HistoryOpenedInNewTabs) + controller.track(Event.HistoryOpenedInPrivateTab) + controller.track(Event.HistoryOpenedInPrivateTabs) + + verify { marketingService1.track(Event.HistoryOpenedInNewTab) } + verify { marketingService1.track(Event.HistoryOpenedInNewTabs) } + verify { marketingService1.track(Event.HistoryOpenedInPrivateTab) } + verify { marketingService1.track(Event.HistoryOpenedInPrivateTabs) } + } } diff --git a/docs/metrics.md b/docs/metrics.md index d41ec4c1a..053678beb 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -138,7 +138,11 @@ In addition to those built-in metrics, the following metrics are added to the pi | find_in_page.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the find in page UI |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | find_in_page.searched_page |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user searched the page |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | history.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the history screen |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| history.opened_item |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a history item |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | +| history.opened_item |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a history item |[mozilla-mobile/fenix#18261](https://github.com/mozilla-mobile/fenix/pull/18261)||2022-08-01 |2 | +| history.opened_item_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a history item in a new tab |[mozilla-mobile/fenix#18261](https://github.com/mozilla-mobile/fenix/pull/18261)||2022-08-01 |2 | +| history.opened_item_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a history item in a private tab |[mozilla-mobile/fenix#18261](https://github.com/mozilla-mobile/fenix/pull/18261)||2022-08-01 |2 | +| history.opened_items_in_new_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple history items in new tabs |[Review 1](https://gith ub.com/mozilla-mobile/fenix/pull/18261)||2022-08-01 |2 | +| history.opened_items_in_private_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple history items in private tabs |[mozilla-mobile/fenix#18261](https://github.com/mozilla-mobile/fenix/pull/18261)||2022-08-01 |2 | | history.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a history item |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | history.removed_all |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed all history items |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | history.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user shared a history item |[mozilla-mobile/fenix#3940](https://github.com/mozilla-mobile/fenix/pull/3940), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From ee17fc75d0ef5e4c6f497446305d839616f8cc3b Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Tue, 9 Mar 2021 00:04:12 +0000 Subject: [PATCH 060/149] Import l10n. --- app/src/main/res/values-dsb/strings.xml | 2 ++ app/src/main/res/values-es/strings.xml | 21 +++++++++++++++--- app/src/main/res/values-eu/strings.xml | 25 +++++++++++++++++++--- app/src/main/res/values-hsb/strings.xml | 2 ++ app/src/main/res/values-hu/strings.xml | 2 ++ app/src/main/res/values-ko/strings.xml | 2 ++ app/src/main/res/values-nb-rNO/strings.xml | 2 ++ app/src/main/res/values-ru/strings.xml | 2 ++ app/src/main/res/values-sl/strings.xml | 4 ++++ app/src/main/res/values-uk/strings.xml | 2 ++ 10 files changed, 58 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values-dsb/strings.xml b/app/src/main/res/values-dsb/strings.xml index 152f297cb..497fb3929 100644 --- a/app/src/main/res/values-dsb/strings.xml +++ b/app/src/main/res/values-dsb/strings.xml @@ -180,6 +180,8 @@ Wenkowny naglěd + + Cytański naglěd pśiměriś Zwisk njejo móžny. Njespóznawajobna URL-šema. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ad65854cf..4529d97c8 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -136,6 +136,8 @@ Editar marcador Complementos + + Extensiones No hay complementos aquí @@ -222,6 +224,9 @@ Saber más + + Buscar %1$s + Abrir una nueva pestaña de Firefox @@ -537,6 +542,10 @@ Otros marcadores Historial + + Nueva pestaña + + Buscar en la página Pestañas sincronizadas @@ -894,16 +903,22 @@ Desactivado - + Permitir audio y vídeo + + Permitir audio y video Bloquear audio y vídeo solo con datos móviles El audio y el vídeo se reproducirán con Wi-Fi - + Bloquear solo audio - + + Bloquear solo audio + Bloquear audio y vídeo + + Bloquear audio y video Activado diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index d0a3ea701..720aaf8b0 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -132,6 +132,8 @@ Editatu laster-marka Gehigarriak + + Hedapenak Gehigarririk ez hemen @@ -183,6 +185,8 @@ Itxura + + Pertsonalizatu irakurtzeko ikuspegia Ezin da konektatu. URL eskema ezagutezina. @@ -220,6 +224,11 @@ Argibide gehiago + + Bilatu %s erabiliz + + Bilatu helbide-barratik zuzenean + Ireki Firefoxen fitxa berri bat @@ -538,6 +547,10 @@ Beste laster-markak Historia + + Fitxa berria + + Bilatu orrian Sinkronizatutako fitxak @@ -893,16 +906,22 @@ Desaktibatuta - + Baimendu audioa eta bideoa + + Baimendu audioa eta bideoa Blokeatu audioa eta bideoa datu mugikorretan soilik Audioa eta bideoa WiFi bidez erreproduzituko dira soilik - + Blokeatu audioa soilik - + + Blokeatu audioa soilik + Blokeatu audioa eta bideoa + + Blokeatu audioa eta bideoa Aktibatuta diff --git a/app/src/main/res/values-hsb/strings.xml b/app/src/main/res/values-hsb/strings.xml index e1174d2cf..0ca8c236d 100644 --- a/app/src/main/res/values-hsb/strings.xml +++ b/app/src/main/res/values-hsb/strings.xml @@ -181,6 +181,8 @@ Zwonkowny napohlad + + Čitanski napohlad přiměrić Zwisk móžny njeje. Njespóznawajomna URL-šema. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2762a89b0..d6f8400a9 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -182,6 +182,8 @@ Megjelenés + + Olvasó nézet testreszabása Nem tud csatlakozni. Felismerhetetlen URL-séma. diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index c504b7155..2c5d5d087 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -190,6 +190,8 @@ 모양 + + 리더뷰 사용자 지정 연결할 수 없음. 인식할 수 없는 URL 구성표. diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index aee06e372..64bc8f359 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -183,6 +183,8 @@ Utseende + + Tilpass lesevisning Kan ikke koble til. Ugjenkjennelig URL-skjema. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f75fd6a12..6de51053d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -190,6 +190,8 @@ Оформление + + Настроить вид для чтения Ошибка подключения. Не удалось распознать схему URL. diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 8b70a43d7..7bcfaa4dc 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -181,6 +181,8 @@ Videz + + Prilagodi bralni pogled Povezava ni mogoča. Neprepoznavna URL shema. @@ -217,6 +219,8 @@ Več o tem + + Išči z %s Iščite neposredno iz naslovne vrstice diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 429f94e54..fba695ca0 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -182,6 +182,8 @@ Вигляд + + Налаштувати режим читача Неможливо з’єднатися. Невідома схема URL-адреси. From 5259bdf7be782aec48ef70b6c6fec3201dd2ed23 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Dec 2020 20:41:57 +0000 Subject: [PATCH 061/149] Bump cryptography Bumps [cryptography](https://github.com/pyca/cryptography) from 2.8 to 3.2. - [Release notes](https://github.com/pyca/cryptography/releases) - [Changelog](https://github.com/pyca/cryptography/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/2.8...3.2) Signed-off-by: dependabot[bot] --- .../fenix/syncintegration/Pipfile.lock | 429 ++++++++++-------- 1 file changed, 235 insertions(+), 194 deletions(-) diff --git a/app/src/androidTest/java/org/mozilla/fenix/syncintegration/Pipfile.lock b/app/src/androidTest/java/org/mozilla/fenix/syncintegration/Pipfile.lock index f621829f5..35ec0b509 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/syncintegration/Pipfile.lock +++ b/app/src/androidTest/java/org/mozilla/fenix/syncintegration/Pipfile.lock @@ -18,17 +18,25 @@ "default": { "atomicwrites": { "hashes": [ - "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", - "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6" + "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197", + "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a" ], - "version": "==1.3.0" + "version": "==1.4.0" }, "attrs": { "hashes": [ - "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", - "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" + "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6", + "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700" + ], + "version": "==20.3.0" + }, + "backports.functools-lru-cache": { + "hashes": [ + "sha256:0bada4c2f8a43d533e4ecb7a12214d9420e66eb206d54bf2d682581ca4b80848", + "sha256:8fde5f188da2d593bd5bc0be98d9abc46c95bb8a9dde93429570192ee6cc2d4a" ], - "version": "==19.3.0" + "markers": "python_version < '3.2'", + "version": "==1.6.1" }, "blessings": { "hashes": [ @@ -40,43 +48,51 @@ }, "certifi": { "hashes": [ - "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", - "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" + "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", + "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" ], - "version": "==2019.11.28" + "version": "==2020.12.5" }, "cffi": { "hashes": [ - "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff", - "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b", - "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac", - "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0", - "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384", - "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26", - "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6", - "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b", - "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e", - "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd", - "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2", - "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66", - "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc", - "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8", - "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55", - "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4", - "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5", - "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d", - "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78", - "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa", - "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793", - "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f", - "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a", - "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f", - "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30", - "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f", - "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3", - "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c" - ], - "version": "==1.14.0" + "sha256:00a1ba5e2e95684448de9b89888ccd02c98d512064b4cb987d48f4b40aa0421e", + "sha256:00e28066507bfc3fe865a31f325c8391a1ac2916219340f87dfad602c3e48e5d", + "sha256:045d792900a75e8b1e1b0ab6787dd733a8190ffcf80e8c8ceb2fb10a29ff238a", + "sha256:0638c3ae1a0edfb77c6765d487fee624d2b1ee1bdfeffc1f0b58c64d149e7eec", + "sha256:105abaf8a6075dc96c1fe5ae7aae073f4696f2905fde6aeada4c9d2926752362", + "sha256:155136b51fd733fa94e1c2ea5211dcd4c8879869008fc811648f16541bf99668", + "sha256:1a465cbe98a7fd391d47dce4b8f7e5b921e6cd805ef421d04f5f66ba8f06086c", + "sha256:1d2c4994f515e5b485fd6d3a73d05526aa0fcf248eb135996b088d25dfa1865b", + "sha256:2c24d61263f511551f740d1a065eb0212db1dbbbbd241db758f5244281590c06", + "sha256:51a8b381b16ddd370178a65360ebe15fbc1c71cf6f584613a7ea08bfad946698", + "sha256:594234691ac0e9b770aee9fcdb8fa02c22e43e5c619456efd0d6c2bf276f3eb2", + "sha256:5cf4be6c304ad0b6602f5c4e90e2f59b47653ac1ed9c662ed379fe48a8f26b0c", + "sha256:64081b3f8f6f3c3de6191ec89d7dc6c86a8a43911f7ecb422c60e90c70be41c7", + "sha256:6bc25fc545a6b3d57b5f8618e59fc13d3a3a68431e8ca5fd4c13241cd70d0009", + "sha256:798caa2a2384b1cbe8a2a139d80734c9db54f9cc155c99d7cc92441a23871c03", + "sha256:7c6b1dece89874d9541fc974917b631406233ea0440d0bdfbb8e03bf39a49b3b", + "sha256:840793c68105fe031f34d6a086eaea153a0cd5c491cde82a74b420edd0a2b909", + "sha256:8d6603078baf4e11edc4168a514c5ce5b3ba6e3e9c374298cb88437957960a53", + "sha256:9cc46bc107224ff5b6d04369e7c595acb700c3613ad7bcf2e2012f62ece80c35", + "sha256:9f7a31251289b2ab6d4012f6e83e58bc3b96bd151f5b5262467f4bb6b34a7c26", + "sha256:9ffb888f19d54a4d4dfd4b3f29bc2c16aa4972f1c2ab9c4ab09b8ab8685b9c2b", + "sha256:a5ed8c05548b54b998b9498753fb9cadbfd92ee88e884641377d8a8b291bcc01", + "sha256:a7711edca4dcef1a75257b50a2fbfe92a65187c47dab5a0f1b9b332c5919a3fb", + "sha256:af5c59122a011049aad5dd87424b8e65a80e4a6477419c0c1015f73fb5ea0293", + "sha256:b18e0a9ef57d2b41f5c68beefa32317d286c3d6ac0484efd10d6e07491bb95dd", + "sha256:b4e248d1087abf9f4c10f3c398896c87ce82a9856494a7155823eb45a892395d", + "sha256:ba4e9e0ae13fc41c6b23299545e5ef73055213e466bd107953e4a013a5ddd7e3", + "sha256:c6332685306b6417a91b1ff9fae889b3ba65c2292d64bd9245c093b1b284809d", + "sha256:d5ff0621c88ce83a28a10d2ce719b2ee85635e85c515f12bac99a95306da4b2e", + "sha256:d9efd8b7a3ef378dd61a1e77367f1924375befc2eba06168b6ebfa903a5e59ca", + "sha256:df5169c4396adc04f9b0a05f13c074df878b6052430e03f50e68adf3a57aa28d", + "sha256:ebb253464a5d0482b191274f1c8bf00e33f7e0b9c66405fbffc61ed2c839c775", + "sha256:ec80dc47f54e6e9a78181ce05feb71a0353854cc26999db963695f950b5fb375", + "sha256:f032b34669220030f905152045dfa27741ce1a6db3324a5bc0b96b6c7420c87b", + "sha256:f60567825f791c6f8a592f3c6e3bd93dd2934e3f9dac189308426bd76b00ef3b", + "sha256:f803eaa94c2fcda012c047e62bc7a51b0bdabda1cad7a92a522694ea2d76e49f" + ], + "version": "==1.14.4" }, "chardet": { "hashes": [ @@ -103,36 +119,38 @@ }, "cryptography": { "hashes": [ - "sha256:02079a6addc7b5140ba0825f542c0869ff4df9a69c360e339ecead5baefa843c", - "sha256:1df22371fbf2004c6f64e927668734070a8953362cd8370ddd336774d6743595", - "sha256:369d2346db5934345787451504853ad9d342d7f721ae82d098083e1f49a582ad", - "sha256:3cda1f0ed8747339bbdf71b9f38ca74c7b592f24f65cdb3ab3765e4b02871651", - "sha256:44ff04138935882fef7c686878e1c8fd80a723161ad6a98da31e14b7553170c2", - "sha256:4b1030728872c59687badcca1e225a9103440e467c17d6d1730ab3d2d64bfeff", - "sha256:58363dbd966afb4f89b3b11dfb8ff200058fbc3b947507675c19ceb46104b48d", - "sha256:6ec280fb24d27e3d97aa731e16207d58bd8ae94ef6eab97249a2afe4ba643d42", - "sha256:7270a6c29199adc1297776937a05b59720e8a782531f1f122f2eb8467f9aab4d", - "sha256:73fd30c57fa2d0a1d7a49c561c40c2f79c7d6c374cc7750e9ac7c99176f6428e", - "sha256:7f09806ed4fbea8f51585231ba742b58cbcfbfe823ea197d8c89a5e433c7e912", - "sha256:90df0cc93e1f8d2fba8365fb59a858f51a11a394d64dbf3ef844f783844cc793", - "sha256:971221ed40f058f5662a604bd1ae6e4521d84e6cad0b7b170564cc34169c8f13", - "sha256:a518c153a2b5ed6b8cc03f7ae79d5ffad7315ad4569b2d5333a13c38d64bd8d7", - "sha256:b0de590a8b0979649ebeef8bb9f54394d3a41f66c5584fff4220901739b6b2f0", - "sha256:b43f53f29816ba1db8525f006fa6f49292e9b029554b3eb56a189a70f2a40879", - "sha256:d31402aad60ed889c7e57934a03477b572a03af7794fa8fb1780f21ea8f6551f", - "sha256:de96157ec73458a7f14e3d26f17f8128c959084931e8997b9e655a39c8fde9f9", - "sha256:df6b4dca2e11865e6cfbfb708e800efb18370f5a46fd601d3755bc7f85b3a8a2", - "sha256:ecadccc7ba52193963c0475ac9f6fa28ac01e01349a2ca48509667ef41ffd2cf", - "sha256:fb81c17e0ebe3358486cd8cc3ad78adbae58af12fc2bf2bc0bb84e8090fa5ce8" - ], - "version": "==2.8" + "sha256:22f8251f68953553af4f9c11ec5f191198bc96cff9f0ac5dd5ff94daede0ee6d", + "sha256:284e275e3c099a80831f9898fb5c9559120d27675c3521278faba54e584a7832", + "sha256:3e17d02941c0f169c5b877597ca8be895fca0e5e3eb882526a74aa4804380a98", + "sha256:52a47e60953679eea0b4d490ca3c241fb1b166a7b161847ef4667dfd49e7699d", + "sha256:57b8c1ed13b8aa386cabbfde3be175d7b155682470b0e259fecfe53850967f8a", + "sha256:6a8f64ed096d13f92d1f601a92d9fd1f1025dc73a2ca1ced46dcf5e0d4930943", + "sha256:6e8a3c7c45101a7eeee93102500e1b08f2307c717ff553fcb3c1127efc9b6917", + "sha256:7ef41304bf978f33cfb6f43ca13bb0faac0c99cda33693aa20ad4f5e34e8cb8f", + "sha256:87c2fffd61e934bc0e2c927c3764c20b22d7f5f7f812ee1a477de4c89b044ca6", + "sha256:88069392cd9a1e68d2cfd5c3a2b0d72a44ef3b24b8977a4f7956e9e3c4c9477a", + "sha256:8a0866891326d3badb17c5fd3e02c926b635e8923fa271b4813cd4d972a57ff3", + "sha256:8f0fd8b0751d75c4483c534b209e39e918f0d14232c0d8a2a76e687f64ced831", + "sha256:9a07e6d255053674506091d63ab4270a119e9fc83462c7ab1dbcb495b76307af", + "sha256:9a8580c9afcdcddabbd064c0a74f337af74ff4529cdf3a12fa2e9782d677a2e5", + "sha256:bd80bc156d3729b38cb227a5a76532aef693b7ac9e395eea8063ee50ceed46a5", + "sha256:d1cbc3426e6150583b22b517ef3720036d7e3152d428c864ff0f3fcad2b97591", + "sha256:e15ac84dcdb89f92424cbaca4b0b34e211e7ce3ee7b0ec0e4f3c55cee65fae5a", + "sha256:e4789b84f8dedf190148441f7c5bfe7244782d9cbb194a36e17b91e7d3e1cca9", + "sha256:f01c9116bfb3ad2831e125a73dcd957d173d6ddca7701528eff1e7d97972872c", + "sha256:f0e3986f6cce007216b23c490f093f35ce2068f3c244051e559f647f6731b7ae", + "sha256:f2aa3f8ba9e2e3fd49bd3de743b976ab192fbf0eb0348cebde5d2a9de0090a9f", + "sha256:fb70a4cedd69dc52396ee114416a3656e011fb0311fca55eb55c7be6ed9c8aef" + ], + "index": "pypi", + "version": "==3.2" }, "distro": { "hashes": [ - "sha256:362dde65d846d23baee4b5c058c8586f219b5a54be1cf5fc6ff55c4578392f57", - "sha256:eedf82a470ebe7d010f1872c17237c79ab04097948800029994fa458e52fb4b4" + "sha256:0e58756ae38fbd8fc3020d54badb8eae17c5b9dcbed388b17bb55b8a5928df92", + "sha256:df74eed763e18d10d0da624258524ae80486432cd17392d9c3d96f5e83cd2799" ], - "version": "==1.4.0" + "version": "==1.5.0" }, "enum34": { "hashes": [ @@ -168,18 +186,18 @@ }, "idna": { "hashes": [ - "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", - "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa" + "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", + "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" ], - "version": "==2.9" + "version": "==2.10" }, "importlib-metadata": { "hashes": [ - "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", - "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b" + "sha256:b8de9eff2b35fb037368f28a7df1df4e6436f578fa74423505b6c6a778d5b5dd", + "sha256:c2d6341ff566f609e89a2acb2db190e5e1d23d5409d6cc8d2fe34d72443876d4" ], "markers": "python_version < '3.8'", - "version": "==1.5.0" + "version": "==2.1.1" }, "ipaddress": { "hashes": [ @@ -200,10 +218,10 @@ }, "mozdevice": { "hashes": [ - "sha256:3f19640478fae47c5dfed998da42f86aef39d9ba03222e99d19ff488e2f78184", - "sha256:e6f7a679ef9a40e6db8e1d47d611b8d9997f03d345953570cbdf34d7cde79b6e" + "sha256:074ba1ff99b18ccc1931538a161be2410d0f9cee122df852b3bc73e1000fbcad", + "sha256:a5a1e882a72df71165f6322def9b5e1d677d39d25f62157f3e0dc554b5ae04dc" ], - "version": "==3.1.0" + "version": "==4.0.3" }, "mozdownload": { "hashes": [ @@ -221,30 +239,31 @@ }, "mozinfo": { "hashes": [ - "sha256:41220573ea1e0e90d38d393f2848b470aeea68c1863eef0d578eb44c70a2f817", - "sha256:65e158464e09ba759f21526c14bef2f8c0ae5b424f14f23e7d863048e16a402a" + "sha256:4961ebef3c5474b9ca470142f88b5de774a069f4e105663a5152b0ef4659785a" ], - "version": "==1.2.1" + "version": "==1.2.2" }, "mozinstall": { "hashes": [ - "sha256:219ba7c51308433487b4f30a2615cb9b3ecd40a76b9faf41cf1b1b005bb5dda7" + "sha256:219ba7c51308433487b4f30a2615cb9b3ecd40a76b9faf41cf1b1b005bb5dda7", + "sha256:bbc31a18ee8a1fbec74b67b99c6c0289ffc7daf39eb5b5ff7dc99f1be687eb08" ], "index": "pypi", "version": "==2.0.0" }, "mozlog": { "hashes": [ - "sha256:4eb8b781525a1433f05239583051dfe19927036b0c1f450ef0ad33882284a13b", - "sha256:50608bd9f58461dc266be0e3663b6f97934b02a12bb403f2ccf09728e36f4898" + "sha256:4719d3d00bf1a0b77285d306eb3180f9c1311fffae9640a423fad9d80170e43d", + "sha256:d035f722c15d700e4a7b48b90bdda0a6ad83e25482760949d1abd73468bad07f" ], - "version": "==6.0" + "version": "==7.0.1" }, "mozprocess": { "hashes": [ - "sha256:949fe2c96c866b3bd89011441b85dbe0477d1a2d3dde5030a35cf51f28db793d" + "sha256:08e1036b53819fd144331f6dfbbb17fc8ca782bbed2e28b4aa771b8b91f7dffb", + "sha256:54dc59e7f5a9c2c2930bffb7935f36dddd1d94c9fc6ed179e893d2dff353995a" ], - "version": "==1.1.0" + "version": "==1.2.1" }, "mozprofile": { "hashes": [ @@ -279,17 +298,17 @@ }, "packaging": { "hashes": [ - "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3", - "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752" + "sha256:05af3bb85d320377db281cf254ab050e1a7ebcbf5410685a9a407e18a1f81236", + "sha256:eb41423378682dadb7166144a4926e443093863024de508ca5c9737d6bc08376" ], - "version": "==20.3" + "version": "==20.7" }, "pathlib2": { "hashes": [ "sha256:0ec8205a157c80d7acc301c0b18fbd5d44fe655968f5d947b6ecef5290fc35db", "sha256:6cd9a47b597b37cc57de1c05e56fb1a1c9cc9fab04fe78c29acd090418529868" ], - "markers": "python_version < '3'", + "markers": "python_version < '3.6'", "version": "==2.3.5" }, "pluggy": { @@ -301,17 +320,17 @@ }, "progressbar2": { "hashes": [ - "sha256:489cc619276505504cb3e6230e05465480f7b748515a2c1374f82115bcae561c", - "sha256:e5dcded3957b40eab6ba23962d25618a7709971b5413078a5905a93e84345e92" + "sha256:ef72be284e7f2b61ac0894b44165926f13f5d995b2bf3cd8a8dedc6224b255a7", + "sha256:fe2738e7ecb7df52ad76307fe610c460c52b50f5335fd26c3ab80ff7655ba1e0" ], - "version": "==3.50.0" + "version": "==3.53.1" }, "py": { "hashes": [ - "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa", - "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0" + "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2", + "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342" ], - "version": "==1.8.1" + "version": "==1.9.0" }, "pybrowserid": { "hashes": [ @@ -329,16 +348,23 @@ }, "pyfxa": { "hashes": [ - "sha256:f47f4285629fa6c033c79adc3fb90926c0818a42cfddb04d32818547362f1627" + "sha256:6c85cd08cf05f7138dee1cf2a8a1d68fd428b7b5ad488917c70a2a763d651cdb" + ], + "version": "==0.7.7" + }, + "pyjwt": { + "hashes": [ + "sha256:5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e", + "sha256:8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96" ], - "version": "==0.7.3" + "version": "==1.7.1" }, "pyparsing": { "hashes": [ - "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", - "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec" + "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", + "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" ], - "version": "==2.4.6" + "version": "==2.4.7" }, "pypom": { "hashes": [ @@ -427,10 +453,10 @@ }, "six": { "hashes": [ - "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", - "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" + "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", + "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" ], - "version": "==1.14.0" + "version": "==1.15.0" }, "treeherder-client": { "hashes": [ @@ -441,17 +467,17 @@ }, "urllib3": { "hashes": [ - "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", - "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc" + "sha256:8d7eaa5a82a1cac232164990f04874c594c9453ec55eef02eab885aa02fc17a2", + "sha256:f5321fbe4bf3fefa0efd0bfe7fb14e90909eb62a48ccda331726b4319897dd5e" ], - "version": "==1.25.8" + "version": "==1.25.11" }, "wcwidth": { "hashes": [ - "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603", - "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8" + "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", + "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" ], - "version": "==0.1.8" + "version": "==0.2.5" }, "webob": { "hashes": [ @@ -469,9 +495,10 @@ }, "zope.component": { "hashes": [ - "sha256:ec2afc5bbe611dcace98bb39822c122d44743d635dafc7315b9aef25097db9e6" + "sha256:607628e4c84f7887a69a958542b5c304663e726b73aba0882e3a3f059bff14f3", + "sha256:91628918218b3e6f6323de2a7b845e09ddc5cae131c034896c051b084bba3c92" ], - "version": "==4.6" + "version": "==4.6.2" }, "zope.deferredimport": { "hashes": [ @@ -489,10 +516,10 @@ }, "zope.event": { "hashes": [ - "sha256:69c27debad9bdacd9ce9b735dad382142281ac770c4a432b533d6d65c4614bcf", - "sha256:d8e97d165fd5a0997b45f5303ae11ea3338becfe68c401dd88ffd2113fe5cae7" + "sha256:2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42", + "sha256:5e76517f5b9b119acf37ca8819781db6c16ea433f7e2062c4afc2b6fbedb1330" ], - "version": "==4.4" + "version": "==4.5.0" }, "zope.hookable": { "hashes": [ @@ -541,91 +568,105 @@ }, "zope.interface": { "hashes": [ - "sha256:02339c53bbf7e438dec371af1f401e4843f9dc5765b3b032032b195dd72b47f2", - "sha256:0616040d5a18786aff5d25ef6e1fa0f875b7ba5b6f1a923c1153be81dd9c65ad", - "sha256:07a8bb9110854c0ab9329adbbec7050af242a78a62e226ab49e9c2182090f501", - "sha256:07de051fac6dedc6c659034f80bc46623edc776c757fa26f3f467954b12d2403", - "sha256:08ae0a88ac29b92faff069e0511ad27197b3274bdf67ebd8c75aaeb05823c7af", - "sha256:1033e7bb858c398580ca7cbb50f15b715e6031d5772f8a1bde4042c12300a52a", - "sha256:11db683f49652b34aa87904b27d00f9032fa2db7f1f9676c05b13361a3c7547c", - "sha256:23c4a70a9abb8faa35e2967e2e7cbd9225512b706b6eb96b01eb1ccbb2b632c3", - "sha256:2690fd5b042062d866017db11ce1e12d4862df28614cc2915dc57e52b46a8594", - "sha256:31fdcc9eaf2c379e8b416184a0749ce3f95fdaf206b092b63bdc065aecca6a95", - "sha256:34381fcecc6e6f57d72bc2fab6175976eeacdd61dbb34427a37b260238278199", - "sha256:36e7438d2f71153cea6b119ddd2648bc010cec4368fd8e7170e50090c0d7ed19", - "sha256:3b6a2ef2c6b4e9786939bd9861e7b98bc01cb3024f87c8cf4b78872f2afcf584", - "sha256:4855384c27fe7e31efbee32f74659421d64e5bfa8b7df2ec08d306d0f3d4cee6", - "sha256:4d0830e1d544b2c303064ec01923de2b9d6f5b5d0d78608a91d758b0f469361c", - "sha256:61b95dbfd03ce2a55c38da711cba7130605dbef4839ca12b53c46827826c5c5b", - "sha256:64446f9baa2c51f47b0e272939c583ffd220e67f5bcbc2f18dd244c5a46a7018", - "sha256:65cef4766be4be9372621cd17773424302c21785dfaf6e9bd5b64b1f1264f9cc", - "sha256:6f1e8914eee2e3a0bcf435d963ca5cf3a3df89a47cbd3e2b16343bc875194fed", - "sha256:6f2bf246ee9350f428860c37db6158cfb27a7e585d60b2bb3b88864810875835", - "sha256:73a618e734803ded8b8d8f14f9a6371c6a1acc445840cf6ae57733041e796671", - "sha256:7d3c4f10b7a8502a68a8eadcd57e86a35e3948af3edee7bd49a21b225361b0da", - "sha256:98a21acc7d1e45fcb700831b66ec6c84a3c2a5a94868d72ef83565966adc474f", - "sha256:993051db4278f9ec3b191ae823a7bb32b6a91fed6e960d43500fc4ce64cdb4e0", - "sha256:9e67e9fa7dc43210ad766cd6eef133d9d256a530fe07e5585685cdc742170d10", - "sha256:a36e7e1972109504dfa0995a89b6c24a990113eb4cedef93d0eaf1452901b6ac", - "sha256:a41a34c55887743ee124e8f696217dec1a7eead1164d27ef27dfae528c396a23", - "sha256:a7b50fa86c1bd863ef3b3314da62928c015a732bb0aef220852b9606104f0df5", - "sha256:a82d36ecc28e72904388f72f57f3c04aee7c43a019e302d61944b3886c261be3", - "sha256:a9fce290a6ba88e5e6e81dd1e800c045212df69ab69d1de0d303b1af9cec692f", - "sha256:ae6c4a1fa696c12c3b654fa0d160f3781271f0edbbb0ae50f285a91f2a272a09", - "sha256:b0029f193d91a1e0085e4a99dd71e4c63a3e7826ec4a8d2ea457f02e1b6b0bb4", - "sha256:b12241fac561b635329c3275e911a53e104b43875b99d31332d006d52e180912", - "sha256:b906dda76ab70b6905ef3014260e7f1c861a0c4841e29826eb34a6187255504b", - "sha256:d79da12a15edd6d7c366766954c4b6de0247e85ba35ee2ad9f37f972e7080f8a", - "sha256:d8a0cb84de725ccd6abd9b5bd32cb94a11db336076fb6d459f1fed23d0719e0c", - "sha256:eb92c733be08c6e2b8dfd4613d1b3c2f345ca4f83219d40fda4680333d3a0dc4", - "sha256:f044fec9c7e1b0ec6fdf0d3abc648c2f3b9128933051a9a73af52dbdd9e6d6e9", - "sha256:fd1101bd3fcb4f4cf3485bb20d6cb0b56909b94d3bd2a53a6cb9d381c3da3365" - ], - "version": "==4.7.2" + "sha256:05a97ba92c1c7c26f25c9f671aa1ef85ffead6cdad13770e5b689cf983adc7e1", + "sha256:07d61722dd7d85547b7c6b0f5486b4338001fab349f2ac5cabc0b7182eb3425d", + "sha256:0a990dcc97806e5980bbb54b2e46b9cde9e48932d8e6984daf71ef1745516123", + "sha256:150e8bcb7253a34a4535aeea3de36c0bb3b1a6a47a183a95d65a194b3e07f232", + "sha256:1743bcfe45af8846b775086471c28258f4c6e9ee8ef37484de4495f15a98b549", + "sha256:1b5f6c8fff4ed32aa2dd43e84061bc8346f32d3ba6ad6e58f088fe109608f102", + "sha256:21e49123f375703cf824214939d39df0af62c47d122d955b2a8d9153ea08cfd5", + "sha256:21f579134a47083ffb5ddd1307f0405c91aa8b61ad4be6fd5af0171474fe0c45", + "sha256:27c267dc38a0f0079e96a2945ee65786d38ef111e413c702fbaaacbab6361d00", + "sha256:299bde0ab9e5c4a92f01a152b7fbabb460f31343f1416f9b7b983167ab1e33bc", + "sha256:2ab88d8f228f803fcb8cb7d222c579d13dab2d3622c51e8cf321280da01102a7", + "sha256:2ced4c35061eea623bc84c7711eedce8ecc3c2c51cd9c6afa6290df3bae9e104", + "sha256:2dcab01c660983ba5e5a612e0c935141ccbee67d2e2e14b833e01c2354bd8034", + "sha256:32546af61a9a9b141ca38d971aa6eb9800450fa6620ce6323cc30eec447861f3", + "sha256:32b40a4c46d199827d79c86bb8cb88b1bbb764f127876f2cb6f3a47f63dbada3", + "sha256:3cc94c69f6bd48ed86e8e24f358cb75095c8129827df1298518ab860115269a4", + "sha256:42b278ac0989d6f5cf58d7e0828ea6b5951464e3cf2ff229dd09a96cb6ba0c86", + "sha256:495b63fd0302f282ee6c1e6ea0f1c12cb3d1a49c8292d27287f01845ff252a96", + "sha256:4af87cdc0d4b14e600e6d3d09793dce3b7171348a094ba818e2a68ae7ee67546", + "sha256:4b94df9f2fdde7b9314321bab8448e6ad5a23b80542dcab53e329527d4099dcb", + "sha256:4c48ddb63e2b20fba4c6a2bf81b4d49e99b6d4587fb67a6cd33a2c1f003af3e3", + "sha256:4df9afd17bd5477e9f8c8b6bb8507e18dd0f8b4efe73bb99729ff203279e9e3b", + "sha256:518950fe6a5d56f94ba125107895f938a4f34f704c658986eae8255edb41163b", + "sha256:538298e4e113ccb8b41658d5a4b605bebe75e46a30ceca22a5a289cf02c80bec", + "sha256:55465121e72e208a7b69b53de791402affe6165083b2ea71b892728bd19ba9ae", + "sha256:588384d70a0f19b47409cfdb10e0c27c20e4293b74fc891df3d8eb47782b8b3e", + "sha256:6278c080d4afffc9016e14325f8734456831124e8c12caa754fd544435c08386", + "sha256:64ea6c221aeee4796860405e1aedec63424cda4202a7ad27a5066876db5b0fd2", + "sha256:681dbb33e2b40262b33fd383bae63c36d33fd79fa1a8e4092945430744ffd34a", + "sha256:6936aa9da390402d646a32a6a38d5409c2d2afb2950f045a7d02ab25a4e7d08d", + "sha256:778d0ec38bbd288b150a3ae363c8ffd88d2207a756842495e9bffd8a8afbc89a", + "sha256:8251f06a77985a2729a8bdbefbae79ee78567dddc3acbd499b87e705ca59fe24", + "sha256:83b4aa5344cce005a9cff5d0321b2e318e871cc1dfc793b66c32dd4f59e9770d", + "sha256:844fad925ac5c2ad4faaceb3b2520ad016b5280105c6e16e79838cf951903a7b", + "sha256:8ceb3667dd13b8133f2e4d637b5b00f240f066448e2aa89a41f4c2d78a26ce50", + "sha256:92dc0fb79675882d0b6138be4bf0cec7ea7c7eede60aaca78303d8e8dbdaa523", + "sha256:9789bd945e9f5bd026ed3f5b453d640befb8b1fc33a779c1fe8d3eb21fe3fb4a", + "sha256:a2b6d6eb693bc2fc6c484f2e5d93bd0b0da803fa77bf974f160533e555e4d095", + "sha256:aab9f1e34d810feb00bf841993552b8fcc6ae71d473c505381627143d0018a6a", + "sha256:abb61afd84f23099ac6099d804cdba9bd3b902aaaded3ffff47e490b0a495520", + "sha256:adf9ee115ae8ff8b6da4b854b4152f253b390ba64407a22d75456fe07dcbda65", + "sha256:aedc6c672b351afe6dfe17ff83ee5e7eb6ed44718f879a9328a68bdb20b57e11", + "sha256:b7a00ecb1434f8183395fac5366a21ee73d14900082ca37cf74993cf46baa56c", + "sha256:ba32f4a91c1cb7314c429b03afbf87b1fff4fb1c8db32260e7310104bd77f0c7", + "sha256:cbd0f2cbd8689861209cd89141371d3a22a11613304d1f0736492590aa0ab332", + "sha256:e4bc372b953bf6cec65a8d48482ba574f6e051621d157cf224227dbb55486b1e", + "sha256:eccac3d9aadc68e994b6d228cb0c8919fc47a5350d85a1b4d3d81d1e98baf40c", + "sha256:efd550b3da28195746bb43bd1d815058181a7ca6d9d6aa89dd37f5eefe2cacb7", + "sha256:efef581c8ba4d990770875e1a2218e856849d32ada2680e53aebc5d154a17e20", + "sha256:f057897711a630a0b7a6a03f1acf379b6ba25d37dc5dc217a97191984ba7f2fc", + "sha256:f37d45fab14ffef9d33a0dc3bc59ce0c5313e2253323312d47739192da94f5fd", + "sha256:f44906f70205d456d503105023041f1e63aece7623b31c390a0103db4de17537" + ], + "version": "==5.2.0" }, "zope.proxy": { "hashes": [ - "sha256:04646ac04ffa9c8e32fb2b5c3cd42995b2548ea14251f3c21ca704afae88e42c", - "sha256:07b6bceea232559d24358832f1cd2ed344bbf05ca83855a5b9698b5f23c5ed60", - "sha256:1ef452cc02e0e2f8e3c917b1a5b936ef3280f2c2ca854ee70ac2164d1655f7e6", - "sha256:22bf61857c5977f34d4e391476d40f9a3b8c6ab24fb0cac448d42d8f8b9bf7b2", - "sha256:299870e3428cbff1cd9f9b34144e76ecdc1d9e3192a8cf5f1b0258f47a239f58", - "sha256:2bfc36bfccbe047671170ea5677efd3d5ab730a55d7e45611d76d495e5b96766", - "sha256:32e82d5a640febc688c0789e15ea875bf696a10cf358f049e1ed841f01710a9b", - "sha256:3b2051bdc4bc3f02fa52483f6381cf40d4d48167645241993f9d7ebbd142ed9b", - "sha256:3f734bd8a08f5185a64fb6abb8f14dc97ec27a689ca808fb7a83cdd38d745e4f", - "sha256:3f78dd8de3112df8bbd970f0916ac876dc3fbe63810bd1cf7cc5eec4cbac4f04", - "sha256:4eabeb48508953ba1f3590ad0773b8daea9e104eec66d661917e9bbcd7125a67", - "sha256:4f05ecc33808187f430f249cb1ccab35c38f570b181f2d380fbe253da94b18d8", - "sha256:4f4f4cbf23d3afc1526294a31e7b3eaa0f682cc28ac5366065dc1d6bb18bd7be", - "sha256:5483d5e70aacd06f0aa3effec9fed597c0b50f45060956eeeb1203c44d4338c3", - "sha256:56a5f9b46892b115a75d0a1f2292431ad5988461175826600acc69a24cb3edee", - "sha256:64bb63af8a06f736927d260efdd4dfc5253d42244f281a8063e4b9eea2ddcbc5", - "sha256:653f8cbefcf7c6ac4cece2cdef367c4faa2b7c19795d52bd7cbec11a8739a7c1", - "sha256:664211d63306e4bd4eec35bf2b4bd9db61c394037911cf2d1804c43b511a49f1", - "sha256:6651e6caed66a8fff0fef1a3e81c0ed2253bf361c0fdc834500488732c5d16e9", - "sha256:6c1fba6cdfdf105739d3069cf7b07664f2944d82a8098218ab2300a82d8f40fc", - "sha256:6e64246e6e9044a4534a69dca1283c6ddab6e757be5e6874f69024329b3aa61f", - "sha256:838390245c7ec137af4993c0c8052f49d5ec79e422b4451bfa37fee9b9ccaa01", - "sha256:856b410a14793069d8ba35f33fff667213ea66f2df25a0024cc72a7493c56d4c", - "sha256:8b932c364c1d1605a91907a41128ed0ee8a2d326fc0fafb2c55cd46f545f4599", - "sha256:9086cf6d20f08dae7f296a78f6c77d1f8d24079d448f023ee0eb329078dd35e1", - "sha256:9698533c14afa0548188de4968a7932d1f3f965f3f5ba1474de673596bb875af", - "sha256:9b12b05dd7c28f5068387c1afee8cb94f9d02501e7ef495a7c5c7e27139b96ad", - "sha256:a884c7426a5bc6fb7fc71a55ad14e66818e13f05b78b20a6f37175f324b7acb8", - "sha256:abe9e7f1a3e76286c5f5baf2bf5162d41dc0310da493b34a2c36555f38d928f7", - "sha256:bd6fde63b015a27262be06bd6bbdd895273cc2bdf2d4c7e1c83711d26a8fbace", - "sha256:bda7c62c954f47b87ed9a89f525eee1b318ec7c2162dfdba76c2ccfa334e0caa", - "sha256:be8a4908dd3f6e965993c0068b006bdbd0474fbcbd1da4893b49356e73fc1557", - "sha256:ced65fc3c7d7205267506d854bb1815bb445899cca9d21d1d4b949070a635546", - "sha256:dac4279aa05055d3897ab5e5ee5a7b39db121f91df65a530f8b1ac7f9bd93119", - "sha256:e4f1863056e3e4f399c285b67fa816f411a7bfa1c81ef50e186126164e396e59", - "sha256:ecd85f68b8cd9ab78a0141e87ea9a53b2f31fd9b1350a1c44da1f7481b5363ef", - "sha256:ed269b83750413e8fc5c96276372f49ee3fcb7ed61c49fe8e5a67f54459a5a4a", - "sha256:f19b0b80cba73b204dee68501870b11067711d21d243fb6774256d3ca2e5391f", - "sha256:ffdafb98db7574f9da84c489a10a5d582079a888cb43c64e9e6b0e3fe1034685" - ], - "version": "==4.3.3" + "sha256:00573dfa755d0703ab84bb23cb6ecf97bb683c34b340d4df76651f97b0bab068", + "sha256:092049280f2848d2ba1b57b71fe04881762a220a97b65288bcb0968bb199ec30", + "sha256:0cbd27b4d3718b5ec74fc65ffa53c78d34c65c6fd9411b8352d2a4f855220cf1", + "sha256:17fc7e16d0c81f833a138818a30f366696653d521febc8e892858041c4d88785", + "sha256:19577dfeb70e8a67249ba92c8ad20589a1a2d86a8d693647fa8385408a4c17b0", + "sha256:207aa914576b1181597a1516e1b90599dc690c095343ae281b0772e44945e6a4", + "sha256:219a7db5ed53e523eb4a4769f13105118b6d5b04ed169a283c9775af221e231f", + "sha256:2b50ea79849e46b5f4f2b0247a3687505d32d161eeb16a75f6f7e6cd81936e43", + "sha256:5903d38362b6c716e66bbe470f190579c530a5baf03dbc8500e5c2357aa569a5", + "sha256:5c24903675e271bd688c6e9e7df5775ac6b168feb87dbe0e4bcc90805f21b28f", + "sha256:5ef6bc5ed98139e084f4e91100f2b098a0cd3493d4e76f9d6b3f7b95d7ad0f06", + "sha256:61b55ae3c23a126a788b33ffb18f37d6668e79a05e756588d9e4d4be7246ab1c", + "sha256:63ddb992931a5e616c87d3d89f5a58db086e617548005c7f9059fac68c03a5cc", + "sha256:6943da9c09870490dcfd50c4909c0cc19f434fa6948f61282dc9cb07bcf08160", + "sha256:6ad40f85c1207803d581d5d75e9ea25327cd524925699a83dfc03bf8e4ba72b7", + "sha256:6b44433a79bdd7af0e3337bd7bbcf53dd1f9b0fa66bf21bcb756060ce32a96c1", + "sha256:6bbaa245015d933a4172395baad7874373f162955d73612f0b66b6c2c33b6366", + "sha256:7007227f4ea85b40a2f5e5a244479f6a6dfcf906db9b55e812a814a8f0e2c28d", + "sha256:74884a0aec1f1609190ec8b34b5d58fb3b5353cf22b96161e13e0e835f13518f", + "sha256:7d25fe5571ddb16369054f54cdd883f23de9941476d97f2b92eb6d7d83afe22d", + "sha256:7e162bdc5e3baad26b2262240be7d2bab36991d85a6a556e48b9dfb402370261", + "sha256:814d62678dc3a30f4aa081982d830b7c342cf230ffc9d030b020cb154eeebf9e", + "sha256:8878a34c5313ee52e20aa50b03138af8d472bae465710fb954d133a9bfd3c38d", + "sha256:a66a0d94e5b081d5d695e66d6667e91e74d79e273eee95c1747717ba9cb70792", + "sha256:a69f5cbf4addcfdf03dda564a671040127a6b7c34cf9fe4973582e68441b63fa", + "sha256:b00f9f0c334d07709d3f73a7cb8ae63c6ca1a90c790a63b5e7effa666ef96021", + "sha256:b6ed71e4a7b4690447b626f499d978aa13197a0e592950e5d7020308f6054698", + "sha256:bdf5041e5851526e885af579d2f455348dba68d74f14a32781933569a327fddf", + "sha256:be034360dd34e62608419f86e799c97d389c10a0e677a25f236a971b2f40dac9", + "sha256:cc8f590a5eed30b314ae6b0232d925519ade433f663de79cc3783e4b10d662ba", + "sha256:cd7a318a15fe6cc4584bf3c4426f092ed08c0fd012cf2a9173114234fe193e11", + "sha256:cf19b5f63a59c20306e034e691402b02055c8f4e38bf6792c23cad489162a642", + "sha256:cfc781ce442ec407c841e9aa51d0e1024f72b6ec34caa8fdb6ef9576d549acf2", + "sha256:dea9f6f8633571e18bc20cad83603072e697103a567f4b0738d52dd0211b4527", + "sha256:e4a86a1d5eb2cce83c5972b3930c7c1eac81ab3508464345e2b8e54f119d5505", + "sha256:e7106374d4a74ed9ff00c46cc00f0a9f06a0775f8868e423f85d4464d2333679", + "sha256:e98a8a585b5668aa9e34d10f7785abf9545fe72663b4bfc16c99a115185ae6a5", + "sha256:f64840e68483316eb58d82c376ad3585ca995e69e33b230436de0cdddf7363f9", + "sha256:f8f4b0a9e6683e43889852130595c8854d8ae237f2324a053cdd884de936aa9b", + "sha256:fc45a53219ed30a7f670a6d8c98527af0020e6fd4ee4c0a8fb59f147f06d816c" + ], + "version": "==4.3.5" } }, "develop": {} From 157c41c20ff6d52d4833c60e50944cee2830a84f Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 9 Mar 2021 15:34:26 +0000 Subject: [PATCH 062/149] Update Android Components version to 74.0.20210309143153. --- 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 a4c169c32..785066289 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 = "74.0.20210307143117" + const val VERSION = "74.0.20210309143153" } From fbe73cfc1d633a1b76f744889997295f56277e0d Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Tue, 9 Mar 2021 18:55:58 +0400 Subject: [PATCH 063/149] For #17804: Use enterToImmersiveMode from support-ktx component --- .../java/org/mozilla/fenix/browser/BaseBrowserFragment.kt | 2 +- app/src/main/java/org/mozilla/fenix/ext/Activity.kt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 5a925e49d..3ca1fa820 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -110,7 +110,6 @@ import org.mozilla.fenix.downloads.DynamicDownloadDialog import org.mozilla.fenix.ext.accessibilityManager import org.mozilla.fenix.ext.breadcrumb import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.enterToImmersiveMode import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.hideToolbar import org.mozilla.fenix.ext.metrics @@ -129,6 +128,7 @@ import java.lang.ref.WeakReference import mozilla.components.feature.session.behavior.EngineViewBrowserToolbarBehavior import mozilla.components.feature.webauthn.WebAuthnFeature import mozilla.components.support.base.feature.ActivityResultHandler +import mozilla.components.support.ktx.android.view.enterToImmersiveMode import mozilla.components.feature.session.behavior.ToolbarPosition as MozacToolbarPosition /** diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index cfaa24169..e70b3fa51 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -15,6 +15,13 @@ import mozilla.components.concept.base.crash.Breadcrumb * We don't use the equivalent function from Android Components because the stable flag messes * with the toolbar. See #1998 and #3272. */ +@Deprecated( + message = "Use the Android Component implementation instead.", + replaceWith = ReplaceWith( + "enterToImmersiveMode()", + "mozilla.components.support.ktx.android.view.enterToImmersiveMode" + ) +) fun Activity.enterToImmersiveMode() { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17804 From 1c6dd4f6ddbb201bad918263c235ec1bd4b97f83 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Tue, 9 Mar 2021 21:24:25 +0400 Subject: [PATCH 064/149] Update to Android Components 74.0.20210309154120 --- 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 785066289..7c95df032 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 = "74.0.20210309143153" + const val VERSION = "74.0.20210309154120" } From 8d1cb6368292cb9acea1a8c01196d61a0b466040 Mon Sep 17 00:00:00 2001 From: Aki Sasaki Date: Tue, 9 Mar 2021 14:35:38 -0800 Subject: [PATCH 065/149] signing index (#18379) --- taskcluster/ci/signing/kind.yml | 9 ++++++--- taskcluster/fenix_taskgraph/transforms/signing.py | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/taskcluster/ci/signing/kind.yml b/taskcluster/ci/signing/kind.yml index 87e55c0e7..a0b60e994 100644 --- a/taskcluster/ci/signing/kind.yml +++ b/taskcluster/ci/signing/kind.yml @@ -40,9 +40,12 @@ job-template: default: dep-signing signing-format: autograph_apk index: - by-build-type: - (nightly|debug|nightly-simulation|beta|release): - type: signing + by-tasks-for: + (action|cron|github-release): + by-build-type: + (nightly|debug|nightly-simulation|beta|release): + type: signing + default: {} default: {} run-on-tasks-for: by-build-type: diff --git a/taskcluster/fenix_taskgraph/transforms/signing.py b/taskcluster/fenix_taskgraph/transforms/signing.py index 8c6570fcc..b3cf7661e 100644 --- a/taskcluster/fenix_taskgraph/transforms/signing.py +++ b/taskcluster/fenix_taskgraph/transforms/signing.py @@ -26,6 +26,7 @@ def resolve_keys(config, tasks): **{ 'build-type': task["attributes"]["build-type"], 'level': config.params["level"], + 'tasks-for': config.params["tasks_for"], } ) yield task From b661c83c8cfb8294580bad6f4ac6ad156ea37912 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Wed, 10 Mar 2021 00:03:08 +0000 Subject: [PATCH 066/149] Import l10n. --- app/src/main/res/values-cy/strings.xml | 2 ++ app/src/main/res/values-de/strings.xml | 2 ++ app/src/main/res/values-el/strings.xml | 2 ++ app/src/main/res/values-en-rGB/strings.xml | 2 ++ app/src/main/res/values-es-rAR/strings.xml | 2 ++ app/src/main/res/values-fr/strings.xml | 2 ++ app/src/main/res/values-gn/strings.xml | 2 ++ app/src/main/res/values-iw/strings.xml | 2 ++ app/src/main/res/values-kk/strings.xml | 2 ++ app/src/main/res/values-nl/strings.xml | 2 ++ app/src/main/res/values-nn-rNO/strings.xml | 2 ++ app/src/main/res/values-pt-rBR/strings.xml | 6 ++++-- app/src/main/res/values-sv-rSE/strings.xml | 2 ++ app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 2 ++ 15 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index a358c83fa..c1e50db54 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -180,6 +180,8 @@ Gwedd + + Cyfaddasu’r golwg defnyddiwr Methu cysylltu. Cynllun URL anadnabyddadwy. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index ab688e3f9..69ab06941 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -185,6 +185,8 @@ Erscheinungsbild + + Leseansicht anpassen Verbindung nicht möglich. Nicht erkennbares URL-Schema. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index ae6fb3763..4dbbd5d96 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -186,6 +186,8 @@ Εμφάνιση + + Προσαρμογή προβολής ανάγνωσης Αδυναμία σύνδεσης. Μη αναγνωρίσιμο σχήμα URL. diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 1674779ea..326e6bf0f 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -179,6 +179,8 @@ Appearance + + Customise reader view Unable to connect. Unrecognisable URL scheme. diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 77605f963..08d90f696 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -183,6 +183,8 @@ Apariencia + + Personalizar vista de lectura No se puede conectar. Esquema de URL irreconocible. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 165b91236..c603eab71 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -183,6 +183,8 @@ Apparence + + Personnaliser le mode lecture Impossible de se connecter. Schéma d’URL inconnu. diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml index f018f67b1..58e36d347 100644 --- a/app/src/main/res/values-gn/strings.xml +++ b/app/src/main/res/values-gn/strings.xml @@ -184,6 +184,8 @@ Mba’ejegua + + Emboava moñe’ẽhára rechaha Ndaikatúi eike. URL reko ojekuaa’ỹva. diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 1c3d58571..0a22c30d0 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -180,6 +180,8 @@ תצוגה + + התאמה אישית של תצוגת קריאה לא ניתן להתחבר. מבנה הכתובת אינו ברור. diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 3ea3ac89c..73e61f1cb 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -176,6 +176,8 @@ Қолданбада ашу Сыртқы түрі + + Оқу режимін баптау Байланысу мүмкін емес. URL схемасы белгісіз. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 5c07dd030..f12b21d5d 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -187,6 +187,8 @@ Vormgeving + + Lezerweergave aanpassen Kan niet verbinden. Onherkenbaar URL-schema. diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index dce476b44..c5f993168 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -183,6 +183,8 @@ Utsjånad + + Tilpass lesevising Klarte ikkje å kople til. Ukjenneleg URL-skjema. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 782719263..d6cb5c754 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -14,7 +14,7 @@ Pesquise ou digite um endereço - Suas abas abertas serão mostradas aqui. + Suas abas abertas são mostradas aqui. Suas abas privativas são mostradas aqui. @@ -181,6 +181,8 @@ Aparência + + Personalizar leitor Não foi possível conectar. Esquema de URL não reconhecível. @@ -1054,7 +1056,7 @@ Tem certeza que quer excluir %1$s? - Excluir esta aba também excluirá toda a coleção. Você pode criar novas coleções quando quiser. + Excluir esta aba também exclui toda a coleção. Você pode criar novas coleções quando quiser. Excluir %1$s? diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 5854f08e8..c14538eaa 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -185,6 +185,8 @@ Utseende + + Anpassa läsvyn Kan inte ansluta. Oigenkännligt URL-schema. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 97c3776fe..fe6bc4d34 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -188,6 +188,8 @@ 字型调控 + + 定制阅读器视图 未知的 URL 规范,无法连接。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 257d79220..a61628838 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -184,6 +184,8 @@ 外觀設定 + + 自訂閱讀模式 不認識的通訊協定,無法連線。 From 6002f944e8f101fe0221a1712ece162651957df6 Mon Sep 17 00:00:00 2001 From: isabelrios Date: Wed, 10 Mar 2021 11:31:55 +0100 Subject: [PATCH 067/149] Taskgraph changes to allow running UI tests on nightly builds (#18191) * Modify taskgraph to allow running UI tests on Nightly builds * adding try_task_config file * remove try_task_config file --- .../androidTest/flank-x86-start-test.yml | 3 ++ taskcluster/ci/build/kind.yml | 18 ++++++-- taskcluster/ci/signing/kind.yml | 24 ++-------- taskcluster/ci/ui-test/kind.yml | 13 ++++++ .../fenix_taskgraph/transforms/signing.py | 46 ++++++++++++++++++- 5 files changed, 79 insertions(+), 25 deletions(-) diff --git a/automation/taskcluster/androidTest/flank-x86-start-test.yml b/automation/taskcluster/androidTest/flank-x86-start-test.yml index 16292c98e..5d9c8d49c 100644 --- a/automation/taskcluster/androidTest/flank-x86-start-test.yml +++ b/automation/taskcluster/androidTest/flank-x86-start-test.yml @@ -42,6 +42,9 @@ gcloud: flank: project: GOOGLE_PROJECT + # test shards - the amount of groups to split the test suite into + # set to -1 to use one shard per test. + max-test-shards: 1 # num-test-runs: the amount of times to run the tests. # 1 runs the tests once. 10 runs all the tests 10x num-test-runs: 1 diff --git a/taskcluster/ci/build/kind.yml b/taskcluster/ci/build/kind.yml index 335abd497..2d647cb8f 100644 --- a/taskcluster/ci/build/kind.yml +++ b/taskcluster/ci/build/kind.yml @@ -63,6 +63,15 @@ jobs: treeherder: symbol: beta(Bf) + nightly-firebase: + disable-optimization: true + run-on-tasks-for: [github-push] # We want this on push so that we detect problem before triggering a new nightly + run: + gradle-build-type: nightly + test-build-type: nightly + treeherder: + symbol: nightly(Bf) + android-test-debug: attributes: code-review: true @@ -85,13 +94,16 @@ jobs: android-test-nightly: attributes: nightly: true - run: - gradle-build-type: androidTest apk-artifact-template: # 2 differences here: # * "androidTest/" is added # * "{gradle_build_type}" is forced to "debug" - path: '/builds/worker/checkouts/src/app/build/outputs/apk/androidTest/debug/{fileName}' + path: '/builds/worker/checkouts/src/app/build/outputs/apk/androidTest/nightly/app-nightly-androidTest.apk' + disable-optimization: true + run: + gradle-build-type: androidTest + test-build-type: nightly + run-on-tasks-for: [github-push] treeherder: symbol: nightly(Bat) diff --git a/taskcluster/ci/signing/kind.yml b/taskcluster/ci/signing/kind.yml index a0b60e994..9c62998d8 100644 --- a/taskcluster/ci/signing/kind.yml +++ b/taskcluster/ci/signing/kind.yml @@ -18,26 +18,7 @@ group-by: build-type job-template: description: Sign Fenix - worker-type: - by-build-type: - (nightly|beta|release|android-test-nightly): - by-level: - '3': signing - default: dep-signing - default: dep-signing - worker: - signing-type: - by-build-type: - (beta|release): - by-level: - '3': fennec-production-signing - default: dep-signing - performance-test: dep-signing - (nightly|android-test-nightly): - by-level: - '3': production-signing - default: dep-signing - default: dep-signing + worker: {} signing-format: autograph_apk index: by-tasks-for: @@ -52,13 +33,14 @@ job-template: # No test job runs on push against this build type. Although we do want nightly-simulation # signed to use it in the gecko trees. # We want beta on push so that we detect problem before shipping it - (nightly-simulation|beta-firebase|android-test-beta): [github-push] + (nightly-simulation|beta-firebase|android-test-beta|nightly-firebase|android-test-nightly): [github-push] default: [] treeherder: job-symbol: by-build-type: android-test.+: Bats beta-firebase: Bfs + nightly-firebase: Bfs default: Bs kind: build platform: android-all/opt diff --git a/taskcluster/ci/ui-test/kind.yml b/taskcluster/ci/ui-test/kind.yml index f4c7ed80b..e5fc36a09 100644 --- a/taskcluster/ci/ui-test/kind.yml +++ b/taskcluster/ci/ui-test/kind.yml @@ -80,3 +80,16 @@ jobs: - [automation/taskcluster/androidTest/ui-test.sh, x86-beta-tests, app.apk, android-test.apk, '50'] treeherder: symbol: beta(ui-test-x86-beta) + x86-nightly: + attributes: + build-type: nightly-firebase + description: Test Fenix + run-on-tasks-for: [github-push] + dependencies: + signing: signing-nightly-firebase + signing-android-test: signing-android-test-nightly + run: + commands: + - [automation/taskcluster/androidTest/ui-test.sh, x86-start-test, app.apk, android-test.apk, '-1'] + treeherder: + symbol: nightly(ui-test-x86-nightly) diff --git a/taskcluster/fenix_taskgraph/transforms/signing.py b/taskcluster/fenix_taskgraph/transforms/signing.py index b3cf7661e..428bde612 100644 --- a/taskcluster/fenix_taskgraph/transforms/signing.py +++ b/taskcluster/fenix_taskgraph/transforms/signing.py @@ -18,7 +18,7 @@ transforms = TransformSequence() @transforms.add def resolve_keys(config, tasks): for task in tasks: - for key in ("index", "run-on-tasks-for", "worker-type", "worker.signing-type", "signing-format"): + for key in ("run-on-tasks-for",): resolve_keyed_by( task, key, @@ -31,6 +31,50 @@ def resolve_keys(config, tasks): ) yield task +@transforms.add +def set_worker_type(config, tasks): + for task in tasks: + worker_type = "dep-signing" + if ( + str(config.params["level"]) == "3" + and task["attributes"]["build-type"] + in ("nightly", "beta", "release", "android-test-nightly") + and config.params["tasks_for"] in ("cron", "github-release", "action") + ): + worker_type = "signing" + task["worker-type"] = worker_type + yield task + + +@transforms.add +def set_signing_type(config, tasks): + for task in tasks: + signing_type = "dep-signing" + if ( + str(config.params["level"]) == "3" + and config.params["tasks_for"] in ("cron", "github-release", "action") + ): + if task["attributes"]["build-type"] in ("beta", "release"): + signing_type = "fennec-production-signing" + elif task["attributes"]["build-type"] in ("nightly", "android-test-nightly"): + signing_type = "production-signing" + task.setdefault("worker", {})["signing-type"] = signing_type + yield task + + +@transforms.add +def set_index(config, tasks): + for task in tasks: + index = {} + if ( + config.params["tasks_for"] in ("cron", "github-release", "action") + and task["attributes"]["build-type"] + in ("nightly", "debut", "nightly-simulation", "beta", "release") + ): + index["type"] = "signing" + task["index"] = index + yield task + @transforms.add def set_signing_attributes(config, tasks): From 2634bf89b2875c5a2906076ac2cf674a5425355c Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 10 Mar 2021 11:43:44 +0000 Subject: [PATCH 068/149] Update Android Components version to 74.0.20210310112134. --- 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 7c95df032..163d9cdad 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 = "74.0.20210309154120" + const val VERSION = "74.0.20210310112134" } From a31ce9bf671bc6c388f3bf4b94d95e55bb803388 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Wed, 10 Mar 2021 16:16:37 -0500 Subject: [PATCH 069/149] For #18241 - Refactor SyncLoginsPreferenceView to SyncPreferenceView for reusability (#18383) This refactors SyncLoginsPreferenceView to SyncPreferenceView so that it be can be used in the Credit cards preference for the equivalent "Sync cards across devices" preference. --- ...referenceView.kt => SyncPreferenceView.kt} | 73 ++++++++++--------- .../fragment/SavedLoginsAuthFragment.kt | 26 +++++-- ...est.kt => LoginsSyncPreferenceViewTest.kt} | 28 +++++-- 3 files changed, 83 insertions(+), 44 deletions(-) rename app/src/main/java/org/mozilla/fenix/settings/{logins/SyncLoginsPreferenceView.kt => SyncPreferenceView.kt} (57%) rename app/src/test/java/org/mozilla/fenix/settings/logins/{SyncLoginsPreferenceViewTest.kt => LoginsSyncPreferenceViewTest.kt} (84%) diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/SyncLoginsPreferenceView.kt b/app/src/main/java/org/mozilla/fenix/settings/SyncPreferenceView.kt similarity index 57% rename from app/src/main/java/org/mozilla/fenix/settings/logins/SyncLoginsPreferenceView.kt rename to app/src/main/java/org/mozilla/fenix/settings/SyncPreferenceView.kt index c8106882b..578d1eea3 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/SyncLoginsPreferenceView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SyncPreferenceView.kt @@ -2,10 +2,9 @@ * 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.logins +package org.mozilla.fenix.settings import androidx.lifecycle.LifecycleOwner -import androidx.navigation.NavController import androidx.preference.Preference import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch @@ -16,16 +15,33 @@ import mozilla.components.service.fxa.SyncEngine import mozilla.components.service.fxa.manager.FxaAccountManager import mozilla.components.service.fxa.manager.SyncEnginesStorage import org.mozilla.fenix.R -import org.mozilla.fenix.settings.logins.fragment.SavedLoginsAuthFragmentDirections /** - * Helper to manage the [R.string.pref_key_password_sync_logins] preference. + * A view to help manage the sync preference in the "Logins and passwords" and "Credit cards" + * settings. The provided [syncPreference] is used to navigate to the different fragments + * that manages the sync account authentication. A summary status will be also added + * depending on the sync account status. + * + * @param syncPreference The sync [Preference] to update and handle navigation. + * @param lifecycleOwner View lifecycle owner used to determine when to cancel UI jobs. + * @param accountManager An instance of [FxaAccountManager]. + * @param syncEngine The sync engine that will be used for the sync status lookup. + * @param onSignInToSyncClicked A callback executed when the [syncPreference] is clicked with a + * preference status of "Sign in to Sync". + * @param onSyncStatusClicked A callback executed when the [syncPreference] is clicked with a + * preference status of "On" or "Off". + * @param onReconnectClicked A callback executed when the [syncPreference] is clicked with a + * preference status of "Reconnect". */ -class SyncLoginsPreferenceView( - private val syncLoginsPreference: Preference, +@Suppress("LongParameterList") +class SyncPreferenceView( + private val syncPreference: Preference, lifecycleOwner: LifecycleOwner, accountManager: FxaAccountManager, - private val navController: NavController + private val syncEngine: SyncEngine, + private val onSignInToSyncClicked: () -> Unit = {}, + private val onSyncStatusClicked: () -> Unit = {}, + private val onReconnectClicked: () -> Unit = {} ) { init { @@ -33,9 +49,11 @@ class SyncLoginsPreferenceView( override fun onAuthenticated(account: OAuthAccount, authType: AuthType) { MainScope().launch { updateSyncPreferenceStatus() } } + override fun onLoggedOut() { MainScope().launch { updateSyncPreferenceNeedsLogin() } } + override fun onAuthenticationProblems() { MainScope().launch { updateSyncPreferenceNeedsReauth() } } @@ -43,6 +61,7 @@ class SyncLoginsPreferenceView( val accountExists = accountManager.authenticatedAccount() != null val needsReauth = accountManager.accountNeedsReauth() + when { needsReauth -> updateSyncPreferenceNeedsReauth() accountExists -> updateSyncPreferenceStatus() @@ -51,62 +70,50 @@ class SyncLoginsPreferenceView( } /** - * Show the current status of the sync preference (on/off) for the logged in user. + * Shows the current status of the sync preference ("On"/"Off") for the logged in user. */ private fun updateSyncPreferenceStatus() { - syncLoginsPreference.apply { + syncPreference.apply { val syncEnginesStatus = SyncEnginesStorage(context).getStatus() - val loginsSyncStatus = syncEnginesStatus.getOrElse(SyncEngine.Passwords) { false } + val loginsSyncStatus = syncEnginesStatus.getOrElse(syncEngine) { false } + summary = context.getString( if (loginsSyncStatus) R.string.preferences_passwords_sync_logins_on else R.string.preferences_passwords_sync_logins_off ) + setOnPreferenceClickListener { - navigateToAccountSettingsFragment() + onSyncStatusClicked() true } } } /** - * Indicate that the user can sign in to turn on sync. + * Display that the user can "Sign in to Sync" when the user is logged off. */ private fun updateSyncPreferenceNeedsLogin() { - syncLoginsPreference.apply { + syncPreference.apply { summary = context.getString(R.string.preferences_passwords_sync_logins_sign_in) + setOnPreferenceClickListener { - navigateToTurnOnSyncFragment() + onSignInToSyncClicked() true } } } /** - * Indicate that the user can fix their account problems to turn on sync. + * Displays that the user needs to "Reconnect" to fix their account problems with sync. */ private fun updateSyncPreferenceNeedsReauth() { - syncLoginsPreference.apply { + syncPreference.apply { summary = context.getString(R.string.preferences_passwords_sync_logins_reconnect) + setOnPreferenceClickListener { - navigateToAccountProblemFragment() + onReconnectClicked() true } } } - - private fun navigateToAccountSettingsFragment() { - val directions = - SavedLoginsAuthFragmentDirections.actionGlobalAccountSettingsFragment() - navController.navigate(directions) - } - - private fun navigateToAccountProblemFragment() { - val directions = SavedLoginsAuthFragmentDirections.actionGlobalAccountProblemFragment() - navController.navigate(directions) - } - - private fun navigateToTurnOnSyncFragment() { - val directions = SavedLoginsAuthFragmentDirections.actionSavedLoginsAuthFragmentToTurnOnSyncFragment() - navController.navigate(directions) - } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt index 5602571a3..021ef626d 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsAuthFragment.kt @@ -22,18 +22,19 @@ import androidx.preference.SwitchPreference import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import mozilla.components.service.fxa.SyncEngine import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.requireComponents +import org.mozilla.fenix.ext.runIfFragmentIsAttached import org.mozilla.fenix.ext.secure import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar -import org.mozilla.fenix.ext.runIfFragmentIsAttached import org.mozilla.fenix.settings.SharedPreferenceUpdater +import org.mozilla.fenix.settings.SyncPreferenceView import org.mozilla.fenix.settings.biometric.BiometricPromptFeature -import org.mozilla.fenix.settings.logins.SyncLoginsPreferenceView import org.mozilla.fenix.settings.requirePreference @Suppress("TooManyFunctions") @@ -121,11 +122,26 @@ class SavedLoginsAuthFragment : PreferenceFragmentCompat() { true } - SyncLoginsPreferenceView( - requirePreference(R.string.pref_key_password_sync_logins), + SyncPreferenceView( + syncPreference = requirePreference(R.string.pref_key_password_sync_logins), lifecycleOwner = viewLifecycleOwner, accountManager = requireComponents.backgroundServices.accountManager, - navController = findNavController() + syncEngine = SyncEngine.Passwords, + onSignInToSyncClicked = { + val directions = + SavedLoginsAuthFragmentDirections.actionSavedLoginsAuthFragmentToTurnOnSyncFragment() + findNavController().navigate(directions) + }, + onSyncStatusClicked = { + val directions = + SavedLoginsAuthFragmentDirections.actionGlobalAccountSettingsFragment() + findNavController().navigate(directions) + }, + onReconnectClicked = { + val directions = + SavedLoginsAuthFragmentDirections.actionGlobalAccountProblemFragment() + findNavController().navigate(directions) + } ) togglePrefsEnabledWhileAuthenticating(true) diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/SyncLoginsPreferenceViewTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsSyncPreferenceViewTest.kt similarity index 84% rename from app/src/test/java/org/mozilla/fenix/settings/logins/SyncLoginsPreferenceViewTest.kt rename to app/src/test/java/org/mozilla/fenix/settings/logins/LoginsSyncPreferenceViewTest.kt index a6b68ecb4..c98544174 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/SyncLoginsPreferenceViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsSyncPreferenceViewTest.kt @@ -24,9 +24,10 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.mozilla.fenix.R +import org.mozilla.fenix.settings.SyncPreferenceView import org.mozilla.fenix.settings.logins.fragment.SavedLoginsAuthFragmentDirections -class SyncLoginsPreferenceViewTest { +class LoginsSyncPreferenceViewTest { @MockK private lateinit var syncLoginsPreference: Preference @MockK private lateinit var lifecycleOwner: LifecycleOwner @@ -137,10 +138,25 @@ class SyncLoginsPreferenceViewTest { } } - private fun createView() = SyncLoginsPreferenceView( - syncLoginsPreference, - lifecycleOwner, - accountManager, - navController + private fun createView() = SyncPreferenceView( + syncPreference = syncLoginsPreference, + lifecycleOwner = lifecycleOwner, + accountManager = accountManager, + syncEngine = SyncEngine.Passwords, + onSignInToSyncClicked = { + val directions = + SavedLoginsAuthFragmentDirections.actionSavedLoginsAuthFragmentToTurnOnSyncFragment() + navController.navigate(directions) + }, + onSyncStatusClicked = { + val directions = + SavedLoginsAuthFragmentDirections.actionGlobalAccountSettingsFragment() + navController.navigate(directions) + }, + onReconnectClicked = { + val directions = + SavedLoginsAuthFragmentDirections.actionGlobalAccountProblemFragment() + navController.navigate(directions) + } ) } From c361b518e8d3671c8ceac071be67729ec9456c7b Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Thu, 11 Mar 2021 00:04:59 +0000 Subject: [PATCH 070/149] Import l10n. --- app/src/main/res/values-fi/strings.xml | 2 ++ app/src/main/res/values-fy-rNL/strings.xml | 2 ++ app/src/main/res/values-it/strings.xml | 2 ++ app/src/main/res/values-kmr/strings.xml | 32 +++++++++++----------- app/src/main/res/values-tg/strings.xml | 2 ++ app/src/main/res/values-vi/strings.xml | 2 ++ 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index eaacce8de..cc0bc4852 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -183,6 +183,8 @@ Ulkoasu + + Mukauta lukunäkymää Yhteyden muodostaminen epäonnistui. URL-skeeman tunnistaminen ei onnistu. diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index 415363eab..ad4446e3d 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -183,6 +183,8 @@ Uterlik + + Lêzerwerjefte oanpasse Net yn steat te ferbinen. Unkenbere URL-skema. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 8b8596d9e..974aaf3d5 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -183,6 +183,8 @@ Aspetto + + Personalizza modalità lettura Connessione non riuscita. Schema URL non riconoscibile. diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index a06128ed7..d7908dd91 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -198,7 +198,7 @@ - Sken bike + Kodê bixwîne Motora lêgerînê @@ -293,7 +293,7 @@ Têkeve - Darika amûran + Darikê amûran Rûkar @@ -471,7 +471,7 @@ Sync’ê veke - Koda hevcotkirinê ya di Firefoxa Sermaseyê de sken bike + Koda hevcotkirinê ya di Firefoxa Sermaseyê de bide xwendin Têkeve @@ -481,7 +481,7 @@ - firefox.com/pair de xuya dibe sken bike]]> + firefox.com/pair de xuya dibe, bide xwendin]]> Kamerayê veke @@ -508,11 +508,11 @@ Ji bo nûkirinê bikişîne - Ji bo veşartina derika amûran, bişemitîne + Ji bo darikê amûran veşêrî, bişemitîne - Ji bo guhertina hilpekînê, darika amûran bi kêlekê ve biherikîne + Ji bo hilpekînê biguherînî, darikê amûran biherikîne kêlekê - Ji bo vekirina hilpekînan, darika amûran bi jorê ve biherikîne + Ji bo hilpekînan vekî, darikê amûran biherikîne jorê @@ -528,7 +528,7 @@ Menûya Favoriyan - Darika Amûran a Favoriyan + Darikê Amûran ê Favoriyan Favoriyên din @@ -1201,7 +1201,7 @@ Standard (jixweber) - Hindiktir şopîneran asteng dike. Rûpel dê bi awayê asayî bên barkirin. + Hindiktir şopîneran asteng dike. Rûpel ew ê bi awayê normal vebin. Tund (tê pêşniyarkirin) @@ -1213,7 +1213,7 @@ but it is ok to make this more literally about "choosing a position in a physical space --> Aliyê xwe hilbijêre - Darika amûran a jêrîn bi destekî biceribîne an jî wê bibe jorê tu bi kêfa xwe yî. + Darikê amûran ê jêrîn bi destekî biceribîne an jî wê bibe jorê tu bi kêfa xwe yî. Bi nihênî bigere DÎSA BICERIBÎNE - Kodê sken bike + Kodê bide xwendin https://firefox.com/pair]]> - Ji bo skenkirinê amade me + Aniha kodê bide xwendin Bi kameraya xwe têkeve @@ -1288,7 +1288,7 @@ Parastina ji şopandinê ya pêşketî - Bêyî ku tu bê şopandin bigere + Bêyî ku tu werî şopandin bigere Bila daneyên te ji te re bimînin. %s te ji gelek şopdarên dilxerab diparêze û nahêle tiştên ku tu li ser înternetê dikî ji aliyê wan ve bên dîtin. @@ -1296,7 +1296,7 @@ Standard (heyî) - Hindiktir şopîneran asteng bike. Rûpel dê asayî vebin. + Hindiktir şopîneran asteng dike. Rûpel ew ê bi awayê normal vebin. Bi parastina ji şopandinê ya standard çi tên astengkirin? @@ -1308,7 +1308,7 @@ Taybet - Hilbijêre ka kîjan şopîner û skrîpt bên astengkirin. + Hilbijêre ka kîjan şopdar û skrîpt ew ê bêne astengkirin. Bi parastina ji şopandinê ya taybet çi tên astengkirin? @@ -1596,7 +1596,7 @@ Destûr’ê bitikîne]]> - %1$s’ê bike VEKIRÎ]]> + %1$s’yê bike VEKIRÎ]]> Girêdana ewle diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml index 8761b6132..af1b29dbe 100644 --- a/app/src/main/res/values-tg/strings.xml +++ b/app/src/main/res/values-tg/strings.xml @@ -181,6 +181,8 @@ Намуди зоҳирӣ + + Фармоишдиҳии намоиши хониш Пайваст нашуд. Нақшаи URL шинохтанашаванда аст. diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 00825b2dc..be218f2f4 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -181,6 +181,8 @@ Giao diện + + Tùy chỉnh chế độ đọc Không thể kết nối. Không thể nhận dạng URL. From 7df0006aaaf3781176d4ac17473383091ef4f2de Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Tue, 9 Mar 2021 17:04:46 -0800 Subject: [PATCH 071/149] No issue: add script to measure duration to first frame. I only tested this for nightly but we can fix it for other channels as we use it. --- tools/measure_time_to_first_frame.py | 157 +++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100755 tools/measure_time_to_first_frame.py diff --git a/tools/measure_time_to_first_frame.py b/tools/measure_time_to_first_frame.py new file mode 100755 index 000000000..0056becde --- /dev/null +++ b/tools/measure_time_to_first_frame.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +# 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 https://mozilla.org/MPL/2.0/. + +import argparse +import os +import subprocess +import time +from pprint import pprint + +DESC = """Measures the duration from process start until the first frame is drawn +using the "TotalTime:" field from `adb shell am start -W`. This script is a python +reimplementation of https://medium.com/androiddevelopers/testing-app-startup-performance-36169c27ee55 +with additional functionality. + +IMPORTANT: this method does not provide a complete picture of start up. Using +./mach perftest (or the deprecated FNPRMS) is the preferred approach because those +provide more comprehensive views of start up. However, this is useful for lightweight +testing if you know exactly what you're looking for. +""" + +DEFAULT_ITER_COUNT = 25 + +CHANNEL_TO_PKG = { + 'nightly': 'org.mozilla.fenix', + 'beta': 'org.mozilla.firefox.beta', + 'release': 'org.mozilla.firefox', + 'debug': 'org.mozilla.fenix.debug' +} + + +def parse_args(): + parser = argparse.ArgumentParser(description=DESC, formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument( + "release_channel", choices=['nightly', 'beta', 'release', 'debug'], help="the release channel to measure" + ) + parser.add_argument( + "startup_type", choices=['cold_main', 'cold_view'], help="the type of start up to measure. see https://wiki.mozilla.org/Performance/Fenix#Terminology for descriptions of cold/warm/hot and main/view" + ) + parser.add_argument("path", help="the path to save the measurement results; will be overwritten") + + parser.add_argument("-c", "--iter-count", default=DEFAULT_ITER_COUNT, type=int, + help="the number of iterations to run. defaults to {}".format(DEFAULT_ITER_COUNT)) + parser.add_argument("-f", "--force", action="store_true", help="overwrite the given path rather than stopping on file existence") + return parser.parse_args() + + +def validate_args(args): + # This helps prevent us from accidentally overwriting previous measurements. + if not args.force: + if os.path.exists(args.path): + raise Exception("Given `path` unexpectedly exists: pick a new path or use --force to overwrite.") + + +def get_package_id(release_channel): + package_id = CHANNEL_TO_PKG.get(release_channel) + if not package_id: + raise Exception('this should never happen: this should be validated by argparse') + return package_id + + +def get_activity_manager_args(): + return ['adb', 'shell', 'am'] + + +def force_stop(pkg_id): + args = get_activity_manager_args() + ['force-stop', pkg_id] + subprocess.run(args, check=True) + + +def disable_startup_profiling(): + # Startup profiling sets the app to the "debug-app" which executes extra code to + # read a config file off disk that triggers the profiling. Removing the app as a + # debug app should address that issue but isn't a perfect clean up. + args = get_activity_manager_args() + ['clear-debug-app'] + subprocess.run(args, check=True) + + +def get_start_cmd(startup_type, pkg_id): + args_prefix = get_activity_manager_args() + ['start-activity', '-W', '-n'] + if startup_type == 'cold_main': + cmd = args_prefix + ['{}/.App'.format(pkg_id)] + elif startup_type == 'cold_view': + pkg_activity = '{}/org.mozilla.fenix.IntentReceiverActivity'.format(pkg_id) + cmd = args_prefix + [ + pkg_activity, + '-d', 'https://example.com', + '-a', 'android.intent.action.VIEW' + ] + else: + raise Exception('Should never happen (if argparse is set up correctly') + return cmd + + +def measure(pkg_id, start_cmd_args, iter_count): + # Startup profiling may accidentally be left enabled and throw off the results. + # To prevent this, we disable it. + disable_startup_profiling() + + # After an (re)installation, we've observed the app starts up more slowly than subsequent runs. + # As such, we start it once beforehand to let it settle. + force_stop(pkg_id) + subprocess.run(start_cmd_args, check=True, capture_output=True) # capture_output so it doesn't print to the console. + time.sleep(5) # To hopefully reach visual completeness. + + measurements = [] + for i in range(0, iter_count): + force_stop(pkg_id) + time.sleep(1) + proc = subprocess.run(start_cmd_args, check=True, capture_output=True) # expected to wait for app to start. + measurements.append(get_measurement_from_stdout(proc.stdout)) + return measurements + + +def get_measurement_from_stdout(stdout): + # Sample input: + # + # Starting: Intent { cmp=org.mozilla.fenix/.App } + # Status: ok + # Activity: org.mozilla.fenix/.App + # ThisTime: 5662 + # TotalTime: 5662 + # WaitTime: 5680 + # Complete + total_time_prefix = b'TotalTime: ' + lines = stdout.split(b'\n') + matching_lines = [line for line in lines if line.startswith(total_time_prefix)] + if len(matching_lines) != 1: + raise Exception('Each run should only have one {} but this unexpectedly had more: '.format(total_time_prefix) + + matching_lines) + duration = int(matching_lines[0][len(total_time_prefix):]) + return duration + + +def save_measurements(path, measurements): + with open(path, 'w') as f: + for measurement in measurements: + f.write(str(measurement) + '\n') + + +def main(): + args = parse_args() + validate_args(args) + + # Exceptions and script piping like these are why we prefer mozperftest. :) + print("Clear the onboarding experience manually, if it's desired and you haven't already done so.") + print("\nYou can use this script to find the average from the results file: https://github.com/mozilla-mobile/perf-tools/blob/9dd8bf1ea0ea8b2663e21d341a1572c5249c513d/average_times.py") + + pkg_id = get_package_id(args.release_channel) + start_cmd = get_start_cmd(args.startup_type, pkg_id) + measurements = measure(pkg_id, start_cmd, args.iter_count) + save_measurements(args.path, measurements) + + +if __name__ == '__main__': + main() From f0b771eb4d5417866601cc721e29725acc4a0f53 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Fri, 12 Mar 2021 00:01:55 +0000 Subject: [PATCH 072/149] Import l10n. --- app/src/main/res/values-co/strings.xml | 2 ++ app/src/main/res/values-en-rCA/strings.xml | 2 ++ app/src/main/res/values-hr/strings.xml | 2 ++ app/src/main/res/values-pt-rPT/strings.xml | 2 ++ app/src/main/res/values-tr/strings.xml | 2 ++ 5 files changed, 10 insertions(+) diff --git a/app/src/main/res/values-co/strings.xml b/app/src/main/res/values-co/strings.xml index 4fd224a3c..a8b76440e 100644 --- a/app/src/main/res/values-co/strings.xml +++ b/app/src/main/res/values-co/strings.xml @@ -185,6 +185,8 @@ Aspettu + + Persunalizà u modu di lettura Impussibule di cunnettassi. Schema d’URL scunnisciutu. diff --git a/app/src/main/res/values-en-rCA/strings.xml b/app/src/main/res/values-en-rCA/strings.xml index 38d70c102..889ce76fc 100644 --- a/app/src/main/res/values-en-rCA/strings.xml +++ b/app/src/main/res/values-en-rCA/strings.xml @@ -180,6 +180,8 @@ Appearance + + Customize reader view Unable to connect. Unrecognizable URL scheme. diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index efec04f2a..366e6ded3 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -179,6 +179,8 @@ Izgled + + Prilagodi prikaz za čitanje Nije se moguće povezati. Neprepoznatljiva URL shema. diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 569413f1a..882fd490d 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -181,6 +181,8 @@ Aparência + + Personalizar a vista de leitura Não foi possível ligar. Esquema do endereço não reconhecido. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 186ec3703..9f7f5c592 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -181,6 +181,8 @@ Görünüm + + Okuyucu görünümünü özelleştir Bağlanılamıyor. Tanınmayan URL şeması. From 66ccea4075f72e39f58f912b106fb0d5806fe6f9 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 11 Mar 2021 15:35:57 +0000 Subject: [PATCH 073/149] Update Android Components version to 74.0.20210311143147. --- 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 163d9cdad..de82717a6 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 = "74.0.20210310112134" + const val VERSION = "74.0.20210311143147" } From be0ddeef42939458d4a76f0138530710f774ed1f Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 12 Mar 2021 15:35:54 +0000 Subject: [PATCH 074/149] Update Android Components version to 74.0.20210312143156. --- 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 de82717a6..ea38a91e2 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 = "74.0.20210311143147" + const val VERSION = "74.0.20210312143156" } From 4b845038131ccd97db04ac65a96d890b236ebd6a Mon Sep 17 00:00:00 2001 From: Elise Richards Date: Mon, 8 Mar 2021 11:20:03 -0600 Subject: [PATCH 075/149] Remove disabled color for icons --- .../components/toolbar/DefaultToolbarMenu.kt | 60 +++++++++++-------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index 3cdd45f39..14c302baa 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -22,7 +22,6 @@ import mozilla.components.browser.menu.item.BrowserMenuHighlightableItem import mozilla.components.browser.menu.item.BrowserMenuImageSwitch import mozilla.components.browser.menu.item.BrowserMenuImageText import mozilla.components.browser.menu.item.BrowserMenuItemToolbar -import mozilla.components.browser.menu.item.SimpleBrowserMenuItem import mozilla.components.browser.menu.item.WebExtensionPlaceholderMenuItem import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.selector.selectedTab @@ -186,7 +185,7 @@ class DefaultToolbarMenu( appLink(session.content.url).hasExternalApp() } ?: false - private fun shouldShowReaderAppearance(): Boolean = selectedSession?.let { + private fun shouldShowReaderViewCustomization(): Boolean = selectedSession?.let { store.state.findTab(it.id)?.readerState?.active } ?: false // End of predicates // @@ -355,7 +354,7 @@ class DefaultToolbarMenu( if (shouldShowSaveToCollection) saveToCollection else null, desktopMode, openInApp.apply { visible = ::shouldShowOpenInApp }, - readerAppearance.apply { visible = ::shouldShowReaderAppearance }, + readerAppearance.apply { visible = ::shouldShowReaderViewCustomization }, BrowserMenuDivider(), menuToolbar ) @@ -370,8 +369,8 @@ class DefaultToolbarMenu( private val newCoreMenuItems by lazy { val newTabItem = BrowserMenuImageText( context.getString(R.string.library_new_tab), - R.drawable.ic_bookmark_filled, - disabledTextColor() + R.drawable.ic_new, + primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.NewTab) } @@ -379,7 +378,7 @@ class DefaultToolbarMenu( val bookmarksItem = BrowserMenuImageText( context.getString(R.string.library_bookmarks), R.drawable.ic_bookmark_filled, - disabledTextColor() + primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.Bookmarks) } @@ -387,7 +386,7 @@ class DefaultToolbarMenu( val historyItem = BrowserMenuImageText( context.getString(R.string.library_history), R.drawable.ic_history, - disabledTextColor() + primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.History) } @@ -395,7 +394,7 @@ class DefaultToolbarMenu( val downloadsItem = BrowserMenuImageText( context.getString(R.string.library_downloads), R.drawable.ic_download, - disabledTextColor() + primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.Downloads) } @@ -403,15 +402,15 @@ class DefaultToolbarMenu( val extensionsItem = BrowserMenuImageText( context.getString(R.string.browser_menu_extensions), R.drawable.ic_addons_extensions, - disabledTextColor() + primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.AddonsManager) } - val syncedTabsItem = BrowserMenuImageText( - context.getString(R.string.library_synced_tabs), + val syncSignIn = BrowserMenuImageText( + context.getString(R.string.sync_sign_in), R.drawable.ic_synced_tabs, - disabledTextColor() + primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.SyncedTabs) } @@ -419,7 +418,7 @@ class DefaultToolbarMenu( val findInPageItem = BrowserMenuImageText( label = context.getString(R.string.browser_menu_find_in_page), imageResource = R.drawable.mozac_ic_search, - iconTintColorResource = disabledTextColor() + iconTintColorResource = primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.FindInPage) } @@ -434,17 +433,31 @@ class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.RequestDesktop(checked)) } - val customizeReaderView = SimpleBrowserMenuItem( + val customizeReaderView = BrowserMenuImageText( label = context.getString(R.string.browser_menu_customize_reader_view), - textColorResource = primaryTextColor() + imageResource = R.drawable.ic_readermode_appearance, + iconTintColorResource = primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.CustomizeReaderView) } + val openInApp = BrowserMenuHighlightableItem( + label = context.getString(R.string.browser_menu_open_app_link), + startImageResource = R.drawable.ic_open_in_app, + iconTintColorResource = primaryTextColor(), + highlight = BrowserMenuHighlight.LowPriority( + label = context.getString(R.string.browser_menu_open_app_link), + notificationTint = getColor(context, R.color.whats_new_notification_color) + ), + isHighlighted = { !context.settings().openInAppOpened } + ) { + onItemTapped.invoke(ToolbarMenu.Item.OpenInApp) + } + val addToHomeScreenItem = BrowserMenuImageText( label = context.getString(R.string.browser_menu_add_to_homescreen), imageResource = R.drawable.ic_add_to_homescreen, - iconTintColorResource = disabledTextColor() + iconTintColorResource = primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.AddToHomeScreen) } @@ -452,7 +465,7 @@ class DefaultToolbarMenu( val addToTopSitesItem = BrowserMenuImageText( label = context.getString(R.string.browser_menu_add_to_top_sites), imageResource = R.drawable.ic_top_sites, - iconTintColorResource = disabledTextColor() + iconTintColorResource = primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.AddToTopSites) } @@ -460,7 +473,7 @@ class DefaultToolbarMenu( val saveToCollectionItem = BrowserMenuImageText( label = context.getString(R.string.browser_menu_save_to_collection_2), imageResource = R.drawable.ic_tab_collection, - iconTintColorResource = disabledTextColor() + iconTintColorResource = primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.SaveToCollection) } @@ -468,7 +481,7 @@ class DefaultToolbarMenu( val settingsItem = BrowserMenuHighlightableItem( label = context.getString(R.string.browser_menu_settings), startImageResource = R.drawable.ic_settings, - iconTintColorResource = disabledTextColor(), + iconTintColorResource = primaryTextColor(), textColorResource = if (hasAccountProblem) ThemeManager.resolveAttribute(R.attr.primaryText, context) else primaryTextColor(), @@ -491,11 +504,12 @@ class DefaultToolbarMenu( historyItem, downloadsItem, extensionsItem, - syncedTabsItem, + syncSignIn, BrowserMenuDivider(), findInPageItem, desktopSiteItem, - customizeReaderView.apply { visible = ::shouldShowReaderAppearance }, + customizeReaderView.apply { visible = ::shouldShowReaderViewCustomization }, + openInApp.apply { visible = ::shouldShowOpenInApp }, BrowserMenuDivider(), addToHomeScreenItem.apply { visible = ::canAddToHomescreen }, addToTopSitesItem, @@ -513,10 +527,6 @@ class DefaultToolbarMenu( @VisibleForTesting internal fun primaryTextColor() = ThemeManager.resolveAttribute(R.attr.primaryText, context) - @ColorRes - @VisibleForTesting - internal fun disabledTextColor() = R.color.toolbar_menu_transparent - @VisibleForTesting internal fun registerForIsBookmarkedUpdates() { store.flowScoped(lifecycleOwner) { flow -> From d34848a5d9744d832ec8c485399437fdac65ed72 Mon Sep 17 00:00:00 2001 From: Elise Richards Date: Mon, 8 Mar 2021 11:45:05 -0600 Subject: [PATCH 076/149] Add report site issue to new three dot menu --- .../mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index 14c302baa..90d60c77b 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -454,6 +454,10 @@ class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.OpenInApp) } + val reportSiteIssuePlaceholder = WebExtensionPlaceholderMenuItem( + id = WebCompatReporterFeature.WEBCOMPAT_REPORTER_EXTENSION_ID + ) + val addToHomeScreenItem = BrowserMenuImageText( label = context.getString(R.string.browser_menu_add_to_homescreen), imageResource = R.drawable.ic_add_to_homescreen, @@ -510,6 +514,7 @@ class DefaultToolbarMenu( desktopSiteItem, customizeReaderView.apply { visible = ::shouldShowReaderViewCustomization }, openInApp.apply { visible = ::shouldShowOpenInApp }, + reportSiteIssuePlaceholder, BrowserMenuDivider(), addToHomeScreenItem.apply { visible = ::canAddToHomescreen }, addToTopSitesItem, From f5a1a01e066415f30203f77bb295ea4b5d590e17 Mon Sep 17 00:00:00 2001 From: Elise Richards Date: Thu, 11 Mar 2021 15:56:55 -0600 Subject: [PATCH 077/149] Remove sync sign in and keep it as synced tabs --- .../components/toolbar/DefaultToolbarMenu.kt | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index 90d60c77b..1bcbd2494 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -407,10 +407,10 @@ class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.AddonsManager) } - val syncSignIn = BrowserMenuImageText( - context.getString(R.string.sync_sign_in), - R.drawable.ic_synced_tabs, - primaryTextColor() + val syncedTabs = BrowserMenuImageText( + label = context.getString(R.string.synced_tabs), + imageResource = R.drawable.ic_synced_tabs, + iconTintColorResource = primaryTextColor() ) { onItemTapped.invoke(ToolbarMenu.Item.SyncedTabs) } @@ -441,19 +441,6 @@ class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.CustomizeReaderView) } - val openInApp = BrowserMenuHighlightableItem( - label = context.getString(R.string.browser_menu_open_app_link), - startImageResource = R.drawable.ic_open_in_app, - iconTintColorResource = primaryTextColor(), - highlight = BrowserMenuHighlight.LowPriority( - label = context.getString(R.string.browser_menu_open_app_link), - notificationTint = getColor(context, R.color.whats_new_notification_color) - ), - isHighlighted = { !context.settings().openInAppOpened } - ) { - onItemTapped.invoke(ToolbarMenu.Item.OpenInApp) - } - val reportSiteIssuePlaceholder = WebExtensionPlaceholderMenuItem( id = WebCompatReporterFeature.WEBCOMPAT_REPORTER_EXTENSION_ID ) @@ -508,12 +495,11 @@ class DefaultToolbarMenu( historyItem, downloadsItem, extensionsItem, - syncSignIn, + syncedTabs, BrowserMenuDivider(), findInPageItem, desktopSiteItem, customizeReaderView.apply { visible = ::shouldShowReaderViewCustomization }, - openInApp.apply { visible = ::shouldShowOpenInApp }, reportSiteIssuePlaceholder, BrowserMenuDivider(), addToHomeScreenItem.apply { visible = ::canAddToHomescreen }, From b15c3ff864b42776d1d9ce134c2914c50b4a29d3 Mon Sep 17 00:00:00 2001 From: Elise Richards Date: Fri, 12 Mar 2021 12:13:53 -0600 Subject: [PATCH 078/149] Add open in app to main three dot menu (#18462) --- .../fenix/components/toolbar/DefaultToolbarMenu.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt index 1bcbd2494..38ac495d2 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt @@ -441,6 +441,19 @@ class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.CustomizeReaderView) } + val openInApp = BrowserMenuHighlightableItem( + label = context.getString(R.string.browser_menu_open_app_link), + startImageResource = R.drawable.ic_open_in_app, + iconTintColorResource = primaryTextColor(), + highlight = BrowserMenuHighlight.LowPriority( + label = context.getString(R.string.browser_menu_open_app_link), + notificationTint = getColor(context, R.color.whats_new_notification_color) + ), + isHighlighted = { !context.settings().openInAppOpened } + ) { + onItemTapped.invoke(ToolbarMenu.Item.OpenInApp) + } + val reportSiteIssuePlaceholder = WebExtensionPlaceholderMenuItem( id = WebCompatReporterFeature.WEBCOMPAT_REPORTER_EXTENSION_ID ) @@ -500,6 +513,7 @@ class DefaultToolbarMenu( findInPageItem, desktopSiteItem, customizeReaderView.apply { visible = ::shouldShowReaderViewCustomization }, + openInApp.apply { visible = ::shouldShowOpenInApp }, reportSiteIssuePlaceholder, BrowserMenuDivider(), addToHomeScreenItem.apply { visible = ::canAddToHomescreen }, From a20e23bca863cdf1b50028f0f78c2afb5b3aa319 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sat, 13 Mar 2021 00:06:10 +0000 Subject: [PATCH 079/149] Import l10n. --- app/src/main/res/values-iw/strings.xml | 12 ++++++++++++ app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-rm/strings.xml | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 0a22c30d0..17a06d7ed 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -502,6 +502,8 @@ בהיר כהה + + הוגדר על־ידי מצב חיסכון בסוללה שימוש בערכת הנושא של המכשיר @@ -623,6 +625,8 @@ סגירת כל הלשוניות לשונית חדשה + + הביתה החלפת מצב לשונית @@ -1480,6 +1484,8 @@ שם משתמש ססמה + + להכניס את הקוד שלך מחדש יש לבטל את הנעילה כדי להציג את הכניסות השמורות שלך @@ -1518,12 +1524,18 @@ יש לבטל את הנעילה כדי להציג את הכניסות השמורות שלך שמירה מאובטחת של הכניסות והססמאות שלך + + ניתן להגדיר תבנית נעילת מכשיר, קוד או ססמה כדי להגן על פרטי הגישה והססמאות שלך מפני גורמים בלתי מהימנים שמחזיקים במכשיר שלך. מאוחר יותר + + להגדיר כעת שחרור נעילת המכשיר שלך + + התמקדות על כל האתרים יש להפעיל כדי לאפשר צביטה והתקרבות, אפילו באתרים שמונעים את תנועות האצבעות האלו. diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 2c5d5d087..2f401a876 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -1493,7 +1493,7 @@ 저장 안 함 - 자동완성 + 자동 채우기 Sync 로그인 diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml index 03637f965..8efee5c6f 100644 --- a/app/src/main/res/values-rm/strings.xml +++ b/app/src/main/res/values-rm/strings.xml @@ -178,6 +178,8 @@ Apparientscha + + Persunalisar la vista da lectura Impussibel da connectar. Schema dad URL nunenconuschent. From 3f679136de9667ea75fdeb6187ed4f906060cd6a Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sun, 14 Mar 2021 00:06:06 +0000 Subject: [PATCH 080/149] Import l10n. --- app/src/main/res/values-cak/strings.xml | 2 ++ app/src/main/res/values-eo/strings.xml | 10 +++++++--- app/src/main/res/values-ka/strings.xml | 2 ++ app/src/main/res/values-kab/strings.xml | 2 ++ app/src/main/res/values-lt/strings.xml | 2 ++ app/src/main/res/values-pl/strings.xml | 2 ++ 6 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-cak/strings.xml b/app/src/main/res/values-cak/strings.xml index 31e5e777d..b5a773855 100644 --- a/app/src/main/res/values-cak/strings.xml +++ b/app/src/main/res/values-cak/strings.xml @@ -187,6 +187,8 @@ Rutzub\'al + + Ke\'ichinäx rutz\'etoj sik\'inem Man nok ta. Man netamäx ta ruwa ruch\'akulal URL. diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index fc99a3785..13986308f 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -890,16 +890,20 @@ Ŝaltita Malŝaltita - + Permesi sonon kaj videon Bloki sonon kaj videon nur dum konekto al poŝaparataj retoj Sono kaj video estos ludataj en sendrata konektoj (Wi-Fi) - + Nur bloki sonon - + + Nur bloki sonon + Bloki sonon kaj videon + + Bloki sonon kaj videon Ŝaltita diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index fd46c0b37..202688eb8 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -177,6 +177,8 @@ იერსახე + + კითხვის რეჟიმის მორგება ვერ დაუკავშირდა. გაურკვეველი URL-სქემა. diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index ba2a92665..2481a2f4f 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -183,6 +183,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Arwes + + Sagen timeẓri n tɣuri Ur izmir ara ad yeqqen. Azenziɣ n tensa URL ur yettwassen ara. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 9b5172f10..5b547d35e 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -180,6 +180,8 @@ Išvaizda + + Tinkinti skaitymo rodinį Nepavyko prisijungti. Neatpažįstama URL schema. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 1818b0a44..5fe83ac0e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -183,6 +183,8 @@ Wygląd + + Dostosuj widok poprawionej czytelności Nie można się połączyć. Nieznany protokół adresu URL. From 563a2503d73383214fcb8dd2e8f7defaf7bab8cb Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 14 Mar 2021 15:35:06 +0000 Subject: [PATCH 081/149] Update Android Components version to 74.0.20210313190118. --- 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 ea38a91e2..20f5cf450 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 = "74.0.20210312143156" + const val VERSION = "74.0.20210313190118" } From 31f939c916afc51d7a573404645b5dbaec9e15ee Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Mon, 15 Mar 2021 00:06:19 +0000 Subject: [PATCH 082/149] Import l10n. --- app/src/main/res/values-es-rES/strings.xml | 2 ++ app/src/main/res/values-ja/strings.xml | 2 ++ app/src/main/res/values-pa-rIN/strings.xml | 2 ++ app/src/main/res/values-th/strings.xml | 5 +++++ 4 files changed, 11 insertions(+) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 17f9f0c97..bdae70083 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -184,6 +184,8 @@ Apariencia + + Personalizar vista de lectura No se puede conectar. Esquema de URL irreconocible. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 68f4adecc..f17cbe157 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -185,6 +185,8 @@ 外観 + + リーダービューをカスタマイズ 接続できません。認識できない URL スキームです。 diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 4525a7def..2c8bebf6a 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -187,6 +187,8 @@ ਦਿੱਖ + + ਪੜ੍ਹਨ ਝਲਕ ਨੂੰ ਕਸਟਮਾਈਜ਼ ਕਰੋ ਕਨੈਕਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ। ਬੇਪਛਾਣ URL ਸਕੀਮ। diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index a2b32e0c9..1cf481e48 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -216,6 +216,11 @@ เรียนรู้เพิ่มเติม + + ค้นหา %s + + ค้นหาโดยตรงจากแถบที่อยู่ + เปิดแท็บ Firefox ใหม่ From 1f96887f96a8c627ae9f8468df76c8f0eace6dbf Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 3 Mar 2021 15:15:27 +0200 Subject: [PATCH 083/149] For #12528: Provide fallback values for locale display name. --- .../settings/advanced/LocaleViewHolders.kt | 230 +++++++++++++++++- .../advanced/LocaleViewHoldersTest.kt | 23 ++ 2 files changed, 251 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleViewHolders.kt b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleViewHolders.kt index 2a2fb431b..2421d45d9 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleViewHolders.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleViewHolders.kt @@ -20,16 +20,231 @@ class LocaleViewHolder( ) : BaseLocaleViewHolder(view, selectedLocale) { override fun bind(locale: Locale) { + if (locale.toString().equals("vec", ignoreCase = true)) { + locale.toString() + } // Capitalisation is done using the rules of the appropriate locale (endonym and exonym). - locale_title_text.text = locale.getDisplayName(locale).capitalize(locale) + locale_title_text.text = getDisplayName(locale) // Show the given locale using the device locale for the subtitle. - locale_subtitle_text.text = locale.displayName.capitalize(Locale.getDefault()) + locale_subtitle_text.text = locale.getProperDisplayName() locale_selected_icon.isVisible = isCurrentLocaleSelected(locale, isDefault = false) itemView.setOnClickListener { interactor.onLocaleSelected(locale) } } + + private fun getDisplayName(locale: Locale): String { + val displayName = locale.getDisplayName(locale).capitalize(locale) + if (displayName.equals(locale.toString(), ignoreCase = true)) { + return LOCALE_TO_DISPLAY_NATIVE_NAME_MAP[locale.toString()] ?: displayName + } + return displayName + } + + @SuppressWarnings("LargeClass") + companion object { + val LOCALE_TO_DISPLAY_NATIVE_NAME_MAP: Map = mapOf( + "an" to "Aragonés", + "anp" to "अंगिका", + "ar" to "العربية", + "ast" to "Asturianu", + "ay" to "Aimara", + "az" to "Azərbaycan dili", + "be" to "беларуская мова", + "bg" to "български език", + "bn" to "বাংলা", + "br" to "Brezhoneg", + "bs" to "Bosanski jezik", + "ca" to "Català", + "cak" to "Kaqchikel", + "ceb" to "Cebuano", + "co" to "Corsu, ", + "cs" to "čeština", + "cy" to "Cymraeg", + "da" to "dansk", + "de" to "Deutsch", + "dsb" to "dolnoserbski", + "el" to "ελληνικά", + "eo" to "Esperanto", + "es" to "Español", + "et" to "Eesti", + "eu" to "Euskara", + "fa" to "فارسی", + "ff" to "Fulfulde", + "fi" to "Suomi", + "fr" to "Français", + "fy-NL" to "Frisian", + "ga-IE" to "Gaeilge", + "gd" to "Gàidhlig", + "gl" to "Galego", + "gn" to "Avañe'ẽ", + "gu-IN" to "ગુજરાતી", + "he" to "עברית", + "hi-IN" to "हिन्दी ", + "hil" to "Ilonggo", + "hr" to "hrvatski jezik", + "hsb" to "Hornjoserbsce", + "hu" to "Magyar", + "hus" to "Tének", + "hy-AM" to "հայերեն", + "ia" to "Interlingua", + "id" to "Bahasa Indonesia", + "is" to "Íslenska", + "it" to "Italiano", + "ixl" to "Ixil", + "ja" to "日本語 (にほんご)", + "jv" to "Basa Jawa", + "ka" to "ქართული", + "kab" to "Taqbaylit", + "kk" to "қазақ тілі", + "kmr" to "Kurmancî", + "kn" to "ಕನ್ನಡ", + "ko" to "한국어", + "lij" to "Ligure", + "lo" to "ພາສາລາວ", + "lt" to "lietuvių kalba", + "mix" to "Tu'un savi", + "ml" to "മലയാളം", + "mr" to "मराठी", + "ms" to "Bahasa Melayu ملايو‎", + "my" to "ဗမာစာ", + "meh" to "Tu´un savi ñuu Yasi'í Yuku Iti", + "nb-NO" to "Bokmål", + "ne-NP" to "नेपाली", + "nl" to "Nederlands", + "nn-NO" to "Nynorsk", + "nv" to "Diné bizaad", + "oc" to "Occitan", + "pa-IN" to "Panjābī", + "pl" to "Polszczyzna", + "pt" to "Português", + "pai" to "Paa ipai", + "ppl" to "Náhuat Pipil", + "quy" to "Chanka Qhichwa", + "quc" to "K'iche'", + "rm" to "Rumantsch Grischun", + "ro" to "Română", + "ru" to "русский", + "sat" to "ᱥᱟᱱᱛᱟᱲᱤ", + "sk" to "Slovak", + "sl" to "Slovenian", + "sn" to "ChiShona", + "sq" to "Shqip", + "sr" to "српски језик", + "su" to "Basa Sunda", + "sv-SE" to "Svenska", + "ta" to "தமிழ்", + "te" to "తెలుగు", + "tg" to "тоҷикӣ, toçikī, تاجیکی‎", + "th" to "ไทย", + "tl" to "Wikang Tagalog", + "tr" to "Türkçe", + "trs" to "Triqui", + "tt" to "татарча", + "tsz" to "P'urhepecha", + "uk" to "Українська", + "ur" to "اردو", + "uz" to "Oʻzbek", + "vec" to "Vèneto", + "vi" to "Tiếng Việt", + "wo" to "Wolof", + "zam" to "DíɁztè" + ) + + val LOCALE_TO_DISPLAY_ENGLISH_NAME_MAP: Map = mapOf( + "an" to "Aragonese", + "ar" to "Arabic", + "ast" to "Asturianu", + "az" to "Azerbaijani", + "be" to "Belarusian", + "bg" to "Bulgarian", + "bn" to "Bengali", + "br" to "Breton", + "bs" to "Bosnian", + "ca" to "Catalan", + "cak" to "Kaqchikel", + "ceb" to "Cebuano", + "co" to "Corsican", + "cs" to "Czech", + "cy" to "Welsh", + "da" to "Danish", + "de" to "German", + "dsb" to "Sorbian, Lower", + "el" to "Greek", + "eo" to "Esperanto", + "es" to "Spanish", + "et" to "Estonian", + "eu" to "Basque", + "fa" to "Persian", + "ff" to "Fulah", + "fi" to "Finnish", + "fr" to "French", + "fy-NL" to "Frisian", + "ga-IE" to "Irish", + "gd" to "Gaelic", + "gl" to "Galician", + "gn" to "Guarani", + "gu-IN" to "Gujarati", + "he" to "Hebrew", + "hi-IN" to "Hindi", + "hil" to "Hiligaynon", + "hr" to "Croatian", + "hsb" to "Sorbian, Upper", + "hu" to "Hungarian", + "hy-AM" to "Armenian", + "id" to "Indonesian", + "is" to "Icelandic", + "it" to "Italian", + "ja" to "Japanese", + "ka" to "Georgian", + "kab" to "Kabyle ", + "kk" to "Kazakh", + "kmr" to "Kurmanji Kurdish", + "kn" to "Kannada", + "ko" to "Korean", + "lij" to "Ligurian", + "lo" to "Lao", + "lt" to "Lithuanian", + "mix" to "Mixtepec Mixtec", + "ml" to "Malayalam", + "mr" to "Marathi", + "ms" to "Malay", + "my" to "Burmese", + "nb-NO" to "Norwegian Bokmål", + "ne-NP" to "Nepali ", + "nl" to "Dutch, Flemish", + "nn-NO" to "Norwegian Nynorsk", + "nv" to "Navajo, Navaho", + "oc" to "Occitan", + "pa-IN" to "Punjabi", + "pl" to "Polish", + "pt-BR" to "", + "pt-PT" to "", + "rm" to "Romansh", + "ro" to "Română", + "ru" to "Russian", + "sat" to "Santali", + "sk" to "Slovak", + "sl" to "Slovenian", + "sq" to "Albanian", + "sr" to "Serbian", + "su" to "Sundanese", + "sv-SE" to "Swedish", + "ta" to "Tamil", + "te" to "Telugu", + "tg" to "Tajik", + "th" to "Thai", + "tl" to "Tagalog", + "tr" to "Turkish", + "trs" to "Triqui", + "uk" to "Ukrainian", + "ur" to "Urdu", + "uz" to "Uzbek", + "vec" to "Venitian", + "vi" to "Vietnamese" + ) + } } class SystemLocaleViewHolder( @@ -72,3 +287,14 @@ abstract class BaseLocaleViewHolder( private fun String.capitalize(locale: Locale): String { return substring(0, 1).toUpperCase(locale) + substring(1) } + +/** + * Returns the locale in the selected language, with fallback to English name + */ +private fun Locale.getProperDisplayName(): String { + val displayName = this.displayName.capitalize(Locale.getDefault()) + if (displayName.equals(this.toString(), ignoreCase = true)) { + return LocaleViewHolder.LOCALE_TO_DISPLAY_ENGLISH_NAME_MAP[this.toString()] ?: displayName + } + return displayName +} diff --git a/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleViewHoldersTest.kt b/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleViewHoldersTest.kt index 451d67a89..b1d005b89 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleViewHoldersTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleViewHoldersTest.kt @@ -66,6 +66,29 @@ class LocaleViewHoldersTest { verify { interactor.onLocaleSelected(selectedLocale) } } + @Test + // Note that after we can run tests on SDK 30 the result of the locale.getDisplayName(locale) could differ and this test will fail + fun `GIVEN a locale is not properly identified in Android WHEN we bind locale THEN the title and subtitle are set from locale maps`() { + + val otherLocale = Locale("vec") + + localeViewHolder.bind(otherLocale) + + assertEquals("Vèneto", view.locale_title_text.text) + assertEquals("Venitian", view.locale_subtitle_text.text) + } + + @Test + fun `GIVEN a locale is not properly identified in Android and it is not mapped WHEN we bind locale THEN the text is the capitalised code`() { + + val otherLocale = Locale("yyy") + + localeViewHolder.bind(otherLocale) + + assertEquals("Yyy", view.locale_title_text.text) + assertEquals("Yyy", view.locale_subtitle_text.text) + } + @Test fun `bind SystemLocaleViewHolder`() { systemLocaleViewHolder.bind(selectedLocale) From 8856a3c1d769586bfd6daa7b3b2df48fb26f1bc3 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Fri, 12 Mar 2021 15:34:45 +0100 Subject: [PATCH 084/149] Integrate Android Autofill support into Nightly and debug builds. --- app/build.gradle | 1 + app/src/debug/AndroidManifest.xml | 21 ++++++++++++++++++- .../fenix/autofill/AutofillConfirmActivity.kt | 19 +++++++++++++++++ .../mozilla/fenix/autofill/AutofillService.kt | 19 +++++++++++++++++ .../fenix/autofill/AutofillUnlockActivity.kt | 19 +++++++++++++++++ .../mozilla/fenix/components/Components.kt | 14 +++++++++++++ app/src/nightly/AndroidManifest.xml | 18 ++++++++++++++++ buildSrc/src/main/java/Dependencies.kt | 1 + 8 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/mozilla/fenix/autofill/AutofillConfirmActivity.kt create mode 100644 app/src/main/java/org/mozilla/fenix/autofill/AutofillService.kt create mode 100644 app/src/main/java/org/mozilla/fenix/autofill/AutofillUnlockActivity.kt diff --git a/app/build.gradle b/app/build.gradle index 54e1ea7b5..8090f300b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -466,6 +466,7 @@ dependencies { implementation Deps.mozilla_feature_accounts implementation Deps.mozilla_feature_app_links + implementation Deps.mozilla_feature_autofill implementation Deps.mozilla_feature_awesomebar implementation Deps.mozilla_feature_contextmenu implementation Deps.mozilla_feature_customtabs diff --git a/app/src/debug/AndroidManifest.xml b/app/src/debug/AndroidManifest.xml index 3d25c0db6..0b66b4956 100644 --- a/app/src/debug/AndroidManifest.xml +++ b/app/src/debug/AndroidManifest.xml @@ -18,6 +18,25 @@ + android:name="org.mozilla.fenix.DebugFenixApplication"> + + + + + + + + + + + + diff --git a/app/src/main/java/org/mozilla/fenix/autofill/AutofillConfirmActivity.kt b/app/src/main/java/org/mozilla/fenix/autofill/AutofillConfirmActivity.kt new file mode 100644 index 000000000..219fe95c8 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/autofill/AutofillConfirmActivity.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.autofill + +import android.os.Build +import androidx.annotation.RequiresApi +import mozilla.components.feature.autofill.AutofillConfiguration +import mozilla.components.feature.autofill.ui.AbstractAutofillConfirmActivity +import org.mozilla.fenix.ext.components + +/** + * Activity responsible for asking the user to confirm before auto-filling a third-party app. + */ +@RequiresApi(Build.VERSION_CODES.O) +class AutofillConfirmActivity : AbstractAutofillConfirmActivity() { + override val configuration: AutofillConfiguration by lazy { components.autofillConfiguration } +} diff --git a/app/src/main/java/org/mozilla/fenix/autofill/AutofillService.kt b/app/src/main/java/org/mozilla/fenix/autofill/AutofillService.kt new file mode 100644 index 000000000..9ec8acf5e --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/autofill/AutofillService.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.autofill + +import android.os.Build +import androidx.annotation.RequiresApi +import mozilla.components.feature.autofill.AbstractAutofillService +import mozilla.components.feature.autofill.AutofillConfiguration +import org.mozilla.fenix.ext.components + +/** + * Service responsible for implementing Android's Autofill framework. + */ +@RequiresApi(Build.VERSION_CODES.O) +class AutofillService : AbstractAutofillService() { + override val configuration: AutofillConfiguration by lazy { components.autofillConfiguration } +} diff --git a/app/src/main/java/org/mozilla/fenix/autofill/AutofillUnlockActivity.kt b/app/src/main/java/org/mozilla/fenix/autofill/AutofillUnlockActivity.kt new file mode 100644 index 000000000..2e3a1a389 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/autofill/AutofillUnlockActivity.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.autofill + +import android.os.Build +import androidx.annotation.RequiresApi +import mozilla.components.feature.autofill.AutofillConfiguration +import mozilla.components.feature.autofill.ui.AbstractAutofillUnlockActivity +import org.mozilla.fenix.ext.components + +/** + * Activity responsible for unlocking the autofill service by asking the user to verify. + */ +@RequiresApi(Build.VERSION_CODES.O) +class AutofillUnlockActivity : AbstractAutofillUnlockActivity() { + override val configuration: AutofillConfiguration by lazy { components.autofillConfiguration } +} diff --git a/app/src/main/java/org/mozilla/fenix/components/Components.kt b/app/src/main/java/org/mozilla/fenix/components/Components.kt index fbfe5ed3f..031b61e74 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Components.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Components.kt @@ -14,12 +14,15 @@ import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker import mozilla.components.feature.addons.migration.SupportedAddonsChecker import mozilla.components.feature.addons.update.AddonUpdater import mozilla.components.feature.addons.update.DefaultAddonUpdater +import mozilla.components.feature.autofill.AutofillConfiguration import mozilla.components.feature.sitepermissions.SitePermissionsStorage import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.migration.state.MigrationStore import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.R +import org.mozilla.fenix.autofill.AutofillUnlockActivity import org.mozilla.fenix.perf.StrictModeManager import org.mozilla.fenix.components.metrics.AppStartupTelemetry import org.mozilla.fenix.ext.components @@ -155,4 +158,15 @@ class Components(private val context: Context) { FenixReviewSettings(settings) ) } + + val autofillConfiguration by lazyMonitored { + AutofillConfiguration( + storage = core.passwordsStorage, + publicSuffixList = publicSuffixList, + unlockActivity = AutofillUnlockActivity::class.java, + confirmActivity = AutofillConfiguration::class.java, + applicationName = context.getString(R.string.app_name), + httpClient = core.client + ) + } } diff --git a/app/src/nightly/AndroidManifest.xml b/app/src/nightly/AndroidManifest.xml index 5fdb32de4..3aaf3d6a2 100644 --- a/app/src/nightly/AndroidManifest.xml +++ b/app/src/nightly/AndroidManifest.xml @@ -4,6 +4,24 @@ + + + + + + + + + + + diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 44e5323a6..c28def136 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -98,6 +98,7 @@ object Deps { const val mozilla_feature_accounts = "org.mozilla.components:feature-accounts:${Versions.mozilla_android_components}" const val mozilla_feature_app_links = "org.mozilla.components:feature-app-links:${Versions.mozilla_android_components}" + const val mozilla_feature_autofill = "org.mozilla.components:feature-autofill:${Versions.mozilla_android_components}" const val mozilla_feature_awesomebar = "org.mozilla.components:feature-awesomebar:${Versions.mozilla_android_components}" const val mozilla_feature_contextmenu = "org.mozilla.components:feature-contextmenu:${Versions.mozilla_android_components}" const val mozilla_feature_customtabs = "org.mozilla.components:feature-customtabs:${Versions.mozilla_android_components}" From c47f43608d0a6da96a54f143dc960a3f100751a7 Mon Sep 17 00:00:00 2001 From: Jan-Erik Rediger Date: Tue, 9 Mar 2021 12:13:14 +0100 Subject: [PATCH 085/149] Set `distributionId` right after initializing Glean Previously setting it might have been arbitrarily delayed, resulting in this metrics missing from pings that get submitted earlier. Setting it early should prevent that. The performance impact is negligible, Glean dispatches recording that data off-main-thread anyway. --- app/src/main/java/org/mozilla/fenix/FenixApplication.kt | 9 +++++++++ .../fenix/components/metrics/GleanMetricsService.kt | 8 -------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 2b18c803d..98e14190b 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -40,6 +40,7 @@ import mozilla.components.support.rustlog.RustLog import mozilla.components.support.utils.logElapsedTime import mozilla.components.support.webextensions.WebExtensionSupport import org.mozilla.fenix.GleanMetrics.GleanBuildInfo +import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.components.Components import org.mozilla.fenix.components.metrics.MetricServiceType @@ -115,6 +116,14 @@ open class FenixApplication : LocaleAwareApplication(), Provider { uploadEnabled = telemetryEnabled, buildInfo = GleanBuildInfo.buildInfo ) + + // Set this early to guarantee it's in every ping from here on. + Metrics.distributionId.set( + when (Config.channel.isMozillaOnline) { + true -> "MozillaOnline" + false -> "Mozilla" + } + ) } @CallSuper diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index dfe1d517d..f62d8c17c 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -12,7 +12,6 @@ import mozilla.components.service.fxa.manager.SyncEnginesStorage import mozilla.components.service.glean.Glean import mozilla.components.service.glean.private.NoExtraKeys import mozilla.components.support.base.log.logger.Logger -import org.mozilla.fenix.Config import org.mozilla.fenix.GleanMetrics.AboutPage import org.mozilla.fenix.GleanMetrics.Addons import org.mozilla.fenix.GleanMetrics.AppTheme @@ -848,13 +847,6 @@ class GleanMetricsService( defaultMozBrowser.set(it) } - distributionId.set( - when (Config.channel.isMozillaOnline) { - true -> "MozillaOnline" - false -> "Mozilla" - } - ) - mozillaProducts.set(mozillaProductDetector.getInstalledMozillaProducts(context)) adjustCampaign.set(context.settings().adjustCampaignId) From 83b7d6f38dc23e51400403eeba6d7ac41c0e90c7 Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Fri, 5 Mar 2021 10:11:32 -0500 Subject: [PATCH 086/149] For issue #18132 create feature flag for refreshing icons --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index 34890976d..2eb0f76cf 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -43,4 +43,9 @@ object FeatureFlags { * Enables the tabs tray re-write with Synced Tabs. */ val tabsTrayRewrite = Config.channel.isNightlyOrDebug + + /** + * Enables the updated icon set look and feel. + */ + val newIconSet = Config.channel.isNightlyOrDebug } From ec52c56ed91ca8087ab57a77f17600df3297d009 Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Fri, 5 Mar 2021 10:12:07 -0500 Subject: [PATCH 087/149] For issue #18132 remove icons from Settings screen --- .../fenix/settings/SettingsFragment.kt | 14 +- .../preference_category_no_icon_style.xml | 13 ++ app/src/main/res/values/dimens.xml | 1 + .../res/xml/preferences_without_icons.xml | 191 ++++++++++++++++++ 4 files changed, 216 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/layout/preference_category_no_icon_style.xml create mode 100644 app/src/main/res/xml/preferences_without_icons.xml 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 ea8fd5753..161e45295 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.HomeActivity import org.mozilla.fenix.R +import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.application import org.mozilla.fenix.ext.components @@ -132,7 +133,12 @@ class SettingsFragment : PreferenceFragmentCompat() { } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.preferences, rootKey) + val preferencesId = if (FeatureFlags.newIconSet) { + R.xml.preferences_without_icons + } else { + R.xml.preferences + } + setPreferencesFromResource(preferencesId, rootKey) updateMakeDefaultBrowserPreference() } @@ -368,8 +374,10 @@ class SettingsFragment : PreferenceFragmentCompat() { val preferenceOpenLinksInExternalApp = findPreference(getPreferenceKey(R.string.pref_key_open_links_in_external_app)) - preferencePrivateBrowsing.icon.mutate().apply { - setTint(requireContext().getColorFromAttr(R.attr.primaryText)) + if (!FeatureFlags.newIconSet) { + preferencePrivateBrowsing.icon.mutate().apply { + setTint(requireContext().getColorFromAttr(R.attr.primaryText)) + } } if (!Config.channel.isReleased) { diff --git a/app/src/main/res/layout/preference_category_no_icon_style.xml b/app/src/main/res/layout/preference_category_no_icon_style.xml new file mode 100644 index 000000000..b5f7df4ab --- /dev/null +++ b/app/src/main/res/layout/preference_category_no_icon_style.xml @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 27617106a..40e04af06 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -58,6 +58,7 @@ 12dp 8dp 72dp + 16dp 48dp diff --git a/app/src/main/res/xml/preferences_without_icons.xml b/app/src/main/res/xml/preferences_without_icons.xml new file mode 100644 index 000000000..96c588a9b --- /dev/null +++ b/app/src/main/res/xml/preferences_without_icons.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 8f43acc9039f15c01867287ac9b9a25258bbf26f Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Fri, 12 Mar 2021 08:21:34 -0500 Subject: [PATCH 088/149] Closes #18367 run SupportedAddonsChecker only for users with unsupported extensions --- .../org/mozilla/fenix/FenixApplication.kt | 21 ++++++++++- .../org/mozilla/fenix/FenixApplicationTest.kt | 35 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 98e14190b..454597e18 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -10,6 +10,7 @@ import android.os.Build.VERSION.SDK_INT import android.os.StrictMode import android.util.Log.INFO import androidx.annotation.CallSuper +import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.getSystemService import androidx.work.Configuration.Builder @@ -23,7 +24,10 @@ import mozilla.appservices.Megazord import mozilla.components.browser.state.action.SystemAction import mozilla.components.browser.state.selector.selectedTab import mozilla.components.concept.base.crash.Breadcrumb +import mozilla.components.concept.engine.webextension.WebExtension +import mozilla.components.concept.engine.webextension.isUnsupported import mozilla.components.concept.push.PushProcessor +import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker import mozilla.components.feature.addons.update.GlobalAddonDependencyProvider import mozilla.components.lib.crash.CrashReporter import mozilla.components.service.glean.Glean @@ -447,7 +451,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { }, onExtensionsLoaded = { extensions -> components.addonUpdater.registerForFutureUpdates(extensions) - components.supportedAddonsChecker.registerForChecks() + subscribeForNewAddonsIfNeeded(components.supportedAddonsChecker, extensions) }, onUpdatePermissionRequest = components.addonUpdater::onUpdatePermissionRequest ) @@ -456,6 +460,21 @@ open class FenixApplication : LocaleAwareApplication(), Provider { } } + @VisibleForTesting + internal fun subscribeForNewAddonsIfNeeded( + checker: DefaultSupportedAddonsChecker, + installedExtensions: List + ) { + val hasUnsupportedAddons = installedExtensions.any { it.isUnsupported() } + if (hasUnsupportedAddons) { + checker.registerForChecks() + } else { + // As checks are a persistent subscriptions, we have to make sure + // we remove any previous subscriptions. + checker.unregisterForChecks() + } + } + protected fun recordOnInit() { // This gets called by more than one process. Ideally we'd only run this in the main process // but the code to check which process we're in crashes because the Context isn't valid yet. diff --git a/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt b/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt index a82099258..f1c508960 100644 --- a/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt +++ b/app/src/test/java/org/mozilla/fenix/FenixApplicationTest.kt @@ -5,6 +5,13 @@ package org.mozilla.fenix import androidx.test.core.app.ApplicationProvider +import io.mockk.every +import io.mockk.mockk +import io.mockk.verify +import mozilla.components.concept.engine.webextension.DisabledFlags +import mozilla.components.concept.engine.webextension.Metadata +import mozilla.components.concept.engine.webextension.WebExtension +import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker import mozilla.components.service.glean.testing.GleanTestRule import org.junit.Assert.assertTrue import org.junit.Before @@ -34,4 +41,32 @@ class FenixApplicationTest { // https://robolectric.blogspot.com/2013/04/the-test-lifecycle-in-20.html assertTrue(PerfStartup.applicationOnCreate.testHasValue()) } + + @Test + fun `GIVEN there are unsupported addons installed WHEN subscribing for new add-ons checks THEN register for checks`() { + val checker = mockk(relaxed = true) + val unSupportedExtension: WebExtension = mockk() + val metadata: Metadata = mockk() + + every { unSupportedExtension.getMetadata() } returns metadata + every { metadata.disabledFlags } returns DisabledFlags.select(DisabledFlags.APP_SUPPORT) + + application.subscribeForNewAddonsIfNeeded(checker, listOf(unSupportedExtension)) + + verify { checker.registerForChecks() } + } + + @Test + fun `GIVEN there are no unsupported addons installed WHEN subscribing for new add-ons checks THEN unregister for checks`() { + val checker = mockk(relaxed = true) + val unSupportedExtension: WebExtension = mockk() + val metadata: Metadata = mockk() + + every { unSupportedExtension.getMetadata() } returns metadata + every { metadata.disabledFlags } returns DisabledFlags.select(DisabledFlags.USER) + + application.subscribeForNewAddonsIfNeeded(checker, listOf(unSupportedExtension)) + + verify { checker.unregisterForChecks() } + } } From a4691675a1e3a8c8ac049012d974a1f595a073e6 Mon Sep 17 00:00:00 2001 From: Oana Horvath Date: Mon, 15 Mar 2021 14:58:18 +0200 Subject: [PATCH 089/149] For #14005: fix strict TP tests loading timeout --- .../java/org/mozilla/fenix/ui/SmokeTest.kt | 4 +- .../StrictEnhancedTrackingProtectionTest.kt | 12 +-- .../fenix/ui/robots/NavigationToolbarRobot.kt | 85 +++++++++++++------ .../fenix/ui/robots/ThreeDotMenuMainRobot.kt | 10 +++ 4 files changed, 78 insertions(+), 33 deletions(-) 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 4f98efed7..63b588286 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -406,7 +406,7 @@ class SmokeTest { }.goBackToHomeScreen {} navigationToolbar { - }.enterURLAndEnterToBrowser(trackingPage.url) {} + }.openTrackingProtectionTestPage(trackingPage.url, true) {} enhancedTrackingProtection { dismissTrackingOnboarding() @@ -630,7 +630,7 @@ class SmokeTest { IdlingRegistry.getInstance().unregister(addonsListIdlingResource!!) }.goBack { }.openNavigationToolbar { - }.enterURLAndEnterToBrowser(trackingProtectionPage.url) {} + }.openTrackingProtectionTestPage(trackingProtectionPage.url, true) {} enhancedTrackingProtection { verifyEnhancedTrackingProtectionNotice() }.closeNotificationPopup {} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt index c3583b70d..9e7494152 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/StrictEnhancedTrackingProtectionTest.kt @@ -83,7 +83,7 @@ class StrictEnhancedTrackingProtectionTest { TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) navigationToolbar { - }.enterURLAndEnterToBrowser(trackingProtectionTest.url) {} + }.openTrackingProtectionTestPage(trackingProtectionTest.url, true) {} enhancedTrackingProtection { verifyEnhancedTrackingProtectionNotice() @@ -96,7 +96,7 @@ class StrictEnhancedTrackingProtectionTest { TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) navigationToolbar { - }.enterURLAndEnterToBrowser(trackingProtectionTest.url) {} + }.openTrackingProtectionTestPage(trackingProtectionTest.url, true) {} enhancedTrackingProtection { verifyEnhancedTrackingProtectionNotice() @@ -113,7 +113,7 @@ class StrictEnhancedTrackingProtectionTest { TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) navigationToolbar { - }.enterURLAndEnterToBrowser(trackingProtectionTest.url) {} + }.openTrackingProtectionTestPage(trackingProtectionTest.url, true) {} enhancedTrackingProtection { verifyEnhancedTrackingProtectionNotice() @@ -133,7 +133,7 @@ class StrictEnhancedTrackingProtectionTest { TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) navigationToolbar { - }.enterURLAndEnterToBrowser(trackingProtectionTest.url) {} + }.openTrackingProtectionTestPage(trackingProtectionTest.url, true) {} enhancedTrackingProtection { verifyEnhancedTrackingProtectionNotice() @@ -164,7 +164,7 @@ class StrictEnhancedTrackingProtectionTest { TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) navigationToolbar { - }.enterURLAndEnterToBrowser(trackingProtectionTest.url) {} + }.openTrackingProtectionTestPage(trackingProtectionTest.url, true) {} enhancedTrackingProtection { verifyEnhancedTrackingProtectionNotice() @@ -196,7 +196,7 @@ class StrictEnhancedTrackingProtectionTest { TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) navigationToolbar { - }.enterURLAndEnterToBrowser(trackingProtectionTest.url) {} + }.openTrackingProtectionTestPage(trackingProtectionTest.url, true) {} enhancedTrackingProtection { verifyEnhancedTrackingProtectionNotice() diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt index 32af056df..e6c3d13d2 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt @@ -11,6 +11,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.test.espresso.Espresso.onView import androidx.test.espresso.IdlingRegistry import androidx.test.espresso.IdlingResource +import androidx.test.espresso.IdlingResourceTimeoutException import androidx.test.espresso.action.ViewActions import androidx.test.espresso.action.ViewActions.pressImeActionButton import androidx.test.espresso.action.ViewActions.replaceText @@ -20,6 +21,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.contrib.RecyclerViewActions import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.hasDescendant +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withContentDescription import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility import androidx.test.espresso.matcher.ViewMatchers.withId @@ -81,15 +83,7 @@ class NavigationToolbarRobot { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) fun goBackToWebsite(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { - mDevice.waitNotNull( - Until.findObject(By.res("$packageName:id/toolbar")), - waitingTime - ) - urlBar().click() - mDevice.waitNotNull( - Until.findObject(By.res("$packageName:id/mozac_browser_toolbar_edit_url_view")), - waitingTime - ) + openEditURLView() clearAddressBar().click() awesomeBar().check((matches(withText(containsString(""))))) goBackButton() @@ -104,14 +98,7 @@ class NavigationToolbarRobot { ): BrowserRobot.Transition { sessionLoadedIdlingResource = SessionLoadedIdlingResource() - mDevice.waitNotNull(Until.findObject(By.res("$packageName:id/toolbar")), - waitingTime - ) - urlBar().click() - mDevice.waitNotNull( - Until.findObject(By.res("$packageName:id/mozac_browser_toolbar_edit_url_view")), - waitingTime - ) + openEditURLView() awesomeBar().perform(replaceText(url.toString()), pressImeActionButton()) @@ -130,19 +117,55 @@ class NavigationToolbarRobot { return BrowserRobot.Transition() } + fun openTrackingProtectionTestPage(url: Uri, etpEnabled: Boolean, interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + sessionLoadedIdlingResource = SessionLoadedIdlingResource() + + openEditURLView() + + awesomeBar().perform(replaceText(url.toString()), pressImeActionButton()) + + runWithIdleRes(sessionLoadedIdlingResource) { + when (etpEnabled) { + true -> + try { + onView(withId(R.id.onboarding_message)) + .check(matches(isDisplayed())) + } catch (e: IdlingResourceTimeoutException) { + openThreeDotMenu { + }.stopPageLoad { + val onboardingDisplayed = + mDevice.findObject(UiSelector().resourceId("$packageName:id/onboarding_message")) + .waitForExists(waitingTime) + + if (!onboardingDisplayed) { + openThreeDotMenu { + }.refreshPage {} + } + } + } + + false -> + try { + onView(withResourceName("browserLayout")).check(matches(isDisplayed())) + } catch (e: IdlingResourceTimeoutException) { + openThreeDotMenu { + }.stopPageLoad { + }.openThreeDotMenu { + }.refreshPage {} + } + } + } + + BrowserRobot().interact() + return BrowserRobot.Transition() + } + fun openTabCrashReporter(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { val crashUrl = "about:crashcontent" sessionLoadedIdlingResource = SessionLoadedIdlingResource() - mDevice.waitNotNull(Until.findObject(By.res("$packageName:id/toolbar")), - waitingTime - ) - urlBar().click() - mDevice.waitNotNull( - Until.findObject(By.res("$packageName:id/mozac_browser_toolbar_edit_url_view")), - waitingTime - ) + openEditURLView() awesomeBar().perform(replaceText(crashUrl), pressImeActionButton()) @@ -285,6 +308,18 @@ fun clickUrlbar(interact: SearchRobot.() -> Unit): SearchRobot.Transition { return SearchRobot.Transition() } +fun openEditURLView() { + mDevice.waitNotNull( + Until.findObject(By.res("$packageName:id/toolbar")), + waitingTime + ) + urlBar().click() + mDevice.waitNotNull( + Until.findObject(By.res("$packageName:id/mozac_browser_toolbar_edit_url_view")), + waitingTime + ) +} + private fun assertSuggestionsAreEqualTo(suggestionSize: Int) { mDevice.waitForIdle() onView(withId(R.id.awesome_bar)).check(suggestionsAreEqualTo(suggestionSize)) diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt index cc2304f33..71d03cbc5 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt @@ -280,6 +280,14 @@ class ThreeDotMenuMainRobot { return BrowserRobot.Transition() } + fun stopPageLoad(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + mDevice.waitNotNull(Until.findObject(By.desc("Stop")), waitingTime) + stopLoadingButton().click() + + BrowserRobot().interact() + return BrowserRobot.Transition() + } + fun closeAllTabs(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { closeAllTabsButton().click() @@ -444,6 +452,8 @@ private fun refreshButton() = onView(ViewMatchers.withContentDescription("Refres private fun assertRefreshButton() = refreshButton() .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) +private fun stopLoadingButton() = onView(ViewMatchers.withContentDescription("Stop")) + private fun closeAllTabsButton() = onView(allOf(withText("Close all tabs"))).inRoot(RootMatchers.isPlatformPopup()) private fun assertCloseAllTabsButton() = closeAllTabsButton() .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) From 3a056bf850d39fa8c96afe98b9264365f97d40ce Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Mon, 15 Mar 2021 12:57:53 -0400 Subject: [PATCH 090/149] For #18036 - Add TrackKeyInfo to Ad Click Metrics (#18159) --- app/src/main/assets/extensions/ads/ads.js | 19 +++- .../assets/extensions/ads/adsBackground.js | 28 +++++ .../extensions/ads/manifest.template.json | 13 ++- .../mozilla/fenix/components/metrics/Event.kt | 4 +- .../search/telemetry/SearchProviderModel.kt | 2 +- .../fenix/search/telemetry/TrackKeyInfo.kt | 36 ++++++ .../mozilla/fenix/search/telemetry/Utils.kt | 96 ++++++++++++++++ .../search/telemetry/ads/AdsTelemetry.kt | 58 +++++++--- .../telemetry/incontent/InContentTelemetry.kt | 107 ++---------------- .../telemetry/incontent/TrackKeyInfo.kt | 23 ---- .../fenix/search/SearchProviderModelTest.kt | 4 +- .../search/telemetry/ads/AdsTelemetryTest.kt | 45 ++++++-- 12 files changed, 282 insertions(+), 153 deletions(-) create mode 100644 app/src/main/assets/extensions/ads/adsBackground.js create mode 100644 app/src/main/java/org/mozilla/fenix/search/telemetry/TrackKeyInfo.kt create mode 100644 app/src/main/java/org/mozilla/fenix/search/telemetry/Utils.kt delete mode 100644 app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/TrackKeyInfo.kt diff --git a/app/src/main/assets/extensions/ads/ads.js b/app/src/main/assets/extensions/ads/ads.js index 152994f93..356bda2d2 100644 --- a/app/src/main/assets/extensions/ads/ads.js +++ b/app/src/main/assets/extensions/ads/ads.js @@ -14,28 +14,39 @@ function collectLinks(urls) { } } -function sendLinks() { +function sendLinks(cookies) { let urls = []; collectLinks(urls); let message = { 'url': document.location.href, - 'urls': urls + 'urls': urls, + 'cookies': cookies }; browser.runtime.sendNativeMessage("MozacBrowserAds", message); } +function notify(message) { + sendLinks(message.cookies); +} + +browser.runtime.onMessage.addListener(notify); + const events = ["pageshow", "load", "unload"]; var timeout; const eventLogger = event => { switch (event.type) { case "load": - timeout = setTimeout(sendLinks, ADLINK_CHECK_TIMEOUT_MS); + timeout = setTimeout(() => { + browser.runtime.sendMessage({ "checkCookies": true }); + }, ADLINK_CHECK_TIMEOUT_MS) break; case "pageshow": if (event.persisted) { - timeout = setTimeout(sendLinks, ADLINK_CHECK_TIMEOUT_MS); + timeout = setTimeout(() => { + browser.runtime.sendMessage({ "checkCookies": true }); + }, ADLINK_CHECK_TIMEOUT_MS) } break; case "unload": diff --git a/app/src/main/assets/extensions/ads/adsBackground.js b/app/src/main/assets/extensions/ads/adsBackground.js new file mode 100644 index 000000000..63b6f0fb9 --- /dev/null +++ b/app/src/main/assets/extensions/ads/adsBackground.js @@ -0,0 +1,28 @@ +/* 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/. */ + +browser.runtime.onMessage.addListener(notify); + +function sendMessageToTabs(tabs, cookies) { + for (let tab of tabs) { + browser.tabs.sendMessage( + tab.id, + { cookies } + ); + } +} + +function notify(message) { + if (message.checkCookies) { + browser.cookies.getAll({}) + .then(cookies => { + browser.tabs.query({ + currentWindow: true, + active: true + }).then(tabs => { + sendMessageToTabs(tabs, cookies); + }); + }); + } +} diff --git a/app/src/main/assets/extensions/ads/manifest.template.json b/app/src/main/assets/extensions/ads/manifest.template.json index 41d9e9bd1..8f4ef48f6 100644 --- a/app/src/main/assets/extensions/ads/manifest.template.json +++ b/app/src/main/assets/extensions/ads/manifest.template.json @@ -19,9 +19,20 @@ "run_at": "document_end" } ], + "background": { + "scripts": ["adsBackground.js"] + }, "permissions": [ "geckoViewAddons", "nativeMessaging", - "nativeMessagingFromContent" + "nativeMessagingFromContent", + "geckoViewAddons", + "nativeMessaging", + "nativeMessagingFromContent", + "webNavigation", + "webRequest", + "webRequestBlocking", + "cookies", + "*://*/*" ] } 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 a91932209..d211af7de 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 @@ -515,9 +515,9 @@ sealed class Event { get() = providerName } - data class SearchAdClicked(val providerName: String) : Event() { + data class SearchAdClicked(val keyName: String) : Event() { val label: String - get() = providerName + get() = keyName } data class SearchInContent(val keyName: String) : Event() { diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt index ff8f64d00..3017804f6 100644 --- a/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt +++ b/app/src/main/java/org/mozilla/fenix/search/telemetry/SearchProviderModel.kt @@ -39,7 +39,7 @@ data class SearchProviderModel( * Checks if any of the given URLs represent an ad from the search engine. * Used to check if a clicked link was for an ad. */ - fun containsAds(urlList: List) = urlList.any { url -> isAd(url) } + fun containsAdLinks(urlList: List) = urlList.any { url -> isAd(url) } private fun isAd(url: String) = extraAdServersRegexps.any { adsRegex -> adsRegex.containsMatchIn(url) } diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/TrackKeyInfo.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/TrackKeyInfo.kt new file mode 100644 index 000000000..725e3ec55 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/search/telemetry/TrackKeyInfo.kt @@ -0,0 +1,36 @@ +/* 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.telemetry + +import java.util.Locale + +/** + * A data class that tracks key information about a Search Engine Result Page (SERP). + * + * @property provider The name of the search provider. + * @property type The search access point type (SAP). This is either "organic", "sap" or + * "sap-follow-on". + * @property code The search URL's `code` query parameter. + * @property channel The search URL's `channel` query parameter. + */ +internal data class TrackKeyInfo( + var provider: String, + var type: String, + var code: String?, + var channel: String? = null +) { + /** + * Returns the track key information into the following string format: + * `.in-content.[sap|sap-follow-on|organic].[code|none](.[channel])?`. + */ + fun createTrackKey(): String { + return "${provider.toLowerCase(Locale.ROOT)}.in-content" + + ".${type.toLowerCase(Locale.ROOT)}" + + ".${code?.toLowerCase(Locale.ROOT) ?: "none"}" + + if (!channel?.toLowerCase(Locale.ROOT).isNullOrBlank()) + ".${channel?.toLowerCase(Locale.ROOT)}" + else "" + } +} diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/Utils.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/Utils.kt new file mode 100644 index 000000000..38bf1179c --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/search/telemetry/Utils.kt @@ -0,0 +1,96 @@ +/* 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.telemetry + +import android.net.Uri +import org.json.JSONObject + +private const val SEARCH_TYPE_SAP_FOLLOW_ON = "sap-follow-on" +private const val SEARCH_TYPE_SAP = "sap" +private const val SEARCH_TYPE_ORGANIC = "organic" +private const val CHANNEL_KEY = "channel" + +internal fun getTrackKey( + provider: SearchProviderModel, + uri: Uri, + cookies: List +): String { + val paramSet = uri.queryParameterNames + var code: String? = null + + if (provider.codeParam.isNotEmpty()) { + code = uri.getQueryParameter(provider.codeParam) + + // Try cookies first because Bing has followOnCookies and valid code, but no + // followOnParams => would tracks organic instead of sap-follow-on + if (provider.followOnCookies.isNotEmpty()) { + // Checks if engine contains a valid follow-on cookie, otherwise return default + getTrackKeyFromCookies(provider, uri, cookies)?.let { + return it.createTrackKey() + } + } + + // For Bing if it didn't have a valid cookie and for all the other search engines + if (hasValidCode(code, provider)) { + val channel = uri.getQueryParameter(CHANNEL_KEY) + val type = getSapType(provider.followOnParams, paramSet) + return TrackKeyInfo(provider.name, type, code, channel).createTrackKey() + } + } + + // Default to organic search type if no code parameter was found. + return TrackKeyInfo(provider.name, SEARCH_TYPE_ORGANIC, code).createTrackKey() +} + +private fun getTrackKeyFromCookies( + provider: SearchProviderModel, + uri: Uri, + cookies: List +): TrackKeyInfo? { + // Especially Bing requires lots of extra work related to cookies. + for (followOnCookie in provider.followOnCookies) { + val eCode = uri.getQueryParameter(followOnCookie.extraCodeParam) + if (eCode == null || !followOnCookie.extraCodePrefixes.any { prefix -> + eCode.startsWith(prefix) + }) { + continue + } + + // If this cookie is present, it's probably an SAP follow-on. + // This might be an organic follow-on in the same session, but there + // is no way to tell the difference. + for (cookie in cookies) { + if (cookie.getString("name") != followOnCookie.name) { + continue + } + val valueList = cookie.getString("value") + .split("=") + .map { item -> item.trim() } + + if (valueList.size == 2 && valueList[0] == followOnCookie.codeParam && + followOnCookie.codePrefixes.any { prefix -> + valueList[1].startsWith( + prefix + ) + } + ) { + return TrackKeyInfo(provider.name, SEARCH_TYPE_SAP_FOLLOW_ON, valueList[1]) + } + } + } + + return null +} + +private fun getSapType(followOnParams: List, paramSet: Set): String { + return if (followOnParams.any { param -> paramSet.contains(param) }) { + SEARCH_TYPE_SAP_FOLLOW_ON + } else { + SEARCH_TYPE_SAP + } +} + +private fun hasValidCode(code: String?, provider: SearchProviderModel): Boolean = + code != null && provider.codePrefixes.any { prefix -> code.startsWith(prefix) } diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt index 7044af09b..055c9a77e 100644 --- a/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt +++ b/app/src/main/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetry.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.search.telemetry.ads import androidx.annotation.VisibleForTesting +import androidx.core.net.toUri import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.Engine import org.json.JSONObject @@ -12,9 +13,14 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.search.telemetry.BaseSearchTelemetry import org.mozilla.fenix.search.telemetry.ExtensionInfo +import org.mozilla.fenix.search.telemetry.getTrackKey class AdsTelemetry(private val metrics: MetricController) : BaseSearchTelemetry() { + // Cache the cookies provided by the ADS_EXTENSION_ID extension to be used when tracking + // the Ads clicked telemetry. + var cachedCookies = listOf() + override fun install( engine: Engine, store: BrowserStore @@ -27,38 +33,64 @@ class AdsTelemetry(private val metrics: MetricController) : BaseSearchTelemetry( installWebExtension(engine, store, info) } - fun trackAdClickedMetric(sessionUrl: String?, urlPath: List) { - if (sessionUrl == null) { - return - } - val provider = getProviderForUrl(sessionUrl) - provider?.let { - if (it.containsAds(urlPath)) { - metrics.track(Event.SearchAdClicked(it.name)) - } - } - } - override fun processMessage(message: JSONObject) { + // Cache the cookies list when the extension sends a message. + cachedCookies = getMessageList( + message, + ADS_MESSAGE_COOKIES_KEY + ) + val urls = getMessageList(message, ADS_MESSAGE_DOCUMENT_URLS_KEY) val provider = getProviderForUrl(message.getString(ADS_MESSAGE_SESSION_URL_KEY)) + provider?.let { - if (it.containsAds(urls)) { + if (it.containsAdLinks(urls)) { metrics.track(Event.SearchWithAds(it.name)) } } } + /** + * If a search ad is clicked, record the search ad that was clicked. This method is called + * when the browser is navigating to a new URL, which may be a search ad. + * + * @param url The URL of the page before the search ad was clicked. This is used to determine + * the originating search provider. + * @param urlPath A list of the URLs and load requests collected in between location changes. + * Clicking on a search ad generates a list of redirects from the originating search provider + * to the ad source. This is used to determine if there was an ad click. + */ + fun trackAdClickedMetric(url: String?, urlPath: List) { + val uri = url?.toUri() ?: return + val provider = getProviderForUrl(url) ?: return + val paramSet = uri.queryParameterNames + + if (!paramSet.contains(provider.queryParam) || !provider.containsAdLinks(urlPath)) { + // Do nothing if the URL does not have the search provider's query parameter or + // there were no ad clicks. + return + } + + metrics.track(Event.SearchAdClicked(getTrackKey(provider, uri, cachedCookies))) + } + companion object { @VisibleForTesting internal const val ADS_EXTENSION_ID = "ads@mozac.org" + @VisibleForTesting internal const val ADS_EXTENSION_RESOURCE_URL = "resource://android/assets/extensions/ads/" + @VisibleForTesting internal const val ADS_MESSAGE_SESSION_URL_KEY = "url" + @VisibleForTesting internal const val ADS_MESSAGE_DOCUMENT_URLS_KEY = "urls" + @VisibleForTesting internal const val ADS_MESSAGE_ID = "MozacBrowserAds" + + @VisibleForTesting + internal const val ADS_MESSAGE_COOKIES_KEY = "cookies" } } diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/InContentTelemetry.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/InContentTelemetry.kt index f2ad23fea..2891dda0d 100644 --- a/app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/InContentTelemetry.kt +++ b/app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/InContentTelemetry.kt @@ -4,7 +4,6 @@ package org.mozilla.fenix.search.telemetry.incontent -import android.net.Uri import androidx.annotation.VisibleForTesting import androidx.core.net.toUri import mozilla.components.browser.state.store.BrowserStore @@ -14,7 +13,7 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.search.telemetry.BaseSearchTelemetry import org.mozilla.fenix.search.telemetry.ExtensionInfo -import org.mozilla.fenix.search.telemetry.SearchProviderModel +import org.mozilla.fenix.search.telemetry.getTrackKey class InContentTelemetry(private val metrics: MetricController) : BaseSearchTelemetry() { @@ -37,116 +36,32 @@ class InContentTelemetry(private val metrics: MetricController) : BaseSearchTele @VisibleForTesting internal fun trackPartnerUrlTypeMetric(url: String, cookies: List) { - val provider = getProviderForUrl(url) - var trackKey: TrackKeyInfo? = null + val provider = getProviderForUrl(url) ?: return + val uri = url.toUri() + val paramSet = uri.queryParameterNames - provider?.let { - val uri = url.toUri() - val paramSet = uri.queryParameterNames - if (!paramSet.contains(provider.queryParam)) { - return - } - var code: String? = null - - if (provider.codeParam.isNotEmpty()) { - code = uri.getQueryParameter(provider.codeParam) - // Try cookies first because Bing has followOnCookies and valid code, but no - // followOnParams => would tracks organic instead of sap-follow-on - if (provider.followOnCookies.isNotEmpty()) { - // Checks if engine contains a valid follow-on cookie, otherwise return default - trackKey = getTrackKeyFromCookies(provider, uri, cookies, code) - } - - // For Bing if it didn't have a valid cookie and for all the other search engines - if (resultNotComputedFromCookies(trackKey) && hasValidCode(code, provider)) { - val channel = uri.getQueryParameter(CHANNEL_KEY) - val type = getSapType(provider.followOnParams, paramSet) - trackKey = TrackKeyInfo(provider.name, type, code, channel) - } - } - - // Go default if no codeParam was found - if (trackKey == null) { - trackKey = TrackKeyInfo(provider.name, SEARCH_TYPE_ORGANIC, code) - } - - trackKey?.let { - metrics.track(Event.SearchInContent(it.createTrackKey())) - } + if (!paramSet.contains(provider.queryParam)) { + return } - } - private fun resultNotComputedFromCookies(trackKey: TrackKeyInfo?): Boolean = - trackKey == null || trackKey.type == SEARCH_TYPE_ORGANIC - - private fun hasValidCode(code: String?, provider: SearchProviderModel): Boolean = - code != null && provider.codePrefixes.any { prefix -> code.startsWith(prefix) } - - private fun getSapType(followOnParams: List, paramSet: Set): String { - return if (followOnParams.any { param -> paramSet.contains(param) }) { - SEARCH_TYPE_SAP_FOLLOW_ON - } else { - SEARCH_TYPE_SAP - } - } - - private fun getTrackKeyFromCookies( - provider: SearchProviderModel, - uri: Uri, - cookies: List, - code: String? - ): TrackKeyInfo { - // Especially Bing requires lots of extra work related to cookies. - for (followOnCookie in provider.followOnCookies) { - val eCode = uri.getQueryParameter(followOnCookie.extraCodeParam) - if (eCode == null || !followOnCookie.extraCodePrefixes.any { prefix -> - eCode.startsWith(prefix) - }) { - continue - } - - // If this cookie is present, it's probably an SAP follow-on. - // This might be an organic follow-on in the same session, but there - // is no way to tell the difference. - for (cookie in cookies) { - if (cookie.getString("name") != followOnCookie.name) { - continue - } - val valueList = cookie.getString("value") - .split("=") - .map { item -> item.trim() } - - if (valueList.size == 2 && valueList[0] == followOnCookie.codeParam && - followOnCookie.codePrefixes.any { prefix -> - valueList[1].startsWith( - prefix - ) - } - ) { - return TrackKeyInfo(provider.name, SEARCH_TYPE_SAP_FOLLOW_ON, valueList[1]) - } - } - } - return TrackKeyInfo(provider.name, SEARCH_TYPE_ORGANIC, code) + metrics.track(Event.SearchInContent(getTrackKey(provider, uri, cookies))) } companion object { @VisibleForTesting internal const val COOKIES_EXTENSION_ID = "cookies@mozac.org" + @VisibleForTesting internal const val COOKIES_EXTENSION_RESOURCE_URL = "resource://android/assets/extensions/cookies/" + @VisibleForTesting internal const val COOKIES_MESSAGE_SESSION_URL_KEY = "url" + @VisibleForTesting internal const val COOKIES_MESSAGE_LIST_KEY = "cookies" + @VisibleForTesting internal const val COOKIES_MESSAGE_ID = "BrowserCookiesMessage" - - private const val SEARCH_TYPE_ORGANIC = "organic" - private const val SEARCH_TYPE_SAP = "sap" - private const val SEARCH_TYPE_SAP_FOLLOW_ON = "sap-follow-on" - - private const val CHANNEL_KEY = "channel" } } diff --git a/app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/TrackKeyInfo.kt b/app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/TrackKeyInfo.kt deleted file mode 100644 index b67ec1522..000000000 --- a/app/src/main/java/org/mozilla/fenix/search/telemetry/incontent/TrackKeyInfo.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* 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.telemetry.incontent - -import java.util.Locale - -internal data class TrackKeyInfo( - var providerName: String, - var type: String, - var code: String?, - var channel: String? = null -) { - fun createTrackKey(): String { - return "${providerName.toLowerCase(Locale.ROOT)}.in-content" + - ".${type.toLowerCase(Locale.ROOT)}" + - ".${code?.toLowerCase(Locale.ROOT) ?: "none"}" + - if (!channel?.toLowerCase(Locale.ROOT).isNullOrBlank()) - ".${channel?.toLowerCase(Locale.ROOT)}" - else "" - } -} diff --git a/app/src/test/java/org/mozilla/fenix/search/SearchProviderModelTest.kt b/app/src/test/java/org/mozilla/fenix/search/SearchProviderModelTest.kt index 31879d39c..e9d856149 100644 --- a/app/src/test/java/org/mozilla/fenix/search/SearchProviderModelTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/SearchProviderModelTest.kt @@ -29,13 +29,13 @@ class SearchProviderModelTest { fun `test search provider contains ads`() { val ad = "https://www.bing.com/aclick" val nonAd = "https://www.bing.com/notanad" - assertTrue(testSearchProvider.containsAds(listOf(ad, nonAd))) + assertTrue(testSearchProvider.containsAdLinks(listOf(ad, nonAd))) } @Test fun `test search provider does not contain ads`() { val nonAd1 = "https://www.yahoo.com/notanad" val nonAd2 = "https://www.google.com/" - assertFalse(testSearchProvider.containsAds(listOf(nonAd1, nonAd2))) + assertFalse(testSearchProvider.containsAdLinks(listOf(nonAd1, nonAd2))) } } diff --git a/app/src/test/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetryTest.kt b/app/src/test/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetryTest.kt index ff6e290b4..c859dab52 100644 --- a/app/src/test/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetryTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/telemetry/ads/AdsTelemetryTest.kt @@ -22,6 +22,7 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.search.telemetry.ExtensionInfo import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry.Companion.ADS_EXTENSION_ID import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry.Companion.ADS_EXTENSION_RESOURCE_URL +import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry.Companion.ADS_MESSAGE_COOKIES_KEY import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry.Companion.ADS_MESSAGE_DOCUMENT_URLS_KEY import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry.Companion.ADS_MESSAGE_ID import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry.Companion.ADS_MESSAGE_SESSION_URL_KEY @@ -55,7 +56,6 @@ class AdsTelemetryTest { @Test fun `track when ads are in the redirect path`() { - val metricEvent = slot() val sessionUrl = "https://www.google.com/search?q=aaa" ads.trackAdClickedMetric( @@ -63,8 +63,7 @@ class AdsTelemetryTest { listOf("https://www.google.com/aclk", "https://www.aaa.com") ) - verify { metrics.track(capture(metricEvent)) } - assertEquals(ads.providerList[0].name, metricEvent.captured.label) + verify { metrics.track(Event.SearchAdClicked("google.in-content.organic.none")) } } @Test @@ -86,12 +85,14 @@ class AdsTelemetryTest { val metricEvent = slot() val first = "https://www.google.com/aclk" val second = "https://www.google.com/aaa" - val array = JSONArray() - array.put(first) - array.put(second) + val urls = JSONArray() + urls.put(first) + urls.put(second) + val cookies = JSONArray() val message = JSONObject() - message.put(ADS_MESSAGE_DOCUMENT_URLS_KEY, array) + message.put(ADS_MESSAGE_DOCUMENT_URLS_KEY, urls) message.put(ADS_MESSAGE_SESSION_URL_KEY, "https://www.google.com/search?q=aaa") + message.put(ADS_MESSAGE_COOKIES_KEY, cookies) ads.processMessage(message) @@ -103,15 +104,37 @@ class AdsTelemetryTest { fun `process the document urls and don't find ads`() { val first = "https://www.google.com/aaaaaa" val second = "https://www.google.com/aaa" - val array = JSONArray() - array.put(first) - array.put(second) + val urls = JSONArray() + urls.put(first) + urls.put(second) + val cookies = JSONArray() val message = JSONObject() - message.put(ADS_MESSAGE_DOCUMENT_URLS_KEY, array) + message.put(ADS_MESSAGE_DOCUMENT_URLS_KEY, urls) message.put(ADS_MESSAGE_SESSION_URL_KEY, "https://www.google.com/search?q=aaa") + message.put(ADS_MESSAGE_COOKIES_KEY, cookies) ads.processMessage(message) verify(exactly = 0) { metrics.track(any()) } } + + @Test + fun `track bing sap-follow-on metric by cookies`() { + val url = "https://www.bing.com/search?q=aaa&pc=MOZMBA&form=QBRERANDOM" + + ads.cachedCookies = createCookieList() + ads.trackAdClickedMetric(url, listOf("https://www.bing.com/aclik", "https://www.aaa.com")) + + verify { metrics.track(Event.SearchAdClicked("bing.in-content.sap-follow-on.mozmba")) } + } + + private fun createCookieList(): List { + val first = JSONObject() + first.put("name", "SRCHS") + first.put("value", "PC=MOZMBA") + val second = JSONObject() + second.put("name", "RANDOM") + second.put("value", "RANDOM") + return listOf(first, second) + } } From 7cdf7a54df15d96b6f68b73be8140abb2223109d Mon Sep 17 00:00:00 2001 From: mcarare Date: Wed, 24 Feb 2021 13:00:25 +0200 Subject: [PATCH 091/149] For #18076: Renew telemetry expiring in April. --- app/metrics.yaml | 198 +++++++++++++++++++++++++++++++---------------- docs/metrics.md | 132 +++++++++++++++---------------- 2 files changed, 198 insertions(+), 132 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 1b4c35809..f342cc67c 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -117,12 +117,13 @@ events: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - telemetry-client-dev@mozilla.com - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" search_bar_tapped: type: event description: | @@ -137,11 +138,12 @@ events: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" entered_url: type: event description: | @@ -156,11 +158,12 @@ events: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" performed_search: type: event description: | @@ -181,11 +184,12 @@ events: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 - https://github.com/mozilla-mobile/fenix/pull/1677 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" browser_menu_action: type: event description: | @@ -207,11 +211,12 @@ events: - https://github.com/mozilla-mobile/fenix/pull/5098#issuecomment-529658996 - https://github.com/mozilla-mobile/fenix/pull/6310 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" total_uri_count: type: counter description: | @@ -304,11 +309,12 @@ events: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/5090 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" opened_link: type: event description: | @@ -324,11 +330,12 @@ events: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/5975 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" tab_counter_menu_action: type: event description: @@ -345,11 +352,12 @@ events: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11533 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" synced_tab_opened: type: event description: > @@ -577,11 +585,12 @@ crash_reporter: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" closed: type: event description: | @@ -596,11 +605,12 @@ crash_reporter: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" context_menu: item_tapped: @@ -623,11 +633,12 @@ context_menu: - https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 - https://github.com/mozilla-mobile/fenix/issues/16076#issuecomment-726216734 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" login_dialog: displayed: @@ -1567,11 +1578,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" open_in_new_tabs: type: event description: | @@ -1581,11 +1593,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" open_in_private_tab: type: event description: | @@ -1595,11 +1608,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" open_in_private_tabs: type: event description: | @@ -1609,11 +1623,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" edited: type: event description: | @@ -1623,11 +1638,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" moved: type: event description: | @@ -1637,11 +1653,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" removed: type: event description: | @@ -1651,11 +1668,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" multi_removed: type: event description: | @@ -1665,11 +1683,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" shared: type: event description: | @@ -1679,11 +1698,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" copied: type: event description: | @@ -1693,11 +1713,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" folder_add: type: event description: | @@ -1707,11 +1728,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1708 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" folder_remove: type: event description: | @@ -1721,11 +1743,12 @@ bookmarks_management: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3724 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" custom_tab: closed: @@ -1737,11 +1760,12 @@ custom_tab: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1697 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" action_button: type: event description: | @@ -1751,11 +1775,12 @@ custom_tab: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1697 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" menu: type: event description: | @@ -1765,11 +1790,12 @@ custom_tab: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1697 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" activation: identifier: @@ -1786,11 +1812,12 @@ activation: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - highly_sensitive notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" activation_id: type: uuid lifetime: user @@ -1804,11 +1831,12 @@ activation: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - highly_sensitive notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" no_lint: - USER_LIFETIME_EXPIRATION @@ -1825,11 +1853,12 @@ error_page: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/2491#issuecomment-492414486 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" sync_auth: opened: @@ -2501,12 +2530,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" tab_restored: type: event description: | @@ -2516,12 +2546,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" all_tabs_restored: type: event description: | @@ -2531,12 +2562,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" tab_removed: type: event description: | @@ -2546,12 +2578,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" shared: type: event description: | @@ -2561,12 +2594,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" removed: type: event description: | @@ -2576,12 +2610,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" saved: type: event description: | @@ -2596,12 +2631,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" tabs_added: type: event description: | @@ -2616,12 +2652,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" tab_select_opened: type: event description: | @@ -2632,12 +2669,13 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/3935 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - technical - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" add_tab_button: type: event description: | @@ -2647,11 +2685,12 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/4358 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" long_press: type: event description: | @@ -2661,11 +2700,12 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/4358 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" save_button: type: event description: | @@ -2677,11 +2717,12 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/4358 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" extra_keys: from_screen: description: | @@ -2696,11 +2737,12 @@ collections: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/4539 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" search_widget: new_tab_button: @@ -2775,11 +2817,12 @@ contextual_hint.tracking_protection: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11923 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" dismiss: type: event description: | @@ -2791,11 +2834,12 @@ contextual_hint.tracking_protection: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11923 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" outside_tap: type: event description: | @@ -2806,11 +2850,12 @@ contextual_hint.tracking_protection: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11923 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" inside_tap: type: event description: | @@ -2821,11 +2866,12 @@ contextual_hint.tracking_protection: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11923 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" tracking_protection: exception_added: @@ -3273,11 +3319,12 @@ download_notification: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/6554 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" pause: type: event description: | @@ -3287,11 +3334,12 @@ download_notification: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/6554 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" cancel: type: event description: | @@ -3301,11 +3349,12 @@ download_notification: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/6554 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" try_again: type: event description: | @@ -3316,11 +3365,12 @@ download_notification: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/6554 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" open: type: event description: | @@ -3330,11 +3380,12 @@ download_notification: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/6554 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" in_app_open: type: event description: | @@ -3344,11 +3395,12 @@ download_notification: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/6554 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" in_app_try_again: type: event description: | @@ -3359,11 +3411,12 @@ download_notification: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/6554 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" downloads_misc: download_added: @@ -3374,9 +3427,10 @@ downloads_misc: - https://github.com/mozilla-mobile/fenix/issues/11578 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/16730 + - https://github.com/mozilla-mobile/fenix/pull/18143 notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" downloads_management: downloads_screen_opened: @@ -3388,9 +3442,10 @@ downloads_management: - https://github.com/mozilla-mobile/fenix/issues/15367 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/16728 + - https://github.com/mozilla-mobile/fenix/pull/18143 notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" item_opened: type: event @@ -3401,9 +3456,10 @@ downloads_management: - https://github.com/mozilla-mobile/fenix/issues/15367 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/16728 + - https://github.com/mozilla-mobile/fenix/pull/18143 notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" item_deleted: type: event @@ -3413,9 +3469,10 @@ downloads_management: - https://github.com/mozilla-mobile/fenix/issues/15367 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/16728 + - https://github.com/mozilla-mobile/fenix/pull/18143 notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" user_specified_search_engines: custom_engine_added: @@ -3628,11 +3685,12 @@ about_page: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/8047 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" privacy_notice_tapped: type: event description: | @@ -3642,11 +3700,12 @@ about_page: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/8047 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" app_theme: dark_theme_selected: @@ -3663,11 +3722,12 @@ app_theme: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/7968 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" pocket: pocket_top_site_clicked: @@ -3853,11 +3913,12 @@ addons: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/8318 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" open_addon_in_toolbar_menu: type: event description: | @@ -3871,11 +3932,12 @@ addons: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/8318 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" has_installed_addons: type: boolean description: | @@ -3887,11 +3949,12 @@ addons: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/8318 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" has_enabled_addons: type: boolean description: | @@ -3903,11 +3966,12 @@ addons: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/8318 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" installed_addons: type: string_list description: | @@ -3919,11 +3983,12 @@ addons: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11080 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" enabled_addons: type: string_list description: | @@ -3935,11 +4000,12 @@ addons: data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11080 - https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877 + - https://github.com/mozilla-mobile/fenix/pull/18143 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-04-01" + expires: "2021-07-01" startup.timeline: framework_primary: diff --git a/docs/metrics.md b/docs/metrics.md index 053678beb..6a2ea7fcc 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -37,8 +37,8 @@ In addition to those built-in metrics, the following metrics are added to the pi | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| activation.activation_id |[uuid](https://mozilla.github.io/glean/book/user/metrics/uuid.html) |An alternate identifier, not correlated with the client_id, generated once and only sent with the activation ping. |[mozilla-mobile/fenix#1707](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |4 | -| activation.identifier |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A hashed and salted version of the Google Advertising ID from the device. This will never be sent in a ping that also contains the client_id. |[mozilla-mobile/fenix#1707](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |4 | +| activation.activation_id |[uuid](https://mozilla.github.io/glean/book/user/metrics/uuid.html) |An alternate identifier, not correlated with the client_id, generated once and only sent with the activation ping. |[mozilla-mobile/fenix#1707](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |4 | +| activation.identifier |[string](https://mozilla.github.io/glean/book/user/metrics/string.html) |A hashed and salted version of the Google Advertising ID from the device. This will never be sent in a ping that also contains the client_id. |[mozilla-mobile/fenix#1707](https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |4 | ## events @@ -52,11 +52,11 @@ In addition to those built-in metrics, the following metrics are added to the pi | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| about_page.privacy_notice_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Privacy notice" item from About page |[mozilla-mobile/fenix#8047](https://github.com/mozilla-mobile/fenix/pull/8047), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| about_page.support_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Support" item from About page |[mozilla-mobile/fenix#8047](https://github.com/mozilla-mobile/fenix/pull/8047), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.open_addon_in_toolbar_menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user interacted with an installed add-on in the toolbar menu |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • addon_id: The id of the add-on that was interacted with in the toolbar menu
|2021-04-01 |2 | -| addons.open_addons_in_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed "Add-ons" from the Settings |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[mozilla-mobile/fenix#7968](https://github.com/mozilla-mobile/fenix/pull/7968), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING'
|2021-04-01 |2 | +| about_page.privacy_notice_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Privacy notice" item from About page |[mozilla-mobile/fenix#8047](https://github.com/mozilla-mobile/fenix/pull/8047), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| about_page.support_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Support" item from About page |[mozilla-mobile/fenix#8047](https://github.com/mozilla-mobile/fenix/pull/8047), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| addons.open_addon_in_toolbar_menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user interacted with an installed add-on in the toolbar menu |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • addon_id: The id of the add-on that was interacted with in the toolbar menu
|2021-07-01 |2 | +| addons.open_addons_in_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed "Add-ons" from the Settings |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[mozilla-mobile/fenix#7968](https://github.com/mozilla-mobile/fenix/pull/7968), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING'
|2021-07-01 |2 | | autoplay.setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their autoplay setting to either block_cellular, block_audio, or block_all. |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)|
  • autoplay_setting: The new setting for autoplay: block_cellular, block_audio, or block_all.
|2021-08-01 |2 | | autoplay.visited_setting |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user visited the autoplay settings screen |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)||2021-08-01 |2 | | awesomebar.bookmark_suggestion_clicked |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The bookmark suggestion in awesomebar was clicked. |[mozilla-mobile/fenix#18090](https://github.com/mozilla-mobile/fenix/pull/18090)||2021-08-01 |2 | @@ -68,72 +68,72 @@ In addition to those built-in metrics, the following metrics are added to the pi | banner_open_in_app.dismissed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'dismiss' on Open in App banner. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | | banner_open_in_app.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Open in App banner was shown. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | | banner_open_in_app.go_to_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |User tapped 'go to settings' on Open in App banner. |[mozilla-mobile/fenix#17049](https://github.com/mozilla-mobile/fenix/pull/17049)||2021-08-01 |2 | -| bookmarks_management.copied |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user copied a bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.edited |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user edited the title and/or URL of an existing bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.folder_add |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a new bookmark folder. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.folder_remove |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark folder. |[mozilla-mobile/fenix#3724](https://github.com/mozilla-mobile/fenix/pull/3724), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.moved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user moved an existing bookmark or folder to another folder. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.multi_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed multiple bookmarks at once. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.copied |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user copied a bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.edited |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user edited the title and/or URL of an existing bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.folder_add |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user added a new bookmark folder. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.folder_remove |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark folder. |[mozilla-mobile/fenix#3724](https://github.com/mozilla-mobile/fenix/pull/3724), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.moved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user moved an existing bookmark or folder to another folder. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.multi_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed multiple bookmarks at once. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | | bookmarks_management.open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark. |[mozilla-mobile/fenix#18174](https://github.com/mozilla-mobile/fenix/pull/18174)||2022-08-01 |2 | -| bookmarks_management.open_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.open_in_new_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new tabs. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.open_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new private tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.open_in_private_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new private tabs. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark item. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| bookmarks_management.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user shared a bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.add_tab_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the "add tab" button in the three dot menu of collections |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.all_tabs_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped "open tabs" from collection menu |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.long_press |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user long pressed on a tab, triggering the collection creation screen |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped delete collection from collection menu |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.rename_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "rename collection" button in the three dot menu |[mozilla-mobile/fenix#4539](https://github.com/mozilla-mobile/fenix/pull/4539), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| collections.renamed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user renamed a collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.save_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "save to collection" button on either the home or browser screen, triggering the collection creation screen to open (tab_select_opened) |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • from_screen: A string representing the screen from which the user pressed the save button. Currently one of: `browserMenu`, `homeMenu` or `home`
|2021-04-01 |2 | -| collections.saved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to a new collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-04-01 |1, 2 | -| collections.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped share collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tab_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped remove tab from collection tab list |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tab_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user restored a tab from collection tab list |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tab_select_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the select tabs screen (the first step of the collection creation flow) |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |1, 2 | -| collections.tabs_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to an existing collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-04-01 |1, 2 | -| context_menu.item_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped an item in the browsers context menu |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix/issues/16076](https://github.com/mozilla-mobile/fenix/issues/16076#issuecomment-726216734)|
  • named: The name of the item that was tapped. Available items are: ``` open_in_new_tab, open_in_private_tab, open_image_in_new_tab, save_image, share_link, copy_link, copy_image_location, share_image ```
|2021-04-01 |2 | -| contextual_hint.tracking_protection.dismiss |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was dismissed by pressing the close button |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| contextual_hint.tracking_protection.display |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was displayed. |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| contextual_hint.tracking_protection.inside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped inside of the etp contextual hint (which brings up the etp panel for this site). |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| contextual_hint.tracking_protection.outside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped outside of the etp contextual hint (which has no effect). |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| bookmarks_management.open_in_new_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.open_in_new_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new tabs. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.open_in_private_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a bookmark in a new private tab. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.open_in_private_tabs |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened multiple bookmarks at once in new private tabs. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user removed a bookmark item. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| bookmarks_management.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user shared a bookmark. |[mozilla-mobile/fenix#1708](https://github.com/mozilla-mobile/fenix/pull/1708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| collections.add_tab_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the "add tab" button in the three dot menu of collections |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| collections.all_tabs_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped "open tabs" from collection menu |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |1, 2 | +| collections.long_press |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user long pressed on a tab, triggering the collection creation screen |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| collections.removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped delete collection from collection menu |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |1, 2 | +| collections.rename_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "rename collection" button in the three dot menu |[mozilla-mobile/fenix#4539](https://github.com/mozilla-mobile/fenix/pull/4539), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| collections.renamed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user renamed a collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |1, 2 | +| collections.save_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the "save to collection" button on either the home or browser screen, triggering the collection creation screen to open (tab_select_opened) |[mozilla-mobile/fenix#4358](https://github.com/mozilla-mobile/fenix/pull/4358), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • from_screen: A string representing the screen from which the user pressed the save button. Currently one of: `browserMenu`, `homeMenu` or `home`
|2021-07-01 |2 | +| collections.saved |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to a new collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-07-01 |1, 2 | +| collections.shared |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped share collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |1, 2 | +| collections.tab_removed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped remove tab from collection tab list |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |1, 2 | +| collections.tab_restored |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user restored a tab from collection tab list |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |1, 2 | +| collections.tab_select_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the select tabs screen (the first step of the collection creation flow) |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |1, 2 | +| collections.tabs_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saved a list of tabs to an existing collection |[mozilla-mobile/fenix#3935](https://github.com/mozilla-mobile/fenix/pull/3935), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • tabs_open: The number of tabs open in the current session
  • tabs_selected: The number of tabs added to the collection
|2021-07-01 |1, 2 | +| context_menu.item_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped an item in the browsers context menu |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix/issues/16076](https://github.com/mozilla-mobile/fenix/issues/16076#issuecomment-726216734), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • named: The name of the item that was tapped. Available items are: ``` open_in_new_tab, open_in_private_tab, open_image_in_new_tab, save_image, share_link, copy_link, copy_image_location, share_image ```
|2021-07-01 |2 | +| contextual_hint.tracking_protection.dismiss |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was dismissed by pressing the close button |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| contextual_hint.tracking_protection.display |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The enhanced tracking protection contextual hint was displayed. |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| contextual_hint.tracking_protection.inside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped inside of the etp contextual hint (which brings up the etp panel for this site). |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| contextual_hint.tracking_protection.outside_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The user tapped outside of the etp contextual hint (which has no effect). |[mozilla-mobile/fenix#11923](https://github.com/mozilla-mobile/fenix/pull/11923), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | | contextual_menu.copy_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'copy' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | | contextual_menu.search_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'search' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | | contextual_menu.select_all_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'select all' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | | contextual_menu.share_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The context menu's 'share' option was used. |[mozilla-mobile/fenix#16968](https://github.com/mozilla-mobile/fenix/pull/16968)||2021-06-01 |2 | -| crash_reporter.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was closed |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • crash_submitted: A boolean that tells us whether or not the user submitted a crash report
|2021-04-01 |2 | -| crash_reporter.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was displayed |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| custom_tab.action_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the action button provided by the launching app |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| custom_tab.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the custom tab |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| custom_tab.menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the custom tabs menu |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.cancel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user cancelled a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.in_app_open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the in-app notification link |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.in_app_try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the in-app notification link |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user paused a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.resume |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user resumed a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| download_notification.try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| downloads_management.downloads_screen_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for the number of times users access the "Downloads" folder inside the app. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | -| downloads_management.item_deleted |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user deletes one / more downloads at a time. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | -| downloads_management.item_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user tap to opens a download from inside the "Downloads" folder. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728)||2021-04-01 | | -| downloads_misc.download_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how many times something is downloaded in the app. |[mozilla-mobile/fenix#16730](https://github.com/mozilla-mobile/fenix/pull/16730)||2021-04-01 | | -| error_page.visited_error |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user encountered an error page |[mozilla-mobile/fenix#2491](https://github.com/mozilla-mobile/fenix/pull/2491#issuecomment-492414486), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • error_type: The error type of the error page encountered
|2021-04-01 |2 | -| events.app_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the app (from cold start, to the homescreen or browser) |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The method used to open Fenix. Possible values are: `app_icon`, `custom_tab` or `link`
|2021-04-01 |2 | +| crash_reporter.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was closed |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • crash_submitted: A boolean that tells us whether or not the user submitted a crash report
|2021-07-01 |2 | +| crash_reporter.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The crash reporter was displayed |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| custom_tab.action_button |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the action button provided by the launching app |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| custom_tab.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the custom tab |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| custom_tab.menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the custom tabs menu |[mozilla-mobile/fenix#1697](https://github.com/mozilla-mobile/fenix/pull/1697), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| download_notification.cancel |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user cancelled a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| download_notification.in_app_open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the in-app notification link |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| download_notification.in_app_try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the in-app notification link |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| download_notification.open |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a downloaded file in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| download_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user paused a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| download_notification.resume |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user resumed a download in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| download_notification.try_again |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on try again when a download fails in the download notification |[mozilla-mobile/fenix#6554](https://github.com/mozilla-mobile/fenix/pull/6554), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| downloads_management.downloads_screen_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for the number of times users access the "Downloads" folder inside the app. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 | | +| downloads_management.item_deleted |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user deletes one / more downloads at a time. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 | | +| downloads_management.item_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how often a user tap to opens a download from inside the "Downloads" folder. |[mozilla-mobile/fenix#16728](https://github.com/mozilla-mobile/fenix/pull/16728), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 | | +| downloads_misc.download_added |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A counter for how many times something is downloaded in the app. |[mozilla-mobile/fenix#16730](https://github.com/mozilla-mobile/fenix/pull/16730), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 | | +| error_page.visited_error |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user encountered an error page |[mozilla-mobile/fenix#2491](https://github.com/mozilla-mobile/fenix/pull/2491#issuecomment-492414486), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • error_type: The error type of the error page encountered
|2021-07-01 |2 | +| events.app_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the app (from cold start, to the homescreen or browser) |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • source: The method used to open Fenix. Possible values are: `app_icon`, `custom_tab` or `link`
|2021-07-01 |2 | | events.app_opened_all_startup |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the app to the HomeActivity. The HomeActivity encompasses the home screen, browser screen, settings screen, collections and other screens in the nav_graph. This differs from the app_opened probe because it measures all startups, not just cold startup. Note: There is a short gap between the time application goes into background and the time android reports the application going into the background. Note: This metric does not record souce when app opened from task switcher: open application -> press home button -> open recent tasks -> choose fenix. In this case will report [source = unknown, type = hot, has_saved_instance_state = false]. |[mozilla-mobile/fenix#12114](https://github.com/mozilla-mobile/fenix/pull/12114#pullrequestreview-445245341), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#13494](https://github.com/mozilla-mobile/fenix/pull/13494#pullrequestreview-474050499), [mozilla-mobile/fenix#15605](https://github.com/mozilla-mobile/fenix/pull/15605#issuecomment-702365594)|
  • first_frame_pre_draw_nanos: the number of nanoseconds the application took to launch. This is the time difference between application launch(user pressing app_icon, launching a link) and until the first view is about to be drawn on the screen. If the time is not captured, this extra key will not be reported.
  • has_saved_instance_state: boolean value whether or not startup type has a savedInstance. using savedInstance, HomeActivity's previous state can be restored. This is an optional key since it is not applicable to all the cases. for example, when we are doing a hot start up, we cant have a savedInstanceState therefore we report only [APP_ICON, HOT] instead of [APP_ICON, HOT, false].
  • source: The method used to open Fenix. Possible values are `app_icon`, `custom_tab`, `link` or `unknown`. unknown is for startup sources where we can't pinpoint the cause. One UNKNOWN case is the app switcher where we don't know what variables to check to ensure this startup wasn't caused by something else.
  • type: the startup type for opening fenix. the application and HomeActivity either needs to be created or started again. possible values are `cold`, `warm`, `hot` or `error`. Error is for impossible cases. Please file a bug if you see the error case. app created AND HomeActivity created = cold app started AND HomeActivity created = warm app started AND HomeActivity started = hot app created AND HomeActivity started = error Some applications such as gmail launches the default browser in the background. So when we eventually click a link, browser is already started in the background. This means that custom_tab will mostly report `warm` startup type.
|2021-06-01 |2 | | events.app_received_intent |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The system received an Intent for the HomeActivity. An intent is received an external entity wants to the app to display content. Intents can be received when the app is closed – at which point the app will be opened – or when the app is already opened – at which point the already open app will make changes such as loading a url. This can be used loosely as a heuristic for when the user requested to open the app. The HomeActivity encompasses the home screen and browser screen but may include other screens. This differs from the app_opened probe because it measures all startups, not just cold startup. |[mozilla-mobile/fenix#11940/](https://github.com/mozilla-mobile/fenix/pull/11940/), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The method used to open Fenix. Possible values are `app_icon`, `custom_tab`, `link` or `unknown`
|2021-06-01 | | -| events.browser_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A browser menu item was tapped |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#5098](https://github.com/mozilla-mobile/fenix/pull/5098#issuecomment-529658996), [mozilla-mobile/fenix#6310](https://github.com/mozilla-mobile/fenix/pull/6310), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • item: A string containing the name of the item the user tapped. These items include: Settings, Help, Desktop Site toggle on/off, Find in Page, New Tab, Private Tab, Share, Report Site Issue, Back/Forward button, Reload Button, Quit, Reader Mode On, Reader Mode Off, Open In app, Add To Top Sites, Add-ons Manager, Bookmarks, History
|2021-04-01 |2 | +| events.browser_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A browser menu item was tapped |[mozilla-mobile/fenix#1214](https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708), [mozilla-mobile/fenix#5098](https://github.com/mozilla-mobile/fenix/pull/5098#issuecomment-529658996), [mozilla-mobile/fenix#6310](https://github.com/mozilla-mobile/fenix/pull/6310), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • item: A string containing the name of the item the user tapped. These items include: Settings, Help, Desktop Site toggle on/off, Find in Page, New Tab, Private Tab, Share, Report Site Issue, Back/Forward button, Reload Button, Quit, Reader Mode On, Reader Mode Off, Open In app, Add To Top Sites, Add-ons Manager, Bookmarks, History
|2021-07-01 |2 | | events.copy_url_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that a user has selected copy option when long pressing on url bar. |[mozilla-mobile/fenix#16915](https://github.com/mozilla-mobile/fenix/pull/16915)||2021-05-10 |2 | -| events.entered_url |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user entered a url |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • autocomplete: A boolean that tells us whether the URL was autofilled by an Autocomplete suggestion
|2021-04-01 |2 | -| events.opened_link |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a link with Fenix |[mozilla-mobile/fenix#5975](https://github.com/mozilla-mobile/fenix/pull/5975), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • mode: The mode the link was opened in. Either 'PRIVATE' or 'NORMAL'. N.B.: this probe may be incorrectly implemented: see https://github.com/mozilla-mobile/fenix/issues/14133
|2021-04-01 |2 | -| events.performed_search |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user performed a search |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#1677](https://github.com/mozilla-mobile/fenix/pull/1677), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: A string that tells us how the user performed the search. Possible values are: * default.action * default.suggestion * shortcut.action * shortcut.suggestion
|2021-04-01 |2 | +| events.entered_url |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user entered a url |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • autocomplete: A boolean that tells us whether the URL was autofilled by an Autocomplete suggestion
|2021-07-01 |2 | +| events.opened_link |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened a link with Fenix |[mozilla-mobile/fenix#5975](https://github.com/mozilla-mobile/fenix/pull/5975), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • mode: The mode the link was opened in. Either 'PRIVATE' or 'NORMAL'. N.B.: this probe may be incorrectly implemented: see https://github.com/mozilla-mobile/fenix/issues/14133
|2021-07-01 |2 | +| events.performed_search |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user performed a search |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#1677](https://github.com/mozilla-mobile/fenix/pull/1677), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • source: A string that tells us how the user performed the search. Possible values are: * default.action * default.suggestion * shortcut.action * shortcut.suggestion
|2021-07-01 |2 | | events.preference_toggled |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user toggled a boolean preference in settings |[mozilla-mobile/fenix#1896](https://github.com/mozilla-mobile/fenix/pull/1896), [mozilla-mobile/fenix#5704](https://github.com/mozilla-mobile/fenix/pull/5704), [mozilla-mobile/fenix#5886](https://github.com/mozilla-mobile/fenix/pull/5886), [mozilla-mobile/fenix#5975](https://github.com/mozilla-mobile/fenix/pull/5975), [mozilla-mobile/fenix#6352](https://github.com/mozilla-mobile/fenix/pull/6352), [mozilla-mobile/fenix#6601](https://github.com/mozilla-mobile/fenix/pull/6601), [mozilla-mobile/fenix#6746](https://github.com/mozilla-mobile/fenix/pull/6746), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • enabled: Whether or not the preference is *now* enabled
  • preference_key: The preference key for the boolean (true/false) preference the user toggled. We currently track: show_search_suggestions, remote_debugging, telemetry, tracking_protection, search_bookmarks, search_browsing_history, show_clipboard_suggestions, show_search_shortcuts, open_links_in_a_private_tab (bug in implementation https://github.com/mozilla-mobile/fenix/issues/7384), pref_key_sync_logins, pref_key_sync_bookmarks, pref_key_sync_history, pref_key_show_voice_search, and pref_key_show_search_suggestions_in_private.
|2021-06-01 |1, 2 | | events.recently_closed_tabs_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that the user has accessed recently closed tabs list. |[mozilla-mobile/fenix#16739](https://github.com/mozilla-mobile/fenix/pull/16739)||2021-05-10 |2 | -| events.search_bar_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the search bar |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • source: The view the user was on when they initiated the search (For example: `Home` or `Browser`)
|2021-04-01 |2 | +| events.search_bar_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the search bar |[mozilla-mobile/fenix#1067](https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • source: The view the user was on when they initiated the search (For example: `Home` or `Browser`)
|2021-07-01 |2 | | events.synced_tab_opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An event that indicates that a synced tab was opened. |[mozilla-mobile/fenix#16727](https://github.com/mozilla-mobile/fenix/pull/16727)||2021-05-10 |2 | -| events.tab_counter_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A tab counter menu item was tapped |[mozilla-mobile/fenix#11533](https://github.com/mozilla-mobile/fenix/pull/11533), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|
  • item: A string containing the name of the item the user tapped. These items are: New tab, New private tab, Close tab
|2021-04-01 |2 | -| events.whats_new_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the "what's new" page button |[mozilla-mobile/fenix#5090](https://github.com/mozilla-mobile/fenix/pull/5090), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| events.tab_counter_menu_action |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A tab counter menu item was tapped |[mozilla-mobile/fenix#11533](https://github.com/mozilla-mobile/fenix/pull/11533), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • item: A string containing the name of the item the user tapped. These items are: New tab, New private tab, Close tab
|2021-07-01 |2 | +| events.whats_new_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the "what's new" page button |[mozilla-mobile/fenix#5090](https://github.com/mozilla-mobile/fenix/pull/5090), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | | find_in_page.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed the find in page UI |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | find_in_page.opened |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user opened the find in page UI |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | find_in_page.searched_page |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user searched the page |[mozilla-mobile/fenix#1344](https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | @@ -293,10 +293,10 @@ In addition to those built-in metrics, the following metrics are added to the pi | Name | Type | Description | Data reviews | Extras | Expiration | [Data Sensitivity](https://wiki.mozilla.org/Firefox/Data_Collection) | | --- | --- | --- | --- | --- | --- | --- | -| addons.enabled_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all enabled add-ons on the device. |[mozilla-mobile/fenix#11080](https://github.com/mozilla-mobile/fenix/pull/11080), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.has_enabled_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has enabled add-ons on the device. |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.has_installed_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has installed add-ons on the device. |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | -| addons.installed_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all installed add-ons on the device. |[mozilla-mobile/fenix#11080](https://github.com/mozilla-mobile/fenix/pull/11080), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 | +| addons.enabled_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all enabled add-ons on the device. |[mozilla-mobile/fenix#11080](https://github.com/mozilla-mobile/fenix/pull/11080), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| addons.has_enabled_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has enabled add-ons on the device. |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| addons.has_installed_addons |[boolean](https://mozilla.github.io/glean/book/user/metrics/boolean.html) |Whether or not the user has installed add-ons on the device. |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| addons.installed_addons |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |A list of all installed add-ons on the device. |[mozilla-mobile/fenix#11080](https://github.com/mozilla-mobile/fenix/pull/11080), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | | browser.search.ad_clicks |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records clicks of adverts on SERP pages. The key format is ‘’. |[mozilla-mobile/fenix#10112](https://github.com/mozilla-mobile/fenix/pull/10112), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | browser.search.in_content |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records the type of interaction a user has on SERP pages. |[mozilla-mobile/fenix#10167](https://github.com/mozilla-mobile/fenix/pull/10167), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | browser.search.with_ads |[labeled_counter](https://mozilla.github.io/glean/book/user/metrics/labeled_counters.html) |Records counts of SERP pages with adverts displayed. The key format is ‘’. |[mozilla-mobile/fenix#10112](https://github.com/mozilla-mobile/fenix/pull/10112), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From 6a4a302f1ae9bdf777bfa274402b5c6ffc123363 Mon Sep 17 00:00:00 2001 From: mcarare Date: Fri, 19 Feb 2021 09:04:28 +0200 Subject: [PATCH 092/149] For #17768: Renew telemetry expiring in March. --- app/metrics.yaml | 18 ++++++++++++------ docs/metrics.md | 12 ++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index f342cc67c..f049e6fa8 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4422,12 +4422,13 @@ progressive_web_app: - https://github.com/mozilla-mobile/fenix/issues/10261 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11859 + - https://github.com/mozilla-mobile/fenix/pull/18071 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2021-03-01" + expires: "2021-09-01" install_tap: type: event description: | @@ -4436,12 +4437,13 @@ progressive_web_app: - https://github.com/mozilla-mobile/fenix/issues/10261 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11859 + - https://github.com/mozilla-mobile/fenix/pull/18071 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2021-03-01" + expires: "2021-09-01" foreground: type: event description: | @@ -4454,12 +4456,13 @@ progressive_web_app: - https://github.com/mozilla-mobile/fenix/issues/10261 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11859 + - https://github.com/mozilla-mobile/fenix/pull/18071 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2021-03-01" + expires: "2021-09-01" background: type: event description: | @@ -4472,12 +4475,13 @@ progressive_web_app: - https://github.com/mozilla-mobile/fenix/issues/10261 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/11859 + - https://github.com/mozilla-mobile/fenix/pull/18071 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2021-03-01" + expires: "2021-09-01" master_password: displayed: @@ -4488,11 +4492,12 @@ master_password: - https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534 + - https://github.com/mozilla-mobile/fenix/pull/18071 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-03-01" + expires: "2021-09-01" migration: type: event description: | @@ -4501,11 +4506,12 @@ master_password: - https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534 data_reviews: - https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534 + - https://github.com/mozilla-mobile/fenix/pull/18071 data_sensitivity: - interaction notification_emails: - fenix-core@mozilla.com - expires: "2021-03-01" + expires: "2021-09-01" tabs: setting_opened: diff --git a/docs/metrics.md b/docs/metrics.md index 6a2ea7fcc..7d5bd9ede 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -158,8 +158,8 @@ In addition to those built-in metrics, the following metrics are added to the pi | logins.save_edited_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saves changes made to an individual login |[mozilla-mobile/fenix/issues/11208](https://github.com/mozilla-mobile/fenix/issues/11208), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | logins.save_logins_setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their setting for asking to save logins |[mozilla-mobile/fenix#7767](https://github.com/mozilla-mobile/fenix/pull/7767), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)|
  • setting: The new setting for saving logins the user selected. Either `ask_to_save` or `never_save`
|2021-08-01 |2 | | logins.view_password_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user viewed a password in an individual saved login |[mozilla-mobile/fenix#6352](https://github.com/mozilla-mobile/fenix/pull/6352), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| master_password.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The master password migration dialog was displayed |[mozilla-mobile/fenix#14468](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 | -| master_password.migration |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Logins were successfully migrated using a master password. |[mozilla-mobile/fenix#14468](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 | +| master_password.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The master password migration dialog was displayed |[mozilla-mobile/fenix#14468](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534), [mozilla-mobile/fenix#18071](https://github.com/mozilla-mobile/fenix/pull/18071)||2021-09-01 |2 | +| master_password.migration |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Logins were successfully migrated using a master password. |[mozilla-mobile/fenix#14468](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534), [mozilla-mobile/fenix#18071](https://github.com/mozilla-mobile/fenix/pull/18071)||2021-09-01 |2 | | media_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pause icon on the media notification |[mozilla-mobile/fenix#5520](https://github.com/mozilla-mobile/fenix/pull/5520), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | media_notification.play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the play icon on the media notification |[mozilla-mobile/fenix#5520](https://github.com/mozilla-mobile/fenix/pull/5520), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | media_state.fullscreen |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Video set to fullscreen. |[mozilla-mobile/fenix#16833](https://github.com/mozilla-mobile/fenix/pull/16833)||2021-08-01 |2 | @@ -185,10 +185,10 @@ In addition to those built-in metrics, the following metrics are added to the pi | private_browsing_shortcut.pinned_shortcut_priv |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pinned private shortcut in Android home screen, opening up a new private search. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | private_browsing_shortcut.static_shortcut_priv |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the long-press shortcut "Open new private tab", opening up a new private search. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | private_browsing_shortcut.static_shortcut_tab |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the long-press shortcut "Open new tab", opening up a new search. |[mozilla-mobile/fenix#5194](https://github.com/mozilla-mobile/fenix/pull/5194), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | -| progressive_web_app.background |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user puts the PWA into the background. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)|
  • time_ms: The current time in ms when the PWA was backgrounded.
|2021-03-01 |2 | -| progressive_web_app.foreground |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user brings the PWA into the foreground. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)|
  • time_ms: The current time in ms when the PWA was brought to the foreground.
|2021-03-01 |2 | -| progressive_web_app.homescreen_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user taps on PWA homescreen icon |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)||2021-03-01 |2 | -| progressive_web_app.install_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user installs a PWA. Could be a shortcut or added to homescreen. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859)||2021-03-01 |2 | +| progressive_web_app.background |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user puts the PWA into the background. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859), [mozilla-mobile/fenix#18071](https://github.com/mozilla-mobile/fenix/pull/18071)|
  • time_ms: The current time in ms when the PWA was backgrounded.
|2021-09-01 |2 | +| progressive_web_app.foreground |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user brings the PWA into the foreground. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859), [mozilla-mobile/fenix#18071](https://github.com/mozilla-mobile/fenix/pull/18071)|
  • time_ms: The current time in ms when the PWA was brought to the foreground.
|2021-09-01 |2 | +| progressive_web_app.homescreen_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user taps on PWA homescreen icon |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859), [mozilla-mobile/fenix#18071](https://github.com/mozilla-mobile/fenix/pull/18071)||2021-09-01 |2 | +| progressive_web_app.install_tap |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user installs a PWA. Could be a shortcut or added to homescreen. |[mozilla-mobile/fenix#11859](https://github.com/mozilla-mobile/fenix/pull/11859), [mozilla-mobile/fenix#18071](https://github.com/mozilla-mobile/fenix/pull/18071)||2021-09-01 |2 | | reader_mode.appearance |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped the appearance button |[mozilla-mobile/fenix#3941](https://github.com/mozilla-mobile/fenix/pull/3941), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | reader_mode.available |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Reader mode is available for the current page |[mozilla-mobile/fenix#3941](https://github.com/mozilla-mobile/fenix/pull/3941), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | reader_mode.closed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user closed reader mode |[mozilla-mobile/fenix#4328](https://github.com/mozilla-mobile/fenix/pull/4328), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From ec0176275b0294aed53c616b5cb4b82acca998af Mon Sep 17 00:00:00 2001 From: Mugurell Date: Thu, 4 Mar 2021 21:28:35 +0200 Subject: [PATCH 093/149] For #17869 - Start the Android Keystore experiment Only on API 23+ (minimum Android version needed for SecureAbove22Preferences) and only if enabled by a Nimbus experiment. The Nimbus experiment will have the key `fenix-android-keystore` and use the default branches - "control" and "treatment". --- .../org/mozilla/fenix/FenixApplication.kt | 3 ++ .../metrics/SecurePrefsTelemetry.kt | 35 +++++++++++++++++++ .../mozilla/fenix/experiments/Experiments.kt | 1 + 3 files changed, 39 insertions(+) create mode 100644 app/src/main/java/org/mozilla/fenix/components/metrics/SecurePrefsTelemetry.kt diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 454597e18..713bdf69e 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -48,6 +48,7 @@ import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.components.Components import org.mozilla.fenix.components.metrics.MetricServiceType +import org.mozilla.fenix.components.metrics.SecurePrefsTelemetry import org.mozilla.fenix.ext.settings import org.mozilla.fenix.perf.ProfilerMarkerFactProcessor import org.mozilla.fenix.perf.StartupTimeline @@ -218,6 +219,8 @@ open class FenixApplication : LocaleAwareApplication(), Provider { components.core.bookmarksStorage.warmUp() components.core.passwordsStorage.warmUp() } + + SecurePrefsTelemetry(this@FenixApplication, components.analytics.experiments).startTests() } // Account manager initialization needs to happen on the main thread. GlobalScope.launch(Dispatchers.Main) { diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/SecurePrefsTelemetry.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/SecurePrefsTelemetry.kt new file mode 100644 index 000000000..47a34497a --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/SecurePrefsTelemetry.kt @@ -0,0 +1,35 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.components.metrics + +import android.content.Context +import android.os.Build +import mozilla.components.lib.dataprotect.SecurePrefsReliabilityExperiment +import mozilla.components.service.nimbus.NimbusApi +import org.mozilla.fenix.experiments.ExperimentBranch +import org.mozilla.fenix.experiments.Experiments +import org.mozilla.fenix.ext.withExperiment + +/** + * Allows starting a quick test of ACs SecureAbove22Preferences that will emit Facts + * for the basic operations and allow us to log them for later evaluation of APIs stability. + */ +class SecurePrefsTelemetry( + private val appContext: Context, + private val experiments: NimbusApi +) { + suspend fun startTests() { + // The Android Keystore is used to secure the shared prefs only on API 23+ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + // These tests should run only if the experiment is live + experiments.withExperiment(Experiments.ANDROID_KEYSTORE) { experimentBranch -> + // .. and this device is not in the control group. + if (experimentBranch == ExperimentBranch.TREATMENT) { + SecurePrefsReliabilityExperiment(appContext)() + } + } + } + } +} diff --git a/app/src/main/java/org/mozilla/fenix/experiments/Experiments.kt b/app/src/main/java/org/mozilla/fenix/experiments/Experiments.kt index baa800910..9a9a39036 100644 --- a/app/src/main/java/org/mozilla/fenix/experiments/Experiments.kt +++ b/app/src/main/java/org/mozilla/fenix/experiments/Experiments.kt @@ -8,6 +8,7 @@ class Experiments { companion object { const val A_A_NIMBUS_VALIDATION = "fenix-nimbus-validation-v3" const val BOOKMARK_ICON = "fenix-bookmark-list-icon" + const val ANDROID_KEYSTORE = "fenix-android-keystore" } } From 1e30744c6418f2a3174943e0b23ce7d590a6b00a Mon Sep 17 00:00:00 2001 From: Mugurell Date: Thu, 4 Mar 2021 21:29:19 +0200 Subject: [PATCH 094/149] For #17869 - New AndroidKeystoreExperiment telemetry --- app/metrics.yaml | 101 ++++++++++++++++++ .../mozilla/fenix/components/metrics/Event.kt | 20 ++++ .../components/metrics/GleanMetricsService.kt | 24 +++++ .../components/metrics/MetricController.kt | 24 +++++ docs/metrics.md | 6 ++ 5 files changed, 175 insertions(+) diff --git a/app/metrics.yaml b/app/metrics.yaml index f049e6fa8..6b37e9d31 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4769,3 +4769,104 @@ awesomebar: notification_emails: - fenix-core@mozilla.com expires: "2021-08-01" + +android_keystore_experiment: + experiment_failure: + type: event + description: | + Records an instance of an unexpected failure during the experiment + extra_keys: + failure_exception: + description: | + Exception class associated with an unexpected failure of this + experiment, not caught by the other failure handlers. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + get_failure: + type: event + description: | + Unexpected failure when trying to read from secure prefs. + extra_keys: + failure_exception: + description: | + Exception class associated with an unexpected failure of this + experiment. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + get_result: + type: event + description: | + Success when trying to read from secure prefs. + extra_keys: + result: + description: | + Result code identifying whether the read operation returned the + expected value or not. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + write_failure: + type: event + description: | + Unexpected failure when trying to write to secure prefs. + extra_keys: + failure_exception: + description: | + Exception class associated with an unexpected failure of this + experiment. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + write_success: + type: event + description: | + Success in writing to secure prefs. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" + reset: + type: event + description: | + An experiment failed, and was reset to run again in the future from a + blank state. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/17869 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395 + data_sensitivity: + - technical + notification_emails: + - fenix-core@mozilla.com + expires: "2021-09-01" 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 d211af7de..b0f0f32d7 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 @@ -9,6 +9,7 @@ import mozilla.components.browser.errorpages.ErrorType import mozilla.components.browser.state.search.SearchEngine import mozilla.components.feature.top.sites.TopSite import org.mozilla.fenix.GleanMetrics.Addons +import org.mozilla.fenix.GleanMetrics.AndroidKeystoreExperiment import org.mozilla.fenix.GleanMetrics.AppTheme import org.mozilla.fenix.GleanMetrics.Autoplay import org.mozilla.fenix.GleanMetrics.Collections @@ -233,6 +234,25 @@ sealed class Event { get() = hashMapOf(TopSites.swipeCarouselKeys.page to page.toString()) } + data class SecurePrefsExperimentFailure(val failureException: String) : Event() { + override val extras = + mapOf(AndroidKeystoreExperiment.experimentFailureKeys.failureException to failureException) + } + data class SecurePrefsGetFailure(val failureException: String) : Event() { + override val extras = + mapOf(AndroidKeystoreExperiment.getFailureKeys.failureException to failureException) + } + data class SecurePrefsGetSuccess(val successCode: String) : Event() { + override val extras = + mapOf(AndroidKeystoreExperiment.getResultKeys.result to successCode) + } + data class SecurePrefsWriteFailure(val failureException: String) : Event() { + override val extras = + mapOf(AndroidKeystoreExperiment.writeFailureKeys.failureException to failureException) + } + object SecurePrefsWriteSuccess : Event() + object SecurePrefsReset : Event() + data class TopSiteLongPress(val type: TopSite.Type) : Event() { override val extras: Map? get() = hashMapOf(TopSites.longPressKeys.type to type.name) diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index f62d8c17c..f0cbcfaa0 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -14,6 +14,7 @@ import mozilla.components.service.glean.private.NoExtraKeys import mozilla.components.support.base.log.logger.Logger import org.mozilla.fenix.GleanMetrics.AboutPage import org.mozilla.fenix.GleanMetrics.Addons +import org.mozilla.fenix.GleanMetrics.AndroidKeystoreExperiment import org.mozilla.fenix.GleanMetrics.AppTheme import org.mozilla.fenix.GleanMetrics.Autoplay import org.mozilla.fenix.GleanMetrics.Awesomebar @@ -788,6 +789,29 @@ private val Event.wrapper: EventWrapper<*>? { Awesomebar.openedTabSuggestionClicked.record(it) } ) + is Event.SecurePrefsExperimentFailure -> EventWrapper( + { AndroidKeystoreExperiment.experimentFailure.record(it) }, + { AndroidKeystoreExperiment.experimentFailureKeys.valueOf(it) } + ) + is Event.SecurePrefsGetFailure -> EventWrapper( + { AndroidKeystoreExperiment.getFailure.record(it) }, + { AndroidKeystoreExperiment.getFailureKeys.valueOf(it) } + ) + is Event.SecurePrefsGetSuccess -> EventWrapper( + { AndroidKeystoreExperiment.getResult.record(it) }, + { AndroidKeystoreExperiment.getResultKeys.valueOf(it) } + ) + is Event.SecurePrefsWriteFailure -> EventWrapper( + { AndroidKeystoreExperiment.writeFailure.record(it) }, + { AndroidKeystoreExperiment.writeFailureKeys.valueOf(it) } + ) + is Event.SecurePrefsWriteSuccess -> EventWrapper( + { AndroidKeystoreExperiment.writeSuccess.record(it) } + ) + is Event.SecurePrefsReset -> EventWrapper( + { AndroidKeystoreExperiment.reset.record(it) } + ) + // Don't record other events in Glean: is Event.AddBookmark -> null is Event.OpenedAppFirstRun -> null diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt index 649ace833..27fec25a7 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt @@ -25,6 +25,7 @@ import mozilla.components.feature.prompts.dialog.LoginDialogFacts import mozilla.components.feature.pwa.ProgressiveWebAppFacts import mozilla.components.feature.syncedtabs.facts.SyncedTabsFacts import mozilla.components.feature.top.sites.facts.TopSitesFacts +import mozilla.components.lib.dataprotect.SecurePrefsReliabilityExperiment import mozilla.components.support.base.Component import mozilla.components.support.base.facts.Action import mozilla.components.support.base.facts.Fact @@ -78,6 +79,7 @@ internal class DebugMetricController( } @VisibleForTesting +@Suppress("LargeClass") internal class ReleaseMetricController( private val services: List, private val isDataTelemetryEnabled: () -> Boolean, @@ -290,6 +292,28 @@ internal class ReleaseMetricController( Component.FEATURE_AWESOMEBAR to AwesomeBarFacts.Items.OPENED_TAB_SUGGESTION_CLICKED -> { Event.OpenedTabSuggestionClicked } + + Component.LIB_DATAPROTECT to SecurePrefsReliabilityExperiment.Companion.Actions.EXPERIMENT -> { + Event.SecurePrefsExperimentFailure(metadata?.get("javaClass") as String? ?: "null") + } + Component.LIB_DATAPROTECT to SecurePrefsReliabilityExperiment.Companion.Actions.GET -> { + if (SecurePrefsReliabilityExperiment.Companion.Values.FAIL.v == value?.toInt()) { + Event.SecurePrefsGetFailure(metadata?.get("javaClass") as String? ?: "null") + } else { + Event.SecurePrefsGetSuccess(value ?: "") + } + } + Component.LIB_DATAPROTECT to SecurePrefsReliabilityExperiment.Companion.Actions.WRITE -> { + if (SecurePrefsReliabilityExperiment.Companion.Values.FAIL.v == value?.toInt()) { + Event.SecurePrefsWriteFailure(metadata?.get("javaClass") as String? ?: "null") + } else { + Event.SecurePrefsWriteSuccess + } + } + Component.LIB_DATAPROTECT to SecurePrefsReliabilityExperiment.Companion.Actions.RESET -> { + Event.SecurePrefsReset + } + else -> null } diff --git a/docs/metrics.md b/docs/metrics.md index 7d5bd9ede..3ccfdb27f 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -56,6 +56,12 @@ In addition to those built-in metrics, the following metrics are added to the pi | about_page.support_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Support" item from About page |[mozilla-mobile/fenix#8047](https://github.com/mozilla-mobile/fenix/pull/8047), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | | addons.open_addon_in_toolbar_menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user interacted with an installed add-on in the toolbar menu |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • addon_id: The id of the add-on that was interacted with in the toolbar menu
|2021-07-01 |2 | | addons.open_addons_in_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed "Add-ons" from the Settings |[mozilla-mobile/fenix#8318](https://github.com/mozilla-mobile/fenix/pull/8318), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)||2021-07-01 |2 | +| android_keystore_experiment.experiment_failure |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Records an instance of an unexpected failure during the experiment |[mozilla-mobile/fenix#18333](https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395)|
  • failure_exception: Exception class associated with an unexpected failure of this experiment, not caught by the other failure handlers.
|2021-09-01 |1 | +| android_keystore_experiment.get_failure |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Unexpected failure when trying to read from secure prefs. |[mozilla-mobile/fenix#18333](https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395)|
  • failure_exception: Exception class associated with an unexpected failure of this experiment.
|2021-09-01 |1 | +| android_keystore_experiment.get_result |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Success when trying to read from secure prefs. |[mozilla-mobile/fenix#18333](https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395)|
  • result: Result code identifying whether the read operation returned the expected value or not.
|2021-09-01 |1 | +| android_keystore_experiment.reset |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |An experiment failed, and was reset to run again in the future from a blank state. |[mozilla-mobile/fenix#18333](https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395)||2021-09-01 |1 | +| android_keystore_experiment.write_failure |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Unexpected failure when trying to write to secure prefs. |[mozilla-mobile/fenix#18333](https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395)|
  • failure_exception: Exception class associated with an unexpected failure of this experiment.
|2021-09-01 |1 | +| android_keystore_experiment.write_success |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Success in writing to secure prefs. |[mozilla-mobile/fenix#18333](https://github.com/mozilla-mobile/fenix/pull/18333#pullrequestreview-612447395)||2021-09-01 |1 | | app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[mozilla-mobile/fenix#7968](https://github.com/mozilla-mobile/fenix/pull/7968), [mozilla-mobile/fenix#13958](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877), [mozilla-mobile/fenix#18143](https://github.com/mozilla-mobile/fenix/pull/18143)|
  • source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING'
|2021-07-01 |2 | | autoplay.setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their autoplay setting to either block_cellular, block_audio, or block_all. |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)|
  • autoplay_setting: The new setting for autoplay: block_cellular, block_audio, or block_all.
|2021-08-01 |2 | | autoplay.visited_setting |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user visited the autoplay settings screen |[mozilla-mobile/fenix#13041](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)||2021-08-01 |2 | From 8f70072d5e86ddec918cc6cdec85a5040cb87909 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Tue, 16 Mar 2021 00:03:59 +0000 Subject: [PATCH 095/149] Import l10n. --- app/src/main/res/values-cs/strings.xml | 6 +- app/src/main/res/values-eo/strings.xml | 9 + app/src/main/res/values-lo/strings.xml | 234 +++++++++++++++++++++---- app/src/main/res/values-oc/strings.xml | 19 +- app/src/main/res/values-sq/strings.xml | 19 +- 5 files changed, 242 insertions(+), 45 deletions(-) diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 6b80e461f..3b525cf69 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -184,6 +184,8 @@ Vzhled + + Přizpůsobit zobrazení čtečky Nelze se připojit. Schéma URL nebylo rozpoznáno. @@ -216,7 +218,7 @@ Nepovolit - Chcete našeptávat vyhledávání také v anonymním prohlížení? + Chcete našeptávat dotazy pro vyhledávač také v anonymním prohlížení? %s bude sdílet text zadávaný do adresního řádku s vaším výchozím vyhledávačem. @@ -331,7 +333,7 @@ Zobrazovat vyhledávače - Našeptávat vyhledávání + Našeptávat dotazy pro vyhledávač Zobrazit hlasové vyhledávání diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 13986308f..f0bde9b86 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -179,6 +179,8 @@ Aspekto + + Personecigi legilan vidon Konekto neebla. Nerekonita skemo de URL. @@ -215,6 +217,11 @@ Pli da informo + + Serĉi %s + + Serĉi rekte el la adresa strio + Malfermi novan langeton de Firefox @@ -892,6 +899,8 @@ Malŝaltita Permesi sonon kaj videon + + Permesi sonon kaj videon Bloki sonon kaj videon nur dum konekto al poŝaparataj retoj diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index f1f9830c4..3358bb003 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -19,11 +19,38 @@ ແທັບສ່ວນຕົວຂອງທ່ານຈະຖືກສະແດງຢູ່ບ່ອນນີ້. + + Baidu + + JD ເປີດ 1 ແຖບ. ແຕະເພື່ອປ່ຽນແທັບ. ເປີດ %1$s ແຖບ. ແຕະເພື່ອປ່ຽນແທັບ. + + ເລືອກ %1$d ແລ້ວ + + ເພີ່ມການເກັບສະສົມໃຫມ່ + + ຊື່ + + ເລືອກການເກັບສະສົມ + + ອອກຈາກໂຫມດ multiselect + + ບັນທຶກແທັບທີ່ເລືອກແລ້ວໄປໄວ້ທີ່ການເກັບສະສົມ + + ເລືອກ %1$s ແລ້ວ + + ບໍ່ເລືອກ %1$s + + ອອກຈາກໂຫມດ multiselect + + ເຂົ້າສູ່ໂຫມດ multiselect ແລ້ວ, ເລືອກແທັບເພື່ອບັນທຶກໄປໄວ້ທີ່ການເກັບສະສົມ + + ເລືອກແລ້ວ + %1$s ແມ່ນຜະລິດຂື້ນໂດຍ Mozilla. @@ -42,13 +69,30 @@ ບໍ່, ຂອບໃຈ - - - ເຂົ້າ Firefox ໄດ້ໄວຂຶ້ນ. ເພີ່ມ widget ໃສ່ໜ້າຈໍຫລັກຂອງທ່ານ. - - ເພີ່ມ widget - - ບໍ່ແມ່ນຕອນນີ້ + + + ທ່ານສາມາດຕັ້ງໃຫ້ Firefox ເປີດລີ້ງນີ້ໃນແອັບໂດຍອັດຕະໂນມັດ. + + ໄປທີ່ການຕັ້ງຄ່າ + + ຍົກເລີກ + + + ຕ້ອງການເຂົ້ານຳໃຊ້ກ້ອງ. ໄປທີ່ການຕັ້ງຄ່າ Android ແຕະໃສ່ ສິດ ແລະ ແຕະໃສ່ ອະນຸຍາດ + + ໄປທີ່ການຕັ້ງຄ່າ + + ຍົກເລີກ + + + ເບິງການຕັ້ງຄ່າ + + ຍົກເລີກ + + + ໄປທີ່ການຕັ້ງຄ່າ + + ຍົກເລີກ @@ -77,6 +121,8 @@ ແກ້ໄຂບຸກມາກ Add-ons + + ເອັກສເທນຊັນສ ບໍ່ມີ add-ons ຢູ່ທີ່ນີ້ @@ -95,12 +141,12 @@ ຕິດຕັ້ງ ແທັບທີ່ Sync ແລ້ວ + + Resync ຄົ້ນຫາໃນຫນ້ານີ້ ແທັບສ່ວນຕົວ - - ແທັບໃຫມ່ ບັນທຶກໄປໄວ້ບ່ອນເກັບສະສົມ @@ -125,6 +171,8 @@ ຮູບ​ຮ່າງ + + ແກ້ໄຂມຸມມອງຜູ້ອ່ານ ບໍ່​ສາ​ມາດ​​ເຊື່ອມ​ຕໍ່ໄດ້ ເນື່ອງຈາກບໍ່ຮູ້ຈັກຮູບແບບ URL @@ -142,8 +190,12 @@ ສະແກນ + + ເຄື່ອງມືການຄົ້ນຫາ ການຕັ້ງຄ່າຂອງເຄື່ອງມືຄົ້ນຫາ + + ຄັ້ງນີ້ ຄົ້ນຫາດ້ວຍ: ເຕີມລີ້ງຈາກຄິບບອດ @@ -157,7 +209,14 @@ ຮຽນຮູ້ເພີ່ມເຕີມ + + ຄົ້ນຫາ %s + + ຄົ້ນຫາໂດຍກົງຈາກແທັບທີ່ຢູ່ + + + ເປີດແທັບ Firefox ໃໝ່ ຄົ້ນຫາ @@ -212,6 +271,8 @@ ເປີດລີ້ງໃນແທັບສ່ວນຕົວ ອະນຸຍາດໃຫ້ຖ່າຍຫນ້າຈໍໃນໂຫມດການທ່ອງເວັບແບບສ່ວນຕົວ + + ຖ້າຫາກວ່າໄດ້ອະນຸຍາດແລ້ວ, ແທັບສ່ວນໂຕຈະສະແດງໃຫ້ເຫັນເມື່ອເປີດຫລາຍແອັບ ເພີ່ມທາງລັດການທ່ອງເວັບແບບສ່ວນຕົວ @@ -230,6 +291,8 @@ ແຖບເຄື່ອງມື ຊຸດປັບແຕ່ງ + + ຫນ້າທຳອິດ ການປັບແຕ່ງ @@ -252,6 +315,8 @@ ການດີບັກທາງໄກຜ່ານທາງ USB + + ສະແດງເຄື່ອງມືການຄົ້ນຫາ ສະແດງຜົນການແນະນຳການຄົ້ນຫາ @@ -264,6 +329,8 @@ ຄົ້ນຫາປະຫວັດການທ່ອງເວັບ ຄົ້ນຫາບຸກມາກ + + ຄົ້ນຫາແທັບທີ່ sync ແລ້ວ ການຕັ້ງ​ຄ່າ​ບັນ​ຊີ @@ -271,6 +338,16 @@ Add-ons + + ການແຈ້ງເຕືອນ + + + ໂອເຄ + + ຍົກເລີກ + + ຊື່ການເກັບສະສົມ + Sync ຕອນນີ້ @@ -352,6 +429,8 @@ ຂໍ້ມູນດ້ານການຕະຫຼາດ ແບ່ງປັນຂໍ້ມູນກ່ຽວກັບຟິວເຈີທີ່ທ່ານໃຊ້ຢູ່ໃນ %1$s ກັບ Leanplum ຊຶ່ງເປັນຜູ້ໃຫ້ບໍລິການດ້ານການຕະລາດມືຖືຂອງພວກເຮົາ. + + ການສຶກສາ ການທົດລອງ @@ -422,6 +501,10 @@ ບຸກມາກອື່ນໆ ປະຫວັດການໃຊ້ງານ + + ແທັບໃຫມ່ + + ຄົ້ນຫາໃນຫນ້ານີ້ ແທັບ Synced @@ -435,6 +518,46 @@ ປິດ + + ແທັບທີ່ຫາກໍ່ປິດໄປມື້ກີ້ນີ້ + + ສະແດງປະຫວັດການໃຊ້ງານທັງຫມົດ + + ແທັບ %d + + ແທັບ %d + + ບໍ່ມີແທັບທີ່ຫາກໍ່ປິດໄປມື້ກີ້ນີ້ + + + + ແທັບ + + ເບິງແທັບ + + ລາຍການ + + ປິດແທັບ + + ດ້ວຍ​ຕົນ​ເອງ + + ຫຼັງຈາກມື້ໜຶ່ງ + + ຫຼັງຈາກໜຶ່ງອາທິດ + + ຫຼັງຈາກໜຶ່ງເດືອນ + + + ປິດດ້ວຍຕົນເອງ + + ປິດຫຼັງຈາກມື້ໜຶ່ງ + + ປິດຫຼັງຈາກໜຶ່ງອາທິດ + + ປິດຫຼັງຈາກໜຶ່ງເດືອນ + ເປີດແທັບ @@ -452,8 +575,14 @@ ເປີດແທັບ ບັນທຶກໄປໄວ້ບ່ອນເກັບສະສົມ + + ເລືອກ ແບ່ງປັນແທັບທັງໝົດ + + ແທັບທີ່ຫາກໍ່ປິດໄປມື້ກີ້ນີ້ + + ການຕັ້ງຄ່າແທັບ ປິດແທັບທັງຫມົດ @@ -462,8 +591,18 @@ ໄປຫນ້າທຳອິດ ຮູບແບບການສະຫຼັບແທັບ + + ບຸກມາກ + + ປິດ + + ແບ່ງປັນແທັບທີ່ເລືອກໄວ້ + + ເລືອກເມນູແທັບແລ້ວ ລຶບແຖບອອກຈາກບ່ອນເກັບສະສົມ + + ເລືອກແທັບ ປິດແທັບ @@ -497,12 +636,21 @@ ປ່ຽນຊື່ບ່ອນເກັບສະສົມ ເປີດແທັບ - - ລຶບ - + + ຊື່ການເກັບສະສົມ + + ປ່ຽນ​ຊື່ + + ລຶບ + + + ລຶບອອກຈາກປະຫວັດການນຳໃຊ້ %1$s (ໂຫມດສ່ວນຕົວ) + + ບັນທຶກ + ລຶບປະຫວັດການໃຊ້ງານ @@ -532,6 +680,10 @@ ລຶບໄອເທັມ %1$d + + ມື້ນີ້ + + ມື້ວານ 24 ຊົ່ວໂມງທີ່ຜ່ານມາ @@ -543,6 +695,25 @@ ບໍ່ມີປະຫວັດການໃຊ້ງານຢູ່ນີ້ + + + + ລົບການດາວໂຫລດ + + ລຶບການດາວໂຫລດແລ້ວ + + ລຶບ %1$s ແລ້ວ + + ບໍ່ມີໄຟລທີ່ໄດ້ດາວໂຫລດມາ + + ເລືອກ %1$d ແລ້ວ + + ເປີດ + + ລຶບ + + ຂໍ​ອະໄພ. %1$s ບໍ່ສາມາດໂຫລດໜ້າເວັບນັ້ນໄດ້. @@ -675,16 +846,16 @@ ເປີດ ປິດ - + ອະນຸຍາດໃຫ້ເປີດສຽງ ແລະ ວີດີໂອ ບັອກສຽງ ແລະ ວິດີໂອໃນການນໍາໃຊ້ຂໍ້ມູນອິນເຕີເນັດໃນໂທລະສັບມືຖືເທົ່ານັ້ນ ສຽງ ແລະ ວິດີໂອຈະເປີດໃນ Wi-Fi - + ບັອກສຽງເທົ່ານັ້ນ - + ບັອກສຽງ ແລະ ວີດີໂອ ເປີດ @@ -696,10 +867,6 @@ ການສະສົມ ເມນູການສະສົມ - - ເກັບກຳສິ່ງທີ່ສຳຄັນສຳລັບທ່ານ - - ເອົາການຄົ້ນຫາ, ເວັບໄຊທ ແລະ ແທັບທີ່ຄ້າຍຄືກັນມາໄວ້ໃນກຸ່ມດຽວກັນ ເພື່ອເຮັດໃຫ້ສາມາດເຂົ້າໄດ້ງ່າຍໃນພາຍຫລັງ. ເລືອກແທັບ @@ -938,15 +1105,6 @@ ມີຄຳຖາມກ່ຽວກັບການອອກແບບ %s ຄືນໃຫມ່ບໍ່? ຕ້ອງການຢາກຮູ້ຈັກວ່າມີຫຍັງປ່ຽນແປງແດ່ບໍ່? ພົບຄຳຕອບໄດ້ທີ່ນີ້ - - ຮັບຜົນປະໂຫຍດສູງສຸດຈາກ %s. - - - ທ່ານໄດ້ລົງຊື່ເຂົ້າໃຊ້ດ້ວຍຖານະ %s ໃນ Firefox ໃນໂທລະສັບເຄື່ອງນີ້. ທ່ານຕ້ອງການຈະລົງຊື່ເຂົ້າໃຊ້ດ້ວຍບັນຊີນີ້ບໍ່? - ກຳລັງລົງຊື່ເຂົ້າໃຊ້… @@ -1135,13 +1293,15 @@ ບັກທຶກການລັອກອິນໄວ້ - - - ທາງລັດ - - ຄົ້ນຫາດ້ວຍ - - ຄັ້ງນີ້ ຄົ້ນຫາດ້ວຍ: - - ສະແດງທາງລັດການຄົ້ນຫາ + + ຮັບຜົນປະໂຫຍດສູງສຸດຈາກ %s. + + + ເກັບກຳສິ່ງທີ່ສຳຄັນສຳລັບທ່ານ + + ເອົາການຄົ້ນຫາ, ເວັບໄຊທ ແລະ ແທັບທີ່ຄ້າຍຄືກັນມາໄວ້ໃນກຸ່ມດຽວກັນ ເພື່ອເຮັດໃຫ້ສາມາດເຂົ້າໄດ້ງ່າຍໃນພາຍຫລັງ. + + ທ່ານໄດ້ລົງຊື່ເຂົ້າໃຊ້ດ້ວຍຖານະ %s ໃນ Firefox ໃນໂທລະສັບເຄື່ອງນີ້. ທ່ານຕ້ອງການຈະລົງຊື່ເຂົ້າໃຊ້ດ້ວຍບັນຊີນີ້ບໍ່? + diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index cbe0452dd..1dbdc5080 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -180,6 +180,8 @@ Aparéncia + + Personalizar la vista lectura Connexion impossibla. Esquèma d’URL desconegut. @@ -216,6 +218,11 @@ Ne saber mai + + Cercar %s + + Recèrcas dirèctament dins la barra d’adreça + Dobrir dins un onglet Firefox novèl @@ -896,17 +903,23 @@ Activada Desactivada - + Autorizar l’àudio e la vidèo + + Autorizar l’àudio e la vidèo Blocar solament l’àudio e la vidèo amb una connexion mobil L’àudio e la vidèo seràn legits amb una connexion Wi-Fi - + Blocar sonque l’àudio - + + Blocar sonque l’àudio + Blocar l’àudio e la vidèo + + Blocar l’àudio e la vidèo Activat diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index b496567c0..1b222beb6 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -179,6 +179,8 @@ Dukje + + Përshtatni pamjen e Lexuesit S’arrihet të lidhet. Skemë URL jo e pranuar. @@ -215,6 +217,11 @@ Mësoni më tepër + + Kërko me %s + + Kërkoni drejt e nga shtylla e adresave + Hapni një skedë të re Firefox @@ -883,16 +890,22 @@ On Off - + Lejo audio dhe video + + Lejo audio dhe video Blloko audio dhe video vetëm nga të dhëna rrjeti celular Audio dhe video do të luhen nën Wi-Fi - + Blloko vetëm audio - + + Blloko vetëm audio + Blloko audio dhe video + + Blloko audio dhe video On From be86061a111c868b53702afff82588efbfa57954 Mon Sep 17 00:00:00 2001 From: Oana Horvath Date: Mon, 15 Mar 2021 17:08:58 +0200 Subject: [PATCH 096/149] Add first set of UI tests to Nightly --- .../java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt | 2 +- .../java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt | 2 +- automation/taskcluster/androidTest/flank-x86-start-test.yml | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) 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 0d29f036e..2db81496c 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 @@ -150,7 +150,7 @@ class HomeScreenRobot { fun confirmDeleteCollection() { onView(allOf(withText("DELETE"))).click() mDevice.waitNotNull( - findObject(By.res("org.mozilla.fenix.debug:id/no_collections_header")), + findObject(By.res("$packageName:id/no_collections_header")), waitingTime ) } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt index 745701837..b1f2f647a 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/TabDrawerRobot.kt @@ -138,7 +138,7 @@ class TabDrawerRobot { fun snackBarButtonClick(expectedText: String) { mDevice.findObject( - UiSelector().resourceId("org.mozilla.fenix.debug:id/snackbar_btn") + UiSelector().resourceId("$packageName:id/snackbar_btn") ).waitForExists(waitingTime) onView(allOf(withId(R.id.snackbar_btn), withText(expectedText))).check( matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)) diff --git a/automation/taskcluster/androidTest/flank-x86-start-test.yml b/automation/taskcluster/androidTest/flank-x86-start-test.yml index 5d9c8d49c..c9a24e662 100644 --- a/automation/taskcluster/androidTest/flank-x86-start-test.yml +++ b/automation/taskcluster/androidTest/flank-x86-start-test.yml @@ -35,6 +35,12 @@ gcloud: test-targets: - class org.mozilla.fenix.ui.NavigationToolbarTest#visitURLTest + - class org.mozilla.fenix.ui.HistoryTest#visitedUrlHistoryTest + - class org.mozilla.fenix.ui.SmokeTest#openMainMenuSettingsItemTest + - class org.mozilla.fenix.ui.SmokeTest#toggleSearchSuggestions + - class org.mozilla.fenix.ui.SmokeTest#deleteCollectionTest + - class org.mozilla.fenix.ui.SmokeTest#noHistoryInPrivateBrowsingTest + - class org.mozilla.fenix.ui.NoNetworkAccessStartupTests#noNetworkConnectionStartupTest device: - model: Pixel2 From 2743f9cf4f2afdeac1a0760c33e2c0ca4be5d2ba Mon Sep 17 00:00:00 2001 From: Oana Horvath Date: Tue, 16 Mar 2021 19:35:36 +0200 Subject: [PATCH 097/149] For #18481: waits for url to be visible in TestHelper.verifyUrl() (#18498) --- .../androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt | 2 ++ 1 file changed, 2 insertions(+) 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 8d4a01f4c..ec9b3d70e 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/TestHelper.kt @@ -28,6 +28,7 @@ import kotlinx.coroutines.runBlocking import org.hamcrest.CoreMatchers import org.hamcrest.CoreMatchers.allOf import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.ext.waitNotNull import org.mozilla.fenix.helpers.idlingresource.NetworkConnectionIdlingResource import org.mozilla.fenix.ui.robots.mDevice @@ -88,6 +89,7 @@ object TestHelper { fun verifyUrl(urlSubstring: String, resourceName: String, resId: Int) { waitUntilObjectIsFound(resourceName) + mDevice.findObject(UiSelector().text(urlSubstring)).waitForExists(waitingTime) onView(withId(resId)).check(ViewAssertions.matches(withText(CoreMatchers.containsString(urlSubstring)))) } From ff740337bef67918566eca177b54ac52d2b3d9c9 Mon Sep 17 00:00:00 2001 From: Grisha Kruglov Date: Tue, 16 Mar 2021 09:53:57 -0700 Subject: [PATCH 098/149] Closes #18501: Enable Nimbus on Beta channel --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index 2eb0f76cf..005664eb6 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -17,7 +17,7 @@ object FeatureFlags { /** * Enables the Nimbus experiments library. */ - val nimbusExperiments = Config.channel.isNightlyOrDebug + val nimbusExperiments = Config.channel.isNightlyOrDebug || Config.channel.isBeta /** * Enables the Addresses autofill feature. From 06af3a7d04a16aae8211ca469c9b42f00b28cf0e Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 16 Mar 2021 15:35:49 +0000 Subject: [PATCH 099/149] Update Android Components version to 74.0.20210316143123. --- 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 20f5cf450..caba2cefe 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 = "74.0.20210313190118" + const val VERSION = "74.0.20210316143123" } From 35bae17e86856ca45f583804f662b2eef7e40a7b Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Tue, 9 Mar 2021 15:54:15 -0500 Subject: [PATCH 100/149] For #18408 - Add a lazy getter for AutofillCreditCardsAddressStorage --- app/build.gradle | 1 + app/src/main/java/org/mozilla/fenix/components/Core.kt | 3 +++ buildSrc/src/main/java/Dependencies.kt | 2 ++ 3 files changed, 6 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index 8090f300b..da5d7bfdf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -498,6 +498,7 @@ dependencies { implementation Deps.mozilla_feature_webcompat_reporter implementation Deps.mozilla_service_digitalassetlinks + implementation Deps.mozilla_service_sync_autofill implementation Deps.mozilla_service_sync_logins implementation Deps.mozilla_service_firefox_accounts implementation Deps.mozilla_service_glean 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 41dfa2543..a560f1288 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -56,6 +56,7 @@ import mozilla.components.service.digitalassetlinks.local.StatementApi import mozilla.components.service.digitalassetlinks.local.StatementRelationChecker import mozilla.components.service.location.LocationService import mozilla.components.service.location.MozillaLocationService +import mozilla.components.service.sync.autofill.AutofillCreditCardsAddressesStorage import mozilla.components.service.sync.logins.SyncableLoginsStorage import mozilla.components.support.locale.LocaleManager import org.mozilla.fenix.AppRequestInterceptor @@ -288,6 +289,7 @@ class Core( val lazyHistoryStorage = lazyMonitored { PlacesHistoryStorage(context, crashReporter) } val lazyBookmarksStorage = lazyMonitored { PlacesBookmarksStorage(context) } val lazyPasswordsStorage = lazyMonitored { SyncableLoginsStorage(context, passwordsEncryptionKey) } + val lazyAutofillStorage = lazyMonitored { AutofillCreditCardsAddressesStorage(context) } /** * The storage component to sync and persist tabs in a Firefox Sync account. @@ -298,6 +300,7 @@ class Core( val historyStorage: PlacesHistoryStorage get() = lazyHistoryStorage.value val bookmarksStorage: PlacesBookmarksStorage get() = lazyBookmarksStorage.value val passwordsStorage: SyncableLoginsStorage get() = lazyPasswordsStorage.value + val autofillStorage: AutofillCreditCardsAddressesStorage get() = lazyAutofillStorage.value val tabCollectionStorage by lazyMonitored { TabCollectionStorage( diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index c28def136..3e117e06c 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -132,6 +132,8 @@ object Deps { const val mozilla_service_digitalassetlinks = "org.mozilla.components:service-digitalassetlinks:${Versions.mozilla_android_components}" + const val mozilla_service_sync_autofill = + "org.mozilla.components:service-sync-autofill:${Versions.mozilla_android_components}" const val mozilla_service_sync_logins = "org.mozilla.components:service-sync-logins:${Versions.mozilla_android_components}" const val mozilla_service_firefox_accounts = "org.mozilla.components:service-firefox-accounts:${Versions.mozilla_android_components}" From 05aa948dc7cd39df9b3fed7fc9f4aee252a5ceae Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Fri, 26 Feb 2021 19:53:38 +0400 Subject: [PATCH 101/149] Issue #17822: Create a tabs tray layout and fragment Co-authored-by: Kate Glazko --- .../fenix/browser/BaseBrowserFragment.kt | 13 +- .../org/mozilla/fenix/home/HomeFragment.kt | 7 +- .../fenix/tabstray/TabsTrayFragment.kt | 96 ++++++++++ .../fenix/tabstray/TabsTrayInteractor.kt | 22 +++ .../org/mozilla/fenix/tabstray/TrayItem.kt | 13 ++ .../fenix/tabstray/TrayPagerAdapter.kt | 59 ++++++ .../mozilla/fenix/tabstray/TrayViewHolders.kt | 41 +++++ .../tabstray/browser/BaseBrowserTrayList.kt | 95 ++++++++++ .../tabstray/browser/NormalBrowserTrayList.kt | 19 ++ .../browser/PrivateBrowserTrayList.kt | 19 ++ .../fenix/tabstray/ext/TabSessionState.kt | 15 ++ .../mozilla/fenix/tabtray/FenixTabsAdapter.kt | 3 +- .../org/mozilla/fenix/tabtray/TabTrayView.kt | 1 - .../fenix/utils/view/LifecycleViewProvider.kt | 45 +++++ .../main/res/layout/component_tabstray2.xml | 174 ++++++++++++++++++ .../res/layout/normal_browser_tray_list.xml | 6 + .../res/layout/private_browser_tray_list.xml | 6 + .../main/res/layout/synced_tabs_tray_list.xml | 6 + app/src/main/res/navigation/nav_graph.xml | 14 ++ .../fenix/tabstray/TabLayoutObserverTest.kt | 26 +++ .../browser/RemoveTabUseCaseWrapperTest.kt | 27 +++ .../browser/SelectTabUseCaseWrapperTest.kt | 30 +++ .../tabstray/ext/TabSessionStateKtTest.kt | 58 ++++++ 23 files changed, 791 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayInteractor.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/TrayItem.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/TrayViewHolders.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/browser/BaseBrowserTrayList.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/browser/PrivateBrowserTrayList.kt create mode 100644 app/src/main/java/org/mozilla/fenix/tabstray/ext/TabSessionState.kt create mode 100644 app/src/main/java/org/mozilla/fenix/utils/view/LifecycleViewProvider.kt create mode 100644 app/src/main/res/layout/component_tabstray2.xml create mode 100644 app/src/main/res/layout/normal_browser_tray_list.xml create mode 100644 app/src/main/res/layout/private_browser_tray_list.xml create mode 100644 app/src/main/res/layout/synced_tabs_tray_list.xml create mode 100644 app/src/test/java/org/mozilla/fenix/tabstray/TabLayoutObserverTest.kt create mode 100644 app/src/test/java/org/mozilla/fenix/tabstray/browser/RemoveTabUseCaseWrapperTest.kt create mode 100644 app/src/test/java/org/mozilla/fenix/tabstray/browser/SelectTabUseCaseWrapperTest.kt create mode 100644 app/src/test/java/org/mozilla/fenix/tabstray/ext/TabSessionStateKtTest.kt 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 3ca1fa820..db1b8e351 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -294,7 +294,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit thumbnailsFeature.get()?.requestScreenshot() findNavController().nav( R.id.browserFragment, - BrowserFragmentDirections.actionGlobalTabTrayDialogFragment() + getTrayDirection(context) ) }, onCloseTab = { closedSession -> @@ -1279,6 +1279,17 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit .show() } + /** + * Retrieves the correct tray direction while using a feature flag. + * + * Remove this when [FeatureFlags.tabsTrayRewrite] is removed. + */ + private fun getTrayDirection(context: Context) = if (context.settings().tabsTrayRewrite) { + BrowserFragmentDirections.actionGlobalTabsTrayFragment() + } else { + BrowserFragmentDirections.actionGlobalTabTrayDialogFragment() + } + companion object { private const val KEY_CUSTOM_TAB_SESSION_ID = "custom_tab_session_id" private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1 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 3cd9a2989..924297d65 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -1013,9 +1013,14 @@ class HomeFragment : Fragment() { } private fun openTabTray() { + val direction = if (requireContext().settings().tabsTrayRewrite) { + HomeFragmentDirections.actionGlobalTabsTrayFragment() + } else { + HomeFragmentDirections.actionGlobalTabTrayDialogFragment() + } findNavController().nav( R.id.homeFragment, - HomeFragmentDirections.actionGlobalTabTrayDialogFragment() + direction ) } diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt new file mode 100644 index 000000000..b0a0fc12a --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt @@ -0,0 +1,96 @@ +/* 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.tabstray + +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.appcompat.app.AppCompatDialogFragment +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.navigation.fragment.findNavController +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.tabs.TabLayout +import kotlinx.android.synthetic.main.component_tabstray2.* +import kotlinx.android.synthetic.main.component_tabstray2.view.* +import org.mozilla.fenix.R + +class TabsTrayFragment : AppCompatDialogFragment(), TabsTrayInteractor { + + lateinit var behavior: BottomSheetBehavior + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setStyle(STYLE_NO_TITLE, R.style.TabTrayDialogStyle) + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + val containerView = inflater.inflate(R.layout.fragment_tab_tray_dialog, container, false) + val view: View = LayoutInflater.from(containerView.context) + .inflate(R.layout.component_tabstray2, containerView as ViewGroup, true) + + behavior = BottomSheetBehavior.from(view.tab_wrapper) + + return containerView + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + setupPager(view.context, this) + } + + override fun setCurrentTrayPosition(position: Int) { + tabsTray.currentItem = position + } + + override fun navigateToBrowser() { + dismissAllowingStateLoss() + + val navController = findNavController() + + if (navController.currentDestination?.id == R.id.browserFragment) { + return + } + + if (!navController.popBackStack(R.id.browserFragment, false)) { + navController.navigate(R.id.browserFragment) + } + } + + override fun tabRemoved(sessionId: String) { + // TODO re-implement these methods + // showUndoSnackbarForTab(sessionId) + // removeIfNotLastTab(sessionId) + } + + private fun setupPager(context: Context, interactor: TabsTrayInteractor) { + tabsTray.apply { + adapter = TrayPagerAdapter(context, interactor) + isUserInputEnabled = false + } + + tab_layout.addOnTabSelectedListener(TabLayoutObserver(interactor)) + } +} + +/** + * An observer for the [TabLayout] used for the Tabs Tray. + */ +internal class TabLayoutObserver( + private val interactor: TabsTrayInteractor +) : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab) { + interactor.setCurrentTrayPosition(tab.position) + } + + override fun onTabUnselected(tab: TabLayout.Tab) = Unit + override fun onTabReselected(tab: TabLayout.Tab) = Unit +} diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayInteractor.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayInteractor.kt new file mode 100644 index 000000000..6c479aad3 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayInteractor.kt @@ -0,0 +1,22 @@ +/* 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.tabstray + +interface TabsTrayInteractor { + /** + * Set the current tray item to the clamped [position]. + */ + fun setCurrentTrayPosition(position: Int) + + /** + * Dismisses the tabs tray and navigates to the browser. + */ + fun navigateToBrowser() + + /** + * Invoked when a tab is removed from the tabs tray with the given [sessionId]. + */ + fun tabRemoved(sessionId: String) +} diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TrayItem.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TrayItem.kt new file mode 100644 index 000000000..032a63492 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TrayItem.kt @@ -0,0 +1,13 @@ +/* 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.tabstray + +import android.view.View +import android.view.ViewGroup + +/** + * A [View] or [ViewGroup] that can be add in the Tabs Tray. + */ +interface TrayItem diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt new file mode 100644 index 000000000..c4ea545ae --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TrayPagerAdapter.kt @@ -0,0 +1,59 @@ +/* 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.tabstray + +import android.content.Context +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import org.mozilla.fenix.tabstray.BrowserTabViewHolder.Companion.LAYOUT_ID_NORMAL_TAB +import org.mozilla.fenix.tabstray.BrowserTabViewHolder.Companion.LAYOUT_ID_PRIVATE_TAB +import org.mozilla.fenix.tabtray.FenixTabsAdapter + +class TrayPagerAdapter( + context: Context, + val interactor: TabsTrayInteractor +) : RecyclerView.Adapter() { + + private val normalAdapter by lazy { FenixTabsAdapter(context) } + private val privateAdapter by lazy { FenixTabsAdapter(context) } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TrayViewHolder { + val itemView = LayoutInflater.from(parent.context).inflate(viewType, parent, false) + + return when (viewType) { + LAYOUT_ID_NORMAL_TAB -> BrowserTabViewHolder(itemView, interactor) + LAYOUT_ID_PRIVATE_TAB -> BrowserTabViewHolder(itemView, interactor) + else -> throw IllegalStateException("Unknown viewType.") + } + } + + override fun onBindViewHolder(viewHolder: TrayViewHolder, position: Int) { + val adapter = when (position) { + POSITION_NORMAL_TABS -> normalAdapter + POSITION_PRIVATE_TABS -> privateAdapter + else -> throw IllegalStateException("View type does not exist.") + } + + viewHolder.bind(adapter) + } + + override fun getItemViewType(position: Int): Int { + return when (position) { + POSITION_NORMAL_TABS -> LAYOUT_ID_NORMAL_TAB + POSITION_PRIVATE_TABS -> LAYOUT_ID_PRIVATE_TAB + else -> throw IllegalStateException("Unknown position.") + } + } + + override fun getItemCount(): Int = TRAY_TABS_COUNT + + companion object { + const val TRAY_TABS_COUNT = 2 + + const val POSITION_NORMAL_TABS = 0 + const val POSITION_PRIVATE_TABS = 1 + } +} diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TrayViewHolders.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TrayViewHolders.kt new file mode 100644 index 000000000..e94226c8b --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TrayViewHolders.kt @@ -0,0 +1,41 @@ +/* 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.tabstray + +import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import kotlinx.android.extensions.LayoutContainer +import org.mozilla.fenix.R +import org.mozilla.fenix.tabstray.browser.BaseBrowserTrayList + +sealed class TrayViewHolder constructor( + override val containerView: View +) : RecyclerView.ViewHolder(containerView), LayoutContainer { + + abstract fun bind(adapter: RecyclerView.Adapter) +} + +class BrowserTabViewHolder( + containerView: View, + interactor: TabsTrayInteractor +) : TrayViewHolder(containerView) { + + private val trayList: BaseBrowserTrayList = itemView.findViewById(R.id.tray_list_item) + + init { + trayList.interactor = interactor + } + + override fun bind(adapter: RecyclerView.Adapter) { + trayList.layoutManager = LinearLayoutManager(itemView.context) + trayList.adapter = adapter + } + + companion object { + const val LAYOUT_ID_NORMAL_TAB = R.layout.normal_browser_tray_list + const val LAYOUT_ID_PRIVATE_TAB = R.layout.private_browser_tray_list + } +} diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/browser/BaseBrowserTrayList.kt b/app/src/main/java/org/mozilla/fenix/tabstray/browser/BaseBrowserTrayList.kt new file mode 100644 index 000000000..caaa51108 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/browser/BaseBrowserTrayList.kt @@ -0,0 +1,95 @@ +/* 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.tabstray.browser + +import android.content.Context +import android.util.AttributeSet +import androidx.recyclerview.widget.RecyclerView +import mozilla.components.browser.tabstray.TabsAdapter +import mozilla.components.feature.tabs.TabsUseCases +import mozilla.components.feature.tabs.tabstray.TabsFeature +import mozilla.components.support.base.feature.ViewBoundFeatureWrapper +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController +import org.mozilla.fenix.ext.components +import org.mozilla.fenix.tabstray.TabsTrayInteractor +import org.mozilla.fenix.tabstray.TrayItem +import org.mozilla.fenix.tabstray.ext.filterFromConfig +import org.mozilla.fenix.utils.view.LifecycleViewProvider + +abstract class BaseBrowserTrayList @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : RecyclerView(context, attrs, defStyleAttr), TrayItem { + + enum class BrowserTabType { NORMAL, PRIVATE } + data class Configuration(val browserTabType: BrowserTabType) + + abstract val configuration: Configuration + + var interactor: TabsTrayInteractor? = null + + private val lifecycleProvider = LifecycleViewProvider(this) + + private val selectTabUseCase = SelectTabUseCaseWrapper( + context.components.analytics.metrics, + context.components.useCases.tabsUseCases.selectTab + ) { + interactor?.navigateToBrowser() + } + + private val removeTabUseCase = RemoveTabUseCaseWrapper( + context.components.analytics.metrics + ) { sessionId -> + interactor?.tabRemoved(sessionId) + } + + private val tabsFeature by lazy { + ViewBoundFeatureWrapper( + feature = TabsFeature( + adapter as TabsAdapter, + context.components.core.store, + selectTabUseCase, + removeTabUseCase, + { it.filterFromConfig(configuration) }, + { } + ), + owner = lifecycleProvider, + view = this + ) + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + + // This is weird, but I don't have a better solution right now: We need to keep a + // lazy reference to the feature/adapter so that we do not re-create + // it every time it's attached. This reference is our way to init. + tabsFeature + } +} + +internal class SelectTabUseCaseWrapper( + private val metrics: MetricController, + private val selectTab: TabsUseCases.SelectTabUseCase, + private val onSelect: (String) -> Unit +) : TabsUseCases.SelectTabUseCase { + override fun invoke(tabId: String) { + metrics.track(Event.OpenedExistingTab) + selectTab(tabId) + onSelect(tabId) + } +} + +internal class RemoveTabUseCaseWrapper( + private val metrics: MetricController, + private val onRemove: (String) -> Unit +) : TabsUseCases.RemoveTabUseCase { + override fun invoke(sessionId: String) { + metrics.track(Event.ClosedExistingTab) + onRemove(sessionId) + } +} diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.kt b/app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.kt new file mode 100644 index 000000000..eed7f8586 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/browser/NormalBrowserTrayList.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.tabstray.browser + +import android.content.Context +import android.util.AttributeSet + +/** + * A browser tabs list that displays normal tabs. + */ +class NormalBrowserTrayList @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : BaseBrowserTrayList(context, attrs, defStyleAttr) { + override val configuration: Configuration = Configuration(BrowserTabType.NORMAL) +} diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/browser/PrivateBrowserTrayList.kt b/app/src/main/java/org/mozilla/fenix/tabstray/browser/PrivateBrowserTrayList.kt new file mode 100644 index 000000000..0b8f73e72 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/browser/PrivateBrowserTrayList.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.tabstray.browser + +import android.content.Context +import android.util.AttributeSet + +/** + * A browser tabs list that displays private tabs. + */ +class PrivateBrowserTrayList @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : BaseBrowserTrayList(context, attrs, defStyleAttr) { + override val configuration: Configuration = Configuration(BrowserTabType.PRIVATE) +} diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/ext/TabSessionState.kt b/app/src/main/java/org/mozilla/fenix/tabstray/ext/TabSessionState.kt new file mode 100644 index 000000000..cf11c8c39 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/tabstray/ext/TabSessionState.kt @@ -0,0 +1,15 @@ +/* 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.tabstray.ext + +import mozilla.components.browser.state.state.TabSessionState +import org.mozilla.fenix.tabstray.browser.BaseBrowserTrayList.BrowserTabType.PRIVATE +import org.mozilla.fenix.tabstray.browser.BaseBrowserTrayList.Configuration + +fun TabSessionState.filterFromConfig(configuration: Configuration): Boolean { + val isPrivate = configuration.browserTabType == PRIVATE + + return content.private == isPrivate +} diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt b/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt index eece24425..777770165 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/FenixTabsAdapter.kt @@ -15,6 +15,7 @@ import kotlinx.android.synthetic.main.tab_tray_item.view.* import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.tabstray.TabViewHolder import mozilla.components.browser.tabstray.TabsAdapter +import mozilla.components.browser.thumbnails.loader.ThumbnailLoader import mozilla.components.concept.base.images.ImageLoader import mozilla.components.concept.tabstray.Tab import mozilla.components.concept.tabstray.Tabs @@ -27,7 +28,7 @@ import org.mozilla.fenix.ext.updateAccessibilityCollectionItemInfo class FenixTabsAdapter( private val context: Context, - imageLoader: ImageLoader + imageLoader: ImageLoader = ThumbnailLoader(context.components.core.thumbnailStorage) ) : TabsAdapter( viewHolderProvider = { parentView -> TabTrayViewHolder( diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt index 5b051fbbe..acb200a65 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -701,7 +701,6 @@ class TabTrayView( fun scrollToSelectedBrowserTab(selectedTabId: String? = null) { view.tabsTray.apply { val recyclerViewIndex = getSelectedBrowserTabViewIndex(selectedTabId) - layoutManager?.scrollToPosition(recyclerViewIndex) smoothScrollBy( 0, 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 new file mode 100644 index 000000000..010f82b6f --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/utils/view/LifecycleViewProvider.kt @@ -0,0 +1,45 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.utils.view + +import android.view.View +import androidx.annotation.VisibleForTesting +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.Lifecycle.State +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.LifecycleRegistry + +/** + * Provides a [LifecycleOwner] on a given [View] for features that function on lifecycle events. + * + * When the [View] is attached to the window, observers will receive the [Lifecycle.Event.ON_START] event. + * When the [View] is detached to the window, observers will receive the [Lifecycle.Event.ON_STOP] event. + * + * @param view The [View] that will be observed. + */ +class LifecycleViewProvider(view: View) : LifecycleOwner { + private val registry = LifecycleRegistry(this) + + init { + registry.currentState = State.INITIALIZED + + view.addOnAttachStateChangeListener(ViewBinding(registry)) + } + + override fun getLifecycle(): Lifecycle = registry +} + +@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) +internal class ViewBinding( + private val registry: LifecycleRegistry +) : View.OnAttachStateChangeListener { + override fun onViewAttachedToWindow(v: View?) { + registry.currentState = State.STARTED + } + + override fun onViewDetachedFromWindow(v: View?) { + registry.currentState = State.DESTROYED + } +} diff --git a/app/src/main/res/layout/component_tabstray2.xml b/app/src/main/res/layout/component_tabstray2.xml new file mode 100644 index 000000000..6bcbe4e4f --- /dev/null +++ b/app/src/main/res/layout/component_tabstray2.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/normal_browser_tray_list.xml b/app/src/main/res/layout/normal_browser_tray_list.xml new file mode 100644 index 000000000..4e243c9d7 --- /dev/null +++ b/app/src/main/res/layout/normal_browser_tray_list.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/layout/private_browser_tray_list.xml b/app/src/main/res/layout/private_browser_tray_list.xml new file mode 100644 index 000000000..bd746632a --- /dev/null +++ b/app/src/main/res/layout/private_browser_tray_list.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/layout/synced_tabs_tray_list.xml b/app/src/main/res/layout/synced_tabs_tray_list.xml new file mode 100644 index 000000000..d7a224408 --- /dev/null +++ b/app/src/main/res/layout/synced_tabs_tray_list.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index d3a9c5efb..23f548ae9 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -118,6 +118,11 @@ app:destination="@id/tabTrayDialogFragment" app:popUpTo="@id/tabTrayDialogFragment" app:popUpToInclusive="true"/> + @@ -128,6 +133,15 @@ android:id="@+id/action_global_tabSettingsFragment" app:destination="@id/tabsSettingsFragment" /> + + + + (relaxed = true) + + @Test + fun `WHEN tab is selected THEN notify the interactor`() { + val observer = TabLayoutObserver(interactor) + val tab = mockk() + every { tab.position } returns 1 + + observer.onTabSelected(tab) + + verify { interactor.setCurrentTrayPosition(1) } + } +} diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/browser/RemoveTabUseCaseWrapperTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/browser/RemoveTabUseCaseWrapperTest.kt new file mode 100644 index 000000000..3e6914d83 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/tabstray/browser/RemoveTabUseCaseWrapperTest.kt @@ -0,0 +1,27 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.tabstray.browser + +import io.mockk.mockk +import io.mockk.verify +import org.junit.Test +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController + +class RemoveTabUseCaseWrapperTest { + + val metricController = mockk(relaxed = true) + + @Test + fun `WHEN invoked THEN metrics, use case and callback are triggered`() { + val onRemove: (String) -> Unit = mockk(relaxed = true) + val wrapper = RemoveTabUseCaseWrapper(metricController, onRemove) + + wrapper("123") + + verify { metricController.track(Event.ClosedExistingTab) } + verify { onRemove("123") } + } +} diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/browser/SelectTabUseCaseWrapperTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/browser/SelectTabUseCaseWrapperTest.kt new file mode 100644 index 000000000..fd0f24574 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/tabstray/browser/SelectTabUseCaseWrapperTest.kt @@ -0,0 +1,30 @@ +/* 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.tabstray.browser + +import io.mockk.mockk +import io.mockk.verify +import mozilla.components.feature.tabs.TabsUseCases +import org.junit.Test +import org.mozilla.fenix.components.metrics.Event +import org.mozilla.fenix.components.metrics.MetricController + +class SelectTabUseCaseWrapperTest { + + val metricController = mockk(relaxed = true) + val selectUseCase: TabsUseCases.SelectTabUseCase = mockk(relaxed = true) + + @Test + fun `WHEN invoked THEN metrics, use case and callback are triggered`() { + val onSelect: (String) -> Unit = mockk(relaxed = true) + val wrapper = SelectTabUseCaseWrapper(metricController, selectUseCase, onSelect) + + wrapper("123") + + verify { metricController.track(Event.OpenedExistingTab) } + verify { selectUseCase("123") } + verify { onSelect("123") } + } +} diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/ext/TabSessionStateKtTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/ext/TabSessionStateKtTest.kt new file mode 100644 index 000000000..410c4eac7 --- /dev/null +++ b/app/src/test/java/org/mozilla/fenix/tabstray/ext/TabSessionStateKtTest.kt @@ -0,0 +1,58 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.tabstray.ext + +import io.mockk.every +import io.mockk.mockk +import mozilla.components.browser.state.state.ContentState +import mozilla.components.browser.state.state.TabSessionState +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import org.mozilla.fenix.tabstray.browser.BaseBrowserTrayList.BrowserTabType.NORMAL +import org.mozilla.fenix.tabstray.browser.BaseBrowserTrayList.BrowserTabType.PRIVATE +import org.mozilla.fenix.tabstray.browser.BaseBrowserTrayList.Configuration + +class TabSessionStateKtTest { + + @Test + fun `WHEN configuration is private THEN return true`() { + val contentState = mockk() + val state = TabSessionState(content = contentState) + val config = Configuration(PRIVATE) + + every { contentState.private } returns true + + assertTrue(state.filterFromConfig(config)) + } + + @Test + fun `WHEN configuration is normal THEN return false`() { + val contentState = mockk() + val state = TabSessionState(content = contentState) + val config = Configuration(NORMAL) + + every { contentState.private } returns false + + assertTrue(state.filterFromConfig(config)) + } + + @Test + fun `WHEN configuration does not match THEN return false`() { + val contentState = mockk() + val state = TabSessionState(content = contentState) + val config = Configuration(NORMAL) + + every { contentState.private } returns true + + assertFalse(state.filterFromConfig(config)) + + val config2 = Configuration(PRIVATE) + + every { contentState.private } returns false + + assertFalse(state.filterFromConfig(config2)) + } +} From d2e6dc8f8ddff5370e4c78b6bc4913508429b871 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Wed, 17 Mar 2021 00:00:42 +0000 Subject: [PATCH 102/149] Import l10n. --- app/src/main/res/values-ar/strings.xml | 10 +++++++--- app/src/main/res/values-gl/strings.xml | 7 +++++++ app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 ++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index dce2059be..a9e917d3a 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -132,6 +132,8 @@ حرّر العلامة الإضافات + + الامتدادات ما من إضافات هنا @@ -180,6 +182,8 @@ المظهر + + خصّص منظور القارئ تعذّر الاتصال، لم أتعرّف على مخطّط المسار. @@ -884,16 +888,16 @@ مفعّل معطّل - + اسمح بالصوت والڤِديو احجب الصوت والڤديو على بيانات الشبكة في المحمول فقط سيعمل الصوت والڤديو على الشبكة اللاسلكية - + احجب الصوت فقط - + احجب الصوت والڤِديو مفعّل diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 875f0fe2a..a1fb66b33 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -177,6 +177,8 @@ Abrir cunha aplicación Aparencia + + Personalizar da vista de lectura Non foi posíbel conectar. Non se recoñece este esquema de URL. @@ -214,6 +216,11 @@ Máis información + + Buscar %s + + Busca directamente desde a barra de enderezos + Abrir unha nova lapela de Firefox diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 2f401a876..1bf2da2d9 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -548,7 +548,7 @@ 북마크 도구모음 - 다른 북마크 + 기타 북마크 기록 diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 9c6288eb9..5cf56d20b 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -183,6 +183,8 @@ Vzhľad + + Prispôsobiť zobrazenie čítačky Nedá sa pripojiť. Nerozpoznaná forma URL. From 4f526b7af61a3583f53b47192960c319c767fd70 Mon Sep 17 00:00:00 2001 From: Sebastian Kaspari Date: Wed, 17 Mar 2021 14:51:05 +0100 Subject: [PATCH 103/149] Issue #17819: buildSrc: Use Maven Central instead of JCenter and use artifact cache. --- buildSrc/build.gradle | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 508a8d43d..c3d133e6a 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -7,5 +7,12 @@ plugins { } repositories { - jcenter() + if (project.hasProperty("centralRepo")) { + maven { + name "MavenCentral" + url project.property("centralRepo") + } + } else { + mavenCentral() + } } From 2fcc145394c0f56d444e3514bc25d9ae829d2c12 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 17 Mar 2021 15:32:29 +0000 Subject: [PATCH 104/149] Update Android Components version to 74.0.20210316190202. --- 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 caba2cefe..36fdb632c 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 = "74.0.20210316143123" + const val VERSION = "74.0.20210316190202" } From 51cbcf373a56bac7c3733c5e946f1433e8f2531c Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Thu, 18 Mar 2021 00:28:08 +0000 Subject: [PATCH 105/149] Import l10n. --- app/src/main/res/values-ar/strings.xml | 19 +++++ app/src/main/res/values-bg/strings.xml | 98 +++++++++++++++++++++- app/src/main/res/values-da/strings.xml | 7 ++ app/src/main/res/values-es-rCL/strings.xml | 2 + app/src/main/res/values-es/strings.xml | 5 ++ app/src/main/res/values-th/strings.xml | 2 + app/src/main/res/values-uk/strings.xml | 8 +- 7 files changed, 134 insertions(+), 7 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index a9e917d3a..d53a1fd2c 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -222,6 +222,11 @@ اطّلع على المزيد + + ابحث عن %s + + ابحث مباشرة من شريط العنوان + افتح في لسان Firefox جديد @@ -536,6 +541,10 @@ العلامات الأخرى التأريخ + + لسان جديد + + ابحث في الصفحة الألسنة المُزامنة @@ -891,14 +900,20 @@ اسمح بالصوت والڤِديو + + اسمح بالصوت والڤِديو احجب الصوت والڤديو على بيانات الشبكة في المحمول فقط سيعمل الصوت والڤديو على الشبكة اللاسلكية احجب الصوت فقط + + احجب الصوت فقط احجب الصوت والڤِديو + + احجب الصوت والڤِديو مفعّل @@ -1343,8 +1358,12 @@ امنع السكربتات الخبيثة من الوصول إلى جهازك لتعدين العملات رقميًا. مسجّلات البصمات + + يُوقف جمع البيانات الفريدة التي تُحدّد جهازك عن غيره والتي يمكن استعمالها لأغراض التعقّب. المحتوى الذي يتعقّبك + + يُوقف تحميل الإعلانات والڤِديوهات وغيرها من محتويات خارجية تحتوي على برمجيات تعقّب. قد يؤثّر هذا على سلوك بعض المواقع. متى ما رأيت الدرع بنفسجيًا اعرف أنّ %s حجب المتعقّبات في أحد المواقع. اضغط لتفاصيل أكثر. diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index ed2e3f428..3237b3f84 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -617,8 +617,12 @@ Затваряне Споделяне на избраните раздели + + Меню избрани раздели Премахване на раздела от спъсъка + + Избиране на раздели Затваряне на раздел @@ -652,7 +656,9 @@ Преименуване на списък Отваряне на раздели - + + Наименование на списък + Преименуване Премахване @@ -860,7 +866,7 @@ Включено Изключено - + Разрешаване на звук и видео @@ -960,10 +966,36 @@ Отваряне Изчистване и отваряне + + С подкрепата на + + Разделът е изтрит + + Разделите са изтрити + + Разделът е затворен + + Разделите са затворени + + Разделите са затворени! + + Поверителният раздел е затворен + + Поверителните раздели са затворени + + Поверителните раздели са затворени + + ОТМЕНЯНЕ + + Отменяне + + Потвърждаване Разрешете %1$s да отвори %2$s + + Наистина ли искате да изтриете %1$s? Изтриване на %1$s? @@ -981,10 +1013,14 @@ Размер на шрифт + + Изтриване на данни от разглеждане Отворени раздели %d раздела + + История на разглеждане и данни от страници %d адреса @@ -995,22 +1031,39 @@ %d страници Бисквитки + + Ще бъдете отписани от повечето страници Буферирани изображения и файлове Освобождава място за съхранение Права на страницата + + Изтегляния + + Изтриване на данни от разглеждане - Изтриване на история на разглеждане и изход + Изтриване на история при изход + + Автоматично изтрива историята на разглеждане, при избор на „Изход“ от главното меню + + Автоматично изтрива историята на разглеждане, при избор на \"Изход\" от главното меню Изход + + Това ще изтрие цялата история на разглеждане. + + %s ще изтрие избраните данни от историята на разглеждане. Отказ Изтриване + + Историята е изчистена + Преминете към новият Nightly @@ -1103,6 +1156,8 @@ Сканиране на код + + Изключване Отказ @@ -1187,12 +1242,23 @@ back from ETP details (Ex: Tracking content) --> Връщане назад + + Вашите права + + Използвани библиотеки с отворен код + + Какво е новото във %s %s | библиотеки с отворен код + + Пренасочващи проследявания + Поддръжка + + Сривове Политика на поверителност @@ -1283,6 +1349,28 @@ Научете повече + + Запазване + + Без запазване + + Паролата е копирана в системния буфер + + Потребителското име е копирано в системния буфер + + Копиране на парола + + Копиране на потребителско име + + Отваряне препратката в четеца + + Показване на парола + + Скриване на парола + + Отключете, за да видите запазените регистрации + + Защитете вашите данни за вход Меню за сортиране на регистрации @@ -1343,6 +1431,10 @@ Пароли + + Изтриване + + Изтриване Редактиране diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index b662bf04c..e139916e2 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -180,6 +180,8 @@ Udseende + + Tilpas læsevisning Ude af stand til at oprette forbindelse. Ikke-genkendelig URL-skema. @@ -216,6 +218,11 @@ Læs mere + + Søg med %s + + Søg direkte fra adressefeltet + Åbn et nyt Firefox-faneblad diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 4eb72f3c6..956f587b6 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -179,6 +179,8 @@ Apariencia + + Personalizar la vista del lector No se puede conectar. Esquema de URL irreconocible. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 4529d97c8..b44aff9e5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -187,6 +187,8 @@ Apariencia + + Personalizar vista de lectura No se puede conectar. Esquema de URL irreconocible. @@ -227,6 +229,9 @@ Buscar %1$s + + Busca directamente desde la barra de direcciones + Abrir una nueva pestaña de Firefox diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 1cf481e48..5c32b1cb6 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -179,6 +179,8 @@ ลักษณะที่ปรากฏ + + ปรับแต่งมุมมองผู้อ่าน ไม่สามารถเชื่อมต่อได้เนื่องจากเป็นรูปแบบ URL ที่ไม่รู้จัก diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index fba695ca0..6f0b58984 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -88,14 +88,14 @@ Перейти до налаштувань - Закрити + Відхилити Налаштуйте автоматичне закривання відкритих вкладок, які не переглядалися попереднього дня, тижня чи місяця. Перейти до параметрів - Закрити + Відхилити Змініть вигляд відкритих вкладок. Перейдіть до налаштувань і виберіть подання вкладок сіткою. @@ -567,7 +567,7 @@ Показати всю історію - %d вкладок + Вкладок: %d %d вкладка @@ -1422,7 +1422,7 @@ 1 вкладка - %d вкладок + Вкладок: %d From 38f906a685b8da4f2f57b479808b8398ee977ffb Mon Sep 17 00:00:00 2001 From: Codrut Topliceanu <60002907+codrut-topliceanu@users.noreply.github.com> Date: Thu, 18 Mar 2021 10:05:54 +0200 Subject: [PATCH 106/149] For #17805 - Fix adjustResize deprecation (#18252) * For #17805 - Fix adjustResize deprecation To handle the deprecation of `adjustResize` I've moved it from `styles.xml` and `AndroidManifest.xml` to `Activity.kt` as a fallback for devices with Android < 11. For Android 11 and up `setDecorFitsSystemWindows(false)` and `OnApplyWindowInsetsListener` will be used to handle app insets. Normal use activities should call `enableSystemInsetsHandling` in `onCreate` as to properly display system bars and for proper keyboard handling. --- app/src/main/AndroidManifest.xml | 7 ++- .../java/org/mozilla/fenix/HomeActivity.kt | 3 ++ .../customtabs/ExternalAppBrowserActivity.kt | 9 ++++ .../java/org/mozilla/fenix/ext/Activity.kt | 45 +++++++++++++++++++ .../fenix/search/SearchDialogFragment.kt | 11 +++-- .../settings/account/AuthCustomTabActivity.kt | 8 ++++ app/src/main/res/values/styles.xml | 2 - 7 files changed, 75 insertions(+), 10 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2b9d15bd9..e6e371cff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -77,8 +77,7 @@ android:configChanges="keyboard|keyboardHidden|mcc|mnc|orientation|screenSize|layoutDirection|smallestScreenSize|screenLayout" android:launchMode="singleTask" android:resizeableActivity="true" - android:supportsPictureInPicture="true" - android:windowSoftInputMode="adjustResize"> + android:supportsPictureInPicture="true"> @@ -135,7 +134,7 @@ android:taskAffinity="" android:resizeableActivity="true" android:supportsPictureInPicture="true" - android:windowSoftInputMode="adjustResize|stateAlwaysHidden" /> + android:windowSoftInputMode="stateAlwaysHidden" /> + android:windowSoftInputMode="stateAlwaysHidden" /> diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index a648c64a7..4961038ef 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -77,6 +77,7 @@ import org.mozilla.fenix.exceptions.trackingprotection.TrackingProtectionExcepti import org.mozilla.fenix.ext.alreadyOnDestination import org.mozilla.fenix.ext.breadcrumb import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.enableSystemInsetsHandling import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.settings @@ -254,6 +255,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { components.core.requestInterceptor.setNavigationController(navHost.navController) + enableSystemInsetsHandling() + StartupTimeline.onActivityCreateEndHome(this) // DO NOT MOVE ANYTHING BELOW HERE. } diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt index 689a6aa4c..0ab6311a0 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt @@ -5,6 +5,8 @@ package org.mozilla.fenix.customtabs import android.content.Intent +import android.os.Bundle +import android.os.PersistableBundle import androidx.annotation.VisibleForTesting import androidx.navigation.NavDestination import androidx.navigation.NavDirections @@ -20,6 +22,7 @@ import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.NavGraphDirections import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.enableSystemInsetsHandling import java.security.InvalidParameterException /** @@ -28,6 +31,12 @@ import java.security.InvalidParameterException */ @Suppress("TooManyFunctions") open class ExternalAppBrowserActivity : HomeActivity() { + + override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { + super.onCreate(savedInstanceState, persistentState) + enableSystemInsetsHandling() + } + override fun onResume() { super.onResume() diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index e70b3fa51..3f70af653 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -5,7 +5,12 @@ package org.mozilla.fenix.ext import android.app.Activity +import android.os.Build.VERSION +import android.os.Build.VERSION_CODES import android.view.View +import android.view.Window +import android.view.WindowInsets +import android.view.WindowInsets.Type import android.view.WindowManager import mozilla.components.concept.base.crash.Breadcrumb @@ -48,3 +53,43 @@ fun Activity.breadcrumb( ) ) } + +/** + * Handles inset changes for the whole activity. + * + * The deprecation of [WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE] in [VERSION_CODES.R] + * means inset changes have to be handled with a [View.OnApplyWindowInsetsListener]. + * [Window.setDecorFitsSystemWindows] false tells the system that the app will handle all insets. + * When a keyboard is opened [WindowInsets.getInsets] of [Type.ime] updates accordingly. + * + * See https://github.com/mozilla-mobile/fenix/issues/17805. + * */ +fun Activity.enableSystemInsetsHandling() { + if (VERSION.SDK_INT >= VERSION_CODES.R) { + val currentInsetTypes = mutableSetOf() + + currentInsetTypes.add(Type.systemBars()) + currentInsetTypes.add(Type.statusBars()) + currentInsetTypes.add(Type.mandatorySystemGestures()) + currentInsetTypes.add(Type.ime()) + + window.setDecorFitsSystemWindows(false) + + window.decorView.setOnApplyWindowInsetsListener { v, _ -> + val currentInsetTypeMask = currentInsetTypes.fold(0) { accumulator, type -> + accumulator or type + } + val insets = window.decorView.rootWindowInsets.getInsets(currentInsetTypeMask) + v.setPadding(insets.left, insets.top, insets.right, insets.bottom) + + WindowInsets.Builder() + .setInsets(currentInsetTypeMask, insets) + .build() + } + } else { + @Suppress("DEPRECATION") + window.setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE + ) + } +} 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 780724462..32ca97d5f 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -13,7 +13,8 @@ import android.content.Intent import android.graphics.Color import android.graphics.Typeface import android.graphics.drawable.ColorDrawable -import android.os.Build +import android.os.Build.VERSION +import android.os.Build.VERSION_CODES import android.os.Bundle import android.speech.RecognizerIntent import android.text.style.StyleSpan @@ -89,7 +90,8 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { // https://github.com/mozilla-mobile/fenix/issues/14279 // To prevent GeckoView from resizing we're going to change the softInputMode to not adjust // the size of the window. - requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING) + if (VERSION.SDK_INT < VERSION_CODES.R) + requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING) // Refocus the toolbar editing and show keyboard if the QR fragment isn't showing if (childFragmentManager.findFragmentByTag(QR_FRAGMENT_TAG) == null) { toolbarView.view.edit.focus() @@ -102,7 +104,8 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { // Let's reset back to the default behavior after we're done searching // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17805 @Suppress("DEPRECATION") - requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) + if (VERSION.SDK_INT < VERSION_CODES.R) + requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) } override fun onCreate(savedInstanceState: Bundle?) { @@ -346,7 +349,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { private fun updateAccessibilityTraversalOrder() { val searchWrapperId = search_wrapper.id - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP_MR1) { qr_scan_button.accessibilityTraversalAfter = searchWrapperId search_engines_shortcut_button.accessibilityTraversalAfter = searchWrapperId fill_link_from_clipboard.accessibilityTraversalAfter = searchWrapperId diff --git a/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt b/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt index 98b986dc7..2f6279001 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt @@ -4,17 +4,25 @@ package org.mozilla.fenix.settings.account +import android.os.Bundle +import android.os.PersistableBundle import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AuthType import mozilla.components.concept.sync.OAuthAccount import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.enableSystemInsetsHandling /** * A special custom tab for signing into a Firefox Account. The activity is closed once the user is signed in. */ class AuthCustomTabActivity : ExternalAppBrowserActivity() { + override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { + super.onCreate(savedInstanceState, persistentState) + enableSystemInsetsHandling() + } + private val accountStateObserver = object : AccountObserver { /** * Navigate away from this activity when we have successful authentication diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index c0d2b4ad2..90352f810 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -342,7 +342,6 @@ @style/Animation.Design.BottomSheetDialog true false - adjustResize false false @null @@ -619,7 +618,6 @@ @android:color/transparent true false - adjustResize false false @null From e1bf8c75a0198e4a099fea4498a5642f41105067 Mon Sep 17 00:00:00 2001 From: Jonathan Almeida Date: Thu, 18 Mar 2021 15:50:56 +0400 Subject: [PATCH 107/149] Enable new tabs tray only for debug builds --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index 005664eb6..53509b262 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -42,7 +42,7 @@ object FeatureFlags { /** * Enables the tabs tray re-write with Synced Tabs. */ - val tabsTrayRewrite = Config.channel.isNightlyOrDebug + val tabsTrayRewrite = Config.channel.isDebug /** * Enables the updated icon set look and feel. From 8a7c50bbef1de3f7374e0a517c00ae7e5c9b4d96 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Thu, 18 Mar 2021 13:18:14 -0400 Subject: [PATCH 108/149] For #17644: Always update add-on's telemetry values before sending metric ping (#18529) --- .../org/mozilla/fenix/components/Analytics.kt | 3 +- .../components/metrics/GleanMetricsService.kt | 50 ++++++++++---- .../components/metrics/MetricController.kt | 19 +++--- .../java/org/mozilla/fenix/utils/Settings.kt | 32 +++++++++ app/src/main/res/values/preference_keys.xml | 6 ++ .../metrics/GleanMetricsServiceTest.kt | 38 ++++++++++- .../metrics/MetricControllerTest.kt | 66 +++++++++++++++---- 7 files changed, 178 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/Analytics.kt b/app/src/main/java/org/mozilla/fenix/components/Analytics.kt index 00bfb6647..0ebcced02 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Analytics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Analytics.kt @@ -100,7 +100,8 @@ class Analytics( AdjustMetricsService(context as Application) ), isDataTelemetryEnabled = { context.settings().isTelemetryEnabled }, - isMarketingDataTelemetryEnabled = { context.settings().isMarketingTelemetryEnabled } + isMarketingDataTelemetryEnabled = { context.settings().isMarketingTelemetryEnabled }, + context.settings() ) } diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index f0cbcfaa0..1ac712a42 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -69,6 +69,7 @@ import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.utils.BrowsersCache +import org.mozilla.fenix.utils.Settings private class EventWrapper>( private val recorder: ((Map?) -> Unit), @@ -859,11 +860,20 @@ class GleanMetricsService( // setStartupMetrics is not a fast function. It does not need to be done before we can consider // ourselves initialized. So, let's do it, well, later. - setStartupMetrics() + setStartupMetrics(context.settings()) } } - internal fun setStartupMetrics() { + /** + * This function is called before the metrics ping is sent. Part of this function depends on + * shared preferences to be updated so the correct value is sent with the metrics ping. + * + * The reason we're using shared preferences to track some of these values is due to the + * limitations of the metrics ping. Events are only sent in a metrics ping if the user have made + * changes between each ping. However, in some cases we want current values to be sent even if + * the user have not changed anything between pings. + */ + internal fun setStartupMetrics(settings: Settings) { setPreferenceMetrics() with(Metrics) { defaultBrowser.set(browsersCache.all(context).isDefaultBrowser) @@ -873,46 +883,58 @@ class GleanMetricsService( mozillaProducts.set(mozillaProductDetector.getInstalledMozillaProducts(context)) - adjustCampaign.set(context.settings().adjustCampaignId) - adjustAdGroup.set(context.settings().adjustAdGroup) - adjustCreative.set(context.settings().adjustCreative) - adjustNetwork.set(context.settings().adjustNetwork) + adjustCampaign.set(settings.adjustCampaignId) + adjustAdGroup.set(settings.adjustAdGroup) + adjustCreative.set(settings.adjustCreative) + adjustNetwork.set(settings.adjustNetwork) - searchWidgetInstalled.set(context.settings().searchWidgetInstalled) + searchWidgetInstalled.set(settings.searchWidgetInstalled) - val openTabsCount = context.settings().openTabsCount + val openTabsCount = settings.openTabsCount hasOpenTabs.set(openTabsCount > 0) if (openTabsCount > 0) { tabsOpenCount.add(openTabsCount) } - val topSitesSize = context.settings().topSitesSize + val topSitesSize = settings.topSitesSize hasTopSites.set(topSitesSize > 0) if (topSitesSize > 0) { topSitesCount.add(topSitesSize) } - val desktopBookmarksSize = context.settings().desktopBookmarksSize + val installedAddonSize = settings.installedAddonsCount + Addons.hasInstalledAddons.set(installedAddonSize > 0) + if (installedAddonSize > 0) { + Addons.installedAddons.set(settings.installedAddonsList.split(',')) + } + + val enabledAddonSize = settings.enabledAddonsCount + Addons.hasEnabledAddons.set(enabledAddonSize > 0) + if (enabledAddonSize > 0) { + Addons.enabledAddons.set(settings.enabledAddonsList.split(',')) + } + + val desktopBookmarksSize = settings.desktopBookmarksSize hasDesktopBookmarks.set(desktopBookmarksSize > 0) if (desktopBookmarksSize > 0) { desktopBookmarksCount.add(desktopBookmarksSize) } - val mobileBookmarksSize = context.settings().mobileBookmarksSize + val mobileBookmarksSize = settings.mobileBookmarksSize hasMobileBookmarks.set(mobileBookmarksSize > 0) if (mobileBookmarksSize > 0) { mobileBookmarksCount.add(mobileBookmarksSize) } toolbarPosition.set( - when (context.settings().toolbarPosition) { + when (settings.toolbarPosition) { ToolbarPosition.BOTTOM -> Event.ToolbarPositionChanged.Position.BOTTOM.name ToolbarPosition.TOP -> Event.ToolbarPositionChanged.Position.TOP.name } ) - tabViewSetting.set(context.settings().getTabViewPingString()) - closeTabSetting.set(context.settings().getTabTimeoutPingString()) + tabViewSetting.set(settings.getTabViewPingString()) + closeTabSetting.set(settings.getTabTimeoutPingString()) } store.value.waitForSelectedOrDefaultSearchEngine { searchEngine -> diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt index 27fec25a7..41a144c69 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt @@ -34,9 +34,9 @@ import mozilla.components.support.base.facts.Facts import mozilla.components.support.base.log.logger.Logger import mozilla.components.support.webextensions.facts.WebExtensionFacts import org.mozilla.fenix.BuildConfig -import org.mozilla.fenix.GleanMetrics.Addons import org.mozilla.fenix.GleanMetrics.PerfAwesomebar import org.mozilla.fenix.search.awesomebar.ShortcutsSuggestionProvider +import org.mozilla.fenix.utils.Settings interface MetricController { fun start(type: MetricServiceType) @@ -47,13 +47,15 @@ interface MetricController { fun create( services: List, isDataTelemetryEnabled: () -> Boolean, - isMarketingDataTelemetryEnabled: () -> Boolean + isMarketingDataTelemetryEnabled: () -> Boolean, + settings: Settings ): MetricController { return if (BuildConfig.TELEMETRY) { ReleaseMetricController( services, isDataTelemetryEnabled, - isMarketingDataTelemetryEnabled + isMarketingDataTelemetryEnabled, + settings ) } else DebugMetricController() } @@ -83,7 +85,8 @@ internal class DebugMetricController( internal class ReleaseMetricController( private val services: List, private val isDataTelemetryEnabled: () -> Boolean, - private val isMarketingDataTelemetryEnabled: () -> Boolean + private val isMarketingDataTelemetryEnabled: () -> Boolean, + private val settings: Settings ) : MetricController { private var initialized = mutableSetOf() @@ -213,16 +216,16 @@ internal class ReleaseMetricController( Component.SUPPORT_WEBEXTENSIONS to WebExtensionFacts.Items.WEB_EXTENSIONS_INITIALIZED -> { metadata?.get("installed")?.let { installedAddons -> if (installedAddons is List<*>) { - Addons.installedAddons.set(installedAddons.map { it.toString() }) - Addons.hasInstalledAddons.set(installedAddons.size > 0) + settings.installedAddonsCount = installedAddons.size + settings.installedAddonsList = installedAddons.joinToString(",") Leanplum.setUserAttributes(mapOf("installed_addons" to installedAddons.size)) } } metadata?.get("enabled")?.let { enabledAddons -> if (enabledAddons is List<*>) { - Addons.enabledAddons.set(enabledAddons.map { it.toString() }) - Addons.hasEnabledAddons.set(enabledAddons.size > 0) + settings.enabledAddonsCount = enabledAddons.size + settings.enabledAddonsList = enabledAddons.joinToString() Leanplum.setUserAttributes(mapOf("enabled_addons" to enabledAddons.size)) } } 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 fb0a0ffe4..24478b24a 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -937,6 +937,38 @@ class Settings(private val appContext: Context) : PreferencesHolder { 0 ) + /** + * Storing number of installed add-ons for telemetry purposes + */ + var installedAddonsCount by intPreference( + appContext.getPreferenceKey(R.string.pref_key_installed_addons_count), + 0 + ) + + /** + * Storing the list of installed add-ons for telemetry purposes + */ + var installedAddonsList by stringPreference( + appContext.getPreferenceKey(R.string.pref_key_installed_addons_list), + default = "" + ) + + /** + * Storing number of enabled add-ons for telemetry purposes + */ + var enabledAddonsCount by intPreference( + appContext.getPreferenceKey(R.string.pref_key_enabled_addons_count), + 0 + ) + + /** + * Storing the list of enabled add-ons for telemetry purposes + */ + var enabledAddonsList by stringPreference( + appContext.getPreferenceKey(R.string.pref_key_enabled_addons_list), + default = "" + ) + private var savedLoginsSortingStrategyString by stringPreference( appContext.getPreferenceKey(R.string.pref_key_saved_logins_sorting_strategy), default = SavedLoginsSortingStrategyMenu.Item.AlphabeticallySort.strategyString diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 32fd7cbf1..b876ba6c1 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -217,6 +217,12 @@ pref_key_open_tabs_count + + pref_key_installed_addons_count + pref_key_installed_addons_list + pref_key_enabled_addons_count + pref_key_enabled_addons_list + pref_key_search_count pref_key_mobile_bookmarks_size diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt index e46ff7356..2cb344365 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/GleanMetricsServiceTest.kt @@ -7,6 +7,7 @@ package org.mozilla.fenix.components.metrics import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK +import io.mockk.mockk import mozilla.components.browser.state.store.BrowserStore import mozilla.components.service.glean.testing.GleanTestRule import mozilla.components.support.test.robolectric.testContext @@ -17,6 +18,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.GleanMetrics.Addons import org.mozilla.fenix.GleanMetrics.Awesomebar import org.mozilla.fenix.GleanMetrics.BookmarksManagement import org.mozilla.fenix.GleanMetrics.Events @@ -24,8 +26,10 @@ import org.mozilla.fenix.GleanMetrics.History import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.SearchDefaultEngine import org.mozilla.fenix.GleanMetrics.SyncedTabs +import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.BrowsersCache +import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class GleanMetricsServiceTest { @@ -48,16 +52,46 @@ class GleanMetricsServiceTest { @Test fun `setStartupMetrics sets some base metrics`() { val expectedAppName = "org.mozilla.fenix" + val settings: Settings = mockk() every { browsersCache.all(any()).isDefaultBrowser } returns true every { mozillaProductDetector.getMozillaBrowserDefault(any()) } returns expectedAppName every { mozillaProductDetector.getInstalledMozillaProducts(any()) } returns listOf(expectedAppName) - - gleanService.setStartupMetrics() + every { settings.adjustCampaignId } returns "ID" + every { settings.adjustAdGroup } returns "group" + every { settings.adjustCreative } returns "creative" + every { settings.adjustNetwork } returns "network" + every { settings.searchWidgetInstalled } returns true + every { settings.openTabsCount } returns 1 + every { settings.topSitesSize } returns 2 + every { settings.installedAddonsCount } returns 3 + every { settings.installedAddonsList } returns "test1,test2,test3" + every { settings.enabledAddonsCount } returns 2 + every { settings.enabledAddonsList } returns "test1,test2" + every { settings.desktopBookmarksSize } returns 4 + every { settings.mobileBookmarksSize } returns 5 + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.getTabViewPingString() } returns "test" + every { settings.getTabTimeoutPingString() } returns "test" + + gleanService.setStartupMetrics(settings) // Verify that browser defaults metrics are set. assertEquals(true, Metrics.defaultBrowser.testGetValue()) assertEquals(expectedAppName, Metrics.defaultMozBrowser.testGetValue()) assertEquals(listOf(expectedAppName), Metrics.mozillaProducts.testGetValue()) + assertEquals("ID", Metrics.adjustCampaign.testGetValue()) + assertEquals("group", Metrics.adjustAdGroup.testGetValue()) + assertEquals("creative", Metrics.adjustCreative.testGetValue()) + assertEquals("network", Metrics.adjustNetwork.testGetValue()) + assertEquals(true, Metrics.searchWidgetInstalled.testGetValue()) + assertEquals(true, Metrics.hasOpenTabs.testGetValue()) + assertEquals(1, Metrics.tabsOpenCount.testGetValue()) + assertEquals(true, Metrics.hasTopSites.testGetValue()) + assertEquals(2, Metrics.topSitesCount.testGetValue()) + assertEquals(true, Addons.hasInstalledAddons.testGetValue()) + assertEquals(listOf("test1", "test2", "test3"), Addons.installedAddons.testGetValue()) + assertEquals(true, Addons.hasEnabledAddons.testGetValue()) + assertEquals(listOf("test1", "test2"), Addons.enabledAddons.testGetValue()) // Verify that search engine defaults are NOT set. This test does // not mock most of the objects telemetry is collected from. diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt index 01fd81be2..52ecfcdcd 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt @@ -15,9 +15,11 @@ import mozilla.components.support.base.Component import mozilla.components.support.base.facts.Action import mozilla.components.support.base.facts.Fact import mozilla.components.support.base.log.logger.Logger +import mozilla.components.support.webextensions.facts.WebExtensionFacts import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test +import org.mozilla.fenix.utils.Settings class MetricControllerTest { @@ -57,7 +59,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( services = listOf(dataService1, marketingService1, dataService2, marketingService2), isDataTelemetryEnabled = { enabled }, - isMarketingDataTelemetryEnabled = { enabled } + isMarketingDataTelemetryEnabled = { enabled }, + mockk() ) controller.start(MetricServiceType.Data) @@ -83,7 +86,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( services = listOf(dataService1), isDataTelemetryEnabled = { false }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) controller.start(MetricServiceType.Data) @@ -99,7 +103,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( services = listOf(dataService1), isDataTelemetryEnabled = { enabled }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) controller.start(MetricServiceType.Data) @@ -119,7 +124,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( services = listOf(dataService1, marketingService1, dataService2, marketingService2), isDataTelemetryEnabled = { enabled }, - isMarketingDataTelemetryEnabled = { enabled } + isMarketingDataTelemetryEnabled = { enabled }, + mockk() ) controller.start(MetricServiceType.Marketing) @@ -145,7 +151,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( listOf(dataService1, marketingService1), isDataTelemetryEnabled = { true }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) every { dataService1.shouldTrack(Event.TabMediaPause) } returns false every { marketingService1.shouldTrack(Event.TabMediaPause) } returns true @@ -161,7 +168,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( listOf(dataService1, marketingService1), isDataTelemetryEnabled = { enabled }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) every { dataService1.shouldTrack(Event.TabMediaPause) } returns true every { marketingService1.shouldTrack(Event.TabMediaPause) } returns true @@ -179,7 +187,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( services = listOf(dataService1), isDataTelemetryEnabled = { enabled }, - isMarketingDataTelemetryEnabled = { enabled } + isMarketingDataTelemetryEnabled = { enabled }, + mockk() ) var fact = Fact( @@ -233,7 +242,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( listOf(marketingService1), isDataTelemetryEnabled = { true }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) every { marketingService1.shouldTrack(Event.SyncedTabSuggestionClicked) } returns true controller.start(MetricServiceType.Marketing) @@ -247,7 +257,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( listOf(marketingService1), isDataTelemetryEnabled = { true }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) every { marketingService1.shouldTrack(Event.BookmarkSuggestionClicked) } returns true every { marketingService1.shouldTrack(Event.ClipboardSuggestionClicked) } returns true @@ -281,7 +292,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( listOf(marketingService1), isDataTelemetryEnabled = { true }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) every { marketingService1.shouldTrack(Event.AddBookmark) } returns true every { marketingService1.shouldTrack(Event.RemoveBookmark) } returns true @@ -336,7 +348,8 @@ class MetricControllerTest { val controller = ReleaseMetricController( listOf(marketingService1), isDataTelemetryEnabled = { true }, - isMarketingDataTelemetryEnabled = { true } + isMarketingDataTelemetryEnabled = { true }, + mockk() ) every { marketingService1.shouldTrack(Event.HistoryOpenedInNewTab) } returns true every { marketingService1.shouldTrack(Event.HistoryOpenedInNewTabs) } returns true @@ -355,4 +368,35 @@ class MetricControllerTest { verify { marketingService1.track(Event.HistoryOpenedInPrivateTab) } verify { marketingService1.track(Event.HistoryOpenedInPrivateTabs) } } + + @Test + fun `web extension fact should set value in SharedPreference`() { + val enabled = true + val settings: Settings = mockk(relaxed = true) + val controller = ReleaseMetricController( + services = listOf(dataService1), + isDataTelemetryEnabled = { enabled }, + isMarketingDataTelemetryEnabled = { enabled }, + settings + ) + val fact = Fact( + Component.SUPPORT_WEBEXTENSIONS, + Action.INTERACTION, + WebExtensionFacts.Items.WEB_EXTENSIONS_INITIALIZED, + metadata = mapOf( + "installed" to listOf("test1"), + "enabled" to listOf("test2") + ) + ) + + verify(exactly = 0) { settings.installedAddonsCount = any() } + verify(exactly = 0) { settings.installedAddonsList = any() } + verify(exactly = 0) { settings.enabledAddonsCount = any() } + verify(exactly = 0) { settings.enabledAddonsList = any() } + controller.factToEvent(fact) + verify(exactly = 1) { settings.installedAddonsCount = any() } + verify(exactly = 1) { settings.installedAddonsList = any() } + verify(exactly = 1) { settings.enabledAddonsCount = any() } + verify(exactly = 1) { settings.enabledAddonsList = any() } + } } From 6f7b911c117fd8c502a3347cd43a7246d83b8562 Mon Sep 17 00:00:00 2001 From: Stefan Arentz Date: Thu, 18 Mar 2021 13:33:33 -0400 Subject: [PATCH 109/149] Enable the Nimbus experiments library on all channels (#18526) --- app/src/main/java/org/mozilla/fenix/FeatureFlags.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index 53509b262..3d7e85d24 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -17,7 +17,7 @@ object FeatureFlags { /** * Enables the Nimbus experiments library. */ - val nimbusExperiments = Config.channel.isNightlyOrDebug || Config.channel.isBeta + const val nimbusExperiments = true /** * Enables the Addresses autofill feature. From 10af28c977c1dbf864d626ba526758193959bb7f Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Fri, 19 Mar 2021 00:07:43 +0000 Subject: [PATCH 110/149] Import l10n. --- app/src/main/res/values-su/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index 4dc5c7319..c6cf03bb0 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -179,6 +179,8 @@ Pidangan + + Robah panémbong pamaca Teu bisa nyambung. Skéma URL teu dipikawanoh. From f9a52af98da5afeeb48dc81d250f2373c5d3dad6 Mon Sep 17 00:00:00 2001 From: mcarare Date: Thu, 18 Mar 2021 17:55:23 +0200 Subject: [PATCH 111/149] No issue: Update Android Components version to 74.0.20210318143143 Replaces deprecated method setToolbarColor(Int) in CustomTabsIntent.Builder. --- app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt | 5 ++++- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) 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 4068a5f65..7a7f3634d 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.settings import android.content.Context import android.content.Intent +import androidx.browser.customtabs.CustomTabColorSchemeParams import androidx.browser.customtabs.CustomTabsIntent import androidx.core.net.toUri import mozilla.components.support.ktx.android.content.appVersionName @@ -94,7 +95,9 @@ object SupportUtils { fun createCustomTabIntent(context: Context, url: String): Intent = CustomTabsIntent.Builder() .setInstantAppsEnabled(false) - .setToolbarColor(context.getColorFromAttr(R.attr.foundation)) + .setDefaultColorSchemeParams( + CustomTabColorSchemeParams.Builder().setToolbarColor(context.getColorFromAttr(R.attr.foundation)).build() + ) .build() .intent .setData(url.toUri()) diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 36fdb632c..f34c94006 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 = "74.0.20210316190202" + const val VERSION = "74.0.20210318143143" } From 79794962d083e1f547bdbb5f05dbb9d1fc5cdf5e Mon Sep 17 00:00:00 2001 From: Mihai Adrian Carare <48995920+mcarare@users.noreply.github.com> Date: Fri, 19 Mar 2021 03:49:09 +0200 Subject: [PATCH 112/149] Closes #12565: Clean up use of Context within ReviewPromptController. (#18537) --- .../mozilla/fenix/components/Components.kt | 5 ++-- .../components/ReviewPromptController.kt | 6 ++--- .../components/ReviewPromptControllerTest.kt | 23 ++++++++++++++----- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/Components.kt b/app/src/main/java/org/mozilla/fenix/components/Components.kt index 031b61e74..c451185f9 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Components.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Components.kt @@ -8,6 +8,7 @@ import android.app.Application import android.content.Context import android.content.Intent import androidx.core.net.toUri +import com.google.android.play.core.review.ReviewManagerFactory import mozilla.components.feature.addons.AddonManager import mozilla.components.feature.addons.amo.AddonCollectionProvider import mozilla.components.feature.addons.migration.DefaultSupportedAddonsChecker @@ -154,8 +155,8 @@ class Components(private val context: Context) { val reviewPromptController by lazyMonitored { ReviewPromptController( - context, - FenixReviewSettings(settings) + manager = ReviewManagerFactory.create(context), + reviewSettings = FenixReviewSettings(settings) ) } diff --git a/app/src/main/java/org/mozilla/fenix/components/ReviewPromptController.kt b/app/src/main/java/org/mozilla/fenix/components/ReviewPromptController.kt index 19b1f6ec3..2e8c185be 100644 --- a/app/src/main/java/org/mozilla/fenix/components/ReviewPromptController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/ReviewPromptController.kt @@ -5,9 +5,8 @@ package org.mozilla.fenix.components import android.app.Activity -import android.content.Context import androidx.annotation.VisibleForTesting -import com.google.android.play.core.review.ReviewManagerFactory +import com.google.android.play.core.review.ReviewManager import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.withContext import org.mozilla.fenix.utils.Settings @@ -41,11 +40,10 @@ class FenixReviewSettings( * Controls the Review Prompt behavior. */ class ReviewPromptController( - private val context: Context, + private val manager: ReviewManager, private val reviewSettings: ReviewSettings, private val timeNowInMillis: () -> Long = { System.currentTimeMillis() }, private val tryPromptReview: suspend (Activity) -> Unit = { activity -> - val manager = ReviewManagerFactory.create(context) val flow = manager.requestReviewFlow() withContext(Main) { diff --git a/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt index 53e62f2f0..5668fa4b6 100644 --- a/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/ReviewPromptControllerTest.kt @@ -4,6 +4,8 @@ package org.mozilla.fenix.components +import com.google.android.play.core.review.ReviewManager +import com.google.android.play.core.review.ReviewManagerFactory import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runBlockingTest import mozilla.components.support.test.robolectric.testContext @@ -11,6 +13,7 @@ import org.junit.Test import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Assert.assertFalse +import org.junit.Before import org.junit.runner.RunWith import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @@ -27,6 +30,14 @@ class TestReviewSettings( @ExperimentalCoroutinesApi @RunWith(FenixRobolectricTestRunner::class) class ReviewPromptControllerTest { + + private lateinit var reviewManager: ReviewManager + + @Before + fun setUp() { + reviewManager = ReviewManagerFactory.create(testContext) + } + @Test fun promptReviewDoesNotSetMillis() = runBlockingTest { var promptWasCalled = false @@ -37,7 +48,7 @@ class ReviewPromptControllerTest { ) val controller = ReviewPromptController( - testContext, + reviewManager, settings, { 100L }, { promptWasCalled = true } @@ -60,7 +71,7 @@ class ReviewPromptControllerTest { ) val controller = ReviewPromptController( - testContext, + reviewManager, settings, { 100L }, { promptWasCalled = true } @@ -82,7 +93,7 @@ class ReviewPromptControllerTest { ) val controller = ReviewPromptController( - testContext, + reviewManager, settings, { 100L }, { promptWasCalled = true } @@ -102,7 +113,7 @@ class ReviewPromptControllerTest { ) val controller = ReviewPromptController( - testContext, + reviewManager, settings, { 100L }, { promptWasCalled = true } @@ -126,7 +137,7 @@ class ReviewPromptControllerTest { ) val controller = ReviewPromptController( - testContext, + reviewManager, settings, { 0L } ) @@ -149,7 +160,7 @@ class ReviewPromptControllerTest { ) val controller = ReviewPromptController( - testContext, + reviewManager, settings, { TEST_TIME_NOW } ) From 27e52b7e3d25a8b213e69bd97ca281db982c0e6a Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Fri, 19 Mar 2021 10:53:36 -0400 Subject: [PATCH 113/149] Closes #17956: Add top site telemetry to available search engines (#18129) --- .../SessionControlController.kt | 34 +++++++-------- .../DefaultSessionControlControllerTest.kt | 41 +++++++++++++++++++ 2 files changed, 56 insertions(+), 19 deletions(-) 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 711e668c5..8339d8c87 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 @@ -13,6 +13,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.browser.state.selector.getNormalOrPrivateTabs +import mozilla.components.browser.state.state.availableSearchEngines import mozilla.components.browser.state.state.searchEngines import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine import mozilla.components.browser.state.store.BrowserStore @@ -384,19 +385,18 @@ class DefaultSessionControlController( metrics.track(Event.PocketTopSiteClicked) } - if (SupportUtils.GOOGLE_URL.equals(url, true)) { - val availableEngines = getAvailableSearchEngines() + val availableEngines = getAvailableSearchEngines() - val searchAccessPoint = Event.PerformedSearch.SearchAccessPoint.TOPSITE - val event = - availableEngines.firstOrNull { engine -> engine.suggestUrl?.contains(url) == true } - ?.let { searchEngine -> - searchAccessPoint.let { sap -> - MetricsUtils.createSearchEvent(searchEngine, store, sap) - } - } - event?.let { activity.metrics.track(it) } - } + val searchAccessPoint = Event.PerformedSearch.SearchAccessPoint.TOPSITE + val event = + availableEngines.firstOrNull { + engine -> engine.resultUrls.firstOrNull { it.contains(url) } != null + }?.let { + searchEngine -> searchAccessPoint.let { sap -> + MetricsUtils.createSearchEvent(searchEngine, store, sap) + } + } + event?.let { activity.metrics.track(it) } addTabUseCase.invoke( url = appendSearchAttributionToUrlIfNeeded(url), @@ -407,13 +407,9 @@ class DefaultSessionControlController( } @VisibleForTesting - internal fun getAvailableSearchEngines() = activity - .components - .core - .store - .state - .search - .searchEngines + internal fun getAvailableSearchEngines() = + activity.components.core.store.state.search.searchEngines + + activity.components.core.store.state.search.availableSearchEngines /** * Append a search attribution query to any provided search engine URL based on the 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 794d34039..99fbaaf96 100644 --- a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt @@ -101,6 +101,15 @@ class DefaultSessionControlControllerTest { suggestUrl = "https://www.google.com/" ) + private val duckDuckGoSearchEngine = SearchEngine( + id = "ddgTest", + name = "DuckDuckGo Test Engine", + icon = mockk(relaxed = true), + type = SearchEngine.Type.BUNDLED, + resultUrls = listOf("https://duckduckgo.com/?q=%7BsearchTerms%7D&t=fpas"), + suggestUrl = "https://ac.duckduckgo.com/ac/?q=%7BsearchTerms%7D&type=list" + ) + private lateinit var store: BrowserStore private lateinit var controller: DefaultSessionControlController @@ -374,6 +383,7 @@ class DefaultSessionControlControllerTest { @Test fun handleSelectDefaultTopSite() { val topSiteUrl = "mozilla.org" + every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) controller.handleSelectTopSite(topSiteUrl, TopSite.Type.DEFAULT) verify { metrics.track(Event.TopSiteOpenInNewTab) } @@ -391,6 +401,7 @@ class DefaultSessionControlControllerTest { @Test fun handleSelectNonDefaultTopSite() { val topSiteUrl = "mozilla.org" + every { controller.getAvailableSearchEngines() } returns listOf(searchEngine) controller.handleSelectTopSite(topSiteUrl, TopSite.Type.FRECENT) verify { metrics.track(Event.TopSiteOpenInNewTab) } @@ -466,6 +477,36 @@ class DefaultSessionControlControllerTest { ) ) ) + metrics.track(Event.TopSiteOpenGoogle) + metrics.track(Event.TopSiteOpenDefault) + } + } finally { + unmockkStatic("mozilla.components.browser.state.state.SearchStateKt") + } + } + + @Test + fun handleSelectDuckDuckGoTopSite_EventPerformedSearchTopSite() { + val topSiteUrl = "https://duckduckgo.com" + val engineSource = EngineSource.Shortcut(duckDuckGoSearchEngine, false) + every { controller.getAvailableSearchEngines() } returns listOf(googleSearchEngine, duckDuckGoSearchEngine) + try { + mockkStatic("mozilla.components.browser.state.state.SearchStateKt") + + every { any().selectedOrDefaultSearchEngine } returns googleSearchEngine + + controller.handleSelectTopSite(topSiteUrl, TopSite.Type.PINNED) + + verify { + metrics.track( + Event.PerformedSearch( + Event.PerformedSearch.EventSource.TopSite( + engineSource + ) + ) + ) + + metrics.track(Event.TopSiteOpenPinned) } } finally { unmockkStatic("mozilla.components.browser.state.state.SearchStateKt") From 70c3e1777bf27b999a45010c920a94c320431a2f Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Fri, 19 Mar 2021 15:34:46 +0000 Subject: [PATCH 114/149] Update Android Components version to 74.0.20210318232824. --- 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 f34c94006..1d1b47280 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 = "74.0.20210318143143" + const val VERSION = "74.0.20210318232824" } From d2ffaa85f902441a2f24ad6386d3d0d85049f71a Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Fri, 19 Mar 2021 14:13:24 -0400 Subject: [PATCH 115/149] Closes #17531: Use shared preference to store top sites count for telemetry (#18557) --- .../java/org/mozilla/fenix/HomeActivity.kt | 4 -- .../mozilla/fenix/components/metrics/Event.kt | 3 -- .../components/metrics/GleanMetricsService.kt | 7 --- .../components/metrics/MetricController.kt | 6 +-- .../metrics/MetricControllerTest.kt | 50 +++---------------- 5 files changed, 9 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 4961038ef..7520d8a04 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -362,10 +362,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { window.addFlags(FLAG_SECURE) } - // We will remove this when AC code lands to emit a fact on getTopSites in DefaultTopSitesStorage - // https://github.com/mozilla-mobile/android-components/issues/8679 - settings().topSitesSize = components.core.topSitesStorage.cachedTopSites.size - lifecycleScope.launch(IO) { components.core.bookmarksStorage.getTree(BookmarkRoot.Root.id, true)?.let { val desktopRootNode = DesktopFolders( 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 b0f0f32d7..c6d17dfed 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 @@ -216,9 +216,6 @@ sealed class Event { object ContextMenuSelectAllTapped : Event() object ContextMenuShareTapped : Event() - object HaveTopSites : Event() - object HaveNoTopSites : Event() - object SyncedTabSuggestionClicked : Event() object BookmarkSuggestionClicked : Event() object ClipboardSuggestionClicked : Event() diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt index 1ac712a42..6ae3601b3 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/GleanMetricsService.kt @@ -751,13 +751,6 @@ private val Event.wrapper: EventWrapper<*>? Event.HaveNoOpenTabs -> EventWrapper( { Metrics.hasOpenTabs.set(false) } ) - Event.HaveTopSites -> EventWrapper( - { Metrics.hasTopSites.set(true) } - ) - Event.HaveNoTopSites -> EventWrapper( - { Metrics.hasTopSites.set(false) } - ) - is Event.BannerOpenInAppDisplayed -> EventWrapper( { BannerOpenInApp.displayed.record(it) } ) diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt index 41a144c69..181ff4ea2 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/MetricController.kt @@ -266,11 +266,7 @@ internal class ReleaseMetricController( // Do nothing } - return if (count > 0) { - Event.HaveTopSites - } else { - Event.HaveNoTopSites - } + settings.topSitesSize = count } null } diff --git a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt index 52ecfcdcd..2a824564f 100644 --- a/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/metrics/MetricControllerTest.kt @@ -16,7 +16,6 @@ import mozilla.components.support.base.facts.Action import mozilla.components.support.base.facts.Fact import mozilla.components.support.base.log.logger.Logger import mozilla.components.support.webextensions.facts.WebExtensionFacts -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.mozilla.fenix.utils.Settings @@ -182,59 +181,26 @@ class MetricControllerTest { } @Test - fun `topsites fact should convert to the right events`() { - var enabled = true + fun `topsites fact should set value in SharedPreference`() { + val enabled = true + val settings: Settings = mockk(relaxed = true) val controller = ReleaseMetricController( services = listOf(dataService1), isDataTelemetryEnabled = { enabled }, isMarketingDataTelemetryEnabled = { enabled }, - mockk() + settings ) - var fact = Fact( + val fact = Fact( Component.FEATURE_TOP_SITES, Action.INTERACTION, TopSitesFacts.Items.COUNT, "1" ) - assertEquals(controller.factToEvent(fact), Event.HaveTopSites) - - fact = Fact( - Component.FEATURE_TOP_SITES, - Action.INTERACTION, - TopSitesFacts.Items.COUNT, - "0" - ) - - assertEquals(controller.factToEvent(fact), Event.HaveNoTopSites) - - fact = Fact( - Component.FEATURE_TOP_SITES, - Action.INTERACTION, - TopSitesFacts.Items.COUNT, - "10" - ) - - assertEquals(controller.factToEvent(fact), Event.HaveTopSites) - - fact = Fact( - Component.FEATURE_TOP_SITES, - Action.INTERACTION, - TopSitesFacts.Items.COUNT, - "-4" - ) - - assertEquals(controller.factToEvent(fact), Event.HaveNoTopSites) - - fact = Fact( - Component.FEATURE_TOP_SITES, - Action.INTERACTION, - TopSitesFacts.Items.COUNT, - "test" - ) - - assertEquals(controller.factToEvent(fact), Event.HaveNoTopSites) + verify(exactly = 0) { settings.topSitesSize = any() } + controller.factToEvent(fact) + verify(exactly = 1) { settings.topSitesSize = any() } } @Test From 5c0f30fd5ce7765695bfa3956ba0cb8079c952d1 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Thu, 18 Mar 2021 10:38:34 -0700 Subject: [PATCH 116/149] For #18426: add TimingDistributionMetricType.measureNoInline. This addresses an issue I found in my follow-up PR. --- .../main/java/org/mozilla/fenix/ext/Glean.kt | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 app/src/main/java/org/mozilla/fenix/ext/Glean.kt diff --git a/app/src/main/java/org/mozilla/fenix/ext/Glean.kt b/app/src/main/java/org/mozilla/fenix/ext/Glean.kt new file mode 100644 index 000000000..9964aec42 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/ext/Glean.kt @@ -0,0 +1,31 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.fenix.ext + +import mozilla.telemetry.glean.private.TimingDistributionMetricType + +/** + * A reimplementation of [TimingDistributionMetricType.measure] that address unintuitive + * issues around non-local returns: see https://bugzilla.mozilla.org/show_bug.cgi?id=1699505. + * This should be removed once that bug is resolved. That method's kdoc is as follows: + * + * Convenience method to simplify measuring a function or block of code. + * + * If the measured function throws, the measurement is canceled and the exception rethrown. + */ +@Suppress("TooGenericExceptionCaught") +fun TimingDistributionMetricType.measureNoInline(funcToMeasure: () -> U): U { + val timerId = start() + + val returnValue = try { + funcToMeasure() + } catch (e: Exception) { + cancel(timerId) + throw e + } + + stopAndAccumulate(timerId) + return returnValue +} From 9024eca01e6e1e2a394bb6d44290c3f633fa5714 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Wed, 17 Mar 2021 10:35:50 -0700 Subject: [PATCH 117/149] For #18426: add telemetry for app.onCreate subsections. Hopefully this will help us understand behavior of the `application_on_create` probe, specifically that it seems to take longer in telemetry than in does locally compared to `home_activity_on_create` (comparing the medians to local runs).. --- app/metrics.yaml | 59 +++++++++++++- .../org/mozilla/fenix/FenixApplication.kt | 80 +++++++++++-------- .../java/org/mozilla/fenix/HomeActivity.kt | 3 +- docs/metrics.md | 5 +- 4 files changed, 109 insertions(+), 38 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index 6b37e9d31..a10a5b626 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4130,7 +4130,9 @@ perf.startup: type: timing_distribution time_unit: millisecond description: | - The duration of `FenixApplication.onCreate` in the main process. + The duration of `FenixApplication.onCreate` in the main process. This does + not measure the duration of migration code (via + `MigratingFenixApplication` included in the Beta and Release channels. bugs: - https://github.com/mozilla-mobile/fenix/issues/17969 data_reviews: @@ -4141,6 +4143,61 @@ perf.startup: - perf-android-fe@mozilla.com - mcomella@mozilla.com expires: "2021-08-11" + app_on_create_to_glean_init: + type: timing_distribution + time_unit: millisecond + description: | + A subsection of the duration of `FenixApplication.onCreate` and thus the + `application_on_create` probe from the start of the method through when + `initializeGlean` is called. Note: `initializeGlean` is a no-op for Beta + and Release builds which instead initialize it during + `MigratingFenixApplication`, which we don't currently measure. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + app_on_create_to_megazord_init: + type: timing_distribution + time_unit: millisecond + description: | + A subsection of the duration of `FenixApplication.onCreate` and thus the + `application_on_create` probe from after the `app_on_create_to_glean_init` + probe until we block for the megazord to complete set up. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + app_on_create_to_setup_in_main: + type: timing_distribution + time_unit: millisecond + description: | + A subsection of the duration of `FenixApplication.onCreate` and thus the + `application_on_create` probe from after the + `app_on_create_to_megazord_init` probe until the end of + `setupInMainProcessOnly`, which is expected to be the end of the + `onCreate` call (unless the implementation later changes). + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" home_activity_on_create: type: timing_distribution time_unit: millisecond diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 713bdf69e..e996309c1 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -49,6 +49,7 @@ import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.components.Components import org.mozilla.fenix.components.metrics.MetricServiceType import org.mozilla.fenix.components.metrics.SecurePrefsTelemetry +import org.mozilla.fenix.ext.measureNoInline import org.mozilla.fenix.ext.settings import org.mozilla.fenix.perf.ProfilerMarkerFactProcessor import org.mozilla.fenix.perf.StartupTimeline @@ -79,7 +80,10 @@ open class FenixApplication : LocaleAwareApplication(), Provider { private set override fun onCreate() { - val methodDurationTimerId = PerfStartup.applicationOnCreate.start() // DO NOT MOVE ANYTHING ABOVE HERE. + // We use start/stop instead of measure so we don't measure outside the main process. + val completeMethodDurationTimerId = PerfStartup.applicationOnCreate.start() // DO NOT MOVE ANYTHING ABOVE HERE. + val subsectionThroughGleanTimerId = PerfStartup.appOnCreateToGleanInit.start() + super.onCreate() setupInAllProcesses() @@ -100,10 +104,12 @@ open class FenixApplication : LocaleAwareApplication(), Provider { initializeGlean() } + PerfStartup.appOnCreateToGleanInit.stopAndAccumulate(subsectionThroughGleanTimerId) + setupInMainProcessOnly() - // We use start/stop instead of measure so we don't measure outside the main process. - PerfStartup.applicationOnCreate.stopAndAccumulate(methodDurationTimerId) // DO NOT MOVE ANYTHING BELOW HERE. + // DO NOT MOVE ANYTHING BELOW THIS stop CALL. + PerfStartup.applicationOnCreate.stopAndAccumulate(completeMethodDurationTimerId) } protected open fun initializeGlean() { @@ -141,48 +147,52 @@ open class FenixApplication : LocaleAwareApplication(), Provider { @CallSuper open fun setupInMainProcessOnly() { - ProfilerMarkerFactProcessor.create { components.core.engine.profiler }.register() + PerfStartup.appOnCreateToMegazordInit.measureNoInline { + ProfilerMarkerFactProcessor.create { components.core.engine.profiler }.register() - run { - // Attention: Do not invoke any code from a-s in this scope. - val megazordSetup = setupMegazord() + run { + // Attention: Do not invoke any code from a-s in this scope. + val megazordSetup = setupMegazord() - setDayNightTheme() - components.strictMode.enableStrictMode(true) - warmBrowsersCache() + setDayNightTheme() + components.strictMode.enableStrictMode(true) + warmBrowsersCache() - // Make sure the engine is initialized and ready to use. - components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) { - components.core.engine.warmUp() - } - initializeWebExtensionSupport() - restoreBrowserState() - restoreDownloads() - - // Just to make sure it is impossible for any application-services pieces - // to invoke parts of itself that require complete megazord initialization - // before that process completes, we wait here, if necessary. - if (!megazordSetup.isCompleted) { - runBlockingIncrement { megazordSetup.await() } + // Make sure the engine is initialized and ready to use. + components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) { + components.core.engine.warmUp() + } + initializeWebExtensionSupport() + restoreBrowserState() + restoreDownloads() + + // Just to make sure it is impossible for any application-services pieces + // to invoke parts of itself that require complete megazord initialization + // before that process completes, we wait here, if necessary. + if (!megazordSetup.isCompleted) { + runBlockingIncrement { megazordSetup.await() } + } } } - setupLeakCanary() - startMetricsIfEnabled() - setupPush() + PerfStartup.appOnCreateToSetupInMain.measureNoInline { + setupLeakCanary() + startMetricsIfEnabled() + setupPush() - visibilityLifecycleCallback = VisibilityLifecycleCallback(getSystemService()) - registerActivityLifecycleCallbacks(visibilityLifecycleCallback) + visibilityLifecycleCallback = VisibilityLifecycleCallback(getSystemService()) + registerActivityLifecycleCallbacks(visibilityLifecycleCallback) - // Storage maintenance disabled, for now, as it was interfering with background migrations. - // See https://github.com/mozilla-mobile/fenix/issues/7227 for context. - // if ((System.currentTimeMillis() - settings().lastPlacesStorageMaintenance) > ONE_DAY_MILLIS) { - // runStorageMaintenance() - // } + // Storage maintenance disabled, for now, as it was interfering with background migrations. + // See https://github.com/mozilla-mobile/fenix/issues/7227 for context. + // if ((System.currentTimeMillis() - settings().lastPlacesStorageMaintenance) > ONE_DAY_MILLIS) { + // runStorageMaintenance() + // } - initVisualCompletenessQueueAndQueueTasks() + initVisualCompletenessQueueAndQueueTasks() - components.appStartupTelemetry.onFenixApplicationOnCreate() + components.appStartupTelemetry.onFenixApplicationOnCreate() + } } private fun restoreBrowserState() = GlobalScope.launch(Dispatchers.Main) { diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 7520d8a04..a3f577ac5 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -78,6 +78,7 @@ import org.mozilla.fenix.ext.alreadyOnDestination import org.mozilla.fenix.ext.breadcrumb import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.enableSystemInsetsHandling +import org.mozilla.fenix.ext.measureNoInline import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.settings @@ -165,7 +166,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { private lateinit var navigationToolbar: Toolbar - final override fun onCreate(savedInstanceState: Bundle?): Unit = PerfStartup.homeActivityOnCreate.measure { + final override fun onCreate(savedInstanceState: Bundle?): Unit = PerfStartup.homeActivityOnCreate.measureNoInline { // DO NOT MOVE ANYTHING ABOVE THIS addMarker CALL. components.core.engine.profiler?.addMarker("Activity.onCreate", "HomeActivity") diff --git a/docs/metrics.md b/docs/metrics.md index 3ccfdb27f..3feeb4ce8 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -341,7 +341,10 @@ In addition to those built-in metrics, the following metrics are added to the pi | perf.awesomebar.session_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a session awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | | perf.awesomebar.shortcuts_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a shortcuts awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | | perf.awesomebar.synced_tabs_suggestions |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |Duration of a synced tabs awesomebar suggestion query. |[mozilla-mobile/fenix#10276](https://github.com/mozilla-mobile/fenix/pull/10276#pullrequestreview-411101979)||2020-11-15 |1, 2 | -| perf.startup.application_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `FenixApplication.onCreate` in the main process. |[mozilla-mobile/fenix#17973](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | +| perf.startup.app_on_create_to_glean_init |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |A subsection of the duration of `FenixApplication.onCreate` and thus the `application_on_create` probe from the start of the method through when `initializeGlean` is called. Note: `initializeGlean` is a no-op for Beta and Release builds which instead initialize it during `MigratingFenixApplication`, which we don't currently measure. |[mozilla-mobile/fenix#18525](https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170)||2021-08-11 |1 | +| perf.startup.app_on_create_to_megazord_init |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |A subsection of the duration of `FenixApplication.onCreate` and thus the `application_on_create` probe from after the `app_on_create_to_glean_init` probe until we block for the megazord to complete set up. |[mozilla-mobile/fenix#18525](https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170)||2021-08-11 |1 | +| perf.startup.app_on_create_to_setup_in_main |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |A subsection of the duration of `FenixApplication.onCreate` and thus the `application_on_create` probe from after the `app_on_create_to_megazord_init` probe until the end of `setupInMainProcessOnly`, which is expected to be the end of the `onCreate` call (unless the implementation later changes). |[mozilla-mobile/fenix#18525](https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170)||2021-08-11 |1 | +| perf.startup.application_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `FenixApplication.onCreate` in the main process. This does not measure the duration of migration code (via `MigratingFenixApplication` included in the Beta and Release channels. |[mozilla-mobile/fenix#17973](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | | perf.startup.home_activity_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeActivity.onCreate`. |[mozilla-mobile/fenix#17973](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | | preferences.accessibility_services |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has touch exploration or switch services enabled. These are built into the Android OS, not Fenix prefs. default: "" |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | preferences.open_links_in_a_private_tab |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled open links in a private tab. default: false |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From 7b1097e4055e08ed31028f22170affbeba639f86 Mon Sep 17 00:00:00 2001 From: Gregory Mierzwinski Date: Fri, 19 Mar 2021 15:14:31 -0400 Subject: [PATCH 118/149] Bug 1699639 - Run browsertime tests in python3. (#18554) This patch fixes an issue with the python version being used to run the browsertime tests. --- taskcluster/ci/browsertime/kind.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/taskcluster/ci/browsertime/kind.yml b/taskcluster/ci/browsertime/kind.yml index 2c2f7d6a1..486b557a3 100644 --- a/taskcluster/ci/browsertime/kind.yml +++ b/taskcluster/ci/browsertime/kind.yml @@ -62,6 +62,8 @@ job-defaults: NEED_XVFB: "false" NO_FAIL_ON_TEST_ERRORS: "1" XPCOM_DEBUG_BREAK: "warn" + PYTHON: "python3" + LANG: "en_US.UTF-8" artifacts: - name: public/logs/ path: workspace/logs From b12222503b9d8a871bf6dd75c3acaa61897ec7d0 Mon Sep 17 00:00:00 2001 From: Stefan Arentz Date: Fri, 19 Mar 2021 16:39:24 -0400 Subject: [PATCH 119/149] [SDK-218] Nimbus updates to provide app_name and channel (#18559) * [SDK-218] Nimbus updates to provide app_name and channel Provides the `app_name` and `channel` info to Nimbus. * Update to A-C Nightly 74.0.20210319190549 Co-authored-by: Travis Long --- .../org/mozilla/fenix/experiments/NimbusSetup.kt | 14 +++++++++++++- buildSrc/src/main/java/AndroidComponents.kt | 2 +- 2 files changed, 14 insertions(+), 2 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 1622e79da..49c3bef1e 100644 --- a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt +++ b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt @@ -10,9 +10,11 @@ import android.os.StrictMode import io.sentry.Sentry import mozilla.components.service.nimbus.NimbusApi import mozilla.components.service.nimbus.Nimbus +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.mozilla.fenix.Config import org.mozilla.fenix.components.isSentryEnabled import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -37,7 +39,17 @@ fun createNimbus(context: Context, url: String?): NimbusApi = context.settings().isExperimentationEnabled } - Nimbus(context, serverSettings).apply { + // 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", + channel = Config.channel.toString() + ) + Nimbus(context, appInfo, serverSettings).apply { // This performs the minimal amount of work required to load branch and enrolment data // into memory. If `getExperimentBranch` is called from another thread between here // and the next nimbus disk write (setting `globalUserParticipation` or diff --git a/buildSrc/src/main/java/AndroidComponents.kt b/buildSrc/src/main/java/AndroidComponents.kt index 1d1b47280..51e789656 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 = "74.0.20210318232824" + const val VERSION = "74.0.20210319190549" } From 17fe128939266459600c41a5abfe729bb3a5a77c Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sat, 20 Mar 2021 00:05:53 +0000 Subject: [PATCH 120/149] Import l10n. --- app/src/main/res/values-be/strings.xml | 2 ++ app/src/main/res/values-hy-rAM/strings.xml | 25 ++++++++++++++-- app/src/main/res/values-oc/strings.xml | 34 +++++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index df41cc5be..ff2922f3d 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -180,6 +180,8 @@ Выгляд + + Уладкаваць рэжым чытання Немагчыма злучыцца. Невядомая схема URL. diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index e955db150..df84e9c82 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -130,6 +130,8 @@ Խմբագրել Էջանիշը Հավելումներ + + Ընդլայնումներ Հավելումներ չկան @@ -179,6 +181,8 @@ Տեսք + + Հարմարեցնել ընթերցման դիտումը Հնարավոր չէ կապակցվել: Անճանաչելի URL ուրվակազմ: @@ -215,6 +219,11 @@ Իմանալ ավելին + + Որոնել %s + + Որոնել ուղղակիրոեն հասցեագոտուց + Բացել Firefox-ի նոր ներդիր @@ -527,6 +536,10 @@ Այլ էջանիշեր Պատմություն + + Նոր ներդիր + + Գտնել էջում Համաժամեցված ներդիրներ @@ -879,16 +892,22 @@ Անջ. - + Թույլատրել ձայնանյութը և տեսանյութը + + Թույլատրել ձայնանյութը և տեսանյութը Արգելափակել ձայնանյութը և տեսանյութը միայն բջջային տվյալներում Ձայնանյութը և տեսանյութը կնվագարկվեն միայն Wi-Fi-ով - + Արգելափակել միայն ձայնանյութը - + + Արգելափակել միայն ձայնանյութը + Արգելափակել ձայնանյութը և տեսանյութը + + Արգելափակել ձայնանյութը և տեսանյութը Միաց. diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index 1dbdc5080..1270e3c16 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -1177,10 +1177,19 @@ Descobrissètz %s Descobrissètz las novetats + + Avètz de question tocant lo nòu %s ? Volètz saber çò que cambièt ? Trobatz de responsas aquí + + Començatz de sincronizar los marcapaginas, senhals e mai amb vòstre compte Firefox Ne saber mai + + Sètz connectat coma %s sus un autre navegador Firefox amb aqueste periferic. Volètz vos connectar amb aqueste compte ? Òc, connectatz-me @@ -1212,15 +1221,22 @@ In English this is an idiom for "choose a side as in an argument or fight" but it is ok to make this more literally about "choosing a position in a physical space --> Prenètz posicion + + Ensajatz la navegacion amb la man amb la barra d’aisinas inferiora o deplaçatz-la ennaut. Navegatz d’un biais privat Dobrir un sol onglet privat : tocatz l’icòna %s. + + Dobrir d’onglets privats cada còp : definissètz vòstres paramètres de navigacion privada. Dobrir los paramètres Vòstra vida privada + + Concebèrem %s per vos donar lo contraròtle de çò que partejatz en linha e çò que partejatz amb nosautres. Legissètz nòstra politica de confidencialitat @@ -1337,8 +1353,12 @@ Limita la capacitat dels malhums socials de seguir vòstra activitat en linha. Cookies de seguiment entre sites + + Bloca los cookies que los malhums publicitaris e las societats d’analisi de donadas utilizan per compilar vòstras donadas de navegacion sus mantun site. Minaires de criptomonedas + + Empacha los scripts malvolents d’accedir a vòstre periferic per minar de moneda numerica. Generadors d’emprentas numericas @@ -1387,6 +1407,9 @@ Bibliotècas qu’utilizam + + Menú de desbugatge : %1$d clic(s) restant(s) per l’activar Menú de desbugatge activat @@ -1417,6 +1440,9 @@ Nom de l’acorchi + + Podètz facilament apondre aqueste site a l’ecran d’acuèlh de vòstre periferic per i accedir dirèctament e i navegar coma se foguèsse una aplicacion. + Identificants e senhals @@ -1504,6 +1530,8 @@ Desblocatz per veire los identificants enregistrats Protegissètz vòstres identificants e senhals + + Configuratz un esquèma de verrolhatge, un còdi PIN o un senhal per protegir vòstres identificants de connexion e senhals enregistrats se per cas qualqu’un accedisca a vòstre periferic. Mai tard @@ -1512,6 +1540,8 @@ Desverrolhatz lo periferic Zoom per totes los sites + + Activar per permetre de zoomar amb dos dets encara que lo site empache aquò. Nom (A-Z) @@ -1696,4 +1726,6 @@ Agropatz de recèrcas, de sites e d’onglets similaris per i accedir rapidament mai tard. Sètz connectat coma %s sus un autre navegador Firefox sus aqueste telefòn. Volètz vos connectar amb aqueste compte ? - + + Podètz facilament apondre aqueste site a vòstre ecran d’acuèlh de telefòn per i accedir e navigar mai rapidament coma se foguèssetz dins l’aplicacion. + From 62e2fb1aa6c60b4e42b4759e8cdba1f490854420 Mon Sep 17 00:00:00 2001 From: Michael Comella Date: Wed, 17 Mar 2021 16:36:20 -0700 Subject: [PATCH 121/149] For #18426: add measurement probes for long-running lifecycle methods. In addition to the existing probes for onCreate, this should cover all lifecycle methods that take a long time in our profiles. --- app/metrics.yaml | 80 +++++++++++++++++++ .../java/org/mozilla/fenix/HomeActivity.kt | 2 +- .../fenix/browser/BaseBrowserFragment.kt | 10 ++- .../org/mozilla/fenix/home/HomeFragment.kt | 9 ++- docs/metrics.md | 5 ++ 5 files changed, 99 insertions(+), 7 deletions(-) diff --git a/app/metrics.yaml b/app/metrics.yaml index a10a5b626..2e311c746 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -4213,6 +4213,86 @@ perf.startup: - perf-android-fe@mozilla.com - mcomella@mozilla.com expires: "2021-08-11" + home_activity_on_start: + type: timing_distribution + time_unit: millisecond + description: | + The duration of `HomeActivity.onStart`. This may encapsulate + `HomeFragment` or `BrowserFragment` creation, depending on the code path, + so we expect this to take varying amounts of time. As such, this probe may + not be easy to interpret directly but we believe collecting it may give us + more information about different patterns we might see in performance + data. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + home_fragment_on_create_view: + type: timing_distribution + time_unit: millisecond + description: | + The duration of `HomeFragment.onCreateView`. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + home_fragment_on_view_created: + type: timing_distribution + time_unit: millisecond + description: | + The duration of `HomeFragment.onViewCreated`. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + base_bfragment_on_create_view: + type: timing_distribution + time_unit: millisecond + description: | + The duration of `BaseBrowserFragment.onCreateView`. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" + base_bfragment_on_view_created: + type: timing_distribution + time_unit: millisecond + description: | + The duration of `BaseBrowserFragment.onViewCreated`. + bugs: + - https://github.com/mozilla-mobile/fenix/issues/18426 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848 + data_sensitivity: + - technical + notification_emails: + - perf-android-fe@mozilla.com + - mcomella@mozilla.com + expires: "2021-08-11" perf.awesomebar: history_suggestions: diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index a3f577ac5..5a20d489a 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -325,7 +325,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { } } - override fun onStart() { + override fun onStart() = PerfStartup.homeActivityOnStart.measureNoInline { super.onStart() // Diagnostic breadcrumb for "Display already aquired" crash: 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 db1b8e351..9b8d06127 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -129,6 +129,8 @@ import mozilla.components.feature.session.behavior.EngineViewBrowserToolbarBehav import mozilla.components.feature.webauthn.WebAuthnFeature import mozilla.components.support.base.feature.ActivityResultHandler import mozilla.components.support.ktx.android.view.enterToImmersiveMode +import org.mozilla.fenix.GleanMetrics.PerfStartup +import org.mozilla.fenix.ext.measureNoInline import mozilla.components.feature.session.behavior.ToolbarPosition as MozacToolbarPosition /** @@ -197,7 +199,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View { + ): View = PerfStartup.baseBfragmentOnCreateView.measureNoInline { customTabSessionId = requireArguments().getString(EXTRA_SESSION_ID) // Diagnostic breadcrumb for "Display already aquired" crash: @@ -220,10 +222,11 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit ) } - return view + view } - final override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + final override fun onViewCreated(view: View, savedInstanceState: Bundle?) = + PerfStartup.baseBfragmentOnViewCreated.measureNoInline { // weird indentation to avoid breaking blame. initializeUI(view) if (customTabSessionId == null) { @@ -240,6 +243,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Activit } requireContext().accessibilityManager.addAccessibilityStateChangeListener(this) + Unit } private fun initializeUI(view: View) { 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 924297d65..8d0127545 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -85,6 +85,7 @@ import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged import mozilla.components.ui.tabcounter.TabCounterMenu import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.Config +import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.browser.BrowserAnimator.Companion.getToolbarNavOptions @@ -101,6 +102,7 @@ import org.mozilla.fenix.components.toolbar.FenixTabCounterMenu import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.hideToolbar +import org.mozilla.fenix.ext.measureNoInline import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.requireComponents @@ -193,7 +195,7 @@ class HomeFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View? = PerfStartup.homeFragmentOnCreateView.measureNoInline { val view = inflater.inflate(R.layout.fragment_home, container, false) val activity = activity as HomeActivity val components = requireComponents @@ -274,7 +276,7 @@ class HomeFragment : Fragment() { appBarLayout = view.homeAppBar activity.themeManager.applyStatusBarTheme(activity) - return view + view } override fun onConfigurationChanged(newConfig: Configuration) { @@ -356,7 +358,8 @@ class HomeFragment : Fragment() { } @Suppress("LongMethod", "ComplexMethod") - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) = + PerfStartup.homeFragmentOnViewCreated.measureNoInline { // weird indent so we don't have to break blame. super.onViewCreated(view, savedInstanceState) observeSearchEngineChanges() diff --git a/docs/metrics.md b/docs/metrics.md index 3feeb4ce8..63598cc4a 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -345,7 +345,12 @@ In addition to those built-in metrics, the following metrics are added to the pi | perf.startup.app_on_create_to_megazord_init |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |A subsection of the duration of `FenixApplication.onCreate` and thus the `application_on_create` probe from after the `app_on_create_to_glean_init` probe until we block for the megazord to complete set up. |[mozilla-mobile/fenix#18525](https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170)||2021-08-11 |1 | | perf.startup.app_on_create_to_setup_in_main |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |A subsection of the duration of `FenixApplication.onCreate` and thus the `application_on_create` probe from after the `app_on_create_to_megazord_init` probe until the end of `setupInMainProcessOnly`, which is expected to be the end of the `onCreate` call (unless the implementation later changes). |[mozilla-mobile/fenix#18525](https://github.com/mozilla-mobile/fenix/pull/18525#issue-594961170)||2021-08-11 |1 | | perf.startup.application_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `FenixApplication.onCreate` in the main process. This does not measure the duration of migration code (via `MigratingFenixApplication` included in the Beta and Release channels. |[mozilla-mobile/fenix#17973](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | +| perf.startup.base_bfragment_on_create_view |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `BaseBrowserFragment.onCreateView`. |[mozilla-mobile/fenix#18558](https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848)||2021-08-11 |1 | +| perf.startup.base_bfragment_on_view_created |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `BaseBrowserFragment.onViewCreated`. |[mozilla-mobile/fenix#18558](https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848)||2021-08-11 |1 | | perf.startup.home_activity_on_create |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeActivity.onCreate`. |[mozilla-mobile/fenix#17973](https://github.com/mozilla-mobile/fenix/pull/17973#issue-572183889)||2021-08-11 |1 | +| perf.startup.home_activity_on_start |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeActivity.onStart`. This may encapsulate `HomeFragment` or `BrowserFragment` creation, depending on the code path, so we expect this to take varying amounts of time. As such, this probe may not be easy to interpret directly but we believe collecting it may give us more information about different patterns we might see in performance data. |[mozilla-mobile/fenix#18558](https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848)||2021-08-11 |1 | +| perf.startup.home_fragment_on_create_view |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeFragment.onCreateView`. |[mozilla-mobile/fenix#18558](https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848)||2021-08-11 |1 | +| perf.startup.home_fragment_on_view_created |[timing_distribution](https://mozilla.github.io/glean/book/user/metrics/timing_distribution.html) |The duration of `HomeFragment.onViewCreated`. |[mozilla-mobile/fenix#18558](https://github.com/mozilla-mobile/fenix/pull/18558#issue-596791848)||2021-08-11 |1 | | preferences.accessibility_services |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has touch exploration or switch services enabled. These are built into the Android OS, not Fenix prefs. default: "" |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | preferences.open_links_in_a_private_tab |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has enabled open links in a private tab. default: false |[mozilla-mobile/fenix#11211](https://github.com/mozilla-mobile/fenix/pull/11211), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | | preferences.open_links_in_app |[string_list](https://mozilla.github.io/glean/book/user/metrics/string_list.html) |Whether or not the user has the open links in apps feature enabled. default: false |[mozilla-mobile/fenix#11446](https://github.com/mozilla-mobile/fenix/pull/11446), [mozilla-mobile/fenix#15713](https://github.com/mozilla-mobile/fenix/pull/15713#issuecomment-703972068)||2021-08-01 |2 | From a3ef6b552bcccb7df631c70f3fc8e43fb078518c Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Sun, 21 Mar 2021 00:03:07 +0000 Subject: [PATCH 122/149] Import l10n. --- app/src/main/res/values-ko/strings.xml | 4 ++-- app/src/main/res/values-sr/strings.xml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 1bf2da2d9..10f5ae772 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -303,7 +303,7 @@ 사용자 지정 동기화 서버 - Firefox 계정/동기화 서버가 변경되었습니다. 변경 사항을 적용하기 위해 응용 프로그램을 종료하는 중… + Firefox 계정/동기화 서버가 변경되었습니다. 변경 사항을 적용하기 위해 애플리케이션을 종료하는 중… 계정 @@ -380,7 +380,7 @@ 모음집 소유자 (사용자 ID) - 부가 기능 모음집이 변경되었습니다. 변경 사항을 적용하기 위해 응용 프로그램을 종료하는 중… + 부가 기능 모음집이 변경되었습니다. 변경 사항을 적용하기 위해 애플리케이션을 종료하는 중… diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index e9299775e..1536fadaa 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -179,6 +179,8 @@ Изглед + + Прилагоди приказ за читање Није могуће повезивање. Непозната URL шема. From 25522be9dd361cf4529fd82ab93a1cdb025e9bfb Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 21 Mar 2021 15:35:41 +0000 Subject: [PATCH 123/149] Update Android Components version to 74.0.20210321143134. --- 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 51e789656..e35725099 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 = "74.0.20210319190549" + const val VERSION = "74.0.20210321143134" } From 975f97df467b82ecbbfcde8ec009adae310e00c4 Mon Sep 17 00:00:00 2001 From: Mozilla L10n Automation Bot Date: Mon, 22 Mar 2021 00:06:37 +0000 Subject: [PATCH 124/149] Import l10n. --- app/src/main/res/values-oc/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index 1270e3c16..8789d60f8 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -1361,9 +1361,13 @@ Empacha los scripts malvolents d’accedir a vòstre periferic per minar de moneda numerica. Generadors d’emprentas numericas + + Empacha la culhida de donadas unicas identificables quant a vòstre periferic que pòdon èsser utilizadas pel seguiment. Contengut utilizat pel seguiment + + Empacha lo cargament de publicitats, vidèos e autre contengut que contenon de còdi de seguiment. Pòt afectar d’unas foncionalitats de sites web. Quand l’escut es violet, %s a blocat de traçadors sus aqueste site. Tocatz aquí per ne saber mai. From 07c15d313179eea0f7ab5a9ee7911ec54601125f Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Mon, 22 Mar 2021 10:49:38 -0400 Subject: [PATCH 125/149] For #18553 Revert "Target Android 11" This reverts commit 0e8dc616 --- app/build.gradle | 17 +++++++++++++---- app/src/main/AndroidManifest.xml | 1 + .../main/java/org/mozilla/fenix/ext/Activity.kt | 2 -- .../fenix/search/SearchDialogFragment.kt | 13 ++++--------- .../PerformanceActivityLifecycleCallbacks.kt | 12 ++++++------ .../session/VisibilityLifecycleCallback.kt | 14 +++++++------- .../SitePermissionsDetailsExceptionsFragment.kt | 4 ++-- .../SitePermissionsExceptionsFragment.kt | 4 ++-- ...sionsManageExceptionsPhoneFeatureFragment.kt | 4 ++-- .../org/mozilla/fenix/share/ShareViewModel.kt | 4 ++-- .../fenix/tabtray/TabTrayDialogFragment.kt | 4 ---- .../org/mozilla/fenix/theme/ThemeManager.kt | 9 +-------- .../mozilla/fenix/wifi/WifiConnectionMonitor.kt | 4 ++-- .../java/org/mozilla/fenix/ext/ActivityTest.kt | 2 -- buildSrc/src/main/java/Config.kt | 4 ++-- 15 files changed, 44 insertions(+), 54 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index da5d7bfdf..6ef77b99f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,7 +58,8 @@ android { def deepLinkSchemeValue = "fenix-dev" buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" manifestPlaceholders = [ - "deepLinkScheme": deepLinkSchemeValue + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": true ] // Build flag for "Mozilla Online" variants. See `Config.isMozillaOnline`. @@ -93,13 +94,19 @@ android { applicationIdSuffix ".fenix.debug" resValue "bool", "IS_DEBUG", "true" pseudoLocalesEnabled true + def deepLinkSchemeValue = "fenix-dev" + buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" + manifestPlaceholders = [ + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": false + ] } nightly releaseTemplate >> { applicationIdSuffix ".fenix" buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" def deepLinkSchemeValue = "fenix-nightly" buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\"" - manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue] + manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue, "requestLegacyExternalStorage": false] } beta releaseTemplate >> { buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true" @@ -115,7 +122,8 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": deepLinkSchemeValue + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": true ] } release releaseTemplate >> { @@ -132,7 +140,8 @@ android { // - https://issuetracker.google.com/issues/36924841 // - https://issuetracker.google.com/issues/36905922 "sharedUserId": "org.mozilla.firefox.sharedID", - "deepLinkScheme": deepLinkSchemeValue + "deepLinkScheme": deepLinkSchemeValue, + "requestLegacyExternalStorage": true ] } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e6e371cff..bed4aa10b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -27,6 +27,7 @@ android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:requestLegacyExternalStorage="${requestLegacyExternalStorage}" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/NormalTheme" diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index 3f70af653..b4de8ce49 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -29,8 +29,6 @@ import mozilla.components.concept.base.crash.Breadcrumb ) fun Activity.enterToImmersiveMode() { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17804 - @Suppress("DEPRECATION") window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 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 32ca97d5f..34d2f3ccf 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -13,8 +13,7 @@ import android.content.Intent import android.graphics.Color import android.graphics.Typeface import android.graphics.drawable.ColorDrawable -import android.os.Build.VERSION -import android.os.Build.VERSION_CODES +import android.os.Build import android.os.Bundle import android.speech.RecognizerIntent import android.text.style.StyleSpan @@ -90,8 +89,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { // https://github.com/mozilla-mobile/fenix/issues/14279 // To prevent GeckoView from resizing we're going to change the softInputMode to not adjust // the size of the window. - if (VERSION.SDK_INT < VERSION_CODES.R) - requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING) + requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING) // Refocus the toolbar editing and show keyboard if the QR fragment isn't showing if (childFragmentManager.findFragmentByTag(QR_FRAGMENT_TAG) == null) { toolbarView.view.edit.focus() @@ -102,10 +100,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { super.onStop() // https://github.com/mozilla-mobile/fenix/issues/14279 // Let's reset back to the default behavior after we're done searching - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17805 - @Suppress("DEPRECATION") - if (VERSION.SDK_INT < VERSION_CODES.R) - requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) + requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) } override fun onCreate(savedInstanceState: Bundle?) { @@ -349,7 +344,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { private fun updateAccessibilityTraversalOrder() { val searchWrapperId = search_wrapper.id - if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP_MR1) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { qr_scan_button.accessibilityTraversalAfter = searchWrapperId search_engines_shortcut_button.accessibilityTraversalAfter = searchWrapperId fill_link_from_clipboard.accessibilityTraversalAfter = searchWrapperId diff --git a/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt b/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt index c46c08b5e..6f46fb997 100644 --- a/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt +++ b/app/src/main/java/org/mozilla/fenix/session/PerformanceActivityLifecycleCallbacks.kt @@ -59,12 +59,12 @@ class PerformanceActivityLifecycleCallbacks( } } - override fun onActivityStarted(activity: Activity) {} - override fun onActivityStopped(activity: Activity) {} - override fun onActivityResumed(activity: Activity) {} - override fun onActivityPaused(activity: Activity) {} - override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {} - override fun onActivityDestroyed(activity: Activity) {} + override fun onActivityStarted(activity: Activity?) {} + override fun onActivityStopped(activity: Activity?) {} + override fun onActivityResumed(activity: Activity?) {} + override fun onActivityPaused(activity: Activity?) {} + override fun onActivitySaveInstanceState(activity: Activity?, bundle: Bundle?) {} + override fun onActivityDestroyed(activity: Activity?) {} companion object { /** diff --git a/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt b/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt index b8230946c..131bfbd73 100644 --- a/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt +++ b/app/src/main/java/org/mozilla/fenix/session/VisibilityLifecycleCallback.kt @@ -44,23 +44,23 @@ class VisibilityLifecycleCallback(private val activityManager: ActivityManager?) return false } - override fun onActivityStarted(activity: Activity) { + override fun onActivityStarted(activity: Activity?) { activitiesInStartedState++ } - override fun onActivityStopped(activity: Activity) { + override fun onActivityStopped(activity: Activity?) { activitiesInStartedState-- } - override fun onActivityResumed(activity: Activity) {} + override fun onActivityResumed(activity: Activity?) {} - override fun onActivityPaused(activity: Activity) {} + override fun onActivityPaused(activity: Activity?) {} - override fun onActivityCreated(activity: Activity, bundle: Bundle?) {} + override fun onActivityCreated(activity: Activity?, bundle: Bundle?) {} - override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) {} + override fun onActivitySaveInstanceState(activity: Activity?, bundle: Bundle?) {} - override fun onActivityDestroyed(activity: Activity) {} + override fun onActivityDestroyed(activity: Activity?) {} companion object { /** 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 6eefefffc..399d46ca8 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 @@ -130,11 +130,11 @@ class SitePermissionsDetailsExceptionsFragment : PreferenceFragmentCompat() { AlertDialog.Builder(requireContext()).apply { setMessage(R.string.confirm_clear_permissions_site) setTitle(R.string.clear_permissions) - setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _ -> + setPositiveButton(android.R.string.yes) { dialog: DialogInterface, _ -> clearSitePermissions() dialog.dismiss() } - setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _ -> + setNegativeButton(android.R.string.no) { dialog: DialogInterface, _ -> dialog.cancel() } }.show() diff --git a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt index 352b71150..2b73d4da2 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SitePermissionsExceptionsFragment.kt @@ -95,11 +95,11 @@ class SitePermissionsExceptionsFragment : AlertDialog.Builder(requireContext()).apply { setMessage(R.string.confirm_clear_permissions_on_all_sites) setTitle(R.string.clear_permissions) - setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _ -> + setPositiveButton(android.R.string.yes) { dialog: DialogInterface, _ -> deleteAllSitePermissions() dialog.dismiss() } - setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _ -> + setNegativeButton(android.R.string.no) { dialog: DialogInterface, _ -> dialog.cancel() } }.show() 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 97c4a63d3..dab4a76e8 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 @@ -159,11 +159,11 @@ class SitePermissionsManageExceptionsPhoneFeatureFragment : Fragment() { AlertDialog.Builder(requireContext()).apply { setMessage(R.string.confirm_clear_permission_site) setTitle(R.string.clear_permission) - setPositiveButton(android.R.string.ok) { dialog: DialogInterface, _ -> + setPositiveButton(android.R.string.yes) { dialog: DialogInterface, _ -> clearPermissions() dialog.dismiss() } - setNegativeButton(android.R.string.cancel) { dialog: DialogInterface, _ -> + setNegativeButton(android.R.string.no) { dialog: DialogInterface, _ -> dialog.cancel() } }.show() 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 29cd7c769..4fde40fce 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareViewModel.kt @@ -47,8 +47,8 @@ class ShareViewModel(application: Application) : AndroidViewModel(application) { @VisibleForTesting internal val networkCallback = object : ConnectivityManager.NetworkCallback() { - override fun onLost(network: Network) = reloadDevices(network) - override fun onAvailable(network: Network) = reloadDevices(network) + override fun onLost(network: Network?) = reloadDevices(network) + override fun onAvailable(network: Network?) = reloadDevices(network) private fun reloadDevices(network: Network?) { viewModelScope.launch(ioDispatcher) { diff --git a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt index 6bda59cf2..ef6f3fe70 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt @@ -245,16 +245,12 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), UserInteractionHandler } view.tabLayout.setOnApplyWindowInsetsListener { v, insets -> - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17807 - @Suppress("DEPRECATION") v.updatePadding( left = insets.left(), right = insets.right(), bottom = insets.bottom() ) - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17807 - @Suppress("DEPRECATION") tabTrayView.view.tab_wrapper.updatePadding( bottom = insets.bottom() ) diff --git a/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt b/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt index 38b8314bb..f39c8dd0f 100644 --- a/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt +++ b/app/src/main/java/org/mozilla/fenix/theme/ThemeManager.kt @@ -76,8 +76,7 @@ abstract class ThemeManager { private fun updateLightSystemBars(window: Window, context: Context) { if (SDK_INT >= Build.VERSION_CODES.M) { window.statusBarColor = context.getColorFromAttr(android.R.attr.statusBarColor) - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 - @Suppress("DEPRECATION") + window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR } else { @@ -86,8 +85,6 @@ abstract class ThemeManager { if (SDK_INT >= Build.VERSION_CODES.O) { // API level can display handle light navigation bar color - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 - @Suppress("DEPRECATION") window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR updateNavigationBar(window, context) @@ -96,16 +93,12 @@ abstract class ThemeManager { private fun clearLightSystemBars(window: Window) { if (SDK_INT >= Build.VERSION_CODES.M) { - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 - @Suppress("DEPRECATION") window.decorView.systemUiVisibility = window.decorView.systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() } if (SDK_INT >= Build.VERSION_CODES.O) { // API level can display handle light navigation bar color - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17808 - @Suppress("DEPRECATION") window.decorView.systemUiVisibility = window.decorView.systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.inv() } diff --git a/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt b/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt index 4d3b636aa..4db646e12 100644 --- a/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt +++ b/app/src/main/java/org/mozilla/fenix/wifi/WifiConnectionMonitor.kt @@ -34,12 +34,12 @@ class WifiConnectionMonitor(app: Application) { private var isRegistered = false private val frameworkListener = object : ConnectivityManager.NetworkCallback() { - override fun onLost(network: Network) { + override fun onLost(network: Network?) { notifyListeners(false) lastKnownStateWasAvailable = false } - override fun onAvailable(network: Network) { + override fun onAvailable(network: Network?) { notifyListeners(true) lastKnownStateWasAvailable = true } diff --git a/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt b/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt index 884e5bd5f..4d074780e 100644 --- a/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt +++ b/app/src/test/java/org/mozilla/fenix/ext/ActivityTest.kt @@ -18,8 +18,6 @@ import org.robolectric.Shadows.shadowOf @RunWith(FenixRobolectricTestRunner::class) class ActivityTest { - // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17804 - @Suppress("DEPRECATION") @Test fun testEnterImmersiveMode() { val activity = Robolectric.buildActivity(Activity::class.java).create().get() diff --git a/buildSrc/src/main/java/Config.kt b/buildSrc/src/main/java/Config.kt index ff824ff74..236689878 100644 --- a/buildSrc/src/main/java/Config.kt +++ b/buildSrc/src/main/java/Config.kt @@ -13,9 +13,9 @@ import java.util.Locale object Config { // Synchronized build configuration for all modules - const val compileSdkVersion = 30 + const val compileSdkVersion = 29 const val minSdkVersion = 21 - const val targetSdkVersion = 30 + const val targetSdkVersion = 29 @JvmStatic private fun generateDebugVersionName(): String { From 805644f4af7c6c5b07aa377cc8f6ec9f289d39cb Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Mon, 22 Mar 2021 11:12:03 -0400 Subject: [PATCH 126/149] For #18553 Revert "For #17805 - Fix adjustResize deprecation (#18252)" This reverts commit 38f906a6 --- app/src/main/AndroidManifest.xml | 7 +-- .../java/org/mozilla/fenix/HomeActivity.kt | 3 -- .../customtabs/ExternalAppBrowserActivity.kt | 9 ---- .../java/org/mozilla/fenix/ext/Activity.kt | 45 ------------------- .../fenix/search/SearchDialogFragment.kt | 2 + .../settings/account/AuthCustomTabActivity.kt | 8 ---- app/src/main/res/values/styles.xml | 2 + 7 files changed, 8 insertions(+), 68 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bed4aa10b..b13db0148 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -78,7 +78,8 @@ android:configChanges="keyboard|keyboardHidden|mcc|mnc|orientation|screenSize|layoutDirection|smallestScreenSize|screenLayout" android:launchMode="singleTask" android:resizeableActivity="true" - android:supportsPictureInPicture="true"> + android:supportsPictureInPicture="true" + android:windowSoftInputMode="adjustResize"> @@ -135,7 +136,7 @@ android:taskAffinity="" android:resizeableActivity="true" android:supportsPictureInPicture="true" - android:windowSoftInputMode="stateAlwaysHidden" /> + android:windowSoftInputMode="adjustResize|stateAlwaysHidden" /> + android:windowSoftInputMode="adjustResize|stateAlwaysHidden" /> diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 5a20d489a..c85a39d76 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -77,7 +77,6 @@ import org.mozilla.fenix.exceptions.trackingprotection.TrackingProtectionExcepti import org.mozilla.fenix.ext.alreadyOnDestination import org.mozilla.fenix.ext.breadcrumb import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.enableSystemInsetsHandling import org.mozilla.fenix.ext.measureNoInline import org.mozilla.fenix.ext.metrics import org.mozilla.fenix.ext.nav @@ -256,8 +255,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { components.core.requestInterceptor.setNavigationController(navHost.navController) - enableSystemInsetsHandling() - StartupTimeline.onActivityCreateEndHome(this) // DO NOT MOVE ANYTHING BELOW HERE. } diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt index 0ab6311a0..689a6aa4c 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt @@ -5,8 +5,6 @@ package org.mozilla.fenix.customtabs import android.content.Intent -import android.os.Bundle -import android.os.PersistableBundle import androidx.annotation.VisibleForTesting import androidx.navigation.NavDestination import androidx.navigation.NavDirections @@ -22,7 +20,6 @@ import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.NavGraphDirections import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.enableSystemInsetsHandling import java.security.InvalidParameterException /** @@ -31,12 +28,6 @@ import java.security.InvalidParameterException */ @Suppress("TooManyFunctions") open class ExternalAppBrowserActivity : HomeActivity() { - - override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { - super.onCreate(savedInstanceState, persistentState) - enableSystemInsetsHandling() - } - override fun onResume() { super.onResume() diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index b4de8ce49..e28b32917 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -5,12 +5,7 @@ package org.mozilla.fenix.ext import android.app.Activity -import android.os.Build.VERSION -import android.os.Build.VERSION_CODES import android.view.View -import android.view.Window -import android.view.WindowInsets -import android.view.WindowInsets.Type import android.view.WindowManager import mozilla.components.concept.base.crash.Breadcrumb @@ -51,43 +46,3 @@ fun Activity.breadcrumb( ) ) } - -/** - * Handles inset changes for the whole activity. - * - * The deprecation of [WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE] in [VERSION_CODES.R] - * means inset changes have to be handled with a [View.OnApplyWindowInsetsListener]. - * [Window.setDecorFitsSystemWindows] false tells the system that the app will handle all insets. - * When a keyboard is opened [WindowInsets.getInsets] of [Type.ime] updates accordingly. - * - * See https://github.com/mozilla-mobile/fenix/issues/17805. - * */ -fun Activity.enableSystemInsetsHandling() { - if (VERSION.SDK_INT >= VERSION_CODES.R) { - val currentInsetTypes = mutableSetOf() - - currentInsetTypes.add(Type.systemBars()) - currentInsetTypes.add(Type.statusBars()) - currentInsetTypes.add(Type.mandatorySystemGestures()) - currentInsetTypes.add(Type.ime()) - - window.setDecorFitsSystemWindows(false) - - window.decorView.setOnApplyWindowInsetsListener { v, _ -> - val currentInsetTypeMask = currentInsetTypes.fold(0) { accumulator, type -> - accumulator or type - } - val insets = window.decorView.rootWindowInsets.getInsets(currentInsetTypeMask) - v.setPadding(insets.left, insets.top, insets.right, insets.bottom) - - WindowInsets.Builder() - .setInsets(currentInsetTypeMask, insets) - .build() - } - } else { - @Suppress("DEPRECATION") - window.setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE - ) - } -} 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 34d2f3ccf..780724462 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -100,6 +100,8 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { super.onStop() // https://github.com/mozilla-mobile/fenix/issues/14279 // Let's reset back to the default behavior after we're done searching + // This will be addressed on https://github.com/mozilla-mobile/fenix/issues/17805 + @Suppress("DEPRECATION") requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) } diff --git a/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt b/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt index 2f6279001..98b986dc7 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/account/AuthCustomTabActivity.kt @@ -4,25 +4,17 @@ package org.mozilla.fenix.settings.account -import android.os.Bundle -import android.os.PersistableBundle import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AuthType import mozilla.components.concept.sync.OAuthAccount import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.enableSystemInsetsHandling /** * A special custom tab for signing into a Firefox Account. The activity is closed once the user is signed in. */ class AuthCustomTabActivity : ExternalAppBrowserActivity() { - override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) { - super.onCreate(savedInstanceState, persistentState) - enableSystemInsetsHandling() - } - private val accountStateObserver = object : AccountObserver { /** * Navigate away from this activity when we have successful authentication diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 90352f810..c0d2b4ad2 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -342,6 +342,7 @@ @style/Animation.Design.BottomSheetDialog true false + adjustResize false false @null @@ -618,6 +619,7 @@ @android:color/transparent true false + adjustResize false false @null From 1436c309c010a2a5f705219deedc34a3cd8c1fbe Mon Sep 17 00:00:00 2001 From: Arturo Mejia Date: Mon, 22 Mar 2021 13:42:59 -0400 Subject: [PATCH 127/149] For #18553 Revert "For #17804: Use enterToImmersiveMode from support-ktx component" This reverts commit fbe73cfc1d633a1b76f744889997295f56277e0d --- .../java/org/mozilla/fenix/browser/BaseBrowserFragment.kt | 2 +- app/src/main/java/org/mozilla/fenix/ext/Activity.kt | 7 ------- 2 files changed, 1 insertion(+), 8 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 9b8d06127..e6adaf145 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -110,6 +110,7 @@ import org.mozilla.fenix.downloads.DynamicDownloadDialog import org.mozilla.fenix.ext.accessibilityManager import org.mozilla.fenix.ext.breadcrumb import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.enterToImmersiveMode import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.hideToolbar import org.mozilla.fenix.ext.metrics @@ -128,7 +129,6 @@ import java.lang.ref.WeakReference import mozilla.components.feature.session.behavior.EngineViewBrowserToolbarBehavior import mozilla.components.feature.webauthn.WebAuthnFeature import mozilla.components.support.base.feature.ActivityResultHandler -import mozilla.components.support.ktx.android.view.enterToImmersiveMode import org.mozilla.fenix.GleanMetrics.PerfStartup import org.mozilla.fenix.ext.measureNoInline import mozilla.components.feature.session.behavior.ToolbarPosition as MozacToolbarPosition diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index e28b32917..0ab6efec0 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -15,13 +15,6 @@ import mozilla.components.concept.base.crash.Breadcrumb * We don't use the equivalent function from Android Components because the stable flag messes * with the toolbar. See #1998 and #3272. */ -@Deprecated( - message = "Use the Android Component implementation instead.", - replaceWith = ReplaceWith( - "enterToImmersiveMode()", - "mozilla.components.support.ktx.android.view.enterToImmersiveMode" - ) -) fun Activity.enterToImmersiveMode() { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION From 84412dc01551d31dcdf81718d895e0bade7fb8b5 Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Tue, 23 Mar 2021 10:31:53 -0400 Subject: [PATCH 128/149] Closes #17791: Use updated URL with custom tabs when copying to clipboard (#18590) (cherry picked from commit a8c53c6bf1bfd5fb5aaa0c3961f11643a3266406) --- .../components/toolbar/BrowserToolbarView.kt | 2 +- .../mozilla/fenix/utils/ToolbarPopupWindow.kt | 15 ++++--- .../fenix/utils/ToolbarPopupWindowTest.kt | 45 +++++++++++++++---- 3 files changed, 45 insertions(+), 17 deletions(-) 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 b3b97311d..b64100299 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 @@ -87,7 +87,7 @@ class BrowserToolbarView( view.display.setOnUrlLongClickListener { ToolbarPopupWindow.show( WeakReference(view), - customTabSession, + customTabSession?.id, interactor::onBrowserToolbarPasteAndGo, interactor::onBrowserToolbarPaste ) diff --git a/app/src/main/java/org/mozilla/fenix/utils/ToolbarPopupWindow.kt b/app/src/main/java/org/mozilla/fenix/utils/ToolbarPopupWindow.kt index f9b349fce..db2d0b5a9 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/ToolbarPopupWindow.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/ToolbarPopupWindow.kt @@ -16,18 +16,18 @@ import androidx.core.view.isVisible import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.browser_toolbar_popup_window.view.* import mozilla.components.browser.state.selector.selectedTab -import mozilla.components.browser.state.state.CustomTabSessionState import mozilla.components.browser.state.store.BrowserStore import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import java.lang.ref.WeakReference +import mozilla.components.browser.state.selector.findCustomTab object ToolbarPopupWindow { fun show( view: WeakReference, - customTabSession: CustomTabSessionState? = null, + customTabId: String? = null, handlePasteAndGo: (String) -> Unit, handlePaste: (String) -> Unit, copyVisible: Boolean = true @@ -36,7 +36,7 @@ object ToolbarPopupWindow { val clipboard = context.components.clipboardHandler if (!copyVisible && clipboard.text.isNullOrEmpty()) return - val isCustomTabSession = customTabSession != null + val isCustomTabSession = customTabId != null val customView = LayoutInflater.from(context) .inflate(R.layout.browser_toolbar_popup_window, null) @@ -63,7 +63,7 @@ object ToolbarPopupWindow { popupWindow.dismiss() clipboard.text = getUrlForClipboard( it.context.components.core.store, - customTabSession + customTabId ) view.get()?.let { @@ -101,10 +101,11 @@ object ToolbarPopupWindow { @VisibleForTesting internal fun getUrlForClipboard( store: BrowserStore, - customTabSession: CustomTabSessionState? = null + customTabId: String? = null ): String? { - return if (customTabSession != null) { - customTabSession.content.url + return if (customTabId != null) { + val customTab = store.state.findCustomTab(customTabId) + customTab?.content?.url } else { val selectedTab = store.state.selectedTab selectedTab?.readerState?.activeUrl ?: selectedTab?.content?.url diff --git a/app/src/test/java/org/mozilla/fenix/utils/ToolbarPopupWindowTest.kt b/app/src/test/java/org/mozilla/fenix/utils/ToolbarPopupWindowTest.kt index 69ef82b3a..d56f1b50b 100644 --- a/app/src/test/java/org/mozilla/fenix/utils/ToolbarPopupWindowTest.kt +++ b/app/src/test/java/org/mozilla/fenix/utils/ToolbarPopupWindowTest.kt @@ -4,35 +4,44 @@ package org.mozilla.fenix.utils -import io.mockk.mockk +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestCoroutineDispatcher +import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.ReaderState import mozilla.components.browser.state.state.createCustomTab import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.store.BrowserStore +import mozilla.components.support.test.ext.joinBlocking +import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.Assert.assertEquals +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +@ExperimentalCoroutinesApi @RunWith(FenixRobolectricTestRunner::class) class ToolbarPopupWindowTest { + private val testDispatcher = TestCoroutineDispatcher() - @Test - fun getUrlForClipboard() { - val customTabSession = createCustomTab("https://mozilla.org") + @get:Rule + val coroutinesTestRule = MainCoroutineRule(testDispatcher) + @Test + fun `getUrlForClipboard should get the right URL`() { // Custom tab + val customTabSession = createCustomTab("https://mozilla.org") + var store = BrowserStore(BrowserState(customTabs = listOf(customTabSession))) assertEquals( "https://mozilla.org", - ToolbarPopupWindow.getUrlForClipboard(mockk(), customTabSession) + ToolbarPopupWindow.getUrlForClipboard(store, customTabSession.id) ) // Regular tab val regularTab = createTab(url = "http://firefox.com") - var store = - BrowserStore(BrowserState(tabs = listOf(regularTab), selectedTabId = regularTab.id)) - assertEquals(regularTab.content.url, ToolbarPopupWindow.getUrlForClipboard(store)) + store = BrowserStore(BrowserState(tabs = listOf(regularTab), selectedTabId = regularTab.id)) + assertEquals("http://firefox.com", ToolbarPopupWindow.getUrlForClipboard(store)) // Reader Tab val readerTab = createTab( @@ -40,6 +49,24 @@ class ToolbarPopupWindowTest { readerState = ReaderState(active = true, activeUrl = "https://blog.mozilla.org/123") ) store = BrowserStore(BrowserState(tabs = listOf(readerTab), selectedTabId = readerTab.id)) - assertEquals(readerTab.readerState.activeUrl, ToolbarPopupWindow.getUrlForClipboard(store)) + assertEquals("https://blog.mozilla.org/123", ToolbarPopupWindow.getUrlForClipboard(store)) + } + + @Test + fun `getUrlForClipboard should get the updated URL`() { + // Custom tab + val customTabSession = createCustomTab("https://mozilla.org") + var store = BrowserStore(BrowserState(customTabs = listOf(customTabSession))) + store.dispatch(ContentAction.UpdateUrlAction(customTabSession.id, "https://firefox.com")).joinBlocking() + assertEquals( + "https://firefox.com", + ToolbarPopupWindow.getUrlForClipboard(store, customTabSession.id) + ) + + // Regular tab + val regularTab = createTab(url = "http://firefox.com") + store = BrowserStore(BrowserState(tabs = listOf(regularTab), selectedTabId = regularTab.id)) + store.dispatch(ContentAction.UpdateUrlAction(regularTab.id, "https://mozilla.org")).joinBlocking() + assertEquals("https://mozilla.org", ToolbarPopupWindow.getUrlForClipboard(store)) } } From aa6e7c3da8f1e36f4a3673fca8d066c863c67017 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 23 Mar 2021 14:36:10 +0000 Subject: [PATCH 129/149] Update to Android-Components 74.0.0. --- 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 e35725099..d23b3ff71 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 = "74.0.20210321143134" + const val VERSION = "74.0.0" } From eec72dc9b5db8b1c8a12f2bc3887241ed7f9b26c Mon Sep 17 00:00:00 2001 From: Elise Richards Date: Tue, 23 Mar 2021 14:16:30 -0400 Subject: [PATCH 130/149] For #17190: notifications are updated when locale is changed (#18179) * Add intent processor for locale changes * Recreate notification and notify in the service * Use locale use cases to update notification * Use notification id instead of tag * Add locale use cases and restore locale in application * Send locale to service instead of string * Controller tests for locale * Update Android Components version to 74.0.20210323143308 Co-authored-by: Arturo Mejia (cherry picked from commit 559cf54798a935b2e049e2b6a6ba68563e7ca006) --- .../org/mozilla/fenix/FenixApplication.kt | 5 +++ .../org/mozilla/fenix/components/UseCases.kt | 6 ++++ .../session/PrivateNotificationService.kt | 26 ++++++++++++-- .../DefaultLocaleSettingsController.kt | 8 +++-- .../advanced/LocaleSettingsFragment.kt | 14 +++++--- .../advanced/LocaleSettingsControllerTest.kt | 34 +++++++++++++------ 6 files changed, 73 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index e996309c1..3b0c50f1a 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -165,6 +165,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider { initializeWebExtensionSupport() restoreBrowserState() restoreDownloads() + restoreLocale() // Just to make sure it is impossible for any application-services pieces // to invoke parts of itself that require complete megazord initialization @@ -213,6 +214,10 @@ open class FenixApplication : LocaleAwareApplication(), Provider { components.useCases.downloadUseCases.restoreDownloads() } + private fun restoreLocale() { + components.useCases.localeUseCases.restore() + } + private fun initVisualCompletenessQueueAndQueueTasks() { val queue = components.performance.visualCompletenessQueue.queue diff --git a/app/src/main/java/org/mozilla/fenix/components/UseCases.kt b/app/src/main/java/org/mozilla/fenix/components/UseCases.kt index 956cda377..9249c8ab8 100644 --- a/app/src/main/java/org/mozilla/fenix/components/UseCases.kt +++ b/app/src/main/java/org/mozilla/fenix/components/UseCases.kt @@ -22,6 +22,7 @@ import mozilla.components.feature.tabs.CustomTabsUseCases import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.feature.top.sites.TopSitesStorage import mozilla.components.feature.top.sites.TopSitesUseCases +import mozilla.components.support.locale.LocaleUseCases import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.utils.Mockable @@ -88,4 +89,9 @@ class UseCases( * Use cases that provide top sites management. */ val topSitesUseCase by lazyMonitored { TopSitesUseCases(topSitesStorage) } + + /** + * Use cases that handle locale management. + */ + val localeUseCases by lazyMonitored { LocaleUseCases(store) } } diff --git a/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt b/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt index 94f21a60a..2e0b47b03 100644 --- a/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt +++ b/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt @@ -16,6 +16,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.metrics +import java.util.Locale /** * Manages notifications for private tabs. @@ -33,9 +34,28 @@ class PrivateNotificationService : AbstractPrivateNotificationService() { override fun NotificationCompat.Builder.buildNotification() { setSmallIcon(R.drawable.ic_private_browsing) - setContentTitle(applicationContext.getString(R.string.app_name_private_4, getString(R.string.app_name))) - setContentText(applicationContext.getString(R.string.notification_pbm_delete_text_2)) - color = ContextCompat.getColor(this@PrivateNotificationService, R.color.pbm_notification_color) + setContentTitle( + applicationContext.getString( + R.string.app_name_private_4, + getString(R.string.app_name) + ) + ) + setContentText( + applicationContext.getString( + R.string.notification_pbm_delete_text_2 + ) + ) + color = ContextCompat.getColor( + this@PrivateNotificationService, + R.color.pbm_notification_color + ) + } + + /** + * Update the existing notification when the [Locale] has been changed. + */ + override fun notifyLocaleChanged() { + super.refreshNotification() } @SuppressLint("MissingSuperCall") diff --git a/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt b/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt index 46f30d451..8b78c7592 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/advanced/DefaultLocaleSettingsController.kt @@ -7,6 +7,7 @@ package org.mozilla.fenix.settings.advanced import android.app.Activity import android.content.Context import mozilla.components.support.locale.LocaleManager +import mozilla.components.support.locale.LocaleUseCases import java.util.Locale interface LocaleSettingsController { @@ -17,7 +18,8 @@ interface LocaleSettingsController { class DefaultLocaleSettingsController( private val activity: Activity, - private val localeSettingsStore: LocaleSettingsStore + private val localeSettingsStore: LocaleSettingsStore, + private val localeUseCase: LocaleUseCases ) : LocaleSettingsController { override fun handleLocaleSelected(locale: Locale) { @@ -26,7 +28,7 @@ class DefaultLocaleSettingsController( return } localeSettingsStore.dispatch(LocaleSettingsAction.Select(locale)) - LocaleManager.setNewLocale(activity, locale.toLanguageTag()) + LocaleManager.setNewLocale(activity, localeUseCase, locale) LocaleManager.updateBaseConfiguration(activity, locale) activity.recreate() } @@ -36,7 +38,7 @@ class DefaultLocaleSettingsController( return } localeSettingsStore.dispatch(LocaleSettingsAction.Select(localeSettingsStore.state.localeList[0])) - LocaleManager.resetToSystemDefault(activity) + LocaleManager.resetToSystemDefault(activity, localeUseCase) LocaleManager.updateBaseConfiguration(activity, localeSettingsStore.state.localeList[0]) activity.recreate() } diff --git a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt index 4a307d29d..a2ee4533f 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleSettingsFragment.kt @@ -17,13 +17,15 @@ import kotlinx.android.synthetic.main.fragment_locale_settings.view.* import kotlinx.coroutines.ExperimentalCoroutinesApi import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.support.ktx.android.view.hideKeyboard +import mozilla.components.support.locale.LocaleUseCases import org.mozilla.fenix.R import org.mozilla.fenix.components.StoreProvider +import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.showToolbar class LocaleSettingsFragment : Fragment() { - private lateinit var store: LocaleSettingsStore + private lateinit var localeSettingsStore: LocaleSettingsStore private lateinit var interactor: LocaleSettingsInteractor private lateinit var localeView: LocaleSettingsView @@ -39,7 +41,10 @@ class LocaleSettingsFragment : Fragment() { ): View? { val view = inflater.inflate(R.layout.fragment_locale_settings, container, false) - store = StoreProvider.get(this) { + val browserStore = requireContext().components.core.store + val localeUseCase = LocaleUseCases(browserStore) + + localeSettingsStore = StoreProvider.get(this) { LocaleSettingsStore( createInitialLocaleSettingsState(requireContext()) ) @@ -47,7 +52,8 @@ class LocaleSettingsFragment : Fragment() { interactor = LocaleSettingsInteractor( controller = DefaultLocaleSettingsController( activity = requireActivity(), - localeSettingsStore = store + localeSettingsStore = localeSettingsStore, + localeUseCase = localeUseCase ) ) localeView = LocaleSettingsView(view.locale_container, interactor) @@ -87,7 +93,7 @@ class LocaleSettingsFragment : Fragment() { @ExperimentalCoroutinesApi override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - consumeFrom(store) { + consumeFrom(localeSettingsStore) { localeView.update(it) } } diff --git a/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleSettingsControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleSettingsControllerTest.kt index c1f4f463d..d55b6f2ea 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleSettingsControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/advanced/LocaleSettingsControllerTest.kt @@ -15,6 +15,7 @@ import io.mockk.spyk import io.mockk.verify import io.mockk.verifyAll import mozilla.components.support.locale.LocaleManager +import mozilla.components.support.locale.LocaleUseCases import org.junit.Before import org.junit.Test import java.util.Locale @@ -23,13 +24,20 @@ class LocaleSettingsControllerTest { private val activity = mockk(relaxed = true) private val localeSettingsStore: LocaleSettingsStore = mockk(relaxed = true) + private val localeUseCases: LocaleUseCases = mockk(relaxed = true) private val mockState = LocaleSettingsState(mockk(), mockk(), mockk()) private lateinit var controller: DefaultLocaleSettingsController @Before fun setup() { - controller = spyk(DefaultLocaleSettingsController(activity, localeSettingsStore)) + controller = spyk( + DefaultLocaleSettingsController( + activity, + localeSettingsStore, + localeUseCases + ) + ) mockkObject(LocaleManager) mockkStatic("org.mozilla.fenix.settings.advanced.LocaleManagerExtensionKt") @@ -45,11 +53,13 @@ class LocaleSettingsControllerTest { verifyAll(inverse = true) { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) - LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) + LocaleManager.setNewLocale(activity, locale = selectedLocale) activity.recreate() } with(controller) { - verify(inverse = true) { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } + verify(inverse = true) { + LocaleManager.updateBaseConfiguration(activity, selectedLocale) + } } } @@ -57,8 +67,9 @@ class LocaleSettingsControllerTest { fun `set a new locale from the list if other locale is chosen`() { val selectedLocale = Locale("en", "UK") val otherLocale: Locale = mockk() + every { localeUseCases.notifyLocaleChanged } returns mockk() every { localeSettingsStore.state } returns mockState.copy(selectedLocale = otherLocale) - every { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) } returns activity + every { LocaleManager.setNewLocale(activity, localeUseCases, selectedLocale) } returns activity with(controller) { every { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } just Runs } @@ -66,7 +77,7 @@ class LocaleSettingsControllerTest { controller.handleLocaleSelected(selectedLocale) verify { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) } - verify { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) } + verify { LocaleManager.setNewLocale(activity, localeUseCases, selectedLocale) } verify { activity.recreate() } with(controller) { verify { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } @@ -76,9 +87,11 @@ class LocaleSettingsControllerTest { @Test fun `set a new locale from the list if default locale is not selected`() { val selectedLocale = Locale("en", "UK") + every { localeUseCases.notifyLocaleChanged } returns mockk() every { localeSettingsStore.state } returns mockState.copy(selectedLocale = selectedLocale) every { LocaleManager.getCurrentLocale(activity) } returns null - every { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) } returns activity + every { LocaleManager.setNewLocale(activity, localeUseCases, selectedLocale) } returns activity + with(controller) { every { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } just Runs } @@ -86,7 +99,7 @@ class LocaleSettingsControllerTest { controller.handleLocaleSelected(selectedLocale) verify { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) } - verify { LocaleManager.setNewLocale(activity, selectedLocale.toLanguageTag()) } + verify { LocaleManager.setNewLocale(activity, localeUseCases, selectedLocale) } verify { activity.recreate() } with(controller) { verify { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } @@ -103,7 +116,7 @@ class LocaleSettingsControllerTest { verifyAll(inverse = true) { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) - LocaleManager.resetToSystemDefault(activity) + LocaleManager.resetToSystemDefault(activity, localeUseCases) activity.recreate() with(controller) { LocaleManager.updateBaseConfiguration(activity, selectedLocale) @@ -114,8 +127,9 @@ class LocaleSettingsControllerTest { @Test fun `set the default locale as the new locale`() { val selectedLocale = Locale("en", "UK") + every { localeUseCases.notifyLocaleChanged } returns mockk() every { localeSettingsStore.state } returns mockState.copy(localeList = listOf(selectedLocale)) - every { LocaleManager.resetToSystemDefault(activity) } just Runs + every { LocaleManager.resetToSystemDefault(activity, localeUseCases) } just Runs with(controller) { every { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } just Runs } @@ -123,7 +137,7 @@ class LocaleSettingsControllerTest { controller.handleDefaultLocaleSelected() verify { localeSettingsStore.dispatch(LocaleSettingsAction.Select(selectedLocale)) } - verify { LocaleManager.resetToSystemDefault(activity) } + verify { LocaleManager.resetToSystemDefault(activity, localeUseCases) } verify { activity.recreate() } with(controller) { verify { LocaleManager.updateBaseConfiguration(activity, selectedLocale) } From 9a4853c74f0f0870ddc34787f142fe898808fb98 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Wed, 24 Mar 2021 00:14:10 +0000 Subject: [PATCH 131/149] Update to Android-Components 74.0.1. --- 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 d23b3ff71..7c3eff8ef 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 = "74.0.0" + const val VERSION = "74.0.1" } From a53510ca60a2471a10006fbbf6ac5b6716232685 Mon Sep 17 00:00:00 2001 From: Aki Sasaki Date: Wed, 24 Mar 2021 11:22:43 -0700 Subject: [PATCH 132/149] set tasks_for to action to use release signing in relpro (#18614) --- taskcluster/fenix_taskgraph/release_promotion.py | 1 + 1 file changed, 1 insertion(+) diff --git a/taskcluster/fenix_taskgraph/release_promotion.py b/taskcluster/fenix_taskgraph/release_promotion.py index 902e7371b..eb028b419 100644 --- a/taskcluster/fenix_taskgraph/release_promotion.py +++ b/taskcluster/fenix_taskgraph/release_promotion.py @@ -159,6 +159,7 @@ def release_promotion_action(parameters, graph_config, input, task_group_id, tas else: raise ValueError("Unsupported version type: {}".format(version.version_type)) parameters['release_type'] = release_type + parameters['tasks_for'] = "action" parameters['pull_request_number'] = None From 436c3f6997d090e44430122bb9754fe88852863f Mon Sep 17 00:00:00 2001 From: Mozilla Releng Treescript Date: Wed, 24 Mar 2021 19:02:58 +0000 Subject: [PATCH 133/149] Automatic version bump CLOSED TREE NO BUG a=release --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 4e3c841a8..71cc89e73 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -88.0.0-beta.1 +88.0.0-beta.2 From 86eeff4dc911446c2e9cc74e6b9d6c56a8c5cd7c Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 25 Mar 2021 22:49:43 +0000 Subject: [PATCH 134/149] Update to Android-Components 74.0.2. --- 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 7c3eff8ef..ddc6b389d 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 = "74.0.1" + const val VERSION = "74.0.2" } From f9dc87c0d580ac99cd6dea6dcb058b24d1a4d339 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 28 Mar 2021 20:57:49 -0400 Subject: [PATCH 135/149] Update to Android-Components 74.0.3. (#18675) Co-authored-by: MickeyMoz --- 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 ddc6b389d..653c7c806 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 = "74.0.2" + const val VERSION = "74.0.3" } From cc7648adec6da3274793367ef485734ec2e42c28 Mon Sep 17 00:00:00 2001 From: Mozilla Releng Treescript Date: Mon, 29 Mar 2021 14:20:20 +0000 Subject: [PATCH 136/149] Automatic version bump CLOSED TREE NO BUG a=release --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 71cc89e73..339ad9df6 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -88.0.0-beta.2 +88.0.0-beta.3 From 72c9e3daae37c0b228eb3e44f04d9f434b72aa5d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 30 Mar 2021 20:06:43 -0400 Subject: [PATCH 137/149] Update to Android-Components 74.0.4. (#18715) Co-authored-by: MickeyMoz --- 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 653c7c806..aafb8a666 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 = "74.0.3" + const val VERSION = "74.0.4" } From a96309846590b2d9b844aa64a12085c32f202ebc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 31 Mar 2021 12:39:30 +0300 Subject: [PATCH 138/149] For #18644: fix metod to verify system notifications (#18721) (cherry picked from commit 246348501c3fea9844afcc64160d8ad4716996a8) Co-authored-by: Oana Horvath --- .../fenix/helpers/HomeActivityTestRule.kt | 13 ++++++++ .../fenix/ui/robots/NotificationRobot.kt | 30 ++++++++----------- 2 files changed, 26 insertions(+), 17 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 a3f049647..70247901f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt @@ -9,6 +9,7 @@ import androidx.test.espresso.intent.rule.IntentsTestRule import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.ActivityTestRule import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.UiSelector import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.onboarding.FenixOnboarding import org.mozilla.fenix.ui.robots.appContext @@ -37,6 +38,7 @@ class HomeActivityTestRule( override fun afterActivityFinished() { super.afterActivityFinished() setLongTapTimeout(longTapUserPreference) + closeNotificationShade() } } @@ -65,6 +67,7 @@ class HomeActivityIntentTestRule( override fun afterActivityFinished() { super.afterActivityFinished() setLongTapTimeout(longTapUserPreference) + closeNotificationShade() } } @@ -79,3 +82,13 @@ private fun skipOnboardingBeforeLaunch() { // this API so it can be fragile. FenixOnboarding(appContext).finish() } + +private fun closeNotificationShade() { + val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + if (mDevice.findObject( + UiSelector().resourceId("com.android.systemui:id/notification_stack_scroller") + ).exists() + ) { + mDevice.pressHome() + } +} diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt index 2c7ffe6ac..7ebbb0528 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NotificationRobot.kt @@ -13,27 +13,23 @@ import org.mozilla.fenix.helpers.ext.waitNotNull class NotificationRobot { fun verifySystemNotificationExists(notificationMessage: String) { - fun notificationTray() = UiScrollable( UiSelector().resourceId("com.android.systemui:id/notification_stack_scroller") ) - val notificationFound: Boolean - - notificationFound = try { - notificationTray().getChildByText( - UiSelector().text(notificationMessage), notificationMessage, true - ).exists() - } catch (e: UiObjectNotFoundException) { - false - } - - if (!notificationFound) { - // swipe 2 times to expand the silent notifications on API 28 and higher, single-swipe doesn't do it - notificationTray().swipeUp(2) - val notification = mDevice.findObject(UiSelector().textContains(notificationMessage)) - assertTrue(notification.exists()) - } + var notificationFound = false + + do { + try { + notificationFound = notificationTray().getChildByText( + UiSelector().text(notificationMessage), notificationMessage, true + ).waitForExists(waitingTime) + assertTrue(notificationFound) + } catch (e: UiObjectNotFoundException) { + notificationTray().scrollForward() + mDevice.waitForIdle() + } + } while (!notificationFound) } fun verifySystemNotificationGone(notificationMessage: String) { From f88599bc2a61c229956de310bef48e5bdcda3234 Mon Sep 17 00:00:00 2001 From: Codrut Topliceanu <60002907+codrut-topliceanu@users.noreply.github.com> Date: Wed, 31 Mar 2021 13:28:37 +0300 Subject: [PATCH 139/149] For #18667 - Migrated exitImmersiveModeIfNeeded to Fenix (#18699) --- .../mozilla/fenix/browser/BaseBrowserFragment.kt | 4 ++-- app/src/main/java/org/mozilla/fenix/ext/Activity.kt | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 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 e6adaf145..29b2ec9af 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -80,7 +80,6 @@ import mozilla.components.service.sync.logins.DefaultLoginValidationDelegate import mozilla.components.support.base.feature.PermissionsFeature import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.base.feature.ViewBoundFeatureWrapper -import mozilla.components.support.ktx.android.view.exitImmersiveModeIfNeeded import mozilla.components.support.ktx.android.view.hideKeyboard import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifAnyChanged import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged @@ -110,7 +109,6 @@ import org.mozilla.fenix.downloads.DynamicDownloadDialog import org.mozilla.fenix.ext.accessibilityManager import org.mozilla.fenix.ext.breadcrumb import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.enterToImmersiveMode import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.ext.hideToolbar import org.mozilla.fenix.ext.metrics @@ -130,6 +128,8 @@ import mozilla.components.feature.session.behavior.EngineViewBrowserToolbarBehav import mozilla.components.feature.webauthn.WebAuthnFeature import mozilla.components.support.base.feature.ActivityResultHandler import org.mozilla.fenix.GleanMetrics.PerfStartup +import org.mozilla.fenix.ext.enterToImmersiveMode +import org.mozilla.fenix.ext.exitImmersiveModeIfNeeded import org.mozilla.fenix.ext.measureNoInline import mozilla.components.feature.session.behavior.ToolbarPosition as MozacToolbarPosition diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt index 0ab6efec0..db5feca2b 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt @@ -24,6 +24,19 @@ fun Activity.enterToImmersiveMode() { or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) } +/** + * Attempts to come out from immersive mode using the View. + */ +fun Activity.exitImmersiveModeIfNeeded() { + if (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON and window.attributes.flags == 0) { + // We left immersive mode already. + return + } + + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE +} + fun Activity.breadcrumb( message: String, data: Map = emptyMap() From 14fd4ed71084583362a76862b2b5448c4a270461 Mon Sep 17 00:00:00 2001 From: Mozilla Releng Treescript Date: Wed, 31 Mar 2021 20:25:53 +0000 Subject: [PATCH 140/149] Automatic version bump CLOSED TREE NO BUG a=release --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 339ad9df6..f165f5949 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -88.0.0-beta.3 +88.0.0-beta.4 From f1de8bbf37b8fb71ba4e233b1a7113eabca1cf84 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 1 Apr 2021 23:01:19 +0000 Subject: [PATCH 141/149] Update to Android-Components 74.0.5. --- 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 aafb8a666..465f07a06 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 = "74.0.4" + const val VERSION = "74.0.5" } From bcea234cee6b1b22eab93a736eb69bc5ebd7f29e Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sun, 4 Apr 2021 23:23:05 +0000 Subject: [PATCH 142/149] Update to Android-Components 74.0.6. --- 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 465f07a06..615a1b24b 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 = "74.0.5" + const val VERSION = "74.0.6" } From 457dfd09055159eda8e91ffc13f78d0c1afc63aa Mon Sep 17 00:00:00 2001 From: Mozilla Releng Treescript Date: Mon, 5 Apr 2021 01:01:59 +0000 Subject: [PATCH 143/149] Automatic version bump CLOSED TREE NO BUG a=release --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index f165f5949..dfe299d1d 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -88.0.0-beta.4 +88.0.0-beta.5 From d6a8728b86fe48f5959d1346d08af44d5c7f9c4f Mon Sep 17 00:00:00 2001 From: Janet Dragojevic Date: Mon, 5 Apr 2021 15:10:03 -0400 Subject: [PATCH 144/149] [SDK-246] Change Nimbus `channel` input to use the same method as Glean (#18766) (#18801) Co-authored-by: Travis Long Co-authored-by: Gabriel Luong --- .../main/java/org/mozilla/fenix/experiments/NimbusSetup.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 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 49c3bef1e..4362056cc 100644 --- a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt +++ b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt @@ -14,7 +14,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.mozilla.fenix.Config +import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.components.isSentryEnabled import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -47,7 +47,10 @@ fun createNimbus(context: Context, url: String?): NimbusApi = // https://github.com/mozilla/probe-scraper/blob/master/repositories.yaml val appInfo = NimbusAppInfo( appName = "fenix", - channel = Config.channel.toString() + // 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 ) Nimbus(context, appInfo, serverSettings).apply { // This performs the minimal amount of work required to load branch and enrolment data From bd3ecd7555ac10279897fcd71a93593875e9f3b2 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Tue, 6 Apr 2021 23:02:41 +0000 Subject: [PATCH 145/149] Update to Android-Components 74.0.7. --- 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 615a1b24b..9b4111dfc 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 = "74.0.6" + const val VERSION = "74.0.7" } From 6d767421ff41513f8119e0060394336029a974ed Mon Sep 17 00:00:00 2001 From: Stefan Arentz Date: Wed, 7 Apr 2021 18:35:58 -0400 Subject: [PATCH 146/149] String sync for Fenix v88 (#18847) * Strings update - l10n.toml * Strings update - app/src/main/res/values-ar/strings.xml * Strings update - app/src/main/res/values-ast/strings.xml * Strings update - app/src/main/res/values-be/strings.xml * Strings update - app/src/main/res/values-ca/strings.xml * Strings update - app/src/main/res/values-cak/strings.xml * Strings update - app/src/main/res/values-cs/strings.xml * Strings update - app/src/main/res/values-cy/strings.xml * Strings update - app/src/main/res/values-da/strings.xml * Strings update - app/src/main/res/values-de/strings.xml * Strings update - app/src/main/res/values-dsb/strings.xml * Strings update - app/src/main/res/values-el/strings.xml * Strings update - app/src/main/res/values-en-rCA/strings.xml * Strings update - app/src/main/res/values-en-rGB/strings.xml * Strings update - app/src/main/res/values-es-rAR/strings.xml * Strings update - app/src/main/res/values-es-rCL/strings.xml * Strings update - app/src/main/res/values-es-rES/strings.xml * Strings update - app/src/main/res/values-eu/strings.xml * Strings update - app/src/main/res/values-fi/strings.xml * Strings update - app/src/main/res/values-fr/strings.xml * Strings update - app/src/main/res/values-fy-rNL/strings.xml * Strings update - app/src/main/res/values-gn/strings.xml * Strings update - app/src/main/res/values-iw/strings.xml * Strings update - app/src/main/res/values-hr/strings.xml * Strings update - app/src/main/res/values-hsb/strings.xml * Strings update - app/src/main/res/values-hu/strings.xml * Strings update - app/src/main/res/values-hy-rAM/strings.xml * Strings update - app/src/main/res/values-in/strings.xml * Strings update - app/src/main/res/values-it/strings.xml * Strings update - app/src/main/res/values-ja/strings.xml * Strings update - app/src/main/res/values-ka/strings.xml * Strings update - app/src/main/res/values-kab/strings.xml * Strings update - app/src/main/res/values-kk/strings.xml * Strings update - app/src/main/res/values-kmr/strings.xml * Strings update - app/src/main/res/values-ko/strings.xml * Strings update - app/src/main/res/values-lt/strings.xml * Strings update - app/src/main/res/values-nb-rNO/strings.xml * Strings update - app/src/main/res/values-nl/strings.xml * Strings update - app/src/main/res/values-nn-rNO/strings.xml * Strings update - app/src/main/res/values-oc/strings.xml * Strings update - app/src/main/res/values-pa-rIN/strings.xml * Strings update - app/src/main/res/values-pl/strings.xml * Strings update - app/src/main/res/values-pt-rBR/strings.xml * Strings update - app/src/main/res/values-pt-rPT/strings.xml * Strings update - app/src/main/res/values-rm/strings.xml * Strings update - app/src/main/res/values-ru/strings.xml * Strings update - app/src/main/res/values-sk/strings.xml * Strings update - app/src/main/res/values-sl/strings.xml * Strings update - app/src/main/res/values-sq/strings.xml * Strings update - app/src/main/res/values-sr/strings.xml * Strings update - app/src/main/res/values-su/strings.xml * Strings update - app/src/main/res/values-sv-rSE/strings.xml * Strings update - app/src/main/res/values-tg/strings.xml * Strings update - app/src/main/res/values-th/strings.xml * Strings update - app/src/main/res/values-tr/strings.xml * Strings update - app/src/main/res/values-uk/strings.xml * Strings update - app/src/main/res/values-vi/strings.xml * Strings update - app/src/main/res/values-zh-rCN/strings.xml * Strings update - app/src/main/res/values-zh-rTW/strings.xml --- app/src/main/res/values-ar/strings.xml | 12 +++ app/src/main/res/values-ast/strings.xml | 61 +++++------- app/src/main/res/values-be/strings.xml | 43 ++------- app/src/main/res/values-ca/strings.xml | 2 + app/src/main/res/values-cak/strings.xml | 13 +++ app/src/main/res/values-cs/strings.xml | 84 +++++++++++------ app/src/main/res/values-cy/strings.xml | 84 +++++++++++------ app/src/main/res/values-da/strings.xml | 75 +++++++++------ app/src/main/res/values-de/strings.xml | 84 +++++++++++------ app/src/main/res/values-dsb/strings.xml | 84 +++++++++++------ app/src/main/res/values-el/strings.xml | 78 ++++++++------- app/src/main/res/values-en-rCA/strings.xml | 80 ++++++++++------ app/src/main/res/values-en-rGB/strings.xml | 84 +++++++++++------ app/src/main/res/values-es-rAR/strings.xml | 84 +++++++++++------ app/src/main/res/values-es-rCL/strings.xml | 12 +++ app/src/main/res/values-es-rES/strings.xml | 81 ++++++++++------ app/src/main/res/values-eu/strings.xml | 12 +++ app/src/main/res/values-fi/strings.xml | 90 ++++++++++++------ app/src/main/res/values-fr/strings.xml | 80 ++++++++++------ app/src/main/res/values-fy-rNL/strings.xml | 12 +++ app/src/main/res/values-gn/strings.xml | 71 +++++++------- app/src/main/res/values-hr/strings.xml | 86 +++++++++++------ app/src/main/res/values-hsb/strings.xml | 102 +++++++++++++------- app/src/main/res/values-hu/strings.xml | 80 ++++++++++------ app/src/main/res/values-hy-rAM/strings.xml | 81 ++++++++++------ app/src/main/res/values-in/strings.xml | 2 - app/src/main/res/values-it/strings.xml | 81 ++++++++++------ app/src/main/res/values-iw/strings.xml | 84 +++++++++++------ app/src/main/res/values-ja/strings.xml | 85 +++++++++++------ app/src/main/res/values-ka/strings.xml | 83 ++++++++++------ app/src/main/res/values-kab/strings.xml | 46 +++------ app/src/main/res/values-kk/strings.xml | 12 +++ app/src/main/res/values-kmr/strings.xml | 2 + app/src/main/res/values-ko/strings.xml | 85 +++++++++++------ app/src/main/res/values-lt/strings.xml | 85 +++++++++++------ app/src/main/res/values-nb-rNO/strings.xml | 63 ++++++------- app/src/main/res/values-nl/strings.xml | 84 +++++++++++------ app/src/main/res/values-nn-rNO/strings.xml | 84 +++++++++++------ app/src/main/res/values-oc/strings.xml | 66 ++++++------- app/src/main/res/values-pa-rIN/strings.xml | 83 ++++++++++------ app/src/main/res/values-pl/strings.xml | 13 +++ app/src/main/res/values-pt-rBR/strings.xml | 92 ++++++++++++------ app/src/main/res/values-pt-rPT/strings.xml | 80 ++++++++++------ app/src/main/res/values-rm/strings.xml | 12 +++ app/src/main/res/values-ru/strings.xml | 12 +++ app/src/main/res/values-sk/strings.xml | 14 ++- app/src/main/res/values-sl/strings.xml | 68 +++++++------ app/src/main/res/values-sq/strings.xml | 89 +++++++++++------ app/src/main/res/values-sr/strings.xml | 12 +++ app/src/main/res/values-su/strings.xml | 12 +++ app/src/main/res/values-sv-rSE/strings.xml | 84 +++++++++++------ app/src/main/res/values-tg/strings.xml | 105 +++++++++++++-------- app/src/main/res/values-th/strings.xml | 76 ++++++++------- app/src/main/res/values-tr/strings.xml | 82 ++++++++++------ app/src/main/res/values-uk/strings.xml | 85 +++++++++++------ app/src/main/res/values-vi/strings.xml | 80 ++++++++++------ app/src/main/res/values-zh-rCN/strings.xml | 84 +++++++++++------ app/src/main/res/values-zh-rTW/strings.xml | 85 +++++++++++------ l10n.toml | 1 + 59 files changed, 2339 insertions(+), 1267 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index d53a1fd2c..02800ad9f 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1545,6 +1545,18 @@ افرز قائمة جلسات الولوج + + + بطاقات الائتمان + + احفظ البطاقات واملأها تلقائيًا + + البيانات معماة + + زامِن البطاقات بين الأجهزة + + أضِف بطاقة ائتمان + أضِف محرك بحث diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index 54b3faa96..1e9019fd1 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -20,10 +20,6 @@ Equí van amosase les llingüetes privaes abiertes. - - Baidu - - JD 1 llingüeta abierta. Toca pa cambiar a otra. @@ -707,6 +703,8 @@ Los últimos 30 díes + + D\'hai más 30 díes Nun hai nada @@ -1146,9 +1144,6 @@ ¡Afáyate en %s! ¿Yá tienes una cuenta? - - Conoz %s Novedaes Consigui les rempuestes equí - - Comienza a sincronizar los marcadores, les contraseñes y muncho más cola to cuenta de Firefox. - - Deprender más @@ -1168,8 +1159,6 @@ Sí, aniciar sesión Aniciando sesión… - - Aniciar sesión en Firefox Siguir ensin aniciar sesión @@ -1177,27 +1166,12 @@ Hebo un fallu al aniciar sesión - - Privacidá automática - - Los axustes de privacidá y seguranza bloquien rastrexadores, malware y compañes que te siguen. Estándar (por defeutu) - - Bloquia dalgunos rastrexadores. Les páxines van cargar de mou normal. Estricta (aconséyase) Estricta - - Bloquia más rastrexadores, anuncios y ventanos emerxentes. Les páxines van cargar más rápido mas dalgunes funcionalidaes quiciabes nun funcionen. - - Posición - - Prueba\'l restolar con una mano cola barra de ferramientes no baxero o móvila a lo cimero. Restolar en privao + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Diseñemos %s pa date\'l control tocante a los que compartes en llinia y con nós. @@ -1226,8 +1200,6 @@ en llinia y con nós.
Escoyeta d\'un estilu - - Aforra daqué de batería y curia los güeyos activando\'l mou escuru. Siguir l\'estilu del sistema @@ -1284,14 +1256,10 @@ en llinia y con nós.
Deprender más Estándar (por defeutu) - - Bloquia dalgunos rastrexadores. Les páxines van cargar de mou normal. Qué se bloquia coles proteición estándar escontra\'l rastrexu Estricta - - Bloquia más rastrexadores, anuncios y ventanos emerxentes. Les páxines van cargar más rápido mas dalgunes funcionalidaes quiciabes nun funcionen. Lo que la proteición estricta escontra\'l rastrexu bloquia @@ -1535,6 +1503,29 @@ en llinia y con nós.
Menú pa ordenar los anicios sesión + + + Tarxetes de creitu + + Los datos tán cifraos + + + Númberu de la tarxeta + + Data de caducidá + + Titular de la tarxeta + + Nomatu de la tarxeta + + Desaniciar la tarxeta + + Guardar + + Guardar + + Encaboxar + Amestar un motor de busca diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index ff2922f3d..8f30da729 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -20,10 +20,6 @@ Тут будуць паказаны вашы прыватныя карткі. - - Baidu - - JD 1 адкрытая картка. Націсніце, каб пераключыць карткі. @@ -182,6 +178,9 @@ Уладкаваць рэжым чытання + + Дадаць + Немагчыма злучыцца. Невядомая схема URL. @@ -1180,9 +1179,6 @@ Вітаем у %s! Ужо маеце ўліковы запіс? - - Пазнаёмцеся з %s Паглядзіце, што новага Адказы тут - - Пачніце сінхранізаваць закладкі, паролі і шмат іншага праз свой уліковы запіс Firefox. - - Падрабязней + + Сінхранізуйце Firefox паміж прыладамі @@ -1202,35 +1196,20 @@ Так, увайсці Уваход… - - Увайсці ў Firefox + + Зарэгістравацца Не ўваходзіць Сінхранізацыя ўключана Няўдача ўваходу - - Аўтаматычная прыватнасць - - Налады прыватнасці і бяспекі блакуюць трэкеры, шкоднасныя праграмы і кампаніі, што ідуць за вамі. Стандартная (прадвызначана) - - Блакуе менш трэкераў. Старонкі загружаюцца нармальна. Строгая (рэкамендуецца) Строгая - - Блакуе больш трэкераў, рэкламы і выплыўных вокнаў. Старонкі загружаюцца хутчэй, але некаторыя функцыі могуць не працаваць. - - Выберыце становішча - - Паспрабуйце навігацыю адной рукой на паліцы прылад унізе або перамясціце яе ўверх. Аглядайце прыватна Ваша прыватнасць + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Мы распрацавалі %s, каб даць вам кантроль над тым, чым дзяліцца ў Інтэрнэце, і тым, чым вы падзеліцеся з намі. Паведамленне аб прыватнасці @@ -1256,8 +1235,6 @@ Выберыце тэму - - Зберажыце зарад батарэі і зрок, уключыўшы цёмны рэжым. Аўтаматычна @@ -1313,14 +1290,10 @@ Даведацца больш Стандартная (прадвызначана) - - Блакуе менш трэкераў. Старонкі загружаюцца нармальна. Што блакуецца стандартнай аховай ад сачэння Строгая - - Блакуе больш трэкераў, рэкламы і выплыўных вокнаў. Старонкі загружаюцца хутчэй, але некаторыя функцыі могуць не працаваць. Што блакуецца строгай аховай ад сачэння diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index aa6013a6b..7ef4e91a8 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -180,6 +180,8 @@ Aparença + + Personalitza la vista de lectura No s’ha pogut connectar. No es reconeix l’esquema d’URL. diff --git a/app/src/main/res/values-cak/strings.xml b/app/src/main/res/values-cak/strings.xml index b5a773855..272323542 100644 --- a/app/src/main/res/values-cak/strings.xml +++ b/app/src/main/res/values-cak/strings.xml @@ -1586,6 +1586,19 @@ Ticholajïx ruk\'utsamaj rutikirib\'al molojri\'ïl + + + Rutarjeta\' kre\'ito\' + + Keyak chuqa\' ruyon kenojisäx ri tarjeta\' + + + Ewan kisik\'ixik ri taq tzij + + Sync tarjeta\' chi kikojol okisab\'äl + + Titz\'aqatisäx rutarjeta\' kre\'ito\' + Titz\'aqatisäx kanob\'äl diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 3b525cf69..f3adf80b1 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -21,10 +21,6 @@ Tady se zobrazí vaše anonymní panely. - - Baidu - - JD Jeden otevřený panel. Klepnutím panely přepnete. @@ -186,6 +182,11 @@ Přizpůsobit zobrazení čtečky + + Přidat + + Upravit + Nelze se připojit. Schéma URL nebylo rozpoznáno. @@ -993,6 +994,10 @@ Všechny akce Naposledy použité + + Jste přihlášeni jako %1$s + + Přihlásit se k synchronizaci Přihlásit ke službě Sync @@ -1186,9 +1191,6 @@ Vítá vás %s Už máte účet? - - Poznejte aplikaci %s Co je nového Zde najdete všechny odpovědi - - S účtem Firefoxu můžete synchronizovat záložky, hesla i další svá data. + + Synchronizace Firefoxu mezi zařízeními - Zjistit více + Přeneste si své záložky, historii a hesla do Firefoxu i na toto zařízení. @@ -1208,8 +1210,8 @@ Ano, přihlásit Přihlašování… - - Přihlásit se do Firefoxu + + Přihlásit se Nepřihlašovat @@ -1217,26 +1219,23 @@ Přihlášení selhalo - Automatické soukromí - - Nastavení soukromí a zabezpečení blokuje sledovací prvky, malware a společnosti, které vás sledují. + Soukromí pro vás a napořád + + Firefox automaticky zabrání společnostem v tajném sledování vašeho prohlížení webu. Standardní (výchozí) - Blokuje méně sledovacích prvků. Stránky se načítají běžným způsobem. + Vyvážené soukromí a výkon. Neovlivní správné načítání webových stránek. Přísná (doporučeno) Přísná - Blokuje více sledovacích prvků, reklam a vyskakovacích oken. Zrychlí i načítání stránek, ale může omezit jejich fungování. - - Vyberte si svou stranu + 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 - Zkuste po webu brouzdat jednou rukou s adresním řádkem vespod obrazovky, nebo ho přesuňte nahoru. + Nastavte si umístění nástrojové lišty na obrazovce dole nebo nahoře, ať na ni dosáhnete. Prohlížejte v soukromí Vaše soukromí + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s 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ů @@ -1264,7 +1263,7 @@ Vyberte si vzhled - Šetřete baterku i své oči povolením tmavého režimu. + Šetřete baterku i své oči povolením tmavého režimu. Automatický @@ -1319,13 +1318,13 @@ Standardní (výchozí) - Blokuje méně sledovacích prvků. Stránky se načítají běžným způsobem. + Vyvážené soukromí a výkon. Neovlivní správné načítání webových stránek. Co blokuje běžné nastavení ochrany proti sledování Přísná - Blokuje více sledovacích prvků, reklam a vyskakovacích oken. Zrychlí i načítání stránek, ale může omezit jejich fungování. + Blokuje více sledovacích prvků. Zrychlí i načítání stránek, ale může omezit jejich fungování. Co blokuje přísné nastavení ochrany proti sledování @@ -1562,6 +1561,37 @@ Seřadit podle + + + Platební karty + + Ukládat a automaticky vyplňovat karty + + Data jsou šifrována + + Synchronizovat karty napříč zařízeními + + Přidat platební kartu + + + Přidat kartu + + Číslo karty + + Datum platnosti + + Jméno na kartě + + Vaše označení karty + + Odstranit kartu + + Uložit + + Uložit + + Zrušit + Přidat vyhledávač diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index c1e50db54..ee2968e06 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -19,10 +19,6 @@ Bydd eich tabiau preifat i’w gweld yma. - - Baidu - - JD 1 tab agored. Tapio i newid tabiau. @@ -182,6 +178,11 @@ Cyfaddasu’r golwg defnyddiwr + + Ychwanegu + + Golygu + Methu cysylltu. Cynllun URL anadnabyddadwy. @@ -974,6 +975,10 @@ Pob gweithred Defnyddiwyd yn ddiweddar + + Mewngofnodwyd fel %1$s + + Mewngofnodi i gydweddu Mewngofnodi i Sync @@ -1165,9 +1170,6 @@ Fodd bynnag, gall fod yn llai sefydlog. Llwythwch ein porwr Beta i gael profiad Croeso i %s! A oes gennych chi gyfrif yn barod? - - Dod i adnabod %s Beth sy’n newydd Cewch atebion yma - - Cychwynnwch gydweddu nodau tudalen, cyfrineiriau, a rhagor gyda’ch cyfrif Firefox. + + Cydweddu Firefox rhwng dyfeisiau - Dysgu rhagor + Dewch â nodau tudalen, hanes, a chyfrineiriau i Firefox ar y ddyfais hon. @@ -1187,8 +1189,8 @@ Fodd bynnag, gall fod yn llai sefydlog. Llwythwch ein porwr Beta i gael profiad Iawn, mewngofnodwch fi Yn mewngofnodi… - - Mewngofnodi i Firefox + + Ymuno Cadw wedi allgofnodi @@ -1197,26 +1199,23 @@ Fodd bynnag, gall fod yn llai sefydlog. Llwythwch ein porwr Beta i gael profiad Wedi methu mewngofnodi - Preifatrwydd awtomatig - - Mae gosodiadau preifatrwydd a diogelwch yn rhwystro tracwyr, meddalwedd faleisus, a chwmnïau sy’n eich dilyn. + Preifatrwydd bob amser + + Mae Firefox yn atal cwmnïau rhag eich dilyn yn gyfrinachol o amgylch y we, yn awtomatig. Safonol (rhagosodedig) - Yn rhwystro llai o dracwyr. Bydd tudalennau’n llwytho’n arferol. + Cydbwysedd rhwng diogelwch a pherfformiad. Bydd tudalennau’n llwytho fel arfer. Llym (argymell) Llym - Yn rhwystro rhagor o dracwyr, hysbysebion, a llamlenni. Mae tudalennau’n llwytho’n gyflymach, ond efallai na fydd rhywfaint o’u hymarferoldeb yn gweithio. - - Gwneud safiad + 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 gynnig ar bori un llaw gyda’r bar offer gwaelod neu ei symud i’r brig. + Rhowch y bar offer o fewn cyrraedd hawdd. Cadwch ef ar y gwaelod, neu ei symud i’r brig. Pori’n breifat Eich preifatrwydd + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> 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.      @@ -1245,7 +1244,7 @@ Fodd bynnag, gall fod yn llai sefydlog. Llwythwch ein porwr Beta i gael profiad Dewis eich thema - Arbedwch ychydig o fatri a’ch golwg trwy alluogi’r modd tywyll. + Arbedwch ychydig o fatri a’ch golwg trwy alluogi’r modd tywyll. Awtomatig @@ -1300,13 +1299,13 @@ Fodd bynnag, gall fod yn llai sefydlog. Llwythwch ein porwr Beta i gael profiad Safonol (rhagosodedig) - Yn rhwystro llai o dracwyr. Bydd tudalennau’n llwytho’n arferol. + Cydbwysedd rhwng diogelwch a pherfformiad. Bydd tudalennau’n llwytho fel arfer. Beth sydd wedi’i rwystro gan ddiogelu tracio safonol Llym - Yn rhwystro rhagor o dracwyr, hysbysebion, a llamlenni. Mae tudalennau’n llwytho’n gyflymach, ond efallai na fydd rhywfaint o’u hymarferoldeb yn gweithio. + Yn rhwystro mwy o dracwyr fel bod tudalennau’n llwytho’n gyflymach, ond gall dorri rhai swyddogaethau ar y dudalen. Beth sydd wedi’i rwystro gan ddiogelu tracio llym @@ -1542,6 +1541,37 @@ Fodd bynnag, gall fod yn llai sefydlog. Llwythwch ein porwr Beta i gael profiad Trefnu dewislen mewngofnodi + + + Cardiau Credyd + + Cadw a awtolanw cardiau + + Mae data wedi’i amgryptio + + Cydweddu cardiau ar draws dyfeisiau + + Ychwanegu cerdyn credyd + + + Ychwanegu cerdyn + + Rhif y Cerdyn + + Dyddiad Dod i Ben + + Enw ar y Cerdyn + + Llysenw Cerdyn + + Dileu cerdyn + + Cadw + + Cadw + + Diddymu + Ychwanegu peiriant chwilio diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index e139916e2..0a9c77933 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -19,10 +19,6 @@ Dine private faneblade vil blive vist her. - - Baidu - - JD 1 åbent faneblad. Tryk for at skifte faneblade. @@ -182,6 +178,11 @@ Tilpas læsevisning + + Tilføj + + Rediger + Ude af stand til at oprette forbindelse. Ikke-genkendelig URL-skema. @@ -1157,9 +1158,6 @@ Velkommen til %s! Har du allerede en konto? - - Lær %s at kende Se nyhederne @@ -1168,10 +1166,10 @@ Har du spørgsmål om den nye version af %s? Vil du vide, hvad der er ændret? Få svar her - - Begynd at synkronisere bogmærker, adgangskoder m.m. med din Firefox-konto. + + Synkroniser Firefox mellem enheder - Læs mere + Synkroniser bogmærker, historik og adgangskoder med Firefox på denne enhed. @@ -1180,35 +1178,26 @@ Ja, log mig ind Logger ind… - - Log in på Firefox + + Tilmeld dig Forbliv udlogget Synkronisering er slået til Kunne ikke logge ind - - Automatisk privatlivsbeskyttelse - - Indstillinger for privatlivsbeskyttelse og sikkerhed blokerer sporings-mekanismer, skadelig software og virksomheder, der følger dig på nettet. + + Firefox forhindrer automatisk virksomheder i at følge dig i smug på nettet. Standard - Blokerer færre sporings-mekanismer. Sider indlæses som normalt. + Balanceret mellem privatliv og ydelse. Sider indlæses som normalt. Striks (anbefalet) Striks - Blokerer flere sporings-mekanismer, reklamer og pop ups. Sider indlæses hurtigere, men noget funktionalitet virker måske ikke. - - Vælg side - - Brug værktøjslinjen nederst til at browse med én hånd. Værktøjslinjen kan flyttes til toppen. + Blokerer flere sporings-mekanismer. Sider indlæses hurtigere, men noget funktionalitet virker måske ikke. Privat browsing Bedre beskyttelse af dit privatliv + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Vi har designet %s til at give dig kontrol over, hvad du deler på nettet - og hvad du deler med os. Læs vores privatlivspolitik @@ -1236,7 +1225,7 @@ Vælg tema - Skån dit batteri og dine øjne ved at aktivere mørkt tema. + Skån dit batteri og dine øjne med et mørkt tema. Automatisk @@ -1291,13 +1280,13 @@ Standard - Blokerer færre sporings-mekanismer. Sider indlæses som normalt. + Balanceret mellem privatliv og ydelse. Sider indlæses som normalt. Hvad der bliver blokeret af standard-opsætningen af beskyttelse mod sporing Striks - Blokerer flere sporings-mekanismer, reklamer og pop ups. Sider indlæses hurtigere, men noget funktionalitet virker måske ikke. + Blokerer flere sporings-mekanismer. Sider indlæses hurtigere, men noget funktionalitet virker måske ikke. Hvad der bliver blokeret af striks beskyttelse mod sporing @@ -1533,6 +1522,34 @@ Sortér menuen logins + + + Betalingskort + + Gem og autofyld betalingskort + + Data er krypteret + + Synkroniser kort på tværs af enheder + + Tilføj betalingskort + + Tilføj kort + + Kortnummer + + Udløbsdato + + Navn på kort + + Slet kort + + Gem + + Gem + + Annuller + Tilføj søgetjeneste diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 69ab06941..f75945da7 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -22,10 +22,6 @@ Ihre privaten Tabs werden hier angezeigt. - - Baidu - - JD 1 offener Tab. Antippen, um Tabs zu wechseln. @@ -187,6 +183,11 @@ Leseansicht anpassen + + Hinzufügen + + Bearbeiten + Verbindung nicht möglich. Nicht erkennbares URL-Schema. @@ -1001,6 +1002,10 @@ Alle Aktionen Kürzlich verwendet + + Angemeldet als %1$s + + Zum Synchronisieren anmelden Bei Sync anmelden @@ -1200,9 +1205,6 @@ Willkommen bei %s! Haben Sie schon ein Konto? - - %s kennenlernen Sehen Sie sich an, was es Neues gibt Hier erhalten Sie Antworten - - Beginnen Sie mit dem Synchronisieren von Lesezeichen, Passwörtern und mehr mittels Ihres Firefox-Kontos. + + Synchronisieren Sie Firefox zwischen Geräten - Weitere Informationen + Übertragen Sie Lesezeichen, Chronik und Passwörter zu Firefox auf diesem Gerät. @@ -1222,8 +1224,8 @@ Ja, anmelden Anmeldung läuft… - - Bei Firefox anmelden + + Registrieren Abgemeldet bleiben @@ -1231,26 +1233,23 @@ Anmeldung fehlgeschlagen - Automatischer Datenschutz - - Datenschutz- und Sicherheitseinstellungen blockieren Tracker, Schadsoftware und Unternehmen, die Sie verfolgen. + Privatsphäre ab Werk + + Firefox verhindert automatisch, dass Unternehmen heimlich Ihre Aktivitäten im Internet verfolgen. Standard - Blockiert weniger Tracker. Seiten werden normal geladen. + Ausgewogen zwischen Datenschutz und Leistung. Seiten laden normal. Streng (empfohlen) Streng - Blockiert mehr Tracker, Anzeigen und Pop-ups. Seiten werden schneller geladen, aber einige Funktionen funktionieren möglicherweise nicht. - - Entscheiden Sie sich + 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 - Versuchen Sie, mit der unteren Symbolleiste mit einer Hand zu surfen, oder verschieben Sie sie nach oben. + Platzieren Sie die Symbolleiste in Reichweite. Behalten Sie sie unten oder verschieben Sie sie nach oben. Privat surfen Ihre Privatsphäre + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Wir haben %s so konzipiert, dass Sie die Kontrolle darüber haben, was Sie im Internet und was Sie mit uns teilen. Lesen Sie unseren Datenschutzhinweis @@ -1278,7 +1277,7 @@ Wählen Sie Ihr Theme - Schonen Sie die Batterie und Ihre Augen, indem Sie den Dunkelmodus aktivieren. + Schonen Sie die Batterie und Ihre Augen mit dem Dunkelmodus. Automatisch @@ -1333,13 +1332,13 @@ Standard - Blockiert weniger Tracker. Seiten werden normal geladen. + Ausgewogen zwischen Datenschutz und Leistung. Seiten laden normal. Was wird durch den Standard-Tracking-Schutz blockiert? Streng - Blockiert mehr Tracker, Anzeigen und Pop-ups. Seiten werden schneller geladen, aber einige Funktionen funktionieren möglicherweise nicht. + Blockiert weitere Elemente zur Aktivitätenverfolgung, sodass Seiten schneller geladen werden, aber einige Seiten funktionieren dann eventuell nicht richtig. Was wird durch den strengen Tracking-Schutz blockiert? @@ -1575,6 +1574,37 @@ Menü mit Zugangsdaten sortieren + + + Kreditkarten + + Autovervollständigung für Kreditkartendaten + + Daten sind verschlüsselt + + Karten zwischen Geräten synchronisieren + + Kreditkarte hinzufügen + + + Karte hinzufügen + + Kartennummer + + Ablaufdatum + + Name auf Karte + + Interner Name für die Karte + + Karte löschen + + Speichern + + Speichern + + Abbrechen + Suchmaschine hinzufügen diff --git a/app/src/main/res/values-dsb/strings.xml b/app/src/main/res/values-dsb/strings.xml index 497fb3929..9d75892ec 100644 --- a/app/src/main/res/values-dsb/strings.xml +++ b/app/src/main/res/values-dsb/strings.xml @@ -19,10 +19,6 @@ Waše priwatne rejtariki se how wócyniju. - - Baidu - - JD Wócynjone rejtariki: %1$s. Pótusniśo, aby rejtariki pśešaltował. @@ -182,6 +178,11 @@ Cytański naglěd pśiměriś + + Pśidaś + + Wobźěłaś + Zwisk njejo móžny. Njespóznawajobna URL-šema. @@ -974,6 +975,10 @@ Wšykne akcije Njedawno wužyte + + Pśizjawjony ako %1$s + + Pla Sync pśizjawiś Pla Sync pśizjawiś @@ -1165,9 +1170,6 @@ Maśo južo konto? - - %s póznaś Cytajśo, což jo nowe How dostanjośo wótegrona - - Synchronizěrujśo něnto cytańske znamjenja, gronidła a wěcej ze swójim kontom Firefox. + + Firefox mjazy rědami synchronizěrowaś - Dalšne informacije + Pśinjasćo cytańske znamjenja, historiju a gronidła k Firefox na toś tom rěźe. @@ -1187,8 +1189,8 @@ Jo, pśizjawiś Pśizjawja se… - - Pla Firefox pśizjawiś + + Registrěrowaś Wótzjawjony wóstaś @@ -1196,26 +1198,23 @@ Pśizjawjenje njejo se raźiło - Awtomatiska priwatnosć - - Nastajenja priwatnosći a wěstoty pśeslědowaki, škódnu softwaru a pśedewześa blokěruju, kótarež wam slěduju. + Priwatnosć pśecej aktiwna + + Firefox awtomatiski pśedewześam zawoborujo, wam kšajźu pó webje slědowaś. Standard - Blokěrujo mjenjej pśeslědowakow. Boki se normalnje zacytaju. + Wuwažony za priwatnosć a wugbaśe. Boki se normalnje zacytaju. Striktny (dopórucony) Striktny - Blokěrujo wěcej pśeslědowakow, wabjenja a wuskokujucych woknow. Boki se malsnjej spěšnje zacytaju, ale někotare funkcije snaź njefunkcioněruju. - - Rozsuźćo se + Blokěrujo dalšne pśeslědowaki, aby se boki malsnjej zacytali, ale někotare boki snaź korektnje njefunkcioněruju. + + Wubjeŕśo poziciju za swóju symbolowu rědku - Woytajśo z dolneju symboloweju rědku z jadneju ruku pśeglědowaś abo pśesuńśo ju górjej. + Pozicioněrujśo symbolowu rědku w swójej bliskosći. Wobchowajśo ju dołojce abo pśesuńśo ju górjej. Priwatnje pśeglědowaś @@ -1229,7 +1228,7 @@ Waša priwatnosć + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Smy %s wuwili, aby wam kontrolu wó tom dali, co online źěliśo a co z nami. Cytajśo našu powěźeńku priwatnosći @@ -1244,7 +1243,7 @@ Wubjeŕśo swóju drastwu - Zmóžniśo śamny modus, aby šonował swóju bateriju a swóje wócy. + Zmóžniśo śamny modus, aby šonował swóju bateriju a swóje wócy. Awtomatiski @@ -1299,13 +1298,13 @@ Standard - Blokěrujo mjenjej pśeslědowakow. Boki se normalnje zacytaju. + Wuwažony za priwatnosć a wugbaśe. Boki se normalnje zacytaju. Co se pśez standardny slědowański šćit blokěrujo? Striktny - Blokěrujo wěcej pśeslědowakow, wabjenja a wuskokujucych woknow. Boki se malsnjej spěšnje zacytaju, ale někotare funkcije snaź njefunkcioněruju. + Blokěrujo dalšne pśeslědowaki, aby se boki malsnjej zacytali, ale někotare boki snaź korektnje njefunkcioněruju. Co se pśez striktny slědowański šćit blokěrujo? @@ -1544,6 +1543,37 @@ Meni pśizjawjeńskich datow sortěrowaś + + + Kreditowe kórty + + Kórty składowaś a awtomatiski wupołniś + + Daty su skoděrowane + + Kórty pśez rědy synchronizěrowaś + + Kreditowu kórtu pśidaś + + + Kórtu pśidaś + + Kórtowy numer + + Datum płaśiwosći + + Mě na kórśe + + Kórtowe pśimě + + Kórtu wulašowaś + + Składowaś + + Składowaś + + Pśetergnuś + Pytnicu pśidaś diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 4dbbd5d96..ce37d7ebf 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -22,10 +22,6 @@ Οι ιδιωτικές καρτέλες σας θα εμφανίζονται εδώ. - - Baidu - - JD 1 ανοικτή καρτέλα. Πατήστε για εναλλαγή καρτελών. @@ -188,6 +184,11 @@ Προσαρμογή προβολής ανάγνωσης + + Προσθήκη + + Επεξεργασία + Αδυναμία σύνδεσης. Μη αναγνωρίσιμο σχήμα URL. @@ -984,6 +985,8 @@ Όλες οι ενέργειες Πρόσφατη χρήση + + Σύνδεση για συγχρονισμό Σύνδεση στο Sync @@ -1182,9 +1185,6 @@ Καλώς ορίσατε στο %s! Έχετε ήδη λογαριασμό; - - Γνωρίστε το %s Δείτε τι νέο υπάρχει Λάβετε απαντήσεις εδώ - - Ξεκινήστε το συγχρονισμό σελιδοδεικτών, κωδικών πρόσβασης και άλλων δεδομένων με το λογαριασμό Firefox σας. - - Μάθετε περισσότερα @@ -1204,8 +1200,8 @@ Ναι, σύνδεση Σύνδεση… - - Σύνδεση στο Firefox + + Εγγραφή Παραμονή εκτός σύνδεσης @@ -1213,27 +1209,14 @@ Αποτυχία σύνδεσης - - Αυτόματο απόρρητο - - Οι ρυθμίσεις απορρήτου και ασφάλειας αποκλείουν ιχνηλάτες, κακόβουλο λογισμικό και εταιρείες που σας ακολουθούν. + + Το Firefox εμποδίζει την καταγραφή της διαδικτυακής δραστηριότητάς σας από εταιρείες. Τυπική (προεπιλογή) - - Φραγή λιγότερων ιχνηλατών. Οι σελίδες θα φορτώνονται κανονικά. Αυστηρή (προτείνεται) Αυστηρή - - Φραγή περισσότερων ιχνηλατών, διαφημίσεων και αναδυόμενων παραθύρων. Οι σελίδες φορτώνονται ταχύτερα, αλλά ορισμένα χαρακτηριστικά ενδέχεται να μην λειτουργούν. - - Πάρτε θέση - - Δοκιμάστε την περιήγηση με ένα χέρι με την κάτω γραμμή εργαλείων ή μετακινήστε την στο πάνω μέρος. Ιδιωτική περιήγηση Το απόρρητό σας + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Έχουμε σχεδιάσει το %s έτσι, ώστε να ελέγχετε τι κοινοποιείτε στο διαδίκτυο και σε εμάς. Διαβάστε τη σημείωση απορρήτου μας @@ -1259,8 +1242,6 @@ Επιλογή θέματος - - Εξοικονόμηση μπαταρίας και προστασία ματιών με τη σκοτεινή λειτουργία. Αυτόματο @@ -1316,14 +1297,10 @@ Μάθετε περισσότερα Τυπική (προεπιλογή) - - Φραγή λιγότερων ιχνηλατών. Οι σελίδες θα φορτώνονται κανονικά. Τι αποκλείει η τυπική προστασία από καταγραφή Αυστηρή - - Φραγή περισσότερων ιχνηλατών, διαφημίσεων και αναδυόμενων παραθύρων. Οι σελίδες φορτώνονται ταχύτερα, αλλά ορισμένα μέρη ενδέχεται να μην λειτουργούν. Τι αποκλείει η αυστηρή προστασία από καταγραφή @@ -1562,6 +1539,37 @@ Ταξινόμηση μενού σύνδεσης + + + Πιστωτικές κάρτες + + Αποθήκευση και αυτόματη συμπλήρωση στοιχείων καρτών + + Τα δεδομένα είναι κρυπτογραφημένα + + Συγχρονισμός καρτών μεταξύ των συσκευών + + Προσθήκη πιστωτικής κάρτας + + + Προσθήκη κάρτας + + Αριθμός κάρτας + + Ημερομηνία λήξης + + Όνομα στην κάρτα + + Ψευδώνυμο κάρτας + + Διαγραφή κάρτας + + Αποθήκευση + + Αποθήκευση + + Ακύρωση + Προσθήκη μηχανής αναζήτησης diff --git a/app/src/main/res/values-en-rCA/strings.xml b/app/src/main/res/values-en-rCA/strings.xml index 889ce76fc..113fc0b19 100644 --- a/app/src/main/res/values-en-rCA/strings.xml +++ b/app/src/main/res/values-en-rCA/strings.xml @@ -20,10 +20,6 @@ Your private tabs will be shown here. - - Baidu - - JD 1 open tab. Tap to switch tabs. @@ -182,6 +178,11 @@ Customize reader view + + Add + + Edit + Unable to connect. Unrecognizable URL scheme. @@ -1157,9 +1158,6 @@ Welcome to %s! Already have an account? - - Get to know %s See what’s new Get answers here - - Start syncing bookmarks, passwords, and more with your Firefox account. + + Sync Firefox between devices - Learn more + Bring bookmarks, history, and passwords to Firefox on this device. @@ -1179,8 +1177,8 @@ Yes, sign me in Signing in… - - Sign in to Firefox + + Sign up Stay signed out @@ -1188,26 +1186,23 @@ Failed to sign-in - Automatic privacy - - Privacy and security settings block trackers, malware, and companies that follow you. + Always-on privacy + + Firefox automatically stops companies from secretly following you around the web. Standard (default) - Blocks fewer trackers. Pages will load normally. + Balanced for privacy and performance. Pages load normally. Strict (recommended) Strict - Blocks more trackers, ads, and popups. Pages load faster, but some functionality might not work. - - Take a position + Blocks more trackers so pages load faster, but some on-page functionally may break. + + Pick your toolbar placement - Try one-handed browsing with the bottom toolbar or move it to the top. + Put the toolbar within easy reach. Keep it on the bottom, or move it to the top. Browse privately Your privacy + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> We’ve designed %s to give you control over what you share online and what you share with us. Read our privacy notice @@ -1235,7 +1230,7 @@ Choose your theme - Save some battery and your eyesight by enabling dark mode. + Save some battery and your eyesight with dark mode. Automatic @@ -1290,13 +1285,13 @@ Standard (default) - Blocks fewer trackers. Pages will load normally. + balanced for privacy and performance. Pages load normally. What’s blocked by standard tracking protection Strict - Blocks more trackers, ads, and popups. Pages load faster, but some functionality might not work. + Blocks more trackers so pages load faster, but some on-page functionality may break. What’s blocked by strict tracking protection @@ -1530,6 +1525,37 @@ Sort logins menu + + + Credit cards + + Save and autofill cards + + Data is encrypted + + Sync cards across devices + + Add credit card + + + Add card + + Card Number + + Expiration Date + + Name on Card + + Card Nickname + + Delete card + + Save + + Save + + Cancel + Add search engine diff --git a/app/src/main/res/values-en-rGB/strings.xml b/app/src/main/res/values-en-rGB/strings.xml index 326e6bf0f..fb84b3f96 100644 --- a/app/src/main/res/values-en-rGB/strings.xml +++ b/app/src/main/res/values-en-rGB/strings.xml @@ -19,10 +19,6 @@ Your private tabs will be shown here. - - Baidu - - JD 1 open tab. Tap to switch tabs. @@ -181,6 +177,11 @@ Customise reader view + + Add + + Edit + Unable to connect. Unrecognisable URL scheme. @@ -970,6 +971,10 @@ All actions Recently used + + Signed in as %1$s + + Sign in to synchronise Sign in to Sync @@ -1159,9 +1164,6 @@ Welcome to %s! Already have an account? - - Get to know %s See what’s new Get answers here - - Start synchronising bookmarks, passwords, and more with your Firefox account. + + Synchronise Firefox between devices - Learn more + Bring bookmarks, history, and passwords to Firefox on this device. @@ -1181,8 +1183,8 @@ Yes, sign me in Signing in… - - Sign in to Firefox + + Sign up Stay signed out @@ -1190,26 +1192,23 @@ Failed to sign-in - Automatic privacy - - Privacy and security settings block trackers, malware, and companies that follow you. + Always-on privacy + + Firefox automatically stops companies from secretly following you around the web. Standard (default) - Blocks fewer trackers. Pages will load normally. + Balanced for privacy and performance. Pages load normally. Strict (recommended) Strict - Blocks more trackers, ads, and popups. Pages load faster, but some functionality might not work. - - Take a position + Blocks more trackers so pages load faster, but some on-page functionally may break. + + Pick your toolbar placement - Try one-handed browsing with the bottom toolbar or move it to the top. + Put the toolbar within easy reach. Keep it on the bottom, or move it to the top. Browse privately Your privacy + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> We’ve designed %s to give you control over what you share online and what you share with us. Read our privacy notice @@ -1237,7 +1236,7 @@ Choose your theme - Save some battery and your eyesight by enabling dark mode. + Save some battery and your eyesight with dark mode. Automatic @@ -1292,13 +1291,13 @@ Standard (default) - Blocks fewer trackers. Pages will load normally. + Balanced for privacy and performance. Pages load normally. What’s blocked by standard tracking protection Strict - Blocks more trackers, ads, and popups. Pages load faster, but some functionality might not work. + Blocks more trackers so pages load faster, but some on-page functionality may break. What’s blocked by strict tracking protection @@ -1533,6 +1532,37 @@ Sort logins menu + + + Credit cards + + Save and autofill cards + + Data is encrypted + + Synchronise cards across devices + + Add credit card + + + Add card + + Card Number + + Expiration Date + + Name on Card + + Card Nickname + + Delete card + + Save + + Save + + Cancel + Add search engine diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index 08d90f696..f7a76fe30 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -20,10 +20,6 @@ Sus pestañas privadas se van a mostrar aquí. - - Baidu - - JD 1 abrir pestaña. Tocá para cambiar de pestaña. @@ -185,6 +181,11 @@ Personalizar vista de lectura + + Agregar + + Editar + No se puede conectar. Esquema de URL irreconocible. @@ -994,6 +995,10 @@ Todas las acciones Usado recientemente + + Iniciaste sesión como %1$s + + Iniciá sesión para sincronizar Iniciar sesión en Sync @@ -1185,9 +1190,6 @@ ¡Bienvenido a %s! ¿Ya tenés una cuenta? - - Conocé %s Mirá las novedades Las respuestas están aquí - - Empezá a sincronizar marcadores, contraseñas y más con tu Cuenta de Firefox. + + Sincronizar Firefox entre dispositivos - Conocer más + Traer marcadores, historial y contraseñas a Firefox a este dispositivo. @@ -1207,8 +1209,8 @@ Sí, iniciá mi sesión Iniciando sesión… - - Iniciar sesión en Firefox + + Registrate Mantenete desconectado @@ -1216,26 +1218,23 @@ Falló el inicio de sesión - Privacidad automática - - La configuración de privacidad y seguridad bloquea los rastreadores, los programas malignos y las compañías que te siguen. + Privacidad siempre activada + + Firefox impide automáticamente que las compañías te sigan en secreto por la web. Estándar (predeterminado) - Bloquea menos rastreadores. Las páginas se van a cargar normalmente. + Equilibrado para protección y rendimiento. Las páginas se van a cargar normalmente. Estricta (recomendada) Estricta - Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero podés perder cierta funcionalidad. - - Tomá una posición + 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 - Probá la navegación con una sola mano con la barra de herramientas inferior o movela hacia arriba. + Poné la barra de herramientas a tu alcance. Mantenela abajo, o movela hacia arriba. Navegá en privado + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Diseñamos %s para que puedas controlar lo que compartís en línea y lo que compartís con nosotros. Leé nuestra política de privacidad @@ -1265,7 +1264,7 @@ Elegí tu tema - Ahorrá un poco de batería y protegé tu vista: habilitá el modo oscuro. + Ahorrá un poco de batería y protegé tu vista: habilitá el modo oscuro. Automático @@ -1321,13 +1320,13 @@ Estándar (predeterminado) - Bloquea menos rastreadores. Las páginas se van a cargar normalmente. + Equilibrado para privacidad y rendimiento. Las páginas se cargan normalmente. Qué es lo que está bloqueado por la protección de rastreo estándar Estricta - Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero podés perder cierta funcionalidad. + Bloquea más rastreadores para que las páginas se carguen más rápido, pero pueden fallar algunas funcionalidades de la página. Qué es lo que está bloqueado por la protección de rastreo estricta @@ -1562,6 +1561,37 @@ Ordenar menú de inicio de sesión + + + Tarjetas de crédito + + Guardar y autocompletar tarjetas + + Los datos están cifrados + + Sincronizar tarjetas entre dispositivos + + Agregar tarjeta de crédito + + + Agregar tarjeta + + Número de tarjeta + + Fecha de vencimiento + + Nombre en la tarjeta + + Apodo de la tarjeta + + Eliminar tarjeta + + Guardar + + Guardar + + Cancelar + Agregar buscador diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 956f587b6..c9e2e0ec4 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -1540,6 +1540,18 @@ Menú para ordenar credenciales + + + Tarjetas de crédito + + Guardar y autocompletar tarjetas + + Los datos están encriptados + + Sincronizar tarjetas entre dispositivos + + Añadir tarjeta de crédito + Añadir motor de búsqueda diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index bdae70083..f32b5c700 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -22,10 +22,6 @@ Tus pestañas privadas se mostrarán aquí. - - Baidu - - JD 1 pestaña abierta. Toca para cambiar de pestaña. @@ -186,6 +182,11 @@ Personalizar vista de lectura + + Añadir + + Editar + No se puede conectar. Esquema de URL irreconocible. @@ -1200,9 +1201,6 @@ ¿Ya tienes una cuenta? - - Conoce a %s Ver las novedades Obtén respuestas aquí - - Empieza a sincronizar marcadores, contraseñas y más con tu cuenta de Firefox. + + Sincronizar Firefox entre dispositivos - Saber más + Traer marcadores, historial y contraseñas a Firefox en este dispositivo. @@ -1222,8 +1220,8 @@ Sí, iniciar sesión Iniciando sesión… - - Iniciar sesión en Firefox + + Registrarse Mantenerme desconectado @@ -1231,26 +1229,23 @@ Error al iniciar sesión - Privacidad automática - - La configuración de privacidad y seguridad bloquea los rastreadores, los programas maliciosos y las compañías que te siguen. + Privacidad siempre activada + + Firefox bloquea automáticamente a las compañías que te siguen en secreto por la web. Estándar (predeterminado) - Bloquea menos rastreadores. Las páginas se cargarán con normalidad. + Equilibrado para privacidad y rendimiento. Las páginas se cargarán normalmente. Estricta (recomendada) Estricto - Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero se puede perder cierta funcionalidad. - - Toma una posición + 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 - Prueba la navegación con una sola mano con la barra de herramientas inferior o muévela a la parte superior. + Pon la barra de herramientas a tu alcance. Mantenla abajo, o muévela hacia arriba. Navega de forma privada Tu privacidad + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Hemos diseñado %s para darte el control sobre lo que compartes en línea y lo que compartes con nosotros. Lee nuestro aviso de privacidad @@ -1278,7 +1273,7 @@ Elige tu tema - Ahorra un poco de batería y descansa la vista activando el modo oscuro. + Ahorra un poco de batería y descansa la vista con el modo oscuro. Automático @@ -1334,13 +1329,13 @@ Estándar (predeterminado) - Bloquea menos rastreadores. Las páginas se cargarán con normalidad. + Equilibrado para privacidad y rendimiento. Las páginas se cargarán normalmente. Qué es lo que está bloqueado por la protección estándar contra el rastreo Estricto - Bloquea más rastreadores, anuncios y ventanas emergentes. Las páginas se cargan más rápido, pero se puede perder cierta funcionalidad. + Bloquea más rastreadores para que las páginas se carguen más rápido, pero pueden fallar algunas funcionalidades de la página. Qué es lo que está bloqueado por la protección estricta contra el rastreo @@ -1578,6 +1573,38 @@ Ordenar menú de inicio de sesión + + + Tarjetas de crédito + + Guardar y autocompletar tarjetas + + Los datos están cifrados + + + Sincronizar tarjetas entre dispositivos + + Añadir tarjeta de crédito + + + Añadir tarjeta + + Número de tarjeta + + Fecha de caducidad + + Nombre en la tarjeta + + Descripción de la tarjeta + + Eliminar tarjeta + + Guardar + + Guardar + + Cancelar + Añadir buscador diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 720aaf8b0..4d1aa1cce 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -1557,6 +1557,18 @@ Ordenatu saio-hasieren menua + + + Kreditu-txartelak + + Gorde eta osatu automatikoki kreditu-txartelak + + Datuak zifratuta daude + + Sinkronizatu txartelak gailuen artean + + Gehitu kreditu-txartela + Gehitu bilaketa-motorra diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index cc0bc4852..b156328d1 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -21,10 +21,6 @@ Yksityiset välilehdet näkyvät tässä. - - Baidu - - JD 1 avoin välilehti. Napauta vaihtaaksesi. @@ -185,6 +181,12 @@ Mukauta lukunäkymää + + + Lisää + + Muokkaa + Yhteyden muodostaminen epäonnistui. URL-skeeman tunnistaminen ei onnistu. @@ -222,6 +224,11 @@ Lue lisää + + Hae hakukoneella %s + + Hae suoraan osoitepalkista + Avaa uusi Firefox-välilehti @@ -980,6 +987,10 @@ Kaikki toiminnot Äskettäin käytetty + + Kirjautuneena tilillä %1$s + + Kirjaudu Sync-palveluun Kirjaudu sisään Synciin @@ -1176,9 +1187,6 @@ Tervetuloa %siin! Onko sinulla jo tili? - - Opi tuntemaan %s Katso, mikä on uutta Vastauksia on tarjolla täällä - - Aloita kirjanmerkkien, salasanojen ja paljon muun synkronointi Firefox-tilillä. + + Synkronoi Firefox laitteidesi välillä - Lue lisää + Tuo kirjanmerkit, historia ja salasanat Firefoxiin tässä laitteessa. @@ -1198,8 +1206,8 @@ Kyllä, kirjaa minut sisään Kirjaudutaan sisään… - - Kirjaudu sisään Firefoxiin + + Rekisteröidy Pysy uloskirjautuneena @@ -1207,26 +1215,21 @@ Sisäänkirjautuminen epäonnistui - Automaattinen yksityisyys - - Tietosuoja- ja suojausasetukset estävät seuraimia, haittaohjelmia ja sinua seuraavia yrityksiä. + Yksityisyys aina päällä + + Firefox estää automaattisesti yrityksiä seuraamasta sinua salaa ympäri verkkoa. Tavallinen (oletus) - Estää vähemmän seuraimia. Sivut latautuvat normaalisti. + Tasapainotettu yksityisyyden ja suorituskyvyn välillä. Sivut latautuvat normaalisti. Tiukka (suositeltu) Tiukka - - Estää enemmän seuraimia, mainoksia ja ponnahdusikkunoita. Sivut latautuvat nopeammin, mutta osa toiminnoista ei välttämättä toimi. - - Valitse puolesi + + Valitse työkalupalkin sijoitus - Kokeile selaamista yhdellä kädellä pitämällä työkalupalkki alhaalla tai siirrä se ylös. + Sijoita työkalupalkki helposti ulottuville. Pidä se alhaalla tai siirrä se ylös. Selaa yksityisesti Yksityisyytesi + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Olemme suunnitelleet %sin siten, että voit hallita mitä jaat verkossa ja mitä jaat kanssamme. Lue yksityisyyskäytäntömme @@ -1254,7 +1257,7 @@ Valitse teema - Säästä hieman akkua ja silmiäsi ottamalla tumma tila käyttöön. + Säästä hieman akkua ja silmiäsi ottamalla tumma tila käyttöön. Automaattinen @@ -1310,13 +1313,13 @@ Tavallinen (oletus) - Estää vähemmän seuraimia. Sivut latautuvat normaalisti. + Tasapainotettu yksityisyyden ja suorituskyvyn välillä. Sivut latautuvat normaalisti. Mitä tavallinen seurannan suojaus estää Tiukka - Estää enemmän seuraimia, mainoksia ja ponnahdusikkunoita. Sivut latautuvat nopeammin, mutta osa toiminnoista ei välttämättä toimi. + Estää enemmän seuraimia, joten sivut latautuvat nopeammin, mutta jotkin sivujen toiminnot saattavat rikkoutua. Mitä tiukka seurannan suojaus estää @@ -1553,6 +1556,37 @@ Järjestä kirjautumistietojen valikko + + + Luottokortit + + Tallenna ja täytä kortit automaattisesti + + Tiedot on salattu + + Synkronoi kortit laitteiden välillä + + Lisää luottokortti + + + Lisää kortti + + Kortin numero + + Vanhenemispäivä + + Nimi kortissa + + Kortin kutsumanimi + + Poista kortti + + Tallenna + + Tallenna + + Peruuta + Lisää hakukone diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c603eab71..5543359c7 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -22,10 +22,6 @@ Les onglets privés sont affichés ici. - - Baidu - - JD 1 onglet ouvert. Appuyez pour changer d’onglet. @@ -185,6 +181,11 @@ Personnaliser le mode lecture + + Ajouter + + Modifier + Impossible de se connecter. Schéma d’URL inconnu. @@ -1200,9 +1201,6 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n Bienvenue dans %s ! Vous avez déjà un compte ? - - Découvrez %s Nouveautés Trouvez des réponses ici - - Synchronisez les marque-pages, mots de passe et plus encore avec votre compte Firefox. + + Synchronisez Firefox entre vos appareils - En savoir plus + Importez vos marque-pages, votre historique et vos mots de passe dans Firefox sur cet appareil. @@ -1223,9 +1221,9 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n Oui, connectez-moi Connexion en cours… - - Connectez-vous à votre compte Firefox + + Se connecter Rester déconnecté·e @@ -1233,26 +1231,23 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n Échec de connexion - Respect automatique de la vie privée - - Les paramètres de confidentialité et de sécurité bloquent les traqueurs, les logiciels malveillants et les entreprises qui vous pistent. + Confidentialité toujours assurée + + Firefox empêche automatiquement les entreprises de vous suivre secrètement sur le Web. Standard (par défaut) - Bloque moins de traqueurs. Les pages se chargent normalement. + Équilibré entre protection et performances. Les pages se chargent normalement. Strict (recommandé) Strict - Bloque davantage de traqueurs, de publicités et de popups. Les pages se chargent plus rapidement, mais certaines fonctionnalités pourraient ne pas être opérantes. - - Prenez position + 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 - Essayez la navigation à une main avec la barre d’outils inférieure ou déplacez-la vers le haut. + Placez la barre d’outils à portée de main. Laissez-la en bas ou déplacez-la en haut. Navigation privée Votre vie privée + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> 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. Consulter notre politique de confidentialité @@ -1280,7 +1275,7 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n Choisissez votre thème - Économisez de la batterie et votre vue en activant le mode sombre. + Économisez la batterie et votre vue grâce au mode sombre. Automatique @@ -1335,13 +1330,13 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n Standard (par défaut) - Bloque moins de traqueurs. Les pages se chargent normalement. + Équilibré entre protection et performances. Les pages se chargent normalement. Ce qui est bloqué par la protection standard contre le pistage Stricte - Bloque davantage de traqueurs, de publicités et de popups. Les pages se chargent plus rapidement, mais certaines fonctionnalités pourraient ne pas être opérantes. + Bloque davantage de traqueurs, accélérant le chargement des pages, mais quelques dysfonctionnements peuvent s’ensuivre. Ce qui est bloqué par la protection stricte contre le pistage @@ -1576,6 +1571,37 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n Menu de tri des identifiants + + + Cartes de paiement + + Enregistrer et remplir automatiquement les cartes + + Les données sont chiffrées + + Synchroniser les cartes entre vos appareils + + Ajouter une carte de paiement + + + Ajouter une carte + + Numéro de carte + + Date d’expiration + + Nom du titulaire + + Nom de cette carte + + Supprimer la carte + + Enregistrer + + Enregistrer + + Annuler + Ajouter un moteur de recherche diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml index ad4446e3d..65db48beb 100644 --- a/app/src/main/res/values-fy-rNL/strings.xml +++ b/app/src/main/res/values-fy-rNL/strings.xml @@ -1542,6 +1542,18 @@ Menu Oanmeldingen sortearje + + + Creditcards + + Kaarten bewarje en automatysk ynfolje + + Gegevens binne fersifere + + Kaarten syngronisearje tusken apparaten + + Creditcard tafoegje + Sykmasine tafoegje diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml index 58e36d347..fb8261c77 100644 --- a/app/src/main/res/values-gn/strings.xml +++ b/app/src/main/res/values-gn/strings.xml @@ -21,10 +21,6 @@ Ne rendaykekuéra ñemiguáva ojehecháta ápe. - - Baidu - - JD 1 embojuruja tendayke. Eikutu emoambue hag̃ua tendayke. @@ -186,6 +182,11 @@ Emboava moñe’ẽhára rechaha + + Mbojuaju + + Mbosako’i + Ndaikatúi eike. URL reko ojekuaa’ỹva. @@ -992,6 +993,10 @@ Opaite tembiaporã Ojepururamovéva + + Eike %1$s-ramo + + Eike embojuehe hag̃ua Eñepyrũ tembiapo Sync-pe @@ -1187,9 +1192,6 @@ ¡Eg̃uahẽporãite %s-pe! ¿Eguerekóma peteĩ mba’ete? - - Ehecha %s Ema’ẽ mba’epyahúre Umi ñembohovái oĩ ápe - - Embojuehe techaukaha, ñe’ẽñemi ha hetave ne mba’ete Firefox pegua ndive. - - Eikuaave @@ -1209,8 +1207,8 @@ Héẽ, eñepyrũ tembiapo Eñepyrũhína tembiapo… - - Eñepyrũ tembiapo Firefox-pe + + Eñemboheraguapy Aiméta juaju’ỹre @@ -1218,26 +1216,13 @@ Tembiapo ñepyrũ ojavy - Ñemigua ijeheguíva - - Ñemboheko ñemigua ha tekorosã ojoko tapykuehoha, rembiaporapevai ha atyguasu nderapykuehóva. + Tekoñemi hendymeme Ypyguaite (ijypygua) - - Ojoko’ive tapykuehohápe. Umi kuatiarogue henyhẽporãta. Mbaretépe (jeroviaháva) Mbaretépe - - Ojokove tapykuehoha, ñemurã ha ovetã apysẽ. Kuatiarogue henyhẽpya’evéta, hákatu tembiapoite sa’ivekuaa. - - Ejapyhy nerendaite - - Eipuru kundahára nde po peteĩme tembipuru renda karapevegua térã ehupi yvate. Eikundaha ñemi + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Rojapo %s eñangareko hag̃ua emoherakuãva ñandutípe rehe ha emoherakuãva orendive avei. Emoñe’ẽ ore marandu’i ñemigua @@ -1265,8 +1250,6 @@ Eiporavo ne téma - - Eipuruporã batería ha emo’ã nde resa: embojuruja ayvu ypytũ. ijeheguietéva @@ -1322,14 +1305,10 @@ Ypyguaite (ijypygua) - - Ojoko’ive tapykuehohápe. Umi kuatiarogue henyhẽporãta. Mba’e umi ojokóva tapykuehoha moãha ypyguáva renondépe Mbaretépe - - Ojokove tapykuehoha, ñemurã ha ovetã apysẽ. Kuatiarogue henyhẽpya’evéta, hákatu tembiapoite sa’ivekuaa. Mba’e umi ojokóva tapykuehoha mo’ãha imbaretéva @@ -1572,6 +1551,30 @@ Emoĩporã poravorã tembiapo ñepyrũgua + + + Kuatia’atã ñemurã + + Eñongatu ha emyanyhẽ kuatia’atã + + + Mba’ekuaarã ipapapypa + + Embojuehe kuatia’atã mba’e’oka pa’ũme + + Embojuaju kuatia’atã ñemurã + + + Embojuaju kuatia’atã + + Kuatia’atã papy + + Ñongatu + + Ñongatu + + Heja + Embojuaju hekaha diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 366e6ded3..9218f5bb1 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -20,10 +20,6 @@ Ovdje će se prikazati tvoje privatne kartice. - - Baidu - - JD 1 otvorena kartica. Dodirni za prebacivanje kartica. @@ -181,6 +177,11 @@ Prilagodi prikaz za čitanje + + Dodaj + + Uredi + Nije se moguće povezati. Neprepoznatljiva URL shema. @@ -981,6 +982,10 @@ Sve radnje Nedavno korišteni + + Prijavljeni kao %1$s + + Prijavi se za sinkronizaciju Prijavi se za sinkronizaciju @@ -1172,9 +1177,6 @@ Dobro došao, dobro došla u %s! Već imaš račun? - - Upoznaj %s Pogledaj što je novo Potraži odgovore ovdje - - Počni sinkronizirati zabilješke, lozinke i ostalo sa svojim Firefox računom. + + Sinkroniziraj Firefox između uređaja - Saznaj više + Prenesi zabilješke, povijest i lozinke u Firefox na ovom uređaju. @@ -1194,8 +1196,8 @@ Da, prijavi me Prijava … - - Prijavi se na Firefox + + Registriraj se Ostani odjavljen/a @@ -1204,26 +1206,23 @@ Neuspjela prijava - Automatska privatnost - - Postavke za privatnost i sigurnost blokiraju softver za praćenje, zlonamjerni softver i tvrtke koje te prate. + Uvijek uključena privatnost + + Firefox automatski sprječava tvrtke da te potajno prate širom weba. Standardno (zadano) - Blokira manje softvera za praćenje. Stranice se učitavaju normalno. + Uravnotežena privatnost i performanse. Stranice se normalno učitavaju. Strogo (preporučeno) Strogo - Blokira više softvera za praćenje, oglasa i skočnih prozora. Stranice se brže učitavaju, ali neke značajke možda neće raditi. - - Odluči se + Blokira više programa za praćenje pa se stranice učitavaju brže, ali neke funkcionalnosti stranica možda će se slomiti. + + Odaberi položaj alatne trake - Pokušaj pregledavati jednom rukom s donjom alatnom trakom ili je pomakni na vrh. + Stavi alatnu traku na dohvat ruke. Zadrži ju na dnu ili premjesti na vrh. Pregledaj privatno + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s smo stvorili za jednostavno upravljanje podacima koje dijeliš na mreži i koje dijeliš s nama. Pročitaj naša pravila privatnosti @@ -1251,9 +1250,9 @@ Odaberi modus - - Štedi energiju i zaštiti oči pomoću tamne teme. + + Štedi bateriju i zaštiti oči pomoću tamne teme. Automatski @@ -1308,13 +1307,13 @@ Standardno (zadano) - Blokira manje softvera za praćenje. Stranice se učitavaju normalno. + Uravnotežena privatnost i performanse. Stranice se normalno učitavaju. Što se blokira standardnom zaštitom od praćenja Strogo - Blokira više softvera za praćenje, oglasa i skočnih prozora. Stranice se brže učitavaju, ali neke značajke možda neće raditi. + Blokira više programa za praćenje pa se stranice učitavaju brže, ali neke funkcionalnosti stranica možda će se slomiti. Što se blokira strogom zaštitom od praćenja @@ -1554,6 +1553,37 @@ Izbornik sortiranja prijava + + + Kreditne kartice + + Spremi i automatski ispuni polja kartice + + Podaci su šifrirani + + Sinkroniziraj kartice na uređajima + + Dodaj kreditnu karticu + + + Dodaj karticu + + Broj kartice + + Datum valjanosti + + Ime na kartici + + Naziv kartice + + Izbriši karticu + + Spremi + + Spremi + + Odustani + Dodaj tražilicu diff --git a/app/src/main/res/values-hsb/strings.xml b/app/src/main/res/values-hsb/strings.xml index 0ca8c236d..48f3776b4 100644 --- a/app/src/main/res/values-hsb/strings.xml +++ b/app/src/main/res/values-hsb/strings.xml @@ -19,10 +19,6 @@ Waše priwatne rajtarki so tu wočinja. - - Baidu - - JD Wočinjene rajtarki: %1$s. Podótkńće so, zo byšće rajtarki přepinał. @@ -70,9 +66,9 @@ - Přidajće skrótšenku, zo byšće priwatne rajtarki ze swojeje startoweje wobrazowki wočinił. + Přidajće zwjazanje, zo byšće priwatne rajtarki ze swojeje startoweje wobrazowki wočinił. - Skrótšenku přidać + Zwjazanje přidać Ně, dźakuju so @@ -183,6 +179,11 @@ Čitanski napohlad přiměrić + + Přidać + + Wobdźěłać + Zwisk móžny njeje. Njespóznawajomna URL-šema. @@ -285,7 +286,7 @@ Jeli dowolene, budu priwatne rajtarki tež widźomne, hdyž wjacore nałoženja su wočinjene - Skrótšenku za priwatny modus přidać + Zwjazanje za priwatny modus přidać Bjezbarjernosć @@ -331,7 +332,7 @@ Pytanske namjety pokazać - Hłosowe pytanje pokazać + Rěčenske pytanje pokazać W priwatnych posedźenjach pokazać @@ -977,6 +978,10 @@ Wšě akcije Njedawno wužite + + Přizjewjeny jako %1$s + + Pola Sync přizjewić Pola Sync přizjewić @@ -1035,7 +1040,7 @@ Pokazać - Woblubowanym sydłam přidate! + Wažnym sydłam přidate! Priwatny rajtark je so začinił @@ -1169,9 +1174,6 @@ Maće hižo konto? - - %s zeznać Čitajće, štož je nowe Tu dóstanjeće wotmołwy - - Synchronizujće nětko zapołožki, hesła a wjace ze swojim kontom Firefox. + + Firefox mjez gratami synchronizować - Dalše informacije + Přinjesće zapołožki, historiju a hesła k Firefox na tutym graće. @@ -1191,8 +1193,8 @@ Haj, přizjewić Přizjewja so… - - Pola Firefox přizjewić + + Registrować Wotzjewjeny wostać @@ -1200,26 +1202,23 @@ Přizjewjenje njeje so poradźiło - Awtomatiska priwatnosć - - Nastajenja priwatnosće a wěstoty přesćěhowaki, škódnu softwaru a předewzaća blokuja, kotrež wam slěduja. + Priwatnosć přeco aktiwna + + Firefox awtomatisce zadźěwa tomu, zo předewzaća wam skradźu po webje slěduja. Standard - Blokuje mjenje přesćěhowakow. Strony so normalnje začitaja. + Wuwaženy za priwatnosć a wukon. Strony so normalnje začitaja. Striktny (doporučeny) Striktny - Blokuje wjace přesćěhowakow, wabjenja a wuskakowacych woknow. Strony so spěšnišo začitaja, ale někotre funkcije snano njefunguja. - - Rozsudźće so + Blokuje dalše přesćěhowaki, zo bychu so strony spěšnišo začitali, ale někotre strony snano korektnje njefunguja. + + Wubjerće poziciju za swoju symbolowu lajstu - Spytajće z delnjej symbolowej lajstu z jednej ruku přehladować abo přesuńće ju horje. + Pozicioněrujće symbolowu lajstu, zo móžeće ju lochko dosahnyć. Wobchowajće ju deleka abo přesuńće ju horje. Priwatnje přehladować Waša priwatnosć + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Sym %s wuwili, zo bychmy wam kontrolu wo tym dali, što online dźěliće a što z nami. Čitajće naš zdźělenku priwatnosće @@ -1247,7 +1246,7 @@ Wubjerće swoju drastu - Zmóžńće ćmowy modus, zo byšće swoju bateriju a swoje woči šonował. + Zmóžńće ćmowy modus, zo byšće swoju bateriju a swoje woči šonował. Awtomatiski @@ -1303,13 +1302,13 @@ Standard - Blokuje mjenje přesćěhowakow. Strony so normalnje začitaja. + Wuwaženy za priwatnosć a wukon. Strony so normalnje začitaja. Što so přez standardny slědowanski škit blokuje? Striktny - Blokuje wjace přesćěhowakow, wabjenja a wuskakowacych woknow. Strony so spěšnišo začitaja, ale někotre funkcije snano njefunguja. + Blokuje dalše přesćěhowaki, zo bych so strony spěšnišo začitali, ale někotre strony snano korektnje njefunguja. Što so přez striktny slědowanski škit blokuje? @@ -1433,7 +1432,7 @@ Dale k websydłu - Mjeno skrótšenki + Mjeno zwjazanja Móžeće startowej wobrazowce swojeho grata tute websydło lochko přidać, zo byšće direktny přistup měł a spěšnišo z dožiwjenjom nałoženja přehladował. @@ -1546,6 +1545,37 @@ Meni přizjewjenskich datow sortěrować + + + Kreditne karty + + Karty składować a awtomatisce wupjelnić + + Daty su zaklučowane + + Karty přez graty synchronizować + + Kreditnu kartu přidać + + + Kartu přidać + + Kartowe čisło + + Datum płaćiwosće + + Mjeno na karće + + Kartowe přimjeno + + Kartu zhašeć + + Składować + + Składować + + Přetorhnyć + Pytawu přidać @@ -1632,7 +1662,7 @@ Chceće woprawdźe tutu zapołožku zhašeć? - Woblubowanym sydłam přidać + Wažnym sydłam přidać Přepruwowany wot: %1$s @@ -1661,7 +1691,7 @@ Hesło trěbne - Hłosowe pytanje + Rěčenske pytanje Nětko rěčeć @@ -1694,7 +1724,7 @@ W porjadku, sym zrozumił - Najhusćišo wopytowane sydła pokazać + Najhusćišo wopytane sydła pokazać Mjeno diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d6f8400a9..51600037a 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -20,10 +20,6 @@ A privát lapjai itt fognak megjelenni. - - Baidu - - JD 1 nyitott lap. Koppintson a lapváltáshoz. @@ -184,6 +180,11 @@ Olvasó nézet testreszabása + + Hozzáadás + + Szerkesztés + Nem tud csatlakozni. Felismerhetetlen URL-séma. @@ -1176,9 +1177,6 @@ Üdvözli a %s! Van felhasználói fiókja? - - Ismerje meg a %s böngészőt Nézze meg az újdonságokat Itt kaphat válaszokat - - Kezdje el szinkronizálni a könyvjelzőit, jelszavait és még többet a Firefox-fiókjával. + + A Firefox szinkronizálása az eszközök közt - További tudnivalók + Adjon hozzá könyvjelzőket, előzményeket és jelszavakat a Firefoxhoz ezen az eszközön. @@ -1198,8 +1196,8 @@ Igen, jelentkeztessen be Bejelentkezés… - - Bejelentkezés a Firefoxba + + Regisztráció Maradjon kijelentkezve @@ -1207,26 +1205,23 @@ Sikertelen bejelentkezés - Automatikus adatvédelem - - Az adatvédelmi és biztonsági beállítások blokkolják a követőket, kártékony programokat és az Önt követő vállalatokat. + Mindig bekapcsolt adatvédelem + + A Firefox automatikusan megakadályozza, hogy a cégek titokban kövessék Önt a weben. Normál (alapértelmezett) - Kevesebb nyomkövetőt blokkol. Az oldalak normálisan lesznek betöltve. + Kiegyensúlyozott adatvédelem és teljesítmény. Az oldalak normálisan fognak betölteni. Szigorú (ajánlott) Szigorú - Több nyomkövetőt, reklámot és felugró ablakot blokkol. Az oldalak gyorsabban töltődnek be, de egyes funkciók lehet, hogy nem fognak működni. - - Foglaljon állást + 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 - Próbálja ki az egykezes böngészést a lenti eszköztárral, vagy mozgassa fentre. + Helyezze az eszköztárat könnyen elérhető helyre. Tartsa az alján, vagy mozgassa a tetejére. Böngésszen privát módon Adatvédelem + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Ú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. @@ -1255,7 +1250,7 @@ Válassza ki a témát - Spóroljon az akkumulátorral és kímélje a szemét a sötét mód bekapcsolásával. + Spóroljon az akkumulátorral és kímélje a szemét a sötét móddal. Automatikus @@ -1312,13 +1307,13 @@ Normál (alapértelmezett) - Kevesebb nyomkövetőt blokkol. Az oldalak normálisan lesznek betöltve. + Kiegyensúlyozott adatvédelem és teljesítmény. Az oldalak normálisan fognak betölteni. Mit blokkol a szokásos követésvédelem Szigorú - Több nyomkövetőt, reklámot és felugró ablakot blokkol. Az oldalak gyorsabban töltődnek be, de egyes funkciók lehet, hogy nem fognak működni. + Több nyomkövetőt blokkol, így az oldalak gyorsabban töltenek be, de egyes oldalfunkciók meghibásodhatnak. Mit blokkol a szigorú követésvédelem @@ -1554,6 +1549,37 @@ Bejelentkezések menü rendezése + + + Bankkártyák + + Kártyák mentése és automatikus kitöltése + + Az adatok titkosítottak + + Kártyák szinkronizálása az eszközök közt + + Bankkártya hozzáadása + + + Kártya hozzáadása + + Kártyaszám + + Lejárati dátum + + Kártyán szereplő név + + Kártya beceneve + + Kártya törlése + + Mentés + + Mentés + + Mégse + Keresőszolgáltatás hozzáadása diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index df84e9c82..5aabec684 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -20,10 +20,6 @@ Ձեր գաղտնի ներդիրները կցուցադրվեն այստեղ: - - Baidu - - JD 1 բաց ներդիր: Հպեք՝ փոխարկելու համար: @@ -97,7 +93,7 @@ Բաց թողնել - Փոխել բաց ներդիրների դասավորությունը: Գնացեք կարգավորումներ և ընտրեք ցանցը՝ ներդիրի տեսքի ներքո: + Փոխեք բացված ներդիրների դասավորությունը: Գնացեք կարգավորումներ և ընտրեք Ցանց՝ ներդիրի տեսքի ներքո: Անցնել Կարգավորումներին @@ -183,6 +179,11 @@ Հարմարեցնել ընթերցման դիտումը + + Ավելացնել + + Խմբագրել + Հնարավոր չէ կապակցվել: Անճանաչելի URL ուրվակազմ: @@ -1165,9 +1166,6 @@ Բարի գալուստ %s: Արդեն ունե՞ք հաշիվ - - Ծանոթացեք %s-ին Տեսեք, թե ինչն է նոր Ստացեք պատասխանները այստեղ - - Համաժամեցրեք էջանիշերը, գաղտնաբառերը և ավելին՝ ձեր Firefox հաշվով: + + Համաժամեցնել Firefox-ը - Իմանալ ավելին + Բերեք էջանիշերը, պատմությունը և գաղտնաբառերը Firefox՝ այս սարքում: @@ -1188,8 +1186,8 @@ Այո, գրանցեք ինձ Մուտք է գործում... - - Մուտք գործեք Firefox + + Գրանցվել Մնացեք դուրս գրված @@ -1197,26 +1195,23 @@ Չհաջողվեց մուտք գործել - Ինքնաշխատ գաղտնիություն - - Գաղտնիության և անվտանգության կարգավորումները արգելափակում են հետագծումները, վնասագրերը և Ձեզ հետևող ընկերություններին: + Միշտ գաղտնիություն + + Firefox-ը ինքնաշխատ կանգնեցնում է ընկերությունների՝ հետևելու Ձեզ առցանց: Ստանդարտ (սկզբնադիր) - Արգելափակում է ավելի քիչ հետագծիչներ: Էջերը նորմալ կբեռնվեն: + Հավասարակշռված է գաղտնիության և արտադրողականության միջև: Էջերը նորմալ են բեռնվում: Խիստ (հանձնարարելի) Խիստ - Արգելափակում է ավելի շատ հետագծիչներ, գովազդ և թռուցիկներ: Էջերը բեռնում են ավելի արագ, բայց որոշ գործառույթներ կարող են չաշխատել: - - Դիրքորոշել + Արգելափակում է ավելի շատ հետագծիչներ, որ էջերը արագ բեռնվեն, բայց էջի որոշ գործույթներ կարող են ընդհատվեն: + + Ընտրեք գործիքագոտու տեղը - Փորձեք մի ձեռքով դիտարկումը գործիքագոտու ներքևում կամ այն տեղափոխեք վերև: + Գործիքագոտին դրեք հեշտ հասանելի տեղ: Պահեք այն ներքևում կամ տեղափոխեք վերև: Դիտարկել գաղտնի + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Մենք պատրաստել ենք %s-ը, որպեսզի դուք կառավարեք այն, ինչ համօգտագործում եք առցանց և թե ինչով եք կիսվում մեզ հետ: Կարդացեք մեր գաղտնիության ծանուցումը @@ -1245,7 +1240,7 @@ Ընտրեք ձեր ոճը - Խնայեք մարտկոցի լիցքը և ձեր տեսողությունը`միացնելով մուգ կերպը: + Խնայեք մարտկոցը և ձեր տեսողությունը մուգ կերպում: Ինքնաշխատ @@ -1300,14 +1295,14 @@ Ստանդարտ (սկզբնադիր) - Արգելափակում է ավելի քիչ հետագծիչներ: Էջերը նորմալ կբեռնվեն: + Հավասարակշռված է գաղտնիության և արտադրողականության միջև: Էջերը նորմալ են բեռնվում: Ինչն է արգելափակված հետագծման ստանդարտ պաշտպանությամբ Խիստ - Արգելափակում է ավելի շատ հետագծիչներ, գովազդ և թռուցիկներ: Էջերը բեռնում են ավելի արագ, բայց որոշ գործառույթներ կարող են չաշխատել: + Արգելափակում է ավելի շատ հետագծիչներ, որ էջերը արագ բեռնվեն, բայց էջի որոշ գործույթներ կարող են ընդհատվեն: Ինչն է արգելափակված խիստ հետագծման պաշտպանությամբ @@ -1544,6 +1539,36 @@ Տեսակավորել մուտագրումների ցանկը + + + Բանկային քարտեր + + Պահել և ինքնալրացնել քարտերը + + Տվյալները գաղտնագրված են + + Համաժամեցնել քարտերը սարքերի միջև + + Ավելացնել բանկային քարտ + + Ավելացնել քարտ + + Քարտի համարը + + Քարտի ժամկետը + + Քարտի վրա ձեր անունը + + Քարտի անունը + + Ջնջել քարտը + + Պահպանել + + Պահպանել + + Չեղարկել + Ավելացնել որոնիչ diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 3869d747a..517848381 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -801,8 +801,6 @@ Markah berhasil disimpan! EDIT - - Edit Pilih diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 974aaf3d5..169677b29 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -22,10 +22,6 @@ Le schede anonime verranno mostrate qui. - - Baidu - - JD Aperta 1 scheda. Tocca per cambiare scheda. @@ -185,6 +181,11 @@ Personalizza modalità lettura + + Aggiungi + + Modifica + Connessione non riuscita. Schema URL non riconoscibile. @@ -1203,9 +1204,6 @@ Benvenuto in %s. Hai già un account? - - Alla scoperta di %s Scopri le novità Trova tutte le risposte qui - - Inizia a sincronizzare segnalibri, password e molto altro ancora con il tuo account Firefox. + + Sincronizza Firefox tra vari dispositivi - Ulteriori informazioni + Porta segnalibri, cronologia e password di Firefox su questo dispositivo. @@ -1225,8 +1223,8 @@ Sì, accedi Accesso in corso… - - Accedi a Firefox + + Registrati Rimani disconnesso @@ -1235,26 +1233,23 @@ Accesso non riuscito - Privacy predefinita - - Le impostazioni relative a privacy e sicurezza bloccano elementi traccianti, malware e aziende che seguono le tue attività online. + Privacy sempre attiva + + Firefox blocca automaticamente le società che, di nascosto, cercano di seguire le tue attività sul Web. Normale (predefinita) - Blocca meno elementi traccianti. Le pagine verranno caricate normalmente. + Equilibrio tra privacy e prestazioni. Le pagine verranno caricate normalmente. Restrittiva (consigliata) Restrittiva - Blocca più elementi traccianti, annunci pubblicitari e pop-up. Le pagine verranno caricate più velocemente, ma alcuni elementi potrebbero non funzionare correttamente. - - Prendi posizione + 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 - Prova la barra degli strumenti in basso per navigare con una sola mano, o spostala in alto. + Metti la barra degli strumenti a portata di mano. Tienila in basso o spostala in alto. Naviga in modo riservato La tua privacy + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s è progettato per darti il pieno controllo sulle informazioni che condividi online e con noi. Leggi la nostra informativa sulla privacy @@ -1282,7 +1277,7 @@ Scegli il tuo tema - Risparmia batteria e proteggi i tuoi occhi attivando la modalità scura. + Risparmia batteria e proteggi i tuoi occhi con la modalità scura. Automatico @@ -1337,13 +1332,13 @@ Normale (predefinita) - Blocca meno elementi traccianti. Le pagine verranno caricate normalmente. + Equilibrio tra privacy e prestazioni. Le pagine verranno caricate normalmente. Elementi bloccati nella protezione antitracciamento normale Restrittiva - Blocca più elementi traccianti, annunci pubblicitari e pop-up. Le pagine verranno caricate più velocemente, ma alcuni elementi potrebbero non funzionare correttamente. + Blocca più elementi traccianti. Le pagine verranno caricate più velocemente, ma alcune caratteristiche della pagina potrebbero non funzionare correttamente. Elementi bloccati nella protezione antitracciamento restrittiva @@ -1580,6 +1575,38 @@ Ordina il menu delle credenziali di accesso + + + Carte di credito + + Salvare e compilare automaticamente le carte + + I dati sono crittati + + Sincronizza le carte tra più dispositivi + + Aggiungi una carta di credito + + + Aggiungi carta + + Numero carta + + Data di scadenza + + Nome sulla carta + + + Nickname della carta + + Elimina carta + + Salva + + Salva + + Annulla + Aggiungi motore di ricerca diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 17a06d7ed..9d0818fc7 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -19,10 +19,6 @@ הלשוניות הפרטיות שלך יופיעו כאן. - - Baidu - - JD לשונית אחת פתוחה. יש להקיש כדי להחליף לשוניות. @@ -182,6 +178,11 @@ התאמה אישית של תצוגת קריאה + + הוספה + + עריכה + לא ניתן להתחבר. מבנה הכתובת אינו ברור. @@ -975,6 +976,10 @@ כל הפעולות בשימוש לאחרונה + + מחובר בתור %1$s + + כניסה כדי לסנכרן התחברות אל Sync @@ -1168,9 +1173,6 @@ ברוכים הבאים אל %s! כבר יש לך חשבון? - - היכרות עם %s מה חדש התשובות כאן - - סנכרון סימניות, ססמאות ועוד עם חשבון ה־Firefox שלך. + + סנכרון Firefox בין מכשירים - מידע נוסף + משיכת הסימניות, ההיסטוריה והססמאות ל־Firefox במכשיר הזה. @@ -1190,8 +1192,8 @@ כן, תחברו אותי בתהליך התחברות… - - התחברות אל Firefox + + הרשמה להישאר מנותק @@ -1199,26 +1201,23 @@ ההתחברות נכשלה - פרטיות אוטומטית - - הגדרות פרטיות ואבטחה חוסמות רכיבי מעקב, תוכנות זדוניות וחברות העוקבות אחריך. + פרטיות תמיד מופעלת + + ‏Firefox מונע באופן אוטומטי מחברות לעקוב אחריך בסתר ברחבי הרשת. רגיל (ברירת מחדל) - חוסם פחות רכיבי מעקב. דפים ייטענו כרגיל. + מאוזן בין פרטיות לביצועים. דפים ייטענו כרגיל. מחמיר (מומלץ) מחמיר - חוסם יותר רכיבי מעקב, פרסומות וחלונות קופצים. דפים ייטענו מהר יותר, אך ייתכן שפונקציונליות מסוימת לא תעבוד. - - נקיטת עמדה + חוסם יותר רכיבי מעקב כדי שדפים ייטענו מהר יותר, אך ייתכן שפונקציונליות בדפים מסויימים לא תעבוד. + + בחירת מיקום סרגל הכלים שלך - אפשר להתנסות בגלישה ביד אחת עם סרגל כלים בתחתית או להעביר אותו לראש המסך. + לשים את סרגל הכלים בהישג יד. ניתן להשאיר אותו בתחתית, או להעביר אותו למעלה. גלישה בפרטיות + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> עיצבנו את %s כדי להעניק לך שליטה במה שמעניין אותך לשתף ברשת ומה שמעניין אותך לשתף איתנו. קריאת הצהרת הפרטיות שלנו @@ -1247,7 +1246,7 @@ בחירת ערכת הנושא שלך - חסכו בסוללה ושמרו על העיניים באמצעות הפעלת מצב כהה. + ניתן לחסוך בסוללה ולשמור על העיניים באמצעות הפעלת מצב כהה. אוטומטי @@ -1302,13 +1301,13 @@ רגיל (ברירת מחדל) - חוסם פחות רכיבי מעקב. דפים ייטענו כרגיל. + מאוזן בין פרטיות לביצועים. דפים ייטענו כרגיל. מה נחסם על־ידי הגנת מעקב רגילה מחמיר - חוסם יותר רכיבי מעקב, פרסומות וחלונות קופצים. דפים ייטענו מהר יותר, אך ייתכן שפונקציונליות מסוימת לא תעבוד. + חוסם יותר רכיבי מעקב כדי שדפים ייטענו מהר יותר, אך ייתכן שפונקציונליות בדפים מסויימים לא תעבוד. מה נחסם על־ידי הגנת מעקב מחמירה @@ -1545,6 +1544,37 @@ תפריט מיון כניסות + + + כרטיסי אשראי + + שמירה ומילוי אוטומטי של כרטיסים + + הנתונים מוצפנים + + סנכרון כרטיסים בין מכשירים + + הוספת כרטיס אשראי + + + הוספת כרטיס + + מספר כרטיס + + תאריך תפוגה + + שם שעל הכרטיס + + כינוי עבור הכרטיס + + מחיקת כרטיס + + שמירה + + שמירה + + ביטול + הוספת מנוע חיפוש diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f17cbe157..fa2a9f24a 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -22,10 +22,6 @@ プライベートタブがここに表示されます。 - - Baidu - - JD 開いているタブ 1 個。タップしてタブを切り替えます。 @@ -187,6 +183,11 @@ リーダービューをカスタマイズ + + 追加 + + 編集 + 接続できません。認識できない URL スキームです。 @@ -990,6 +991,10 @@ すべての操作 最近使用 + + %1$s としてログイン + + ログインして同期 Sync にログイン @@ -1186,9 +1191,6 @@ %s へようこそ! アカウントをお持ちですか? - - %s を知ろう 新機能の紹介 その答えはこちらにあります - - Firefox アカウントでブックマークやパスワード、他の設定を同期しましょう。 + + 端末間で Firefox を同期 - 詳細情報 + この端末の Firefox とブックマーク、履歴、パスワードを同期します @@ -1208,8 +1210,8 @@ はい、ログインします ログイン中... - - Firefox にログイン + + アカウント登録 ログアウトする @@ -1217,26 +1219,23 @@ ログインに失敗しました - 自動プライバシー保護 - - プライバシーとセキュリティの設定で、あなたを追跡するトラッカー、マルウェア、企業をブロックします。 + プライバシー重視 + + Firefox はウェブ上であなたを密かに追跡する組織を自動的に遮断します。 標準 (既定) - トラッカーのブロックを少なくします。ページが正常に読み込まれます。 + プライバシーと性能をバランスよく。ページが正しく読み込まれます。 厳格 (推奨) 厳格 - より多くのトラッカー、広告、ポップアップをブロックします。ページの読み込みが速くなりますが、一部の機能が動作しない場合があります。 - - ツールバーをお好みの配置に + より多くのトラッカーをブロックするとページの読み込みが速くなりますが、一部のページは正しく機能しなくなる可能性があります。 + + ツールバーの配置を選べます - ツールバーを下部に置いて片手での操作をお試しください。上部にも移動できます。 + ツールバーを簡単に手の届く位置に置きましょう。画面下または上に移動できます。 プライベートなブラウジング あなたのプライバシー + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s は、あなたがオンラインで共有するものと、私たちと共有するものをコントロールできるように設計されています。 個人情報保護方針を読む @@ -1264,7 +1263,7 @@ テーマを選んでください - ダークモードによって、バッテリーを節約し、目にも優しい配色にします。 + ダークモードでバッテリーを節約し、目に優しい配色にします。 自動設定 @@ -1319,13 +1318,13 @@ 標準 (既定) - トラッカーのブロックを少なくします。ページが正常に読み込まれます。 + プライバシーと性能をバランスよく。ページが正しく読み込まれます。 標準のトラッキング防止でブロックされるもの 厳格 - より多くのトラッカー、広告、ポップアップをブロックします。ページの読み込みが速くなりますが、一部の機能が動作しない場合があります。 + より多くのトラッカーをブロックするとページの読み込みが速くなりますが、一部のページは正しく機能しなくなる可能性があります。 厳格なトラッキング防止でブロックされるもの @@ -1562,6 +1561,38 @@ ログイン情報メニューの並べ替え + + + クレジットカード + + + カード情報を保存して自動入力する + + データは暗号化されています + + 端末間でカード情報を同期する + + クレジットカードを追加 + + カードの追加 + + + カード番号 + + 有効期限 + + カード名義 + + カードのニックネーム + + カードを削除 + + 保存 + + 保存 + + キャンセル + 検索エンジンの追加 diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 202688eb8..a0b13a824 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -19,10 +19,6 @@ თქვენი პირადი ჩანართები გამოჩნდება აქ. - - Baidu - - JD 1 გახსნილი ჩანართი. შეეხეთ ჩანართების გადასართველად. @@ -179,6 +175,11 @@ კითხვის რეჟიმის მორგება + + დამატება + + ჩასწორება + ვერ დაუკავშირდა. გაურკვეველი URL-სქემა. @@ -899,7 +900,7 @@ ხმისა და ვიდეოს შეზღუდვა, მხოლოდ ფიჭურ ინტერნეტზე - ხმისა და ვიდეოს დაშვება Wi-Fi-ზე + ხმისა და ვიდეოს დაშვება WiFi-ზე მხოლოდ ხმის შეზღუდვა @@ -1164,9 +1165,6 @@ მოგესალმებათ %s! უკვე გაქვთ ანგარიში? - - გაიცანით %s იხილეთ სიახლეები მიიღეთ პასუხები აქ - - დაიწყეთ დასინქრონება სანიშნების, პაროლებისა და სხვა მონაცემების, თქვენი Firefox-ანგარიშის მეშვეობით. + + დაასინქრონეთ Firefox მოწყობილობებს შორის - ვრცლად + გადმოიტანს სანიშნებს, ისტორიასა და პაროლებს, ამ მოწყობილობის Firefox-ზე. @@ -1186,8 +1184,8 @@ დიახ, შევალ შესვლა… - - შესვლა Firefox-ში + + ანგარიშის შექმნა შესვლის გარეშე @@ -1196,26 +1194,23 @@ შესვლა ვერ მოხერხდა - თავისთავადი პირადულობა - - პირადულობისა და უსაფრთხოების პარამეტრები უზღუდავს მეთვალყურეებს, მავნებლებს და კომპანიებს, თქვენზე თვალის დევნებას. + ყოველთვის პირადული + + Firefox ავტომატურად უზღუდავს კომპანიებს, თქვენს მოქმედებებზე ფარულად თვალის მიდევნების საშუალებას ვებსივრცეში. ჩვეულებრივი (ნაგულისხმევი) - ზღუდავს ნაკლებ მეთვალყურეს. გვერდები ჩვეულებრივ გაიხსნება. + წონასწორული უსაფრთხოებასა და წარმადობას შორის. გვერდები ჩაიტვირთება ჩვეულებრივ. მკაცრი (სასურველი) მკაცრი - ზღუდავს მეტ მეთვალყურეს, ამომხტომს, რეკლამას. გვერდები უფრო სწრაფად გაიხსნება, მაგრამ შესაძლოა, ოდნავ გაუმართავი იყოს. - - გააკეთეთ არჩევანი + ზღუდავს მეტ მეთვალყურეს, გვერდის ჩატვირთვა ასწრაფდება, თუმცა გამართულად შეიძლება ვერ იმუშაოს. + + აირჩიეთ ხელსაწყოთა ზოლის მდებარეობა - სცადეთ ცალი ხელით დათვალიერება ქვედა ხელსაწყოთა ზოლით ან გადაიტანეთ ზემოთ. + განათავსეთ ხელსაწყოები ხელმისაწვდომ ადგილას. დატოვეთ ქვემოთ ან გადაიტანეთ ზემოთ. პირადული ინტერნეტი თქვენი პირადულობა + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s შექმნილია ისე, რომ თავად წყვეტდეთ რას გააზიარებთ ინტერნეტში და რას გაგვიზიარებთ ჩვენ. გაეცანით პირადულობის განაცხადს @@ -1244,7 +1239,7 @@ შეარჩიეთ თქვენი გაფორმება - დაზოგეთ ბატარეა და საკუთარი მხედველობა, მუქი რეჟიმით. + დაზოგეთ ბატარეა და საკუთარი მხედველობა, მუქი რეჟიმით. თვითშერჩევა @@ -1300,13 +1295,13 @@ ჩვეულებრივი (ნაგულისხმევი) - ზღუდავს ნაკლებ მეთვალყურეს. გვერდები ჩვეულებრივ გაიხსნება. + წონასწორული უსაფრთხოებასა და წარმადობას შორის. გვერდები ჩაიტვირთება ჩვეულებრივ. რა იზღუდება თვალთვალისგან ჩვეულებრივი დაცვით მკაცრი - ზღუდავს მეტ მეთვალყურეს, ამომხტომს, რეკლამას. გვერდები უფრო სწრაფად გაიხსნება, მაგრამ შესაძლოა, ოდნავ გაუმართავი იყოს. + ზღუდავს მეტ მეთვალყურეს, გვერდის ჩატვირთვა ასწრაფდება, თუმცა გამართულად შეიძლება ვერ იმუშაოს. რა იზღუდება თვალთვალისგან მკაცრი დაცვით @@ -1544,6 +1539,38 @@ ანგარიშების მენიუს დალაგება + + + საკრედიტო ბარათები + + ბარათების შენახვა და თვითშევსება + + მონაცემები დაშიფრულია + + + დაასინქრონეთ ბარათები სხვადასხვა მოწყობილობაზე + + საკრედიტო ბარათის დამატება + + + ბარათის დამატება + + ბარათის ნომერი + + ვადის გასვლის თარიღი + + მფლობელის სახელი + + ბარათის ზედმეტსახელი + + ბარათის წაშლა + + შენახვა + + შენახვა + + გაუქმება + საძიებო სისტემის დამატება diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 2481a2f4f..98ef02e1d 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -20,10 +20,6 @@ Accaren-ik n tbaḍnit ad d-ttwaseknen dagi. - - Baidu - - JD 1 yiccer i yeldin. Sit akken ad tbeddleḍ iccer. @@ -185,6 +181,12 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Sagen timeẓri n tɣuri + + Rnu + + + Ẓreg + Ur izmir ara ad yeqqen. Azenziɣ n tensa URL ur yettwassen ara. @@ -1179,9 +1181,6 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Ansuf ɣer %s! Tesεiḍ yakan amiḍan? - - Wali %s Wali amaynut Awi-d tiririyen da - - Bdu amtawi n ticraḍ, awalen uffiren, akked waṭas-nniḍen s umiḍan n Firefox. + + Mtawi Firefox gar yibenkan - Issin ugar + Awi-d ticraḍ n yisebtar, amazray, d wawalen uffiren ɣer Firefox deg yibenk-a. @@ -1201,8 +1200,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Ih, qqen-iyi Tuqqna tetteddu… - - Kcem ɣer Firefox + + Jerred Qqim beṛṛa n tuqqna @@ -1210,26 +1209,13 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Tuccḍa n tuqqna - Tabaḍnit tawurmant - - Iɣewwaren n tbaḍnit d tɣellist sewḥalen imekaren, yir azeɣzan d tkebbaniyin ara ak-yeṭṭaferen. + Tabaḍnit tezga tettwaḍmen Alugan (amezwer) - - Drus n yimakaren i isewḥal. Isebtar ad d-alin s wudem amagnu. Uḥriṣ (yelha) Uḥris - - Ad isewḥel ugar n yineḍfaren, n udellel d yisfuyla udhimen. Isebtar ad d-ttalin s zzreb, maca kra n tmahilin zemrent ur teddunt ara. - - Ddem ṛṛay - - Ɛreḍ tunigin s yiwen ufus s useqdec n ufeggag n ddaw neɣ err-it d asawen. Tunigin tusligin + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Nfeṣṣel %si w akken ad nerr gar ifassen-ik·im ayen i tbeṭṭuḍ srid aked wayen tbeṭṭuḍ yid-neɣ. Ɣer tasertit-nneɣ n tbaḍnit @@ -1257,8 +1243,6 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Fren asentel - - Ḥreze tabatrit d wallen-ik s usermed n usentel aberkan. Awurman @@ -1313,14 +1297,10 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Issin ugar Alugan (amezwer) - - gDrus n yimakaren i isewḥal. Isebtar ad d-alin s wudem amahnu. Ayen iweḥlen s ummeten n tizeɣt mgal aḍfaṛ Uḥriṣ - - Ad isewḥel ugar n yineḍfaren, n udellel d yisfuyla udhimen. Isebtar ad d-ttalin s zzreb, maca kra n tmahilin zemrent ur teddunt ara. Ayen iweḥlen s ummeten n uḥriṣ mgal aḍfaṛ diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 73e61f1cb..3c622845e 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -1537,6 +1537,18 @@ Логиндерді сұрыптау мәзірі + + + Несиелік карталар + + Карталарды сақтау және автотолтыру + + Деректер шифрленген + + Карталарды құрылғылар арасында синхрондау + + Несиелік картаны қосу + Іздеу жүйесін қосу diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index d7908dd91..10e034fd7 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -450,6 +450,8 @@ Performans, bikaranîn, reqalav û daneyên taybetkirinê yên têkildarî geroka te bi Mozillayê re parve dike, ji bo ku em karibin pê %1$s’ê baştir bikin Daneyên bazarkirinê + + Daneyên têkildarî taybetiyên %1$sê ku tu bi kar tînî bi Leanpluma em xizmeta bazara mobîl jê dikirin re parve dike. Lêkolîn diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 10f5ae772..f2aa7372f 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -22,10 +22,6 @@ 사생활 보호 탭이 여기에 표시됩니다. - - Baidu - - JD 열린 탭 1개. 탭을 전환하려면 누르세요. @@ -192,6 +188,11 @@ 리더뷰 사용자 지정 + + 추가 + + 편집 + 연결할 수 없음. 인식할 수 없는 URL 구성표. @@ -1010,6 +1011,10 @@ 모든 동작 최근 사용 + + %1$s(으)로 로그인됨 + + Sync에 로그인 Sync에 로그인 @@ -1212,9 +1217,6 @@ %s에 오신걸 환영합니다! 계정이 이미 있으신가요? - - %s에 대해 알기 새 기능 살펴보기 여기서 답을 얻으세요 - - Firefox 계정으로 북마크, 비밀번호 등을 동기화하세요. + + 기기 간에 Firefox 동기화 - 더 알아보기 + 이 기기의 Firefox에 북마크, 기록 및 비밀번호를 가져오세요. @@ -1234,8 +1236,8 @@ 예, 로그인함 로그인 중… - - Firefox에 로그인 + + 가입하기 로그아웃 유지 @@ -1244,26 +1246,23 @@ 로그인 실패 - 자동 개인정보 보호 - - 개인 정보 및 보안 설정은 추적기, 악성 코드 및 사용자를 따라다니는 회사를 차단합니다. + 상시 개인 정보 보호 + + Firefox는 회사가 웹에서 사용자를 몰래 따라 다니는 것을 자동으로 중지합니다. 표준 (기본값) - 더 적은 추적기를 차단합니다. 페이지가 정상적으로 로드됩니다. + 개인 정보 보호와 성능사이의 균형이 잡혀 있습니다. 페이지가 정상적으로 로드됩니다. 엄격 (권장) 엄격 - 더 많은 추적기, 광고 및 팝업을 차단합니다. 페이지가 더 빨리 로드되지만, 일부 기능이 작동하지 않을 수 있습니다. - - 위치를 잡으세요 + 더 많은 추적기를 차단하여 페이지가 더 빨리 로드되지만, 일부 페이지의 기능이 손상될 수 있습니다. + + 도구 모음 위치 선택 - 하단 도구 모음을 사용하여 한 손으로 탐색하시거나, 상단으로 이동하세요. + 도구 모음을 쉽게 접근할 수 있는 곳에 놓으세요. 하단에 두거나 상단으로 옮기세요. 사생활 보호 모드 개인 정보 보호 + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> 우리는 %s가 무엇을 온라인에서 공유하고 우리와 공유할지 사용자가 제어할 수 있게 만들었습니다. 개인정보처리방침 읽기 @@ -1291,7 +1290,7 @@ 테마 선택 - 어두운 모드를 활성화하여 배터리를 절약하고 시력을 보호하세요. + 어두운 모드를 활성화하여 배터리를 절약하고 시력을 보호하세요. 자동 @@ -1347,13 +1346,13 @@ 표준 (기본값) - 더 적은 추적기를 차단합니다. 페이지가 정상적으로 로드됩니다. + 개인 정보 보호와 성능사이의 균형이 잡혀 있습니다. 페이지가 정상적으로 로드됩니다. 표준 추적 방지 기능에 의해 차단된 것 엄격 - 더 많은 추적기, 광고 및 팝업을 차단합니다. 페이지가 더 빨리 로드되지만, 일부 기능이 작동하지 않을 수 있습니다. + 더 많은 추적기를 차단하여 페이지가 더 빨리 로드되지만, 일부 페이지의 기능이 손상될 수 있습니다. 엄격 추적 방지 기능에 의해 차단된 것 @@ -1591,6 +1590,38 @@ 로그인 정렬 메뉴 + + + 신용 카드 + + 카드 저장 및 자동 채우기 + + 데이터가 암호화됨 + + 기기 간에 카드 동기화 + + 신용 카드 추가 + + + 카드 추가 + + 카드 번호 + + 유효 기간 + + + 카드상의 이름 + + 카드 별명 + + 카드 삭제 + + 저장 + + 저장 + + 취소 + 검색 엔진 추가 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 5b547d35e..34e8fd736 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -20,10 +20,6 @@ Čia bus rodomos jūsų privačiosios kortelės. - - Baidu - - JD 1 atverta kortelė. Bakstelėkite, norėdami pereiti tarp kortelių. @@ -182,6 +178,11 @@ Tinkinti skaitymo rodinį + + Įtraukti + + Keisti + Nepavyko prisijungti. Neatpažįstama URL schema. @@ -1171,9 +1172,6 @@ Sveiki, čia „%s“! Jau turite paskyrą? - - Susipažinkite su „%s“ Susipažinkite su naujovėmis @@ -1182,10 +1180,10 @@ Turite klausimų apie naująją „%s“? Norite sužinoti, kas pasikeitė? Atsakymus rasite čia - - Pradėkite sinchronizuoti adresyną, slaptažodžius, ir daugiau su savo „Firefox“ paskyra. + + Sinchronizuokite „Firefox“ duomenis tarp įrenginių - Sužinoti daugiau + Turėkite savo „Firefox“ adresyną, žurnalą, ir slaptažodžius šiame įrenginyje. @@ -1194,8 +1192,8 @@ Taip, prisijungti Prisijungiama… - - Prisijungti prie „Firefox“ + + Kurti paskyrą Likti neprisijungus @@ -1204,27 +1202,24 @@ Nepavyko prisijungti - Automatinis privatumas - - Privatumo ir saugumo nuostatos blokuoja stebėjimo elementus, kenkėjiškas programas, ir jus sekančias kompanijas. + Visada veikiantis privatumas + + „Firefox“ automatiškai blokuoja kompanijų bandymus sekti jūsų veiklą internete. Standartinė (numatytoji) - Blokuoja mažiau stebėjimo elementų. Tinklalapiai bus įkeliami įprastai. + Subalansuota privatumui ir našumui. Tinklalapiai įkeliami įprastai. Griežta (rekomenduojama) Griežta - - Blokuoja daugiau stebėjimo elementų, reklamų, ir iššokančių langų. Tinklalapiai bus įkeliami sparčiau, tačiau gali sutrikti jų veikimas. - - Pasirinkite poziciją + + Blokuojama daugiau stebėjimų elementų, tad tinklalapiai įkeliami sparčiau, tačiau gali sutrikti dalis funkcionalumo. + + Pasirinkite priemonių juostos vietą - Išbandykite naršymą viena ranka, kai priemonių juosta apačioje, arba perkelkite ją į viršų. + Pasidėkite priemonių juostą patogiai. Palikite ją apačioje, arba perkelkite į viršų. Naršykite privačiai Jūsų privatumas + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Mes sukūrėme „%s“ siekdami jums suteikti pasirinkimą, kuo dalinatės internete, ir kuo su mumis. Mūsų privatumo pranešimas @@ -1251,9 +1246,9 @@ Pasirinkite apvalkalą - - Pataupykite bateriją ir savo regėjimą, įjungdami tamsią veikseną. + + Pataupykite bateriją ir savo regėjimą su tamsia veiksena. Automatinis @@ -1309,13 +1304,13 @@ Standartinė (numatytoji) - Blokuoja mažiau stebėjimo elementų. Tinklalapiai bus įkeliami įprastai. + Subalansuota privatumui ir našumui. Tinklalapiai įkeliami įprastai. Ką blokuoja numatytoji apsauga nuo stebėjimo Griežta - Blokuoja daugiau stebėjimo elementų, reklamų, ir iššokančių langų. Tinklalapiai bus įkeliami sparčiau, tačiau gali sutrikti jų veikimas. + Blokuojama daugiau stebėjimų elementų, tad tinklalapiai įkeliami sparčiau, tačiau gali sutrikti dalis funkcionalumo. Ką blokuoja griežta apsauga nuo stebėjimo @@ -1555,6 +1550,38 @@ Prisijungimų rūšiavimo meniu + + + Mokėjimo kortelės + + Įrašyti ir automatiškai užpildyti kortelių duomenis + + Duomenys yra užšifruoti + + Sinchronizuoti korteles tarp įrenginių + + + Pridėti mokėjimo kortelę + + + Pridėti kortelę + + Kortelės numeris + + Galiojimo data + + Vardas ant kortelės + + Kortelės pavadinimas + + Pašalinti kortelę + + Įrašyti + + Įrašyti + + Atsisakyti + Pridėti ieškyklę diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 64bc8f359..7e38f2d39 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -19,10 +19,6 @@ Dine private faner vil vises her. - - Baidu - - JD 1 åpen fane. Trykk for å bytte fane. @@ -185,6 +181,11 @@ Tilpass lesevisning + + Legg til + + Rediger + Kan ikke koble til. Ugjenkjennelig URL-skjema. @@ -984,6 +985,10 @@ Alle handlinger Nylig brukt + + Logget inn som %1$s + + Logg inn for å synkronisere Logg inn på Sync @@ -1177,9 +1182,6 @@ Velkommen til %s! Har du allerede en konto? - - Bli kjent med %s Se hva som er nytt Få svar her - - Begynn å synkronisere bokmerker, passord og mer med Firefox-kontoen din. + + Synkroniser Firefox mellom enheter - Les mer + Ta med bokmerker, historikk og passord til Firefox på denne enheten. @@ -1200,8 +1202,8 @@ Ja, logg meg inn Logger inn… - - Logg inn på Firefox + + Registrer deg Forbli utlogget @@ -1209,29 +1211,14 @@ Kunne ikke logge inn - - Automatisk personvern - - Innstillinger for personvern og sikkerhet blokkerer sporere, skadelig kode og selskaper som følger deg. Standard (standard) - - Blokkerer færre sporere. Sider lastes normalt. Streng (anbefales) Streng - - Blokkerer flere sporere, reklamer og sprettoppvindu. Sider lastes raskere, men noen funksjoner fungerer kanskje ikke. - - Velg side - - - Bruk verktøylinjen nederst til å surfe med en hånd, eller flytt den til toppen. + Surf privat @@ -1246,7 +1233,7 @@ Ditt personvern + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Vi har utviklet %s for å gi deg kontroll over det du deler på nettet og hva du deler med oss. Les personvernmerknaden vår @@ -1260,8 +1247,6 @@ Velg tema - - Spar litt batteri og dine øyne ved å aktivere mørkt tema. Automatisk @@ -1316,15 +1301,11 @@ Les mer Standard (standard) - - Blokkerer færre sporere. Sider lastes normalt. Hva er blokkert av standard sporingsbeskyttelse Streng - - Blokkerer flere sporere, reklamer og sprettoppvindu. Sider lastes raskere, men noen funksjoner fungerer kanskje ikke. Hva er blokkert av streng sporingsbeskyttelse @@ -1566,6 +1547,18 @@ Sorter innlogginger-meny + + + Betalingskort + + Lagre og fyll ut kort automatisk + + Data er kryptert + + Synkroniser kort på tvers av enheter + + Legg til betalingskort + Legg til søkemotor diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index f12b21d5d..1237fc622 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -22,10 +22,6 @@ Uw privétabbladen worden hier weergegeven. - - Baidu - - JD 1 open tabblad. Tik om tussen tabbladen te wisselen. @@ -189,6 +185,11 @@ Lezerweergave aanpassen + + Toevoegen + + Bewerken + Kan niet verbinden. Onherkenbaar URL-schema. @@ -982,6 +983,10 @@ Alle acties Onlangs gebruikt + + Aangemeld als %1$s + + Aanmelden om te synchroniseren Aanmelden bij Sync @@ -1177,9 +1182,6 @@ Welkom bij %s! Hebt u al een account? - - Maak kennis met %s Bekijk wat er nieuw is Hier vindt u antwoorden - - Start met synchroniseren van bladwijzers, wachtwoorden en meer met uw Firefox-account. + + Synchroniseer Firefox tussen apparaten - Meer info + Breng bladwijzers, geschiedenis en wachtwoorden naar Firefox op dit apparaat. @@ -1199,8 +1201,8 @@ Ja, mij aanmelden Aanmelden… - - Aanmelden bij Firefox + + Registreren Afgemeld blijven @@ -1208,26 +1210,23 @@ Aanmelden mislukt - Automatische privacy - - Privacy- en beveiligingsinstellingen blokkeren trackers, malware en bedrijven die u volgen. + Privacy die altijd aan staat + + Firefox zorgt er automatisch voor dat bedrijven u niet stiekem volgen op internet. Standaard (standaard) - Blokkeert minder trackers. Pagina’s worden normaal geladen. + Gebalanceerd voor privacy en prestaties. Pagina’s laden normaal. Streng (aanbevolen) Streng - Blokkeert meer trackers, advertenties en pop-ups. Pagina’s worden sneller geladen, maar sommige functies werken mogelijk niet. - - Neem stelling + Blokkeert meer trackers, zodat pagina’s sneller worden geladen, maar sommige functionaliteit op een pagina werkt mogelijk niet. + + Kies uw werkbalkplaatsing - Probeer surfen met één hand met de werkbalk onderin, of verplaats deze naar boven. + Plaats de werkbalk binnen handbereik. Houd hem onderaan of verplaats hem naar boven. Surf privé Uw privacy + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> We hebben %s ontworpen om u controle te geven over wat u online deelt en wat u met ons deelt. Lees onze privacyverklaring @@ -1255,7 +1254,7 @@ Kies uw thema - Spaar uw batterij en uw ogen door de donkere modus in te schakelen. + Spaar uw batterij en uw ogen met de donkere modus. Automatisch @@ -1310,13 +1309,13 @@ Standaard (standaard) - Blokkeert minder trackers. Pagina’s worden normaal geladen. + Gebalanceerd voor privacy en prestaties. Pagina’s laden normaal. Wat wordt geblokkeerd door standaard bescherming tegen volgen Streng - Blokkeert meer trackers, advertenties en pop-ups. Pagina’s worden sneller geladen, maar sommige functies werken mogelijk niet. + Blokkeert meer trackers, zodat pagina’s sneller worden geladen, maar sommige functionaliteit op een pagina werkt mogelijk niet. Wat wordt geblokkeerd door strenge bescherming tegen volgen @@ -1552,6 +1551,37 @@ Menu Aanmeldingen sorteren + + + Creditcards + + Kaarten opslaan en automatisch invullen + + Gegevens zijn versleuteld + + Kaarten synchroniseren tussen apparaten + + Creditcard toevoegen + + + Kaart toevoegen + + Kaartnummer + + Vervaldatum + + Naam op kaart + + Kaart-nickname + + Kaart verwijderen + + Opslaan + + Opslaan + + Annuleren + Zoekmachine toevoegen diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index c5f993168..10ee09d6a 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -22,10 +22,6 @@ Dine private faner vil visast her. - - Baidu - - JD 1 open fane. Trykk for å byte fane. @@ -185,6 +181,11 @@ Tilpass lesevising + + Legg til + + Rediger + Klarte ikkje å kople til. Ukjenneleg URL-skjema. @@ -986,6 +987,10 @@ Alle handlingar Nyleg brukt + + Logga inn som %1$s + + Logg inn for å synkronisere Logg inn på Sync @@ -1179,9 +1184,6 @@ Velkomen til %s! Har du allereie ein konto? - - Bli kjent med %s Sjå kva som er nytt Få svar her - - Begynn å synkronisere bokmerke, passord og meir med Firefox-kontoen din. + + Synkroniser Firefox mellom einingar - Les meir + Ta med bokmerke, historikk og passord til Firefox på denne eininga. @@ -1202,9 +1204,9 @@ Ja, logg meg inn Loggar inn… - - Logg inn på Firefox + + Registrer deg Bli verande utlogga @@ -1213,26 +1215,23 @@ Klarte ikkje å logge inn - Automatisk personvern - - Innstillingar for personvern og sikkerheit blokkerer sporarar, skadeleg kode og selskap som følgjer deg. + Alltid med personvern + + Firefox hindrar automatisk verksemder i å følgje deg i løynd på nettet. Standard (standard) - Blokkerer færre sporarar. Sider vert lasta normalt. + Balansert mellom privatliv og yting. Sider vert lasta inn normalt. Streng (tilrådd) Streng - Blokkerer fleire sporarar, reklamer og sprettoppvindauge. Sider vert lasta raskere, men nokre funksjonar fungerer kanskje ikkje. - - Vel side + Blokkerer fleire sporings-mekanismar. Sider vert leste inn raskare, men enkelte sider fungerer kanskje ikkje. + + Vel plassering for verktøylinja - Bruk verktøylinja nedst til å surfe med ei hand, eller flytt henne til toppen. + Plassere verktøylinja innanfor rekkjevidde. Ha henne i botn eller topp. Surf privat Ditt personvern + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Vi har utvikla %s for å gi deg kontroll over det du deler på nettet og kva du deler med oss. Les personvernmerknaden vår @@ -1260,7 +1259,7 @@ Vel tema - Spar litt batteri og synet ditt ved å aktivere mørkt tema. + Skån batteriet og augene dine med eit mørkt tema. Automatisk @@ -1316,13 +1315,13 @@ Standard (standard) - Blokkerer færre sporarar. Sider vert lasta normalt. + Balansert mellom privatliv og yting. Sider vil laste normalt. Kva er blokkert av standard sporingsvern Streng - Blokkerer fleire sporarar, reklamer og sprettoppvindauge. Sider vert lasta raskere, men nokre funksjonar fungerer kanskje ikkje. + Blokkerer fleire sporings-mekanismar. Sider vert lasta inn raskare, men enkelte sider fungerer kanskje ikkje skikkeleg. Kva er blokkert av strengt sporingsvern? @@ -1559,6 +1558,37 @@ Sorter inloggningsmenyen + + + Betalingskort + + Lagre og fyll ut kort automatisk + + Data er kryptert + + Synkroniser kort på tvers av einingar + + Legg til betalingskort + + + Legg til betalingskort + + Kortnummer + + Går ut-dato + + Namn på kort + + Kallenamn på kort + + Slett kort + + Lagre + + Lagre + + Avbryt + Legg til søkjemotor diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index 8789d60f8..54d5e38f5 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -19,10 +19,6 @@ Los onglets privats se mostraràn aquí. - - Baidu - - JD 1 onglet dobèrt. Tocatz per i bascular. @@ -182,6 +178,11 @@ Personalizar la vista lectura + + Apondre + + Modificar + Connexion impossibla. Esquèma d’URL desconegut. @@ -1172,9 +1173,6 @@ La benvenguda a %s ! Avètz ja un compte ? - - Descobrissètz %s Descobrissètz las novetats Trobatz de responsas aquí - - Començatz de sincronizar los marcapaginas, senhals e mai amb vòstre compte Firefox - - Ne saber mai @@ -1194,35 +1188,18 @@ Òc, connectatz-me Connexion… - - Se connectar a Firefox Demorar desconnectat Sincro. activada Fracàs de connexion - - Confidencialitat automatica - - Los paramètres de confidencialitat e de seguretat blocan los traçadors, los logicials malvolents e las entrepresas que vos pistan. Estandard (per defaut) - - Bloca mens de traçadors. Las paginas se cargan normalament. Estricte (recomandat) Estricte - - Bloca mai d’elements de seguiment, publicitats e fenèstras sorgissentas. Las paginas se cargament rapidament, mas pòt arribar que d’unas foncionalitats sián copadas. - - Prenètz posicion - - Ensajatz la navegacion amb la man amb la barra d’aisinas inferiora o deplaçatz-la ennaut. Navegatz d’un biais privat Vòstra vida privada + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Concebèrem %s per vos donar lo contraròtle de çò que partejatz en linha e çò que partejatz amb nosautres. Legissètz nòstra politica de confidencialitat @@ -1248,8 +1225,6 @@ Causissètz vòstre tèma - - Estalviatz la batariá e vòstra vista en activant lo mòde fosc. Automatic @@ -1304,14 +1279,10 @@ Ne saber mai Estandarda (per defaut) - - Bloca mens de traçadors. Las paginas se cargan normalament. Çò que la proteccion contra lo seguiment estandarda bloca Estricte - - Bloca mai d’elements de seguiment, publicitats e fenèstras sorgissentas. Las paginas se cargament rapidament, mas pòt arribar que d’unas foncionalitats sián copadas. Çò que la proteccion contra lo seguiment estricta bloca @@ -1554,6 +1525,31 @@ Menú per triar los identificants + + + Cartas de crèdit + + Salvar e completar automaticament las cartas + + Donadas chifradas + + Sincronizar las cartas entre los periferics + + Apondre una cartas de crèdit + + + Numèro de carta + + Data d’expiracion + + Titular + + Enregistrar + + Enregistrar + + Anullar + Apondre un motor de recèrca diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml index 2c8bebf6a..826662ea9 100644 --- a/app/src/main/res/values-pa-rIN/strings.xml +++ b/app/src/main/res/values-pa-rIN/strings.xml @@ -20,10 +20,6 @@ ਤੁਹਾਡੀਆਂ ਪ੍ਰਾਈਵੇਟ ਟੈਬਾਂ ਨੂੰ ਇੱਥੇ ਵਿਖਾਇਆ ਜਾਵੇਗਾ। - - ਬਾਈਡੂ - - ਜੇਡੀ 1 ਟੈਬ ਖੁੱਲ੍ਹੀ। ਟੈਬਾਂ ਲਈ ਸਵਿੱਚ ਕਰਨ ਵਾਸਤੇ ਟੈਪ ਕਰੋ। @@ -189,6 +185,11 @@ ਪੜ੍ਹਨ ਝਲਕ ਨੂੰ ਕਸਟਮਾਈਜ਼ ਕਰੋ + + ਜੋੜੋ + + ਸੋਧੋ + ਕਨੈਕਟ ਕਰਨ ਲਈ ਅਸਮਰੱਥ। ਬੇਪਛਾਣ URL ਸਕੀਮ। @@ -991,6 +992,10 @@ ਸਾਰੀਆਂ ਕਾਰਵਾਈਆਂ ਤਾਜ਼ਾ ਵਰਤੇ + + %1$s ਵਜੋਂ ਸਾਈਨ ਇਨ ਕੀਤਾ + + ਸਿੰਕ ਕਰਨ ਲਈ ਸਾਈਨ ਇਨ ਕਰੋ ਸਿੰਕ ਕਰਨ ਲਈ ਸਾਈਨ ਇਨ ਕਰੋ @@ -1187,9 +1192,6 @@ %s ਵਲੋਂ ਜੀ ਆਇਆਂ ਨੂੰ! ਪਹਿਲਾਂ ਹੀ ਖਾਤਾ ਹੈ? - - %s ਬਾਰੇ ਜਾਣੋ ਵੇਖੋ ਕਿ ਨਵਾਂ ਕੀ ਹੈ ਜਵਾਬ ਇੱਥੇ ਲਵੋ - - ਆਪਣੇ Firefox ਖਾਤੇ ਨਾਲ ਬੁੱਕਮਾਰਕ, ਪਾਸਵਰਡ ਤੇ ਹੋਰਾਂ ਨੂੰ ਸਿੰਕ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰੋ। + + ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ Firefox ਸਿੰਕ ਕਰੋ - ਹੋਰ ਜਾਣੋ + ਇਸ ਡਿਵਾਈਸ ਉੱਤੇ Firefox ਲਈ ਬੁੱਕਮਾਰਕ, ਅਤੀਤ ਅਤੇ ਪਾਸਵਰਡ ਲਿਆਓ। @@ -1209,9 +1211,9 @@ ਹਾਂ, ਮੈਨੂੰ ਸਾਈਨ ਇਨ ਕਰੋ …ਸਾਇਨ ਇਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ - - ਫਾਇਰਫਾਕਸ ‘ਚ ਸਾਇਨ ਇਨ ਕਰੋ + + ਸਾਈਨ ਅੱਪ ਕਰੋ ਸਾਈਨ ਆਉਟ ਰਹੋ @@ -1219,26 +1221,23 @@ ਸਾਈਨ-ਇਨ ਲਈ ਅਸਫ਼ਲ - ਆਪਣੇ-ਆਪ ਪਰਦੇਦਾਰੀ - - ਪਰਦੇਦਾਰੀ ਅਤੇ ਸੁਰੱਖਿਆ ਸੈਟਿੰਗਾਂ ਟਰੈਕਾਂ, ਮਾਲਵੇਅਰ ਅਤੇ ਤੁਹਾਡਾ ਪਿੱਛਾ ਕਰਨ ਵਾਲੀਆਂ ਕਾਪੀਆਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਂਦੀਆਂ ਹਨ। + ਪਰਦੇਦਾਰੀ ਹਮੇਸ਼ਾਂ ਚਾਲੂ + + ਕੰਪਨੀਆਂ ਨੂੰ ਚੋਰੀ ਚੋਰੀ ਵੈੱਬ ਉੱਤੇ ਤੁਹਾਡਾ ਪਿੱਛਾ ਕਰਨ ਤੋਂ Firefox ਆਪਣੇ-ਆਪ ਹੀ ਰੋਕਦਾ ਹੈ। ਸਟੈਂਡਰਡ (ਮੂਲ) - ਕੁਝ ਕੁ ਟਰੈਕਰਾਂ ਉੱਤੇ ਰੋਕ ਲਾਉਂਦਾ ਹੈ। ਸਫ਼ੇ ਆਮ ਵਾਂਗ ਲੋਡ ਹੋਣਗੇ। + ਪਰਦੇਦਾਰੀ ਅਤੇ ਕਾਰਗੁਜ਼ਾਰੀ ਵਿਚਾਲੇ ਸੰਤੁਲਨ ਹੈ। ਸਫ਼ੇ ਆਮ ਨਾਲੋਂ ਤੇਜ਼ ਨਾਲ ਲੋਡ ਹੁੰਦੇ ਹਨ। ਸਖ਼ਤ (ਸਿਫਾਰਸ਼ੀ) ਸਖ਼ਤ - ਬਹੁਤੇ ਟਰੈਕਰਾਂ, ਇਸ਼ਤਿਹਾਰ ਤੇ ਪੋਪਅੱਪ ਉੱਤੇ ਰੋਕ ਲਗਾਉਂਦਾ ਹੈ। ਸਫ਼ੇ ਵੱਧ ਤੇਜ਼ੀ ਨਾਲ ਲੋਡ ਹੁੰਦੇ ਹਨ, ਪਰ ਕੁਝ ਚੀਜ਼ਾਂ ਠੀਕ ਤਰ੍ਹਾਂ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ ਹਨ। - - ਪੱਖ ਲਵੋ + ਹੋਰ ਟਰੈਕਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਸਫ਼ੇ ਤੇਜ਼ੀ ਨਾਲ ਲੋਡ ਹੁੰਦੇ ਹਨ, ਪਰ ਕੁਝ ਸਫ਼ੇ ਸ਼ਾਇਦ ਠੀਕ ਤਰ੍ਹਾਂ ਕੰਮ ਨਾ ਕਰਨ। + + ਆਪਣੇ ਟੂਲਬਾਰ ਦੀ ਥਾਂ ਚੁਣੋ - ਹੇਠਲੀ ਟੂਲਬਾਰ ਨਾਲ ਇੱਕ-ਹੱਥ ਰਾਹੀਂ ਬਰਾਊਜ਼ ਕਰਕੇ ਵੇਖੋ ਜਾਂ ਇਸ ਨੂੰ ਉੱਤੇ ਲੈ ਜਾਓ। + ਸੌਖੀ ਪਹੁੰਚ ਲਈ ਟੂਲਬਾਰ ਨੂੰ ਰੱਖੋ। ਹੇਠਾਂ ਰੱਖੋ ਜਾਂ ਇਸ ਨੂੰ ਉੱਤੇ ਰੱਖੋ। ਪ੍ਰਾਈਵੇਟ ਢੰਗ ਨਾਲ ਬਰਾਊਜ਼ ਕਰੋ ਤੁਹਾਡੀ ਪਰਦੇਦਾਰੀ + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> ਅਸੀਂ %s ਨੂੰ ਇੰਝ ਬਣਾਇਆ ਹੈ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਪੂਰਾ ਕੰਟਰੋਲ ਹੋਵੇ ਕਿ ਤੁਸੀਂ ਆਨਲਾਈਨ ਕੀ ਸਾਂਝਾ ਕਰਦੇ ਹੋ ਅਤੇ ਸਾਡੇ ਨਾਲ ਕੀ ਸਾਂਝਾ ਕਰਦੇ ਹੋ। @@ -1267,7 +1266,7 @@ ਆਪਣਾ ਸਰੂਪ ਚੁਣੋ - ਗੂੜ੍ਹਾ ਮੋਡ ਸਮਰੱਥ ਕਰਨ ਨਾਲ ਕੁਝ ਬੈਟਰੀ ਅਤੇ ਆਪਣੀਆਂ ਅੱਖਾਂ ਨੂੰ ਬਚਾਓ। + ਗੂੜ੍ਹੇ ਢੰਗ ਨਾਲ ਕੁਝ ਬੈਟਰੀ ਅਤੇ ਤੁਹਾਡੀ ਨਿਗ੍ਹਾ ਬਚਦੀ ਹੈ। ਆਪਣੇ-ਆਪ @@ -1322,13 +1321,13 @@ ਸਟੈਂਡਰਡ (ਮੂਲ) - ਕੁਝ ਕੁ ਟਰੈਕਰਾਂ ਉੱਤੇ ਰੋਕ ਲਾਉਂਦਾ ਹੈ। ਸਫ਼ੇ ਆਮ ਵਾਂਗ ਲੋਡ ਹੋਣਗੇ। + ਪਰਦੇਦਾਰੀ ਅਤੇ ਕਾਰਗੁਜ਼ਾਰੀ ਵਿਚਾਲੇ ਸੰਤੁਲਨ ਹੈ। ਸਫ਼ੇ ਆਮ ਨਾਲੋਂ ਤੇਜ਼ ਨਾਲ ਲੋਡ ਹੁੰਦੇ ਹਨ। ਮਿਆਰੀ ਟਰੈਕਿੰਗ ਸੁਰੱਖਿਆ ਰਾਹੀਂ ਕਿਸ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਈ ਜਾਂਦੀ ਹੈ ਸਖ਼ਤ - ਬਹੁਤੇ ਟਰੈਕਰਾਂ, ਇਸ਼ਤਿਹਾਰ ਤੇ ਪੋਪਅੱਪ ਉੱਤੇ ਰੋਕ ਲਗਾਉਂਦਾ ਹੈ। ਸਫ਼ੇ ਵੱਧ ਤੇਜ਼ੀ ਨਾਲ ਲੋਡ ਹੁੰਦੇ ਹਨ, ਪਰ ਕੁਝ ਚੀਜ਼ਾਂ ਠੀਕ ਤਰ੍ਹਾਂ ਕੰਮ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ ਹਨ। + ਹੋਰ ਟਰੈਕਰਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਉਂਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਸਫ਼ੇ ਤੇਜ਼ੀ ਨਾਲ ਲੋਡ ਹੁੰਦੇ ਹਨ, ਪਰ ਕੁਝ ਸਫ਼ੇ ਸ਼ਾਇਦ ਠੀਕ ਤਰ੍ਹਾਂ ਕੰਮ ਨਾ ਕਰਨ। ਸਖ਼ਤ ਟਰੈਕਿੰਗ ਸੁਰੱਖਿਆ ਰਾਹੀਂ ਕਿਸ ਉੱਤੇ ਪਾਬੰਦੀ ਲਾਈ ਜਾਂਦੀ ਹੈ @@ -1565,6 +1564,36 @@ ਲਾਗਇਨ ਲੜੀਬਧ ਮੇਨੂ + + + ਕਰੈਡਿਟ ਕਾਰਡ + + ਕਾਰਡ ਸੰਭਾਲੋ ਅਤੇ ਆਪਣੇ-ਆਪ ਭਰੋ + + ਡਾਟਾ ਇੰਕ੍ਰਿਪਟ ਕੀਤਾ ਹੈ + + ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ ਕਾਰਡਾਂ ਨੂੰ ਸਿੰਕ ਕਰੋ + + ਕਰੈਡਿਟ ਕਾਰਡ ਜੋੜੋ + + ਕਾਰਡ ਜੋੜੋ + + ਕਾਰਡ ਦਾ ਨੰਬਰ + + ਮਿਆਦ + + ਕਾਰਡ ਉੱਤੇ ਨਾਂ + + ਕਾਰਡ ਦਾ ਆਮ ਨਾਂ + + ਕਾਰਡ ਨੂੰ ਹਟਾਓ + + ਸੰਭਾਲੋ + + ਸੰਭਾਲੋ + + ਰੱਦ ਕਰੋ + ਖੋਜ ਇੰਜਣ ਜੋੜੋ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5fe83ac0e..1d146cc41 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1550,6 +1550,19 @@ Menu sortowania danych logowania + + + Karty płatnicze + + + Zachowywanie i automatyczne wypełnianie kart + + Dane są zaszyfrowane + + Synchronizuj karty między urządzeniami + + Dodaj kartę płatniczą + Dodaj wyszukiwarkę diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index d6cb5c754..86aad5ae3 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -19,10 +19,6 @@ Suas abas privativas são mostradas aqui. - - Baidu - - JD 1 aba aberta. Toque para alternar abas. @@ -183,6 +179,11 @@ Personalizar leitor + + Adicionar + + Editar + Não foi possível conectar. Esquema de URL não reconhecível. @@ -510,13 +511,13 @@ - Puxar para atualizar + Atualizar página ao deslizar para baixo desde o topo - Deslizar para ocultar a barra de ferramentas + Ocultar barra de ferramentas ao deslizar para cima - Deslizar a barra de ferramentas para o lado para mudar de aba + Mudar de aba ao deslizar a barra de ferramentas para o lado - Deslizar a barra de ferramentas para cima para abrir abas + Abrir abas ao deslizar a barra de ferramentas para cima @@ -974,6 +975,10 @@ Todas as ações Usado recentemente + + Conectado como %1$s + + Entrar para sincronizar Entrar no Sync @@ -1166,9 +1171,6 @@ Boas-vindas ao %s! Já tem uma conta? - - Conheça o %s Veja as novidades Obtenha respostas aqui - - Comece a sincronizar favoritos, senhas e muito mais com sua Conta Firefox. + + Sincronize o Firefox entre dispositivos - Saiba mais + Traga favoritos, histórico e senhas para o Firefox deste dispositivo. @@ -1188,8 +1190,8 @@ Sim, entrar Entrando… - - Entrar no Firefox + + Criar uma conta Permanecer desconectado @@ -1197,26 +1199,23 @@ Falha ao entrar - Privacidade automática - - As configurações de privacidade e segurança bloqueiam rastreadores, código malicioso (malware) e empresas que seguem você. + Privacidade sempre ativa + + O Firefox impede automaticamente que empresas sigam você secretamente pela web. Normal (padrão) - Bloqueia menos rastreadores. As páginas são carregadas normalmente. + Balanceado entre privacidade e desempenho. Páginas são carregadas normalmente. Rigoroso (recomendado) Rigoroso - Bloqueia mais rastreadores, anúncios e notificações. As páginas são carregadas mais rápido, mas algumas coisas podem não funcionar. - - Escolha uma posição + 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 - Experimente navegar usando apenas uma mão com a barra de ferramentas embaixo, ou a mova para o alto. + Facilite o alcance à barra de ferramentas. Mantenha embaixo, ou mova para cima. Navegue com privacidade Sua privacidade + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Projetamos o %s para te dar controle sobre o que você compartilha online e o que você compartilha conosco. Leia nosso aviso de privacidade @@ -1245,7 +1244,7 @@ Escolha um tema - Se quiser poupar sua vista e economizar bateria, use o modo escuro. + Poupe sua vista e economize bateria com o modo escuro. Automático @@ -1304,13 +1303,13 @@ Normal (padrão) - Bloqueia menos rastreadores. As páginas são carregadas normalmente. + Balanceado entre privacidade e desempenho. Páginas são carregadas normalmente. O que é bloqueado pela proteção normal contra rastreamento Rigoroso - Bloqueia mais rastreadores, anúncios e notificações. As páginas são carregadas mais rápido, mas algumas coisas podem não funcionar. + Bloqueia mais rastreadores, assim as páginas carregam mais rápido, mas pode atrapalhar algumas funcionalidades de páginas. O que é bloqueado pela proteção rigorosa contra rastreamento @@ -1546,6 +1545,37 @@ Menu de ordenação de contas + + + Cartões de crédito + + Salvar e preencher cartões automaticamente + + Os dados são criptografados + + Sincronizar cartões entre dispositivos + + Adicionar cartão de crédito + + + Adicionar cartão + + Número do cartão + + Data de validade + + Nome no cartão + + Apelido do cartão + + Excluir cartão + + Salvar + + Salvar + + Cancelar + Adicionar mecanismo de pesquisa diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 882fd490d..39d57f717 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -20,10 +20,6 @@ Os seus separadores privados serão mostrados aqui. - - Baidu - - JD 1 separador aberto. Toque para mudar de separador. @@ -183,6 +179,11 @@ Personalizar a vista de leitura + + Adicionar + + Editar + Não foi possível ligar. Esquema do endereço não reconhecido. @@ -1168,9 +1169,6 @@ Bem-vindo ao %s! Já tem uma conta? - - Conheça o %s Veja as novidades Obtenha respostas aqui - - Comece a sincronizar os marcadores, palavras-passe e muito mais com a sua conta Firefox. + + Sincronizar o Firefox entre dispositivos - Saber mais + Traga os marcadores, histórico e palavras-passe para o Firefox neste dispositivo. @@ -1191,8 +1189,8 @@ Sim, iniciar sessão A iniciar a sessão… - - Iniciar sessão no Firefox + + Registar Permanecer sem sessão iniciada @@ -1201,26 +1199,23 @@ Falha ao iniciar sessão - Privacidade automática - - As configurações de privacidade e de segurança bloqueiam rastreadores, software malicioso e empresas que o monitorizam. + Privacidade sempre ativa + + O Firefox impede automaticamente que as empresas o sigam secretamente pela Internet. Padrão (predefinição) - Bloqueia menos rastreadores. As páginas serão carregadas normalmente. + Equilibrado para privacidade e desempenho. As páginas serão carregadas normalmente. Rigorosa (recomendado) Rigoroso - Bloqueia mais rastreadores, anúncios e pop-ups. As páginas são carregadas mais rapidamente, mas algumas funcionalidades poderão não funcionar. - - Escolha uma posição + 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 - Experimente navegar com uma mão com a barra de ferramentas em baixo ou mova-a para o topo. + Facilite o acesso à barra de ferramentas. Mantenha a mesma na parte inferior ou mova-a para cima. Navegue em privado A sua privacidade + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Nós desenhámos o %s para lhe dar mais controlo sobre o que partilha online e o que partilha connosco. Leia a nossa política de privacidade @@ -1248,7 +1243,7 @@ Escolha o seu tema - Economize bateria e a sua visão ativando o modo escuro. + Economize bateria e a sua visão com o modo escuro. Automático @@ -1305,13 +1300,13 @@ Padrão (predefinição) - Bloqueia menos rastreadores. As páginas serão carregadas normalmente. + Equilibrado para privacidade e desempenho. As páginas serão carregadas normalmente. O que é bloqueado pela proteção padrão contra a monitorização Rigorosa - Bloqueia mais rastreadores, anúncios e pop-ups. As páginas são carregadas mais rapidamente, mas algumas funcionalidades poderão não funcionar. + Bloqueia mais rastreadores para que as páginas carreguem mais rapidamente, mas algumas funcionalidades das páginas podem ser perdidas. O que é bloqueado pela proteção rigorosa contra a monitorização @@ -1550,6 +1545,37 @@ Menu de ordenação de credenciais + + + Cartões de crédito + + Guardar e preencher automaticamente cartões + + Os dados são encriptados + + Sincronizar cartões entre dispositivos + + Adicionar cartão de crédito + + + Adicionar cartão + + Número do cartão + + Data de expiração + + Nome no cartão + + Nome alternativo do cartão + + Eliminar cartão + + Guardar + + Guardar + + Cancelar + Adicionar motor de pesquisa diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml index 8efee5c6f..84489f724 100644 --- a/app/src/main/res/values-rm/strings.xml +++ b/app/src/main/res/values-rm/strings.xml @@ -1547,6 +1547,18 @@ Zavrar il menu da las datas d\'annunzia + + + Cartas da credit + + Emplenir automaticamain las datas da la carta da credit + + Las datas èn criptadas + + Sincronisar las cartas tranter ils apparats + + Agiuntar ina carta da credit + Agiuntar ina maschina da tschertgar diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6de51053d..aa22b88e6 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1576,6 +1576,18 @@ Меню сортировки логинов + + + Банковские карты + + Сохранять и автоматически заполнять данные карт + + Данные зашифрованы + + Синхронизировать карты между различными устройствами + + Добавить банковскую карту + Добавление поисковой системы diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 5cf56d20b..209d5d247 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -267,7 +267,7 @@ Heslá - Kreditné karty a adresy + Platobné karty a adresy Nastaviť ako predvolený prehliadač @@ -1551,6 +1551,18 @@ Zoradiť ponuku prihlasovacích údajov + + + Platobné karty + + Ukladať a automaticky dopĺňať údaje o platobných kartách + + Údaje sú šifrované + + Synchronizovať karty naprieč zariadeniami + + Pridať platobnú kartu + Pridať vyhľadávací modul diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 7bcfaa4dc..265b360a2 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -20,10 +20,6 @@ Tu bodo prikazani vaši zasebni zavihki. - - Baidu - - JD 1 odprt zavihek. Tapnite za preklop zavihkov. @@ -183,6 +179,11 @@ Prilagodi bralni pogled + + Dodaj + + Uredi + Povezava ni mogoča. Neprepoznavna URL shema. @@ -1178,9 +1179,6 @@ Dobrodošli v %s! Že imate račun? - - Spoznajte %s Kaj je novega Tukaj poiščite odgovore - - Začnite sinhronizirati zaznamke, gesla in ostalo s Firefox Računom. - - Več o tem @@ -1200,35 +1194,18 @@ Da, prijavi me Prijavljanje … - - Prijavite se v Firefox Ostanite odjavljeni Sync je vklopljen Prijava ni uspela - - Samodejna zasebnost - - Nastavitve zasebnosti in varnosti zavračajo sledilce, zlonamerno programsko opremo in podjetja, ki vam sledijo. Običajno (privzeto) - - Zavrača manj sledilcev. Strani se bodo normalno nalagale. Strogo (priporočljivo) Strogo - - Zavrača več sledilcev, oglasov in pojavnih oken. Strani se nalagajo hitreje, vendar nekatere možnosti morda ne bodo delovale. - - Zavzemite položaj - - Poskusite enoročno brskanje z orodno vrstico spodaj ali pa jo premaknite na vrh. Brskajte zasebno + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s smo zasnovali tako, da vam omogočimo nadzor nad tem, kaj delite na spletu in kaj delite z nami. Preberite naše obvestilo o zasebnosti @@ -1255,8 +1232,6 @@ Izberite si temo - - Prihranite nekaj baterije in ne obremenjujte oči s temnim načinom. Samodejno @@ -1311,14 +1286,10 @@ Več o tem Običajno (privzeto) - - Zavrača manj sledilcev. Strani se bodo normalno nalagale. Kaj je zavrnjeno s standardno zaščito pred sledenjem Strogo - - Zavrača več sledilcev, oglasov in pojavnih oken. Strani se nalagajo hitreje, vendar nekatere možnosti morda ne bodo delovale. Kaj je zavrnjeno s strogo zaščito pred sledenjem @@ -1559,6 +1530,33 @@ Meni razvrščanja prijav + + + Kreditne kartice + + Podatki so šifrirani + + Sinhroniziraj kartice med napravami + + Dodaj kreditno kartico + + + Dodaj kartico + + Številka kartice + + Datum poteka + + Ime na kartici + + Izbriši kartico + + Shrani + + Shrani + + Prekliči + Dodaj iskalnik diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 1b222beb6..d4e280666 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -18,10 +18,6 @@ Skedat tuaja private do të shfaqen këtu. - - Baidu - - JD 1 skedë e hapur. Prekeni që të ndërroni skeda. @@ -181,6 +177,11 @@ Përshtatni pamjen e Lexuesit + + Shtoni + + Përpunoni + S’arrihet të lidhet. Skemë URL jo e pranuar. @@ -971,8 +972,12 @@ Krejt veprimet Përdorur së fundi + + Futur si %1$s + + Që të njëkohësoni, bëni hyrjen - Që të Njëkohësoni, bëni hyrjen + Për Njëkohësim, bëni hyrjen Dërgoje te krejt pajisjet @@ -1164,9 +1169,6 @@ Mirë se vini te %s! Keni tashmë një llogari? - - Njihuni me %s Shihni ç’ka të re Merrni përgjigje këtu - - Filloni të njëkohësoni faqerojtës, fjalëkalime, etj, me llogarinë tuaj Firefox. + + Njëkohësoni Firefox-in mes pajisjesh - Mësoni më tepër + Sillni te Firefox-i në këtë pajisje faqerojtës, historik dhe fjalëkalime. @@ -1186,8 +1188,8 @@ Po, futmë Po hyhet… - - Hyni në Firefox + + Regjistrohuni Qëndro i dalë @@ -1195,26 +1197,23 @@ S’u arrit të hyhej - Privatësi e vetvetishme - - Rregullimet e privatësisë dhe sigurisë bllokojnë gjurmues, malware, dhe shoqëri që ju ndjekin. + Privatësi gjithnjë në punë + + Firefox-i ndal automatikisht shoqëri t’ju ndjekin fshehtazi nëpër internet. Standarde (parazgjedhje) - Bllokon më pak gjurmues. Faqet do të ngarkohen normalisht. + I baraspeshuar për privatësi dhe funksionim. Faqet do të ngarkohen normalisht. Strikte (e këshilluar) Strikte - Bllokon më shumë gjurmues, reklama dhe flluska. Faqet ngarkohen më shpejt, por disa anë mund të mos punojnë. - - Zini një pozicion + Bllokon më shumë gjurmues, ndaj faqet ngarkohen më shpejt, por disa anë, pjesë e faqes, mund të mos punojnë. + + Zgjidhni vendosjen e panelit tuaj - Provoni shfletim me një dorë, me panelin në fund, ose ngjiteni sipër. + Vendoseni panelin diku ku e përdorni kollaj. Mbajeni në fund, ose kalojeni në krye. Shfletoni privatisht Privatësia juaj + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> E kemi hartuar %s për t’ju dhënë kontroll mbi ç’ndani me të tjerë në internet dhe ç’ndani me ne. Lexoni shënimin tonë mbi privatësinë @@ -1242,7 +1241,7 @@ Zgjidhni temën tuaj - Kurseni pak bateri dhe shikimin tuaj, duke aktivizuar mënyrën e errët. + Kurseni pak bateri dhe shikimin tuaj, me mënyrën e errët. Vetvetiu @@ -1299,13 +1298,13 @@ Standarde (parazgjedhje) - Bllokon më pak gjurmues. Faqet do të ngarkohen normalisht. + I baraspeshuar për privatësi dhe funksionim. Faqet do të ngarkohen normalisht. Ç’bllokohet nga mbrojtje standarde kundër gjurmimit Strikte - Bllokon më shumë gjurmues, reklama dhe flluska. Faqet ngarkohen më shpejt, por disa anë mund të mos punojnë. + Bllokon më shumë gjurmues, ndaj faqet ngarkohen më shpejt, por disa anë, pjesë e faqes, mund të mos punojnë. Ç’bllokohet nga mbrojtje strikte kundër gjurmimit @@ -1454,7 +1453,7 @@ Rilidhu - Bëni hyrjen që të Njëkohësoni + Për Njëkohësim, bëni hyrjen Kredenciale hyrjesh të ruajtur @@ -1542,6 +1541,36 @@ Renditni menu kredencialesh + + + Karta krediti + + Ruaj dhe plotësoni vetvetiu të dhëna kartash + + Të dhënat janë të fshehtëzuara + + Njëkohëso të dhëna kartash mes pajisjesh + + Shtoni kartë krediti + + Shtoni kartë + + Numër Karte + + Datë Skadimi + + Emër në Kartë + + Nofkë Karte + + Fshije kartën + + Ruaje + + Ruaje + + Anuloje + Shtoni motor kërkimesh @@ -1677,7 +1706,7 @@ Shihni një listë skedash nga pajisje tuajat të tjera. - Bëni hyrjen që të sjëkohësoni + Për njëkohësim, bëni hyrjen S’ka skeda të hapura diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 1536fadaa..df996b4ad 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -1550,6 +1550,18 @@ Сортирај мени пријава + + + Кредитне картице + + Сачувај и аутоматски попуни поља картице + + Подаци су шифровани + + Синхронизуј картице на уређајима + + Додај кредитну картицу + Додај претраживач diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index c6cf03bb0..95c4a51ef 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -1558,6 +1558,18 @@ Runtuykeun menu login + + + Kartu kiridit + + Simpen jeung otongeusi kartu + + Data diénkrip + + Singkronkeun kartu di sakabeh parabot + + Tambah kartu kiridit + Tambah mesin pamaluruh diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index c14538eaa..ac20575f7 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -20,10 +20,6 @@ Dina privata flikar kommer att visas här. - - Baidu - - JD 1 öppen flik. Tryck för att växla mellan flikar. @@ -187,6 +183,11 @@ Anpassa läsvyn + + Lägg till + + Redigera + Kan inte ansluta. Oigenkännligt URL-schema. @@ -985,6 +986,10 @@ Alla åtgärder Nyligen använd + + Inloggad som %1$s + + Logga in för att synkronisera Logga in till Sync @@ -1183,9 +1188,6 @@ Välkommen till %s! Har du redan ett konto? - - Lär känna %s Se vad som är nytt Få svar här - - Börja synkronisera bokmärken, lösenord och mer med ditt Firefox-konto. + + Synkronisera Firefox mellan enheter - Läs mer + Ta med bokmärken, historik och lösenord till Firefox på den här enheten. @@ -1205,9 +1207,9 @@ Ja, logga in mig Loggar in… - - Logga in till Firefox + + Registrera dig Håll mig utloggad @@ -1215,26 +1217,23 @@ Det gick inte att logga in - Automatisk integritet - - Sekretess- och säkerhetsinställningar blockerar spårare, skadlig programvara och företag som följer dig. + Alltid med integritet + + Firefox hindrar automatiskt företag från att i hemlighet följa dig på nätet. Standard - Blockerar färre spårare. Sidor laddas normalt. + Balanserad för integritet och prestanda. Sidor laddas normalt. Strikt (rekommenderas) Strikt - Blockerar fler spårare, annonser och popup-fönster. Sidor laddas snabbare, men vissa funktioner fungerar kanske inte. - - Välj en sida + Blockerar fler spårare så att sidor laddas snabbare, men vissa sidor kanske inte fungerar ordentligt. + + Välj plats för verktygsfältet - Försök att surfa med en hand med det nedre verktygsfältet eller flytta det till toppen. + Placera verktygsfältet inom räckhåll. Ha den på botten eller flytta den till toppen. Surfa privat @@ -1248,7 +1247,7 @@ Din integritet + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Vi har utformat %s för att ge dig kontroll över vad du delar online och vad du delar med oss. Läs vår sekretesspolicy @@ -1263,7 +1262,7 @@ Välj ditt tema - Spara lite batteri och syn genom att aktivera mörkt läge. + Spara lite batteri och syn med mörkt läge. Automatisk @@ -1319,13 +1318,13 @@ Standard - Blockerar färre spårare. Sidor laddas normalt. + Balanserad för integritet och prestanda. Sidor laddas normalt. Vad blockeras av spårningsskydd standard Strikt - Blockerar fler spårare, annonser och popup-fönster. Sidor laddas snabbare, men vissa funktioner fungerar kanske inte. + Blockerar fler spårare så att sidor laddas snabbare, men vissa sidor kanske inte fungerar ordentligt. Vad blockeras av spårningsskydd strikt @@ -1560,6 +1559,37 @@ Sortera inloggningsmenyn + + + Kreditkort + + Spara och fyll i kreditkort automatiskt + + Data är krypterad + + Synkronisera kort mellan enheter + + Lägg till kreditkort + + + Lägg till kreditkort + + Kortnummer + + Utgångsdatum + + Namn på kort + + Smeknamn för kort + + Ta bort kort + + Spara + + Spara + + Avbryt + Lägg till sökmotor diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml index af1b29dbe..7b9274538 100644 --- a/app/src/main/res/values-tg/strings.xml +++ b/app/src/main/res/values-tg/strings.xml @@ -18,10 +18,6 @@ Варақаҳои махфии шумо дар ин ҷо нишон дода мешаванд. - - Baidu - - JD 1 варақаи кушодашуда. Барои гузариш байни варақаҳо зарба занед. @@ -183,6 +179,11 @@ Фармоишдиҳии намоиши хониш + + Илова кардан + + Таҳрир кардан + Пайваст нашуд. Нақшаи URL шинохтанашаванда аст. @@ -416,9 +417,9 @@ Огоҳиномаҳо дар бораи варақаҳое, ки аз дигар дастгоҳҳои Firefox гирифта шудаанд. - Рарақаи қабулшуда + Варақаи қабулшуда - Рарақаҳои қабулшуда + Варақаҳои қабулшуда Варақа аз %s @@ -973,6 +974,10 @@ Ҳамаи амалҳо Истифодашудаи охирин + + Ҳамчун %1$s ворид шуд + + Барои ҳамоҳангсозӣ ворид шавед Барои ҳамоҳангсозӣ ворид шавед @@ -1138,32 +1143,32 @@ - Нашри Firefox-и «Пешнамоиш» акнун Firefox-и «Ҳаршабона» шуд + Нашри Firefox-и «Пешнамоиш» акнун Firefox-и «Ҳаршабонарӯзӣ» шуд - Firefox-и «Ҳаршабона» ҳар шаб навсозӣ мешавад ва хусусиятҳои нави таҷрибавиро дар бар мегирад. + Firefox-и «Ҳаршабонарӯзӣ» ҳар шаб навсозӣ мешавад ва хусусиятҳои нави таҷрибавиро дар бар мегирад. Аммо, он метавонад ноустувор бошад. Барои ба даст овардани таҷрибаи устувор, браузери «бета»-ро боргирӣ намоед. «Firefox»-ро барои «Android Beta» ба даст оред - Нашри Firefox-и «Ҳаршабона» интиқол дода шуд + Нашри Firefox-и «Ҳаршабонарӯзӣ» интиқол дода шуд - Ин барнома дигар навсозиҳои амниятиро қабул намекунад. Истифодаи ин барномаро қатъ кунед ва ба нашри нави «Ҳаршабона» гузаред. + Ин барнома дигар навсозиҳои амниятиро қабул намекунад. Истифодаи ин барномаро қатъ кунед ва ба нашри нави «Ҳаршабонарӯзӣ» гузаред. \n\nБарои интиқол додани хатбаракҳо, воридшавиҳо ва таърихи худ ба барномаи дигар, ҳисоби Firefox-ро эҷод намоед. - Ба нашри нави «Ҳаршабона» гузаред + Ба нашри нави «Ҳаршабонарӯзӣ» гузаред - Нашри Firefox-и «Ҳаршабона» интиқол дода шуд + Нашри Firefox-и «Ҳаршабонарӯзӣ» интиқол дода шуд - Ин барнома дигар навсозиҳои амниятиро қабул намекунад. Нашри нави «Ҳаршабона»-ро ба даст оред ва истифодаи ин барномаро қатъ кунед. + Ин барнома дигар навсозиҳои амниятиро қабул намекунад. Нашри нави «Ҳаршабонарӯзӣ»-ро ба даст оред ва истифодаи ин барномаро қатъ кунед. \n\nБарои интиқол додани хатбаракҳо, воридшавиҳо ва таърихи худ ба барномаи дигар, ҳисоби Firefox-ро эҷод намоед. - Нашри «Ҳаршабона»-и навро ба даст оред + Нашри «Ҳаршабонарӯзӣ»-и навро ба даст оред Аллакай ҳисобе доред? - - Бо %s шинос шавед Бинед, ки чӣ нав аст Ҷавобҳоро дар ин ҷо гиред - - Ба воситаи ҳисоби Firefox-и худ ҳамоҳангсозии хатбаракҳо, ниҳонвожаҳо ва чизҳои дигарро оғоз кунед. + + Firefox-ро байни дастгоҳҳо ҳамоҳанг кунед - Маълумоти бештар + Хатбаракҳо, таърих ва ниҳонвожаҳоро ба Firefox дар ин дастгоҳ интиқол диҳед. @@ -1193,8 +1195,8 @@ Ҳа, маро ворид кунед Ворид шуда истодааст… - - Ба Firefox ворид шавед + + Бақайдгирӣ Вориднашуда истад @@ -1202,26 +1204,23 @@ Воридшавӣ иҷро нашуд - Махфияти худкор - - Танзимоти махфият ва амният васоити пайгирӣ, барномаҳои зараровар ва ширкатҳоеро, ки шуморо пайгирӣ мекунанд, маҳдуд мекунад. + Махфияти доимӣ + + Firefox маъракаҳоеро ба таври худкор қатъ мекунад, ки шуморо дар атрофи веб пинҳонӣ пайгирӣ мекунанд. Стандартӣ (пешфарз) - Баъзеи васоити пайгириро маҳдуд мекунад. Саҳифаҳо ба таври муқаррар бор карда мешаванд. + Мутаносиб барои махфият ва самаранокӣ. Саҳифаҳо ба таври муқаррар бор карда мешаванд. Ҷиддӣ (тавсия дода мешавад) Ҷиддӣ - Васоити пайгирӣ, реклама ва равзанаҳои зоҳиршавандаи бештарро маҳдуд мекунад. Саҳифаҳо зудтар бор мешаванд, аммо баъзеи функсияҳо метавонанд кор накунанд. - - Интихоб кунед + Васоити пайгирии бештарро қатъ мекунад, то ки саҳифаҳо тезтар кушода шаванд, аммо баъзеи функсияҳои саҳифа метавонанд вайрон шаванд. + + Ҷойгиркунии навори абзорҳои худро интихоб кунед - Тамошокуниро бо як даст тавассути навори абзорҳои поён кӯшиш кунед ё ин ки наворро ба боло гузоред. + Навори абзорҳоро барои дастрасии осон дар наздикӣ ҷойгир намоед. Онро дар поён нигоҳ доред ё ба боло гузоред. Реҷаи тамошокунии махфӣ Махфияти шумо + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Мо %s-ро ҳамин тавр тарҳрезӣ кардаем, ки шумо тавонед он чизҳоеро, ки дар онлайн ва бо мо мубодила мекунед, идора намоед. Огоҳиномаи махфияти моро хонед @@ -1248,7 +1247,7 @@ Мавзӯи худро интихоб кунед - Бо фаъол кардани реҷаи торик барқи батареяро сарфа кунед ва биноии худро ҳифз намоед. + Ба воситаи реҷаи торик барқи батареяро сарфа кунед ва биноии худро ҳифз намоед. Худкор @@ -1303,13 +1302,13 @@ Стандартӣ (пешфарз) - Баъзеи васоити пайгириро маҳдуд мекунад. Саҳифаҳо ба таври муқаррар бор карда мешаванд. + Мутаносиб барои махфият ва самаранокӣ. Саҳифаҳо ба таври муқаррар бор карда мешаванд. Ба воситаи муҳофизати стандартӣ аз пайгирӣ чӣ баста шудааст Ҷиддӣ - Васоити пайгирӣ, реклама ва равзанаҳои зоҳиршавандаи бештарро маҳдуд мекунад. Саҳифаҳо зудтар бор мешаванд, аммо баъзеи функсияҳо метавонанд кор накунанд. + Васоити пайгирии бештарро қатъ мекунад, то ки саҳифаҳо тезтар кушода шаванд, аммо баъзеи функсияҳои саҳифа метавонанд вайрон шаванд. Ба воситаи муҳофизати ҷиддӣ аз пайгирӣ чӣ баста шудааст @@ -1545,6 +1544,38 @@ Мураттаб кардани менюи воридшавиҳо + + + Кортҳои насия + + Нигоҳ доштан ва ба таври худкор пур кардани кортҳо + + Маълумот рамзгузорӣ карда шуд + + Ҳамоҳанг кардани кортҳо байни дастгоҳҳо + + Илова кардани корти насия + + + Илова кардани корт + + Рақами корт + + Санаи анҷоми муҳлат + + Ном дар корт + + Номи корбари корт + + + Нест кардани корт + + Нигоҳ доштан + + Нигоҳ доштан + + Бекор кардан + Илова кардани низоми ҷустуҷӯӣ diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 5c32b1cb6..4d8b6883e 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -19,10 +19,6 @@ แท็บส่วนตัวของคุณจะถูกแสดงที่นี่ - - Baidu - - JD 1 แท็บที่เปิด แตะเพื่อสลับไปยังแท็บ @@ -181,6 +177,11 @@ ปรับแต่งมุมมองผู้อ่าน + + เพิ่ม + + แก้ไข + ไม่สามารถเชื่อมต่อได้เนื่องจากเป็นรูปแบบ URL ที่ไม่รู้จัก @@ -1163,9 +1164,6 @@ ยินดีต้อนรับสู่ %s! มีบัญชีอยู่แล้ว? - - ทำความรู้จัก %s ดูว่ามีอะไรใหม่ พบคำตอบได้ที่นี่ - - เริ่มซิงค์ที่คั่นหน้า รหัสผ่าน และอื่น ๆ ด้วยบัญชี Firefox ของคุณ + + ซิงค์ Firefox ระหว่างอุปกรณ์ - เรียนรู้เพิ่มเติม + นำที่คั่นหน้า ประวัติ และรหัสผ่านไปยัง Firefox บนอุปกรณ์นี้ @@ -1185,8 +1183,8 @@ ใช่ ให้ฉันลงชื่อเข้า กำลังลงชื่อเข้า… - - ลงชื่อเข้าไปยัง Firefox + + ลงทะเบียน ลงชื่อออกต่อไป @@ -1194,26 +1192,13 @@ ไม่สามารถเข้าสู่ระบบ - ความเป็นส่วนตัวอัตโนมัติ - - ตั้งค่าความเป็นส่วนตัวและความปลอดภัยป้องกันตัวติดตาม มัลแวร์ และบริษัทที่ตามคุณ + ความเป็นส่วนตัวตลอดเวลา มาตรฐาน (ค่าเริ่มต้น) - - ปิดกั้นตัวติดตามน้อยลง หน้าเว็บจะโหลดตามปกติ เข้มงวด (แนะนำ) เข้มงวด - - ปิดกั้นตัวติดตาม โฆษณา และป๊อปอัปมากขึ้น เว็บโหลดเร็วขึ้น แต่ฟังก์ชั่นบางอย่างอาจไม่ทำงาน - - เลือกตำแหน่ง - - ลองใช้การเรียกดูด้วยมือเดียวด้วยแถบเครื่องมือด้านล่างหรือย้ายไปด้านบน เรียกดูอย่างเป็นส่วนตัว ความเป็นส่วนตัวของคุณ + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> เราได้ออกแบบ %s เพื่อให้คุณสามารถควบคุมสิ่งที่คุณต้องการแบ่งปันออนไลน์และสิ่งที่คุณต้องการแบ่งปันกับเราได้ อ่านประกาศความเป็นส่วนตัวของเรา @@ -1240,8 +1225,6 @@ เลือกชุดตกแต่งของคุณ - - ประหยัดแบตเตอรี่และถนอมสายตาของคุณโดยเปิดใช้งานโหมดมืด อัตโนมัติ @@ -1296,14 +1279,10 @@ เรียนรู้เพิ่มเติม มาตรฐาน (ค่าเริ่มต้น) - - ปิดกั้นตัวติดตามน้อยลง หน้าเว็บจะโหลดตามปกติ สิ่งที่ถูกปิดกั้นโดยการป้องกันการติดตามแบบมาตรฐาน เข้มงวด - - ปิดกั้นตัวติดตาม โฆษณา และป๊อปอัปมากขึ้น เว็บโหลดเร็วขึ้น แต่ฟังก์ชั่นบางอย่างอาจไม่ทำงาน สิ่งที่ถูกปิดกั้นโดยการป้องกันการติดตามแบบเข้มงวด @@ -1540,6 +1519,37 @@ เรียงเมนูเข้าสู่ระบบ + + + บัตรเครดิต + + บันทึกและเติมข้อมูลบัตรอัตโนมัติ + + ข้อมูลถูกเข้ารหัส + + ซิงค์บัตรระหว่างอุปกรณ์ + + เพิ่มบัตรเครดิต + + + เพิ่มบัตร + + หมายเลขบัตร + + วันหมดอายุ + + ชื่อบนบัตร + + ชื่อย่อบัตร + + ลบบัตร + + บันทึก + + บันทึก + + ยกเลิก + เพิ่มเครื่องมือค้นหา diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 9f7f5c592..b49cf708f 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -20,10 +20,6 @@ Gizli sekmeleriniz burada gösterilecek. - - Baidu - - JD 1 açık sekme. Sekme değiştirmek için dokunun. @@ -183,6 +179,11 @@ Okuyucu görünümünü özelleştir + + Ekle + + Düzenle + Bağlanılamıyor. Tanınmayan URL şeması. @@ -975,6 +976,8 @@ Tüm eylemler Son kullanılanlar + + Eşitlemek için giriş yap Sync’e giriş yap @@ -1167,9 +1170,6 @@ %s’a hoş geldiniz! Zaten hesabınız var mı? - - %s ile tanışın Yenilikleri görün Yanıtlar burada - - Firefox hesabınızla yer imlerinizi, parolalarınızı ve daha fazlasını eşitlemeye başlayın. + + Firefox’u cihazlar arasında eşitleyin - Daha fazla bilgi al + Yer imlerinizi, geçmişinizi ve parolalarınızı bu cihazdaki Firefox’a taşıyın. @@ -1189,8 +1189,8 @@ Evet, giriş yap Giriş yapılıyor… - - Firefox’a giriş yap + + Kaydol Giriş yapma @@ -1198,26 +1198,21 @@ Giriş başarısız - Otomatik gizlilik - - Gizlilik ve güvenlik ayarları; takipçileri, kötü amaçlı yazılımları ve sizi takip eden şirketleri engeller. + Sürekli gizlilik + + Firefox, şirketlerin sizi web’de gizlice takip etmesini otomatik olarak engeller. Standart (varsayılan) - Daha az takipçiyi engeller. Sayfalar normal şekilde yüklenir. + Dengeli gizlilik ve performans. Sayfalar normal şekilde yüklenir. Sıkı (önerilen) Sıkı - - Daha fazla takipçiyi, reklamı ve açılır pencereyi engeller. Sayfalar daha hızlı yüklenir ama bazı işlevler çalışmayabilir. - - Tarafınızı seçin + + Araç çubuğu konumunu seçin - Araç çubuğunun altta olması tek elle gezinmeyi kolaylaştırır ama çubuğu üste de taşıyabilirsiniz. + Araç çubuğunu kolayca erişilebileceğiniz bir yere koyun. Altta tutabilir veya en üste taşıyabilirsiniz. Daha gizli gezinin Gizliliğiniz + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s, internette başkalarıyla ve bizimle neleri paylaşacağınızın kontrolünü size verir. Gizlilik bildirimimizi okuyun @@ -1245,7 +1240,7 @@ Temanızı seçin - Koyu modu etkinleştirerek pilden tasarruf ederken gözlerinizi rahatlatabilirsiniz. + Koyu mod sayesinde pilden tasarruf ederken gözlerinizi rahatlatabilirsiniz. Otomatik @@ -1301,13 +1296,11 @@ Standart (varsayılan) - Daha az takipçiyi engeller. Sayfalar normal şekilde yüklenir. + Dengeli gizlilik ve performans. Sayfalar normal şekilde yüklenir. Standart izlenme korumasında neler engellenir? Sıkı - - Daha fazla takipçiyi, reklamı ve açılır pencereyi engeller. Sayfalar daha hızlı yüklenir ama bazı işlevler çalışmayabilir. Sıkı izlenme korumasında neler engellenir? @@ -1543,6 +1536,37 @@ Hesapları sırala menüsü + + + Kredi kartları + + Kartları kaydedip otomatik doldur + + Veriler şifrelenir + + Kartları cihazlar arasında eşitle + + Kredi kartı ekle + + + Kart ekle + + Kart numarası + + Son kullanma tarihi + + Kart üzerindeki ad + + Kart adı + + Kartı sil + + Kaydet + + Kaydet + + İptal + Arama motoru ekle diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 6f0b58984..8116e523f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -19,10 +19,6 @@ Тут зʼявлятимуться ваші приватні вкладки. - - Baidu - - JD 1 відкрита вкладка. Торкніться, щоб перемкнути вкладки. @@ -184,6 +180,12 @@ Налаштувати режим читача + + + Додати + + Редагувати + Неможливо з’єднатися. Невідома схема URL-адреси. @@ -983,6 +985,10 @@ Недавно використані + + Ви увійшли як %1$s + + Увійти до синхронізації Увійти до Синхронізації @@ -1175,9 +1181,6 @@ Вітаємо в %s! Вже маєте обліковий запис? - - Познайомтеся з %s Погляньте, що нового Отримайте відповіді тут - - Почніть синхронізувати закладки, паролі та інші дані з обліковим записом Firefox. + + Синхронізуйте Firefox між пристроями - Докладніше + Перенесіть свої закладки, історію та паролі у Firefox на цей пристрій. @@ -1198,8 +1201,8 @@ Так, увійти Вхід… - - Увійти в Firefox + + Зареєструватись Не входити @@ -1208,26 +1211,23 @@ Не вдалося увійти - Автоматичний захист приватності - - Налаштування приватності та безпеки блокують елементи стеження, зловмисне програмне забезпечення та стеження компаній за вами. + Постійна приватність + + Firefox автоматично блокує таємне стеження компаній за вами в Інтернеті. Стандартний (типово) - Блокує менше елементів стеження. Сторінки завантажуватимуться нормально. + Баланс приватності та швидкодії. Сторінки завантажуються нормально. Надійний (рекомендовано) Надійний - Блокує більше елементів стеження, реклами та виринаючих вікон. Сторінки завантажуються швидше, але деякі функції можуть не працювати. - - Зробіть вибір + Блокує більше стеження, тому сторінки завантажуються швидше, однак можливі порушення їх роботи. + + Оберіть розташування панелі інструментів - Спробуйте керування однією рукою завдяки нижньому розташуванню панелі, або перемістіть її вгору. + Розташуйте панель для легкого доступу. Тримайте її внизу, або перемістіть вгору. Переглядайте приватно @@ -1242,7 +1242,7 @@ Ваша приватність + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> Ми створили %s, щоб надати вам контроль над тим, чим ви ділитесь в Інтернеті та з нами. Повідомлення про приватність @@ -1257,7 +1257,7 @@ Оберіть тему - Заощадьте заряд акумулятора і збережіть свої очі, увімкнувши темний режим. + Заощадьте заряд акумулятора і збережіть свої очі з темним режимом. Автоматично @@ -1313,13 +1313,13 @@ Стандартний (типово) - Блокує менше елементів стеження. Сторінки завантажуються нормально. + Баланс приватності та швидкодії. Сторінки завантажуються нормально. Що блокується стандартним рівнем захисту від стеження Надійний - Блокує більше елементів стеження, реклами та виринаючих вікон. Сторінки завантажуються швидше, але деякі функції можуть не працювати. + Блокує більше стеження, тому сторінки завантажуються швидше, однак можливі порушення їх роботи. Що блокується надійним рівнем захисту від стеження @@ -1557,6 +1557,37 @@ Меню впорядкування паролів + + + Кредитні картки + + Зберігати та автоматично заповнювати картки + + Дані зашифровано + + Синхронізувати картки між пристроями + + Додати кредитну картку + + + Додати картку + + Номер картки + + Термін дії + + Ім’я на картці + + Псевдонім картки + + Видалити картку + + Зберегти + + Зберегти + + Скасувати + Додати засіб пошуку diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index be218f2f4..2764984d7 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -20,10 +20,6 @@ Các thẻ riêng tư của bạn sẽ được hiển thị ở đây. - - Baidu - - JD 1 thẻ đang mở. Chạm để chuyển thẻ. @@ -183,6 +179,11 @@ Tùy chỉnh chế độ đọc + + Thêm + + Chỉnh sửa + Không thể kết nối. Không thể nhận dạng URL. @@ -1160,9 +1161,6 @@ Chào mừng đến với %s! Đã có một tài khoản? - - Tìm hiểu qua %s Xem có gì mới Nhận câu trả lời tại đây - - Bắt đầu đồng bộ hóa dấu trang, mật khẩu và nhiều hơn nữa với tài khoản Firefox của bạn. + + Đồng bộ hóa Firefox giữa các thiết bị - Tìm hiểu thêm + Mang dấu trang, lịch sử và mật khẩu vào Firefox trên thiết bị này. @@ -1182,8 +1180,8 @@ Có, đăng nhập cho tôi Đang đăng nhập… - - Đăng nhập vào Firefox + + Đăng ký Vẫn đăng xuất @@ -1191,26 +1189,23 @@ Không thể đăng nhập - Bảo mật tự động - - Cài đặt riêng tư và bảo mật chặn trình theo dõi, phần mềm độc hại và các công ty theo dõi bạn. + Luôn bảo vệ quyền riêng tư + + Firefox tự động ngăn các công ty bí mật theo dõi bạn trên web. Tiêu chuẩn (mặc định) - Chặn trình theo dõi ít hơn. Các trang sẽ tải bình thường. + Cân bằng cho sự riêng tư và hiệu suất. Các trang tải bình thường. Nghiêm ngặt (được khuyến nghị) Nghiêm ngặt - Chặn nhiều trình theo dõi, quảng cáo và cửa sổ bật lên. Các trang tải nhanh hơn, nhưng một số chức năng có thể không hoạt động. - - Thể hiện vị trí của bạn + 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 - Hãy thử duyệt bằng một tay với thanh công cụ dưới cùng hoặc di chuyển nó lên trên cùng. + Đặ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. Duyệt web riêng tư hơn Quyền riêng tư của bạn + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> 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. Đọc thông báo bảo mật của chúng tôi @@ -1238,7 +1233,7 @@ Chọn chủ đề của bạn - Tiết kiệm pin và bảo vệ thị lực của bạn bằng cách bật chế độ tối. + Tiết kiệm pin và thị lực của bạn với chế độ tối. Tự động @@ -1294,13 +1289,13 @@ Tiêu chuẩn (mặc định) - Chặn trình theo dõi ít hơn. Các trang sẽ tải bình thường. + Cân bằng cho sự riêng tư và hiệu suất. Các trang tải bình thường. Những gì bị chặn bởi trình chống theo dõi tiêu chuẩn Nghiêm ngặt - Chặn nhiều trình theo dõi, quảng cáo và cửa sổ bật lên. Các trang tải nhanh hơn, nhưng một số chức năng có thể không hoạt động. + Chặn nhiều trình theo dõi hơn để các trang tải nhanh hơn, nhưng một số chức năng trên trang có thể bị hỏng. Những gì bị chặn bởi trình chống theo dõi nghiêm ngặt @@ -1534,6 +1529,37 @@ Sắp xếp menu đăng nhập + + + Thẻ tín dụng + + Lưu và tự động điền thẻ tín dụng + + Dữ liệu được mã hóa + + Đồng bộ thông tin thẻ tín dụng trên các thiết bị + + Thêm thẻ tín dụng + + + Thêm thẻ + + Số thẻ + + Ngày hết hạn + + Tên trên thẻ + + Biệt danh thẻ + + Xóa thẻ + + Lưu + + Lưu + + Hủy bỏ + Thêm công cụ tìm kiếm diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index fe6bc4d34..88e014345 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -23,10 +23,6 @@ 您的隐私标签页将显示于此。 - - 百度 - - 京东 打开了 1 个标签页,点击即可切换。 @@ -190,6 +186,11 @@ 定制阅读器视图 + + 添加 + + 编辑 + 未知的 URL 规范,无法连接。 @@ -1009,6 +1010,10 @@ 所有动作 最近使用 + + 已登录为 %1$s + + 登录同步服务 登录同步服务 @@ -1209,9 +1214,6 @@ 欢迎使用 %s! 已有账户? - - 认识 %s 了解新动向 在此寻找答案 - - 使用您的 Firefox 账户开始同步书签、历史记录等数据。 + + 在设备之间同步 Firefox - 详细了解 + 将书签、历史记录和密码同步到此设备。 @@ -1231,8 +1233,8 @@ 是的,我要登录 正在登录… - - 登录 Firefox + + 注册 不要登录 @@ -1240,26 +1242,23 @@ 登录失败 - 全自动的隐私保护 - - 可通过隐私与安全设置,拦截跟踪器、恶意软件和企业在网上对您的跟踪。 + 隐私与您同行 + + Firefox 会自动阻止大公司在网上偷偷跟踪您。 标准(默认) - 少拦截一些跟踪器,页面将可正常加载。 + 平衡隐私和性能。页面可正常加载。 严格(推荐) 严格 - 拦截更多跟踪器和弹窗。页面加载速度更快,但是某些功能可能无法正常工作。 - - 选择工具栏位置 + 拦截更多跟踪器,页面加载更快,但可能导致页面上某些功能异常。 + + 选择您的工具栏位置 - 试试用底部工具栏单手上网,也可以将其移至顶部。 + 将工具栏放在顺手的位置。可以留在底部,或移到顶部。 上网冲浪也私密 您的隐私权 + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> %s 的设计旨在让您可以控制要在网上披露哪些内容,以及告诉我们哪些信息。 阅读我们的隐私声明 @@ -1287,7 +1286,7 @@ 选择您的主题 - 启用深色模式,既省电又护眼。 + 启用深色模式,既省电又护眼。 自动 @@ -1343,13 +1342,13 @@ 标准(默认) - 少拦截一些跟踪器,页面将可正常加载。 + 平衡隐私和性能。页面可正常加载。 标准跟踪保护会拦截的内容 严格 - 拦截更多跟踪器和弹窗。页面加载速度更快,但是某些功能可能无法正常工作。 + 拦截更多跟踪器,页面加载更快,但可能导致页面上某些功能异常。 严格跟踪保护会拦截的内容 @@ -1584,6 +1583,37 @@ 排序登录信息菜单 + + + 信用卡 + + 保存并自动填充信用卡信息 + + 数据已加密 + + 跨设备同步信用卡信息 + + 添加信用卡 + + + 添加信用卡 + + 卡号 + + 失效日期 + + 卡上姓名 + + 卡的昵称 + + 删除此卡 + + 保存 + + 保存 + + 取消 + 添加搜索引擎 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a61628838..b0c8f10a0 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -23,10 +23,6 @@ 您開啟的隱私瀏覽分頁將顯示於此處。 - - 百度 - - 京東 開啟了 1 個分頁,點擊即可切換分頁。 @@ -186,6 +182,11 @@ 自訂閱讀模式 + + 新增 + + 編輯 + 不認識的通訊協定,無法連線。 @@ -998,6 +999,10 @@ 所有動作 最近使用 + + 已登入為 %1$s + + 登入進行同步 登入 Sync @@ -1196,9 +1201,6 @@ 歡迎使用 %s! 已經有帳號了嗎? - - 了解 %s 看看有什麼新鮮事 在此尋找答案 - - 使用您的 Firefox 帳號同步書籤、密碼等資料。 + + 在不同裝置間同步 Firefox - 了解更多 + 將 Firefox 上的書籤、瀏覽紀錄、網站密碼帶到此裝置。 @@ -1218,9 +1220,9 @@ 好,請幫我登入 登入中… - - 登入 Firefox + + 註冊 不要登入 @@ -1228,26 +1230,23 @@ 登入失敗 - 自動保護隱私 - - 可透過隱私與安全性設定,封鎖追蹤器、惡意軟體與企業在網路上追蹤您的行為。 + 隨時都有隱私保護 + + Firefox 會自動封鎖讓大企業在網路上偷偷跟蹤您的程式。 標準(預設) - 封鎖少一點追蹤器,網頁可正常運作。 + 隱私權保護與效能兼顧。網站可正常運作。 嚴格(建議) 嚴格 - 封鎖更多追蹤器、廣告與彈出視窗。可更快載入網頁,但頁面中的部分功能可能會不正常。 - - 表示你的立場 + 封鎖更多追蹤器,讓網頁可以更快載入,但頁面上的某些功能可能會故障。 + + 挑選工具列要放置的位置 - 用畫面底部的工具列試試看單手上網,也可以移到畫面頂端。 + 可以將工具列放在畫面底端或頂端,容易操作的地方。 上網變得私密 您的隱私權 + The first parameter is the name of the app (e.g. Firefox Preview) Substitute %s for long browser name. --> 我們將 %s 設計成讓您可以完整控制要在網路上分享哪些東西、以及與我們分享哪些東西。 閱讀我們的隱私權公告 @@ -1275,7 +1274,7 @@ 選擇佈景主題 - 開啟暗色模式,更省電又保護視力。 + 使用暗色模式,更省電又保護視力。 自動 @@ -1330,13 +1329,13 @@ 標準(預設) - 封鎖少一點追蹤器,網頁可正常運作。 + 隱私權保護與效能兼顧。網站可正常運作。 標準追蹤保護會封鎖哪些內容 嚴格 - 封鎖更多追蹤器、廣告與彈出視窗。可更快載入網頁,但頁面中的部分功能可能會不正常。 + 封鎖更多追蹤器,讓網頁可以更快載入,但頁面上的某些功能可能會故障。 嚴格追蹤保護會封鎖哪些內容 @@ -1571,6 +1570,38 @@ 排序登入資訊選單 + + + 信用卡 + + + 儲存並自動填寫卡片 + + 資料有加密 + + 在不同裝置間同步卡片資料 + + 新增信用卡 + + + 新增付款卡片 + + 卡號 + + 到期日 + + 持卡人姓名 + + 卡片暱稱 + + 刪除卡片 + + 儲存 + + 儲存 + + 取消 + 新增搜尋引擎 diff --git a/l10n.toml b/l10n.toml index e74207276..0d917573b 100644 --- a/l10n.toml +++ b/l10n.toml @@ -93,6 +93,7 @@ locales = [ "tl", "tr", "trs", + "tt", "uk", "ur", "uz", From b424eb7dbbca3e7acdb00168662bf115892f8751 Mon Sep 17 00:00:00 2001 From: Mozilla Releng Treescript Date: Wed, 7 Apr 2021 23:24:29 +0000 Subject: [PATCH 147/149] Automatic version bump CLOSED TREE NO BUG a=release --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index dfe299d1d..79e076c02 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -88.0.0-beta.5 +88.0.0-beta.6 From eddb135d359716d4704ded74154a24ff55f9fb91 Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Thu, 8 Apr 2021 22:57:59 +0000 Subject: [PATCH 148/149] Update to Android-Components 74.0.8. --- 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 9b4111dfc..bbe2b44b5 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 = "74.0.7" + const val VERSION = "74.0.8" } From a439894ab19e6f505f8e71e48ad6d097f3c4e84b Mon Sep 17 00:00:00 2001 From: MickeyMoz Date: Sat, 10 Apr 2021 22:51:37 +0000 Subject: [PATCH 149/149] Update to Android-Components 74.0.9. --- 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 bbe2b44b5..e4d4022f8 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 = "74.0.8" + const val VERSION = "74.0.9" }