diff --git a/app/metrics.yaml b/app/metrics.yaml index 952ab58c3..8f7e414e7 100644 --- a/app/metrics.yaml +++ b/app/metrics.yaml @@ -8,6 +8,32 @@ no_lint: - CATEGORY_GENERIC events: + app_received_intent: + type: event + description: | + 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. + extra_keys: + source: + description: | + The method used to open Fenix. Possible values are `app_icon`, + `custom_tab`, `link` or `unknown` + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11830 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/11940/ + notification_emails: + - esmyth@mozilla.com + - perf-android-fe@mozilla.com + expires: "2020-12-01" app_opened: type: event description: | @@ -25,7 +51,7 @@ events: notification_emails: - telemetry-client-dev@mozilla.com - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_bar_tapped: type: event description: | @@ -41,7 +67,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" entered_url: type: event description: | @@ -57,7 +83,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" performed_search: type: event description: | @@ -79,7 +105,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/1677 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" browser_menu_action: type: event description: | @@ -102,7 +128,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/6310 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" total_uri_count: type: counter description: | @@ -121,7 +147,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/8314 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" preference_toggled: type: event description: | @@ -159,7 +185,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/6746 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" whats_new_tapped: type: event description: | @@ -170,7 +196,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/5090 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" opened_link: type: event description: | @@ -185,7 +211,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/5975 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tab_counter_menu_action: type: event description: @@ -203,7 +229,7 @@ events: - https://github.com/mozilla-mobile/fenix/pull/11533 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" onboarding: fxa_auto_signin: @@ -217,7 +243,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" fxa_manual_signin: type: event description: @@ -229,7 +255,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" privacy_notice: type: event description: @@ -241,7 +267,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pref_toggled_private_browsing: type: event description: @@ -253,7 +279,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pref_toggled_toolbar_position: type: event description: @@ -270,7 +296,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pref_toggled_tracking_prot: type: event description: @@ -287,7 +313,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" whats_new: type: event description: @@ -299,7 +325,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pref_toggled_theme_picker: type: event description: @@ -316,7 +342,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" finish: type: event description: @@ -328,7 +354,7 @@ onboarding: notification_emails: - fenix-core@mozilla.com - erichards@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_shortcuts: selected: @@ -345,7 +371,7 @@ search_shortcuts: - https://github.com/mozilla-mobile/fenix/pull/1202#issuecomment-476870449 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" toolbar_settings: changed_position: @@ -362,7 +388,7 @@ toolbar_settings: - https://github.com/mozilla-mobile/fenix/pull/6608 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" crash_reporter: opened: @@ -375,7 +401,7 @@ crash_reporter: - https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" closed: type: event description: | @@ -391,7 +417,7 @@ crash_reporter: - https://github.com/mozilla-mobile/fenix/pull/1214#issue-264756708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" context_menu: item_tapped: @@ -413,7 +439,7 @@ context_menu: - https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" find_in_page: opened: @@ -426,7 +452,7 @@ find_in_page: - https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" closed: type: event description: | @@ -437,7 +463,7 @@ find_in_page: - https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" searched_page: type: event description: | @@ -448,7 +474,7 @@ find_in_page: - https://github.com/mozilla-mobile/fenix/pull/1344#issuecomment-479285010 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" metrics: default_browser: @@ -464,7 +490,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/1067#issuecomment-474598673 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" top_sites_count: type: counter lifetime: application @@ -482,7 +508,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/9556 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" has_top_sites: type: boolean lifetime: application @@ -496,7 +522,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/9556 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" recently_used_pwa_count: type: counter lifetime: application @@ -558,7 +584,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/7310 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" mozilla_products: type: string_list lifetime: application @@ -576,7 +602,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/5216 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" default_moz_browser: type: string lifetime: application @@ -592,7 +618,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/5216 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" adjust_campaign: type: string lifetime: application @@ -609,7 +635,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/5579 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" adjust_ad_group: type: string lifetime: application @@ -626,7 +652,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/9253 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" adjust_creative: type: string lifetime: application @@ -643,7 +669,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/9253 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" adjust_network: type: string lifetime: application @@ -660,7 +686,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/9253 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" toolbar_position: type: string lifetime: application @@ -674,7 +700,7 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/6608 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_widget_installed: type: boolean lifetime: application @@ -688,7 +714,39 @@ metrics: - https://github.com/mozilla-mobile/fenix/pull/10958 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" + tabs_open_count: + type: counter + lifetime: application + description: | + 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`. + send_in_pings: + - metrics + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11479 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12024 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + has_open_tabs: + type: boolean + lifetime: application + description: | + A boolean that indicates if the user has any open NORMAL tabs. + send_in_pings: + - metrics + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11479 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12024 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" preferences: show_search_suggestions: @@ -704,7 +762,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" remote_debugging: type: string_list description: > @@ -718,7 +776,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" telemetry: type: string_list description: > @@ -734,7 +792,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tracking_protection: type: string_list description: > @@ -749,7 +807,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_bookmarks: type: string_list description: > @@ -763,7 +821,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_browsing_history: type: string_list description: > @@ -777,7 +835,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" show_clipboard_suggestions: type: string_list description: > @@ -791,7 +849,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" show_search_shortcuts: type: string_list description: > @@ -805,7 +863,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_links_in_a_private_tab: type: string_list description: > @@ -819,7 +877,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sync: type: string_list description: > @@ -833,7 +891,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sync_items: type: string_list description: > @@ -849,7 +907,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" show_voice_search: type: string_list description: > @@ -863,7 +921,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_suggestions_private: type: string_list description: > @@ -878,7 +936,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" toolbar_position: type: string_list description: > @@ -892,7 +950,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" accessibility_services: type: string_list description: > @@ -907,7 +965,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11211 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_links_in_app: type: string_list description: > @@ -921,7 +979,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11446 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" theme: type: string_list description: > @@ -935,7 +993,7 @@ preferences: - https://github.com/mozilla-mobile/fenix/pull/11446 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search.default_engine: code: @@ -955,7 +1013,7 @@ search.default_engine: - https://github.com/mozilla-mobile/fenix/pull/5216 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" name: type: string lifetime: application @@ -973,7 +1031,7 @@ search.default_engine: - https://github.com/mozilla-mobile/fenix/pull/5216 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" submission_url: type: string lifetime: application @@ -992,7 +1050,7 @@ search.default_engine: - https://github.com/mozilla-mobile/fenix/pull/5216 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" bookmarks_management: open_in_new_tab: @@ -1005,7 +1063,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_in_new_tabs: type: event description: | @@ -1016,7 +1074,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_in_private_tab: type: event description: | @@ -1027,7 +1085,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_in_private_tabs: type: event description: | @@ -1038,7 +1096,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" edited: type: event description: | @@ -1049,7 +1107,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" moved: type: event description: | @@ -1060,7 +1118,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" removed: type: event description: | @@ -1071,7 +1129,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" multi_removed: type: event description: | @@ -1082,7 +1140,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" shared: type: event description: | @@ -1093,7 +1151,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" copied: type: event description: | @@ -1104,7 +1162,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" folder_add: type: event description: | @@ -1115,7 +1173,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/1708 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" folder_remove: type: event description: | @@ -1126,7 +1184,7 @@ bookmarks_management: - https://github.com/mozilla-mobile/fenix/pull/3724 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" custom_tab: closed: @@ -1139,7 +1197,7 @@ custom_tab: - https://github.com/mozilla-mobile/fenix/pull/1697 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" action_button: type: event description: | @@ -1150,7 +1208,7 @@ custom_tab: - https://github.com/mozilla-mobile/fenix/pull/1697 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" menu: type: event description: | @@ -1161,7 +1219,7 @@ custom_tab: - https://github.com/mozilla-mobile/fenix/pull/1697 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" activation: identifier: @@ -1179,7 +1237,7 @@ activation: - https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" activation_id: type: uuid lifetime: user @@ -1194,7 +1252,7 @@ activation: - https://github.com/mozilla-mobile/fenix/pull/1707#issuecomment-486972209 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" no_lint: - USER_LIFETIME_EXPIRATION @@ -1209,7 +1267,7 @@ qr_scanner: - https://github.com/mozilla-mobile/fenix/pull/2524#issuecomment-492739967 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" prompt_displayed: type: event description: | @@ -1221,7 +1279,7 @@ qr_scanner: - https://github.com/mozilla-mobile/fenix/pull/2524#issuecomment-492739967 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" navigation_allowed: type: event description: | @@ -1233,7 +1291,7 @@ qr_scanner: - https://github.com/mozilla-mobile/fenix/pull/2524#issuecomment-492739967 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" navigation_denied: type: event description: | @@ -1245,7 +1303,7 @@ qr_scanner: - https://github.com/mozilla-mobile/fenix/pull/2524#issuecomment-492739967 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" error_page: visited_error: @@ -1261,7 +1319,7 @@ error_page: - https://github.com/mozilla-mobile/fenix/pull/2491#issuecomment-492414486 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sync_auth: opened: @@ -1274,7 +1332,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" closed: type: event description: | @@ -1285,7 +1343,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" use_email: type: event description: | @@ -1297,7 +1355,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" use_email_problem: type: event description: | @@ -1308,7 +1366,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/9835#pullrequestreview-398641844 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sign_in: type: event description: | @@ -1320,7 +1378,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sign_out: type: event description: | @@ -1332,7 +1390,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sign_up: type: event description: | @@ -1343,7 +1401,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" paired: type: event description: | @@ -1355,7 +1413,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" auto_login: type: event description: | @@ -1367,7 +1425,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" recovered: type: event description: | @@ -1379,7 +1437,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" other_external: type: event description: | @@ -1391,7 +1449,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/4931#issuecomment-529740300 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" scan_pairing: type: event description: | @@ -1402,7 +1460,7 @@ sync_auth: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sync_account: opened: @@ -1415,7 +1473,7 @@ sync_account: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" closed: type: event description: | @@ -1426,7 +1484,7 @@ sync_account: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sync_now: type: event description: | @@ -1437,7 +1495,7 @@ sync_account: - https://github.com/mozilla-mobile/fenix/pull/2745#issuecomment-494918532 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" send_tab: type: event description: | @@ -1448,7 +1506,7 @@ sync_account: - https://github.com/mozilla-mobile/fenix/pull/5106 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" sign_in_to_send_tab: type: event description: | @@ -1459,7 +1517,7 @@ sync_account: - https://github.com/mozilla-mobile/fenix/pull/5106 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" history: opened: @@ -1472,7 +1530,7 @@ history: - https://github.com/mozilla-mobile/fenix/pull/3940 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" removed: type: event description: | @@ -1483,7 +1541,7 @@ history: - https://github.com/mozilla-mobile/fenix/pull/3940 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" removed_all: type: event description: | @@ -1494,7 +1552,7 @@ history: - https://github.com/mozilla-mobile/fenix/pull/3940 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" shared: type: event description: | @@ -1505,7 +1563,7 @@ history: - https://github.com/mozilla-mobile/fenix/pull/3940 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" opened_item: type: event description: | @@ -1516,7 +1574,7 @@ history: - https://github.com/mozilla-mobile/fenix/pull/3940 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tip: displayed: @@ -1532,7 +1590,7 @@ tip: - https://github.com/mozilla-mobile/fenix/pull/9836 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pressed: type: event description: | @@ -1546,7 +1604,7 @@ tip: - https://github.com/mozilla-mobile/fenix/pull/9836 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" closed: type: event description: | @@ -1560,7 +1618,7 @@ tip: - https://github.com/mozilla-mobile/fenix/pull/9836 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" reader_mode: available: @@ -1573,7 +1631,7 @@ reader_mode: - https://github.com/mozilla-mobile/fenix/pull/3941 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" opened: type: event description: | @@ -1584,7 +1642,7 @@ reader_mode: - https://github.com/mozilla-mobile/fenix/pull/3941 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" closed: type: event description: | @@ -1595,7 +1653,7 @@ reader_mode: - https://github.com/mozilla-mobile/fenix/pull/4328 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" appearance: type: event description: | @@ -1606,7 +1664,144 @@ reader_mode: - https://github.com/mozilla-mobile/fenix/pull/3941 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" + +tabs_tray: + opened: + type: event + description: | + A user opened the tabs tray + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + closed: + type: event + description: | + A user closed the tabs tray + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + opened_existing_tab: + type: event + description: | + A user opened an existing tab + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + closed_existing_tab: + type: event + description: | + A user closed an existing tab + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + private_mode_tapped: + type: event + description: | + A user switched to private mode + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + normal_mode_tapped: + type: event + description: | + A user switched to normal mode + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + new_tab_tapped: + type: event + description: | + A user opened a new tab + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + new_private_tab_tapped: + type: event + description: | + A user opened a new private tab + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + menu_opened: + type: event + description: | + A user opened three three dot menu in the tabs tray + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + save_to_collection: + type: event + description: | + A user tapped the save to collection button in the + three dot menu within the tabs tray + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + share_all_tabs: + type: event + description: | + A user tapped the share all tabs button in the + three dot menu within the tabs tray + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" + close_all_tabs: + type: event + description: | + A user tapped the close all tabs button in the + three dot menu within the tabs tray + bugs: + - https://github.com/mozilla-mobile/fenix/issues/11273 + data_reviews: + - https://github.com/mozilla-mobile/fenix/pull/12036 + notification_emails: + - fenix-core@mozilla.com + expires: "2020-10-01" collections: renamed: @@ -1619,7 +1814,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tab_restored: type: event description: | @@ -1630,7 +1825,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" all_tabs_restored: type: event description: | @@ -1641,7 +1836,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tab_removed: type: event description: | @@ -1652,7 +1847,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" shared: type: event description: | @@ -1663,7 +1858,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" removed: type: event description: | @@ -1674,7 +1869,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" saved: type: event description: | @@ -1690,7 +1885,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tabs_added: type: event description: | @@ -1706,7 +1901,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tab_select_opened: type: event description: | @@ -1718,7 +1913,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/3935 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" add_tab_button: type: event description: | @@ -1729,7 +1924,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/4358 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" long_press: type: event description: | @@ -1740,7 +1935,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/4358 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" save_button: type: event description: | @@ -1753,7 +1948,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/4358 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" extra_keys: from_screen: description: | @@ -1769,7 +1964,7 @@ collections: - https://github.com/mozilla-mobile/fenix/pull/4539 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_widget: new_tab_button: @@ -1783,7 +1978,7 @@ search_widget: - https://github.com/mozilla-mobile/fenix/pull/4714 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" voice_button: type: event description: | @@ -1794,7 +1989,7 @@ search_widget: - https://github.com/mozilla-mobile/fenix/pull/4714 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_widget_cfr: displayed: @@ -1807,7 +2002,7 @@ search_widget_cfr: - https://github.com/mozilla-mobile/fenix/pull/10958 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" add_widget_pressed: type: event description: | @@ -1818,7 +2013,7 @@ search_widget_cfr: - https://github.com/mozilla-mobile/fenix/pull/10958 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" not_now_pressed: type: event description: | @@ -1829,7 +2024,7 @@ search_widget_cfr: - https://github.com/mozilla-mobile/fenix/pull/10958 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" canceled: type: event description: | @@ -1841,7 +2036,7 @@ search_widget_cfr: - https://github.com/mozilla-mobile/fenix/pull/10958 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" private_browsing_mode: garbage_icon: @@ -1855,7 +2050,7 @@ private_browsing_mode: - https://github.com/mozilla-mobile/fenix/pull/4968 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" snackbar_undo: type: event description: | @@ -1867,7 +2062,7 @@ private_browsing_mode: - https://github.com/mozilla-mobile/fenix/pull/4968 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" notification_tapped: type: event description: | @@ -1878,7 +2073,7 @@ private_browsing_mode: - https://github.com/mozilla-mobile/fenix/pull/4968 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" notification_open: type: event description: | @@ -1889,7 +2084,7 @@ private_browsing_mode: - https://github.com/mozilla-mobile/fenix/pull/4968 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" notification_delete: type: event description: | @@ -1901,7 +2096,7 @@ private_browsing_mode: - https://github.com/mozilla-mobile/fenix/pull/4968 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" contextual_hint.tracking_protection: display: @@ -1915,7 +2110,7 @@ contextual_hint.tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/11923 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" dismiss: type: event description: | @@ -1928,7 +2123,7 @@ contextual_hint.tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/11923 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" outside_tap: type: event description: | @@ -1940,7 +2135,7 @@ contextual_hint.tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/11923 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" inside_tap: type: event description: | @@ -1952,7 +2147,7 @@ contextual_hint.tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/11923 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tracking_protection: exception_added: @@ -1966,7 +2161,7 @@ tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" panel_settings: type: event description: | @@ -1977,7 +2172,7 @@ tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" etp_shield: type: event description: | @@ -1988,7 +2183,7 @@ tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" etp_tracker_list: type: event description: | @@ -2000,7 +2195,7 @@ tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" etp_settings: type: event description: | @@ -2011,7 +2206,7 @@ tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/5414#issuecomment-532847188 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" etp_setting_changed: type: event description: | @@ -2028,7 +2223,7 @@ tracking_protection: - https://github.com/mozilla-mobile/fenix/pull/11383 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" private_browsing_shortcut: create_shortcut: @@ -2041,7 +2236,7 @@ private_browsing_shortcut: - https://github.com/mozilla-mobile/fenix/pull/5194 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" cfr_add_shortcut: type: event description: | @@ -2053,7 +2248,7 @@ private_browsing_shortcut: - https://github.com/mozilla-mobile/fenix/pull/5194 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" cfr_cancel: type: event description: | @@ -2065,7 +2260,7 @@ private_browsing_shortcut: - https://github.com/mozilla-mobile/fenix/pull/5194 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pinned_shortcut_priv: type: event description: | @@ -2077,7 +2272,7 @@ private_browsing_shortcut: - https://github.com/mozilla-mobile/fenix/pull/5194 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" static_shortcut_tab: type: event description: | @@ -2089,7 +2284,7 @@ private_browsing_shortcut: - https://github.com/mozilla-mobile/fenix/pull/5194 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" static_shortcut_priv: type: event description: | @@ -2101,7 +2296,7 @@ private_browsing_shortcut: - https://github.com/mozilla-mobile/fenix/pull/5194 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" tab: media_play: @@ -2114,7 +2309,7 @@ tab: - https://github.com/mozilla-mobile/fenix/pull/5266 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" no_lint: - COMMON_PREFIX media_pause: @@ -2127,7 +2322,7 @@ tab: - https://github.com/mozilla-mobile/fenix/pull/5266 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" media_notification: play: @@ -2140,7 +2335,7 @@ media_notification: - https://github.com/mozilla-mobile/fenix/pull/5520 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pause: type: event description: | @@ -2151,7 +2346,7 @@ media_notification: - https://github.com/mozilla-mobile/fenix/pull/5520 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" media_state: play: @@ -2164,7 +2359,7 @@ media_state: - https://github.com/mozilla-mobile/fenix/pull/6463 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pause: type: event description: | @@ -2175,7 +2370,7 @@ media_state: - https://github.com/mozilla-mobile/fenix/pull/6463 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" stop: type: event description: | @@ -2186,7 +2381,7 @@ media_state: - https://github.com/mozilla-mobile/fenix/pull/6463 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" logins: open_logins: @@ -2199,7 +2394,7 @@ logins: - https://github.com/mozilla-mobile/fenix/pull/6352 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_individual_login: type: event description: | @@ -2210,7 +2405,7 @@ logins: - https://github.com/mozilla-mobile/fenix/pull/6352 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" copy_login: type: event description: | @@ -2221,7 +2416,7 @@ logins: - https://github.com/mozilla-mobile/fenix/pull/6352 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" view_password_login: type: event description: | @@ -2232,7 +2427,7 @@ logins: - https://github.com/mozilla-mobile/fenix/pull/6352 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" save_logins_setting_changed: type: event description: | @@ -2248,7 +2443,7 @@ logins: - https://github.com/mozilla-mobile/fenix/pull/7767 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" download_notification: resume: @@ -2261,7 +2456,7 @@ download_notification: - https://github.com/mozilla-mobile/fenix/pull/6554 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pause: type: event description: | @@ -2272,7 +2467,7 @@ download_notification: - https://github.com/mozilla-mobile/fenix/pull/6554 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" cancel: type: event description: | @@ -2283,7 +2478,7 @@ download_notification: - https://github.com/mozilla-mobile/fenix/pull/6554 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" try_again: type: event description: | @@ -2295,7 +2490,7 @@ download_notification: - https://github.com/mozilla-mobile/fenix/pull/6554 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open: type: event description: | @@ -2306,7 +2501,7 @@ download_notification: - https://github.com/mozilla-mobile/fenix/pull/6554 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" in_app_open: type: event description: | @@ -2317,7 +2512,7 @@ download_notification: - https://github.com/mozilla-mobile/fenix/pull/6554 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" in_app_try_again: type: event description: | @@ -2329,7 +2524,7 @@ download_notification: - https://github.com/mozilla-mobile/fenix/pull/6554 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" user_specified_search_engines: custom_engine_added: @@ -2342,7 +2537,7 @@ user_specified_search_engines: - https://github.com/mozilla-mobile/fenix/pull/6918 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" no_lint: - COMMON_PREFIX custom_engine_deleted: @@ -2356,7 +2551,7 @@ user_specified_search_engines: - https://github.com/mozilla-mobile/fenix/pull/6918 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" search_suggestions: enable_in_private: @@ -2369,7 +2564,7 @@ search_suggestions: - https://github.com/mozilla-mobile/fenix/pull/6746 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" voice_search: tapped: @@ -2382,7 +2577,7 @@ voice_search: - https://github.com/mozilla-mobile/fenix/pull/10785 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" top_sites: open_default: @@ -2395,7 +2590,7 @@ top_sites: - https://github.com/mozilla-mobile/fenix/pull/10752 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_in_new_tab: type: event description: | @@ -2406,7 +2601,7 @@ top_sites: - https://github.com/mozilla-mobile/fenix/pull/7523 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_in_private_tab: type: event description: | @@ -2417,7 +2612,7 @@ top_sites: - https://github.com/mozilla-mobile/fenix/pull/7523 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" remove: type: event description: | @@ -2428,7 +2623,7 @@ top_sites: - https://github.com/mozilla-mobile/fenix/pull/7523 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" about_page: support_tapped: @@ -2441,7 +2636,7 @@ about_page: - https://github.com/mozilla-mobile/fenix/pull/8047 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" privacy_notice_tapped: type: event description: | @@ -2452,7 +2647,7 @@ about_page: - https://github.com/mozilla-mobile/fenix/pull/8047 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" rights_tapped: type: event description: | @@ -2463,7 +2658,7 @@ about_page: - https://github.com/mozilla-mobile/fenix/pull/8047 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" licensing_tapped: type: event description: | @@ -2474,7 +2669,7 @@ about_page: - https://github.com/mozilla-mobile/fenix/pull/8047 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" libraries_tapped: type: event description: | @@ -2485,7 +2680,7 @@ about_page: - https://github.com/mozilla-mobile/fenix/pull/8047 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" app_theme: dark_theme_selected: @@ -2503,7 +2698,7 @@ app_theme: - https://github.com/mozilla-mobile/fenix/pull/7968 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" pocket: pocket_top_site_clicked: @@ -2516,7 +2711,7 @@ pocket: - https://github.com/mozilla-mobile/fenix/pull/8098 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" no_lint: - COMMON_PREFIX @@ -2530,7 +2725,7 @@ pocket: - https://github.com/mozilla-mobile/fenix/pull/8098 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" first_session: campaign: @@ -2545,7 +2740,7 @@ first_session: - https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" network: type: string send_in_pings: @@ -2558,7 +2753,7 @@ first_session: - https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" adgroup: type: string send_in_pings: @@ -2571,7 +2766,7 @@ first_session: - https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586480836 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" creative: send_in_pings: - first-session @@ -2584,7 +2779,7 @@ first_session: - https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" timestamp: send_in_pings: - first-session @@ -2599,7 +2794,7 @@ first_session: - https://github.com/mozilla-mobile/fenix/pull/8074#issuecomment-586512202 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" browser.search: with_ads: @@ -2615,7 +2810,7 @@ browser.search: - https://github.com/mozilla-mobile/fenix/pull/10112 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" ad_clicks: type: labeled_counter description: | @@ -2629,7 +2824,7 @@ browser.search: - https://github.com/mozilla-mobile/fenix/pull/10112 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" in_content: type: labeled_counter description: | @@ -2642,7 +2837,7 @@ browser.search: - https://github.com/mozilla-mobile/fenix/pull/10167 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" addons: open_addons_in_settings: @@ -2655,7 +2850,7 @@ addons: - https://github.com/mozilla-mobile/fenix/pull/8318 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" open_addon_in_toolbar_menu: type: event description: | @@ -2670,7 +2865,7 @@ addons: - https://github.com/mozilla-mobile/fenix/pull/8318 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" has_installed_addons: type: boolean description: | @@ -2683,7 +2878,7 @@ addons: - https://github.com/mozilla-mobile/fenix/pull/8318 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" has_enabled_addons: type: boolean description: | @@ -2696,7 +2891,7 @@ addons: - https://github.com/mozilla-mobile/fenix/pull/8318 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" installed_addons: type: string_list description: | @@ -2709,7 +2904,7 @@ addons: - https://github.com/mozilla-mobile/fenix/pull/11080 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" enabled_addons: type: string_list description: | @@ -2722,7 +2917,7 @@ addons: - https://github.com/mozilla-mobile/fenix/pull/11080 notification_emails: - fenix-core@mozilla.com - expires: "2020-09-01" + expires: "2020-10-01" startup.timeline: framework_start: @@ -2747,7 +2942,7 @@ startup.timeline: notification_emails: - perf-android-fe@mozilla.com - mcomella@mozilla.com - expires: "2020-07-15" + expires: "2020-10-01" framework_start_error: send_in_pings: - startup-timeline @@ -2763,7 +2958,7 @@ startup.timeline: notification_emails: - perf-android-fe@mozilla.com - mcomella@mozilla.com - expires: "2020-07-15" + expires: "2020-10-01" framework_start_read_error: send_in_pings: - startup-timeline @@ -2779,7 +2974,7 @@ startup.timeline: notification_emails: - perf-android-fe@mozilla.com - mcomella@mozilla.com - expires: "2020-07-15" + expires: "2020-10-01" clock_ticks_per_second: send_in_pings: - startup-timeline @@ -2795,7 +2990,7 @@ startup.timeline: notification_emails: - perf-android-fe@mozilla.com - mcomella@mozilla.com - expires: "2020-07-15" + expires: "2020-10-01" perf.awesomebar: history_suggestions: @@ -2812,7 +3007,7 @@ perf.awesomebar: notification_emails: - fenix-core@mozilla.com - gkruglov@mozilla.com - expires: "2020-09-15" + expires: "2020-10-01" bookmark_suggestions: send_in_pings: - metrics @@ -2827,7 +3022,7 @@ perf.awesomebar: notification_emails: - fenix-core@mozilla.com - gkruglov@mozilla.com - expires: "2020-09-15" + expires: "2020-10-01" search_engine_suggestions: send_in_pings: - metrics @@ -2842,7 +3037,7 @@ perf.awesomebar: notification_emails: - fenix-core@mozilla.com - gkruglov@mozilla.com - expires: "2020-09-15" + expires: "2020-10-01" session_suggestions: send_in_pings: - metrics @@ -2857,7 +3052,7 @@ perf.awesomebar: notification_emails: - fenix-core@mozilla.com - gkruglov@mozilla.com - expires: "2020-09-15" + expires: "2020-10-01" synced_tabs_suggestions: send_in_pings: - metrics @@ -2872,7 +3067,7 @@ perf.awesomebar: notification_emails: - fenix-core@mozilla.com - gkruglov@mozilla.com - expires: "2020-09-15" + expires: "2020-10-01" clipboard_suggestions: send_in_pings: - metrics @@ -2887,7 +3082,7 @@ perf.awesomebar: notification_emails: - fenix-core@mozilla.com - gkruglov@mozilla.com - expires: "2020-09-15" + expires: "2020-10-01" shortcuts_suggestions: send_in_pings: - metrics @@ -2902,4 +3097,4 @@ perf.awesomebar: notification_emails: - fenix-core@mozilla.com - gkruglov@mozilla.com - expires: "2020-09-15" + expires: "2020-10-01" 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 6c352d07c..216562458 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/BookmarksTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/BookmarksTest.kt @@ -340,7 +340,7 @@ class BookmarksTest { } multipleSelectionToolbar { - }.clickOpenNewTab { }.openTabDrawer { + }.clickOpenNewTab { verifyNormalModeSelected() verifyExistingTabList() } @@ -363,7 +363,7 @@ class BookmarksTest { } multipleSelectionToolbar { - }.clickOpenPrivateTab { }.openTabDrawer { + }.clickOpenPrivateTab { verifyPrivateModeSelected() verifyExistingTabList() } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt index 0538540dc..30ab196ef 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt @@ -216,7 +216,7 @@ class HistoryTest { } multipleSelectionToolbar { - }.clickOpenNewTab { }.openTabDrawer { + }.clickOpenNewTab { verifyExistingTabList() verifyNormalModeSelected() } @@ -236,7 +236,7 @@ class HistoryTest { } multipleSelectionToolbar { - }.clickOpenPrivateTab { }.openTabDrawer { + }.clickOpenPrivateTab { verifyPrivateModeSelected() verifyExistingTabList() } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt index 5454e78b6..a57ec57c7 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt @@ -50,6 +50,12 @@ class SearchTest { @Test fun shortcutButtonTest() { homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openSearchSubMenu { + enableShowSearchShortcuts() + }.goBack { + }.goBack { }.openSearch { verifySearchWithText() clickSearchEngineButton("DuckDuckGo") @@ -63,6 +69,12 @@ class SearchTest { @Test fun shortcutSearchEngineSettingsTest() { homeScreen { + }.openThreeDotMenu { + }.openSettings { + }.openSearchSubMenu { + enableShowSearchShortcuts() + }.goBack { + }.goBack { }.openSearch { scrollToSearchEngineSettings() clickSearchEngineSettings() diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt index 50fe18522..e12c5242f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/LibrarySubMenusMultipleSelectionToolbarRobot.kt @@ -85,23 +85,26 @@ class LibrarySubMenusMultipleSelectionToolbarRobot { return BookmarksRobot.Transition() } - fun clickOpenNewTab(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { + fun clickOpenNewTab(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { openInNewTabButton().click() - mDevice.waitNotNull(Until.findObject(By.text("Collections")), waitingTime) - - HomeScreenRobot().interact() - return HomeScreenRobot.Transition() - } - - fun clickOpenPrivateTab(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { - openInPrivateTabButton().click() mDevice.waitNotNull( - Until.findObject(By.text(PRIVATE_SESSION_MESSAGE)), + Until.findObject(By.res("org.mozilla.fenix.debug:id/tab_layout")), waitingTime ) - HomeScreenRobot().interact() - return HomeScreenRobot.Transition() + TabDrawerRobot().interact() + return TabDrawerRobot.Transition() + } + + fun clickOpenPrivateTab(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { + openInPrivateTabButton().click() + mDevice.waitNotNull( + Until.findObject(By.res("org.mozilla.fenix.debug:id/tab_layout")), + waitingTime + ) + + TabDrawerRobot().interact() + return TabDrawerRobot.Transition() } } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuSearchRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuSearchRobot.kt index b50e5aae2..9a9ced7e5 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuSearchRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuSearchRobot.kt @@ -36,6 +36,7 @@ class SettingsSubMenuSearchRobot { selectDefaultSearchEngine(searchEngineName) fun disableShowSearchSuggestions() = toggleShowSearchSuggestions() + fun enableShowSearchShortcuts() = toggleShowSearchShortcuts() class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) @@ -142,5 +143,16 @@ private fun toggleShowSearchSuggestions() { .perform(click()) } +private fun toggleShowSearchShortcuts() { + onView(withId(androidx.preference.R.id.recycler_view)).perform( + RecyclerViewActions.scrollTo( + hasDescendant(withText("Show search shortcuts")) + ) + ) + + onView(withText("Show search shortcuts")) + .perform(click()) +} + private fun goBackButton() = onView(CoreMatchers.allOf(withContentDescription("Navigate up"))) 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 6af77c343..5ac8bf2d4 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 @@ -26,6 +26,7 @@ import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.By import androidx.test.uiautomator.By.text import androidx.test.uiautomator.UiDevice +import androidx.test.uiautomator.Until import androidx.test.uiautomator.Until.findObject import org.hamcrest.CoreMatchers.allOf import org.mozilla.fenix.R @@ -104,6 +105,20 @@ class TabDrawerRobot { return ThreeDotMenuMainRobot.Transition() } + fun openTabDrawer(interact: TabDrawerRobot.() -> Unit): TabDrawerRobot.Transition { + org.mozilla.fenix.ui.robots.mDevice.waitForIdle() + + tabsCounter().click() + + org.mozilla.fenix.ui.robots.mDevice.waitNotNull( + Until.findObject(By.res("org.mozilla.fenix.debug:id/tab_layout")), + waitingTime + ) + + TabDrawerRobot().interact() + return TabDrawerRobot.Transition() + } + fun openHomeScreen(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { mDevice.waitForIdle() @@ -196,3 +211,5 @@ private fun tab(title: String) = withText(title) ) ) + +private fun tabsCounter() = onView(withId(R.id.tab_button)) diff --git a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt index c79af795d..de660bbef 100644 --- a/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt +++ b/app/src/main/java/org/mozilla/fenix/FeatureFlags.kt @@ -23,7 +23,7 @@ object FeatureFlags { /** * Enable tab sync feature */ - val syncedTabs = Config.channel.isNightlyOrDebug + const val syncedTabs = true /** * Enables new tab tray pref diff --git a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt index 0a5f9c77b..0d9a3b2c0 100644 --- a/app/src/main/java/org/mozilla/fenix/FenixApplication.kt +++ b/app/src/main/java/org/mozilla/fenix/FenixApplication.kt @@ -173,6 +173,9 @@ open class FenixApplication : LocaleAwareApplication() { taskQueue.runIfReadyOrQueue { Experiments.initialize( applicationContext = applicationContext, + onExperimentsUpdated = { + ExperimentsManager.initSearchWidgetExperiment(this) + }, configuration = mozilla.components.service.experiments.Configuration( httpClient = components.core.client, kintoEndpoint = KINTO_ENDPOINT_PROD diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index a80def5b0..db2f37b1d 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -174,10 +174,14 @@ open class HomeActivity : LocaleAwareAppCompatActivity() { lifecycle.addObserver(BreadcrumbsRecorder(components.analytics.crashReporter, navHost.navController, ::getBreadcrumbMessage)) - intent - ?.toSafeIntent() + val safeIntent = intent?.toSafeIntent() + safeIntent ?.let(::getIntentSource) ?.also { components.analytics.metrics.track(Event.OpenedApp(it)) } + // record on cold startup + safeIntent + ?.let(::getIntentAllSource) + ?.also { components.analytics.metrics.track(Event.AppRecievedIntent(it)) } } supportActionBar?.hide() @@ -250,6 +254,15 @@ open class HomeActivity : LocaleAwareAppCompatActivity() { ?.let { it as? TabTrayDialogFragment } ?.also { it.dismissAllowingStateLoss() } } + + // If there is a warm or hot startup, onNewIntent method is always called first. + // Note: This does not work in case of an user sending an intent with ACTION_VIEW + // for example, launch the application, and than use adb to send an intent with + // ACTION_VIEW to open a link. In this case, we will get multiple telemetry events. + intent + .toSafeIntent() + .let(::getIntentAllSource) + ?.also { components.analytics.metrics.track(Event.AppRecievedIntent(it)) } } /** @@ -320,6 +333,14 @@ open class HomeActivity : LocaleAwareAppCompatActivity() { } } + protected open fun getIntentAllSource(intent: SafeIntent): Event.AppRecievedIntent.Source? { + return when { + intent.isLauncherIntent -> Event.AppRecievedIntent.Source.APP_ICON + intent.action == Intent.ACTION_VIEW -> Event.AppRecievedIntent.Source.LINK + else -> Event.AppRecievedIntent.Source.UNKNOWN + } + } + /** * External sources such as 3rd party links and shortcuts use this function to enter * private mode directly before the content view is created. Returns the mode set by the intent @@ -490,11 +511,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity() { } } - fun updateThemeForSession(session: Session) { - val sessionMode = BrowsingMode.fromBoolean(session.private) - browsingModeManager.mode = sessionMode - } - override fun attachBaseContext(base: Context) { StrictMode.allowThreadDiskReads().resetPoliciesAfter { super.attachBaseContext(base) diff --git a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt index 268426dba..033a4827e 100644 --- a/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt @@ -9,8 +9,6 @@ import android.content.Intent import android.os.Bundle import android.os.StrictMode import androidx.annotation.VisibleForTesting -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.launch import mozilla.components.feature.intent.processing.IntentProcessor import org.mozilla.fenix.components.IntentProcessorType import org.mozilla.fenix.components.getType @@ -33,19 +31,17 @@ class IntentReceiverActivity : Activity() { super.onCreate(savedInstanceState) } - MainScope().launch { - // The intent property is nullable, but the rest of the code below - // assumes it is not. If it's null, then we make a new one and open - // the HomeActivity. - val intent = intent?.let { Intent(it) } ?: Intent() - intent.stripUnwantedFlags() - processIntent(intent) - } + // The intent property is nullable, but the rest of the code below + // assumes it is not. If it's null, then we make a new one and open + // the HomeActivity. + val intent = intent?.let { Intent(it) } ?: Intent() + intent.stripUnwantedFlags() + processIntent(intent) StartupTimeline.onActivityCreateEndIntentReceiver() } - suspend fun processIntent(intent: Intent) { + fun processIntent(intent: Intent) { // Call process for side effects, short on the first that returns true val processor = getIntentProcessors().firstOrNull { it.process(intent) } val intentProcessorType = components.intentProcessors.getType(processor) 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 791971685..9ed9985f7 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -78,6 +78,7 @@ import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.NavGraphDirections import org.mozilla.fenix.R +import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.readermode.DefaultReaderModeController import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.FindInPageIntegration @@ -690,7 +691,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session @CallSuper override fun onSessionSelected(session: Session) { - (activity as HomeActivity).updateThemeForSession(session) + updateThemeForSession(session) if (!browserInitialized) { // Initializing a new coroutineScope to avoid ConcurrentModificationException in ObserverRegistry // This will be removed when ObserverRegistry is deprecated by browser-state. @@ -720,6 +721,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session components.useCases.sessionUseCases.reload() } hideToolbar() + + getSessionById()?.let { updateThemeForSession(it) } } @CallSuper @@ -872,6 +875,14 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session } } + /** + * Set the activity normal/private theme to match the current session. + */ + private fun updateThemeForSession(session: Session) { + val sessionMode = BrowsingMode.fromBoolean(session.private) + (activity as HomeActivity).browsingModeManager.mode = sessionMode + } + /** * Returns the current session. */ @@ -997,6 +1008,5 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session private const val REQUEST_CODE_DOWNLOAD_PERMISSIONS = 1 private const val REQUEST_CODE_PROMPT_PERMISSIONS = 2 private const val REQUEST_CODE_APP_PERMISSIONS = 3 - private const val SNACKBAR_ELEVATION = 80f } } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index eee14ae28..a932686cf 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -30,7 +30,6 @@ import mozilla.components.feature.tab.collections.TabCollection import mozilla.components.feature.tabs.WindowFeature import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.base.feature.ViewBoundFeatureWrapper -import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.addons.runIfFragmentIsAttached import org.mozilla.fenix.components.FenixSnackbar @@ -40,8 +39,8 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.navigateSafe import org.mozilla.fenix.ext.requireComponents -import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.resetPoliciesAfter +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.shortcut.FirstTimePwaObserver import org.mozilla.fenix.trackingprotection.TrackingProtectionOverlay @@ -178,9 +177,6 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler { override fun onResume() { super.onResume() - getSessionById()?.let { - (activity as HomeActivity).updateThemeForSession(it) - } requireComponents.core.tabCollectionStorage.register(collectionStorageObserver, this) } diff --git a/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt b/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt index fb48418a7..213bec6a9 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/UriOpenedObserver.kt @@ -12,9 +12,12 @@ import mozilla.components.browser.session.SessionManager import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.metrics +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.search.telemetry.ads.AdsTelemetry +import org.mozilla.fenix.utils.Settings class UriOpenedObserver( + private val settings: Settings, private val owner: LifecycleOwner, private val sessionManager: SessionManager, metrics: MetricController, @@ -22,6 +25,7 @@ class UriOpenedObserver( ) : SessionManager.Observer { constructor(activity: FragmentActivity) : this( + activity.applicationContext.settings(), activity, activity.components.core.sessionManager, activity.metrics, @@ -41,20 +45,24 @@ class UriOpenedObserver( } override fun onAllSessionsRemoved() { + settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) sessionManager.sessions.forEach { it.unregister(singleSessionObserver) } } override fun onSessionAdded(session: Session) { + settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) session.register(singleSessionObserver, owner) } override fun onSessionRemoved(session: Session) { + settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) session.unregister(singleSessionObserver) } override fun onSessionsRestored() { + settings.setOpenTabsCount(sessionManager.sessions.filter { !it.private }.size) sessionManager.sessions.forEach { it.register(singleSessionObserver, owner) } diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt index 808cd37da..eecb1f761 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationController.kt @@ -8,7 +8,6 @@ package org.mozilla.fenix.collections import androidx.annotation.VisibleForTesting import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import mozilla.components.browser.session.Session import mozilla.components.browser.session.SessionManager @@ -62,13 +61,21 @@ fun List.toSessionBundle(sessionManager: SessionManager): List { return this.mapNotNull { sessionManager.findSessionById(it.sessionId) } } +/** + * @param store Store used to hold in-memory collection state. + * @param dismiss Callback to dismiss the collection creation dialog. + * @param metrics Controller that handles telemetry events. + * @param tabCollectionStorage Storage used to save tab collections to disk. + * @param sessionManager Used to query and serialize tabs. + * @param ioScope Coroutine scope that launches on the IO thread. + */ class DefaultCollectionCreationController( private val store: CollectionCreationStore, private val dismiss: () -> Unit, private val metrics: MetricController, private val tabCollectionStorage: TabCollectionStorage, private val sessionManager: SessionManager, - private val scope: CoroutineScope + private val ioScope: CoroutineScope ) : CollectionCreationController { companion object { @@ -80,7 +87,7 @@ class DefaultCollectionCreationController( dismiss() val sessionBundle = tabs.toSessionBundle(sessionManager) - scope.launch(IO) { + ioScope.launch { tabCollectionStorage.createCollection(name, sessionBundle) } @@ -91,7 +98,7 @@ class DefaultCollectionCreationController( override fun renameCollection(collection: TabCollection, name: String) { dismiss() - scope.launch(IO) { + ioScope.launch { tabCollectionStorage.renameCollection(collection, name) } metrics.track(Event.CollectionRenamed) @@ -121,7 +128,7 @@ class DefaultCollectionCreationController( override fun selectCollection(collection: TabCollection, tabs: List) { dismiss() val sessionBundle = tabs.toList().toSessionBundle(sessionManager) - scope.launch(IO) { + ioScope.launch { tabCollectionStorage .addTabsToCollection(collection, sessionBundle) } diff --git a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt index 8c32f3cb0..2149d6bc3 100644 --- a/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/collections/CollectionCreationFragment.kt @@ -14,7 +14,9 @@ import androidx.fragment.app.DialogFragment import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.navArgs import kotlinx.android.synthetic.main.fragment_create_collection.view.* +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.plus import mozilla.components.browser.session.SessionManager import mozilla.components.browser.state.store.BrowserStore import mozilla.components.lib.publicsuffixlist.PublicSuffixList @@ -77,7 +79,7 @@ class CollectionCreationFragment : DialogFragment() { requireComponents.analytics.metrics, requireComponents.core.tabCollectionStorage, requireComponents.core.sessionManager, - scope = lifecycleScope + ioScope = lifecycleScope + Dispatchers.IO ) ) collectionCreationView = CollectionCreationView( 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 3f2b0dbf3..9bfe78f1c 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -188,7 +188,7 @@ class Core(private val context: Context) { WebNotificationFeature( context, engine, icons, R.drawable.ic_status_logo, - HomeActivity::class.java + permissionStorage.permissionsStorage, HomeActivity::class.java ) } } 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 882e63fd3..043cfed25 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 @@ -22,16 +22,15 @@ import org.mozilla.fenix.GleanMetrics.CustomTab import org.mozilla.fenix.GleanMetrics.DownloadNotification import org.mozilla.fenix.GleanMetrics.ErrorPage import org.mozilla.fenix.GleanMetrics.Events -import org.mozilla.fenix.GleanMetrics.Events.preferenceToggled import org.mozilla.fenix.GleanMetrics.FindInPage import org.mozilla.fenix.GleanMetrics.History import org.mozilla.fenix.GleanMetrics.Logins import org.mozilla.fenix.GleanMetrics.MediaNotification import org.mozilla.fenix.GleanMetrics.MediaState import org.mozilla.fenix.GleanMetrics.Metrics +import org.mozilla.fenix.GleanMetrics.Onboarding import org.mozilla.fenix.GleanMetrics.Pings import org.mozilla.fenix.GleanMetrics.Pocket -import org.mozilla.fenix.GleanMetrics.Onboarding import org.mozilla.fenix.GleanMetrics.Preferences import org.mozilla.fenix.GleanMetrics.PrivateBrowsingMode import org.mozilla.fenix.GleanMetrics.PrivateBrowsingShortcut @@ -98,6 +97,10 @@ private val Event.wrapper: EventWrapper<*>? { Events.appOpened.record(it) }, { Events.appOpenedKeys.valueOf(it) } ) + is Event.AppRecievedIntent -> EventWrapper( + { Events.appReceivedIntent.record(it) }, + { Events.appReceivedIntentKeys.valueOf(it) } + ) is Event.SearchBarTapped -> EventWrapper( { Events.searchBarTapped.record(it) }, { Events.searchBarTappedKeys.valueOf(it) } @@ -602,6 +605,43 @@ private val Event.wrapper: EventWrapper<*>? { ContextualHintTrackingProtection.outsideTap.record(it) } ) + is Event.TabsTrayOpened -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.opened.record(it) } + ) + is Event.TabsTrayClosed -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.closed.record(it) } + ) + is Event.OpenedExistingTab -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.openedExistingTab.record(it) } + ) + is Event.ClosedExistingTab -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.closedExistingTab.record(it) } + ) + is Event.TabsTrayPrivateModeTapped -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.privateModeTapped.record(it) } + ) + is Event.TabsTrayNormalModeTapped -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.normalModeTapped.record(it) } + ) + is Event.NewTabTapped -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.newTabTapped.record(it) } + ) + is Event.NewPrivateTabTapped -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.newPrivateTabTapped.record(it) } + ) + is Event.TabsTrayMenuOpened -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.menuOpened.record(it) } + ) + is Event.TabsTraySaveToCollectionPressed -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.saveToCollection.record(it) } + ) + is Event.TabsTrayShareAllTabsPressed -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.shareAllTabs.record(it) } + ) + is Event.TabsTrayCloseAllTabsPressed -> EventWrapper( + { org.mozilla.fenix.GleanMetrics.TabsTray.closeAllTabs.record(it) } + ) + // Don't record other events in Glean: is Event.AddBookmark -> null is Event.OpenedBookmark -> null @@ -661,6 +701,12 @@ class GleanMetricsService(private val context: Context) : MetricsService { searchWidgetInstalled.set(context.settings().searchWidgetInstalled) + val openTabsCount = context.settings().openTabsCount + hasOpenTabs.set(openTabsCount > 0) + if (openTabsCount > 0) { + tabsOpenCount.add(openTabsCount) + } + val topSitesSize = context.settings().topSitesSize hasTopSites.set(topSitesSize > 0) if (topSitesSize > 0) { diff --git a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt index 46b1ea9e1..007dd1536 100644 --- a/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/metrics/Metrics.kt @@ -185,6 +185,19 @@ sealed class Event { object ContextualHintETPOutsideTap : Event() object ContextualHintETPInsideTap : Event() + object TabsTrayOpened : Event() + object TabsTrayClosed : Event() + object OpenedExistingTab : Event() + object ClosedExistingTab : Event() + object TabsTrayPrivateModeTapped : Event() + object TabsTrayNormalModeTapped : Event() + object NewTabTapped : Event() + object NewPrivateTabTapped : Event() + object TabsTrayMenuOpened : Event() + object TabsTraySaveToCollectionPressed : Event() + object TabsTrayShareAllTabsPressed : Event() + object TabsTrayCloseAllTabsPressed : Event() + // Interaction events with extras data class OnboardingToolbarPosition(val position: Position) : Event() { enum class Position { TOP, BOTTOM } @@ -296,6 +309,13 @@ sealed class Event { get() = hashMapOf(Events.appOpenedKeys.source to source.name) } + data class AppRecievedIntent(val source: Source) : Event() { + enum class Source { APP_ICON, LINK, CUSTOM_TAB, UNKNOWN } + + override val extras: Map? + get() = hashMapOf(Events.appReceivedIntentKeys.source to source.name) + } + data class CollectionSaveButtonPressed(val fromScreen: String) : Event() { override val extras: Map? get() = mapOf(Collections.saveButtonKeys.fromScreen to fromScreen) diff --git a/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt b/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt index 4775f9e71..0f8b1a9fb 100644 --- a/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt +++ b/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt @@ -19,6 +19,7 @@ import mozilla.components.browser.search.provider.SearchEngineList import mozilla.components.browser.search.provider.SearchEngineProvider import mozilla.components.browser.search.provider.filter.SearchEngineFilter import mozilla.components.browser.search.provider.localization.LocaleSearchLocalizationProvider +import mozilla.components.browser.search.provider.localization.SearchLocalization import mozilla.components.browser.search.provider.localization.SearchLocalizationProvider import mozilla.components.service.location.LocationService import mozilla.components.service.location.MozillaLocationService @@ -51,12 +52,18 @@ open class FenixSearchEngineProvider( AssetsSearchEngineProvider(localizationProvider).loadSearchEngines(context) } + private val loadedRegion = async { localizationProvider.determineRegion() } + // https://github.com/mozilla-mobile/fenix/issues/9935 // Adds a Locale search engine provider as a fallback in case the MLS lookup takes longer // than the time it takes for a user to try to search. - private val fallBackEngines = async { - AssetsSearchEngineProvider(LocaleSearchLocalizationProvider()).loadSearchEngines(context) - } + private val fallbackLocationService: SearchLocalizationProvider = LocaleSearchLocalizationProvider() + private val fallBackProvider = + AssetsSearchEngineProvider(fallbackLocationService) + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + open val fallbackEngines = async { fallBackProvider.loadSearchEngines(context) } + private val fallbackRegion = async { fallbackLocationService.determineRegion() } @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) open val bundledSearchEngines = async { @@ -88,7 +95,15 @@ open class FenixSearchEngineProvider( if (loadedSearchEngines.isCompleted) { loadedSearchEngines } else { - fallBackEngines + fallbackEngines + } + + private val region: Deferred + get() = + if (loadedRegion.isCompleted) { + loadedRegion + } else { + fallbackRegion } fun getDefaultEngine(context: Context): SearchEngine { @@ -199,7 +214,11 @@ open class FenixSearchEngineProvider( } if (!prefs.contains(installedEnginesKey)) { - val defaultSet = baseSearchEngines.await() + val searchEngines = + if (baseSearchEngines.isCompleted) baseSearchEngines + else fallbackEngines + + val defaultSet = searchEngines.await() .list .map { it.identifier } .toSet() @@ -215,7 +234,7 @@ open class FenixSearchEngineProvider( @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) suspend fun localeAwareInstalledEnginesKey(): String { - val tag = localizationProvider.determineRegion().let { + val tag = region.await().let { val region = it.region?.let { region -> if (region.isEmpty()) "" else "-$region" } diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt index 900401314..452f1b0d6 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/CustomTabsIntegration.kt @@ -67,7 +67,7 @@ class CustomTabsIntegration( ) } - toolbar.background = getDrawable(activity, R.drawable.toolbar_background_private) + toolbar.background = getDrawable(activity, R.drawable.toolbar_background) } } 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 7e1e20c6c..2914f7326 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt @@ -41,6 +41,8 @@ open class ExternalAppBrowserActivity : HomeActivity() { final override fun getIntentSource(intent: SafeIntent) = Event.OpenedApp.Source.CUSTOM_TAB + final override fun getIntentAllSource(intent: SafeIntent) = Event.AppRecievedIntent.Source.CUSTOM_TAB + final override fun getIntentSessionId(intent: SafeIntent) = intent.getSessionId() override fun getNavDirections( 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 f890dcc3b..de67a087d 100644 --- a/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/customtabs/FennecWebAppIntentProcessor.kt @@ -9,6 +9,7 @@ import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT import androidx.annotation.VisibleForTesting import androidx.core.content.ContextCompat +import kotlinx.coroutines.runBlocking import mozilla.components.browser.session.Session import mozilla.components.browser.session.Session.Source import mozilla.components.browser.session.SessionManager @@ -52,16 +53,17 @@ class FennecWebAppIntentProcessor( * A custom tab config is also set so a custom tab toolbar can be shown when the user leaves * the scope defined in the manifest. */ - override suspend fun process(intent: Intent): Boolean { + override fun process(intent: Intent): Boolean { val safeIntent = intent.toSafeIntent() val url = safeIntent.dataString return if (!url.isNullOrEmpty() && matches(intent)) { - val webAppManifest = loadManifest(safeIntent, url) + val webAppManifest = runBlocking { loadManifest(safeIntent, url) } val session = Session(url, private = false, source = Source.HOME_SCREEN) session.webAppManifest = webAppManifest - session.customTabConfig = webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig() + session.customTabConfig = + webAppManifest?.toCustomTabConfig() ?: createFallbackCustomTabConfig() sessionManager.add(session) loadUrlUseCase(url, session, EngineSession.LoadUrlFlags.external()) 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 686347b10..fa51bcc37 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 @@ -35,7 +35,7 @@ class FennecBookmarkShortcutsIntentProcessor( * If this is an Intent for a Fennec pinned website shortcut * prepare it for opening website's URL in a new tab. */ - override suspend fun process(intent: Intent): Boolean { + override fun process(intent: Intent): Boolean { val safeIntent = intent.toSafeIntent() val url = safeIntent.dataString diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt index eecd9923e..6507c8668 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt @@ -204,14 +204,14 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan R.id.open_bookmarks_in_new_tabs_multi_select -> { openItemsInNewTab { node -> node.url } - navigate(BookmarkFragmentDirections.actionGlobalHome()) + navigate(BookmarkFragmentDirections.actionGlobalTabTrayDialogFragment()) metrics?.track(Event.OpenedBookmarksInNewTabs) true } R.id.open_bookmarks_in_private_tabs_multi_select -> { openItemsInNewTab(private = true) { node -> node.url } - navigate(BookmarkFragmentDirections.actionGlobalHome()) + navigate(BookmarkFragmentDirections.actionGlobalTabTrayDialogFragment()) metrics?.track(Event.OpenedBookmarksInPrivateTabs) true } 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 f5fdd9027..a6796f1d6 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 @@ -183,7 +183,7 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandl nav( R.id.historyFragment, - HistoryFragmentDirections.actionGlobalHome() + HistoryFragmentDirections.actionGlobalTabTrayDialogFragment() ) true } @@ -199,7 +199,7 @@ class HistoryFragment : LibraryPageFragment(), UserInteractionHandl } nav( R.id.historyFragment, - HistoryFragmentDirections.actionGlobalHome() + HistoryFragmentDirections.actionGlobalTabTrayDialogFragment() ) true } diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt index 2190be332..4f5ef089e 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt @@ -294,8 +294,6 @@ class SearchFragment : Fragment(), UserInteractionHandler { view.search_suggestions_onboarding.setOnInflateListener((stubListener)) - view.toolbar_wrapper.clipToOutline = false - fill_link_from_clipboard.setOnClickListener { (activity as HomeActivity) .openToBrowserAndLoad( diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt index bf997e413..31369ed68 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt @@ -8,7 +8,6 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.drawable.BitmapDrawable import androidx.appcompat.content.res.AppCompatResources -import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.content.ContextCompat import mozilla.components.browser.domains.autocomplete.ShippedDomainsProvider import mozilla.components.browser.toolbar.BrowserToolbar @@ -16,7 +15,6 @@ import mozilla.components.concept.engine.Engine import mozilla.components.concept.storage.HistoryStorage import mozilla.components.feature.toolbar.ToolbarAutocompleteFeature import mozilla.components.support.ktx.android.content.getColorFromAttr -import mozilla.components.support.ktx.android.util.dpToPx import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.fenix.R import org.mozilla.fenix.search.SearchFragmentState @@ -64,8 +62,6 @@ class ToolbarView( view.apply { editMode() - elevation = TOOLBAR_ELEVATION_IN_DP.dpToPx(resources.displayMetrics).toFloat() - setOnUrlCommitListener { // We're hiding the keyboard as early as possible to prevent the engine view // from resizing in case the BrowserFragment is being displayed before the @@ -80,8 +76,6 @@ class ToolbarView( context, ThemeManager.resolveAttribute(R.attr.foundation, context) ) - layoutParams.height = CoordinatorLayout.LayoutParams.MATCH_PARENT - edit.hint = context.getString(R.string.search_hint) edit.colors = edit.colors.copy( @@ -156,8 +150,4 @@ class ToolbarView( view.edit.setIcon(icon, searchState.searchEngineSource.searchEngine.name) } - - companion object { - private const val TOOLBAR_ELEVATION_IN_DP = 16 - } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt similarity index 92% rename from app/src/main/java/org/mozilla/fenix/settings/SecretSettingsPreference.kt rename to app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt index aa0a7498f..6e128b7fe 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsPreference.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SecretSettingsFragment.kt @@ -12,7 +12,8 @@ import org.mozilla.fenix.ext.showToolbar /** * Lets the user customize Private browsing options. */ -class SecretSettingsPreference : PreferenceFragmentCompat() { +class SecretSettingsFragment : PreferenceFragmentCompat() { + override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_debug_settings)) diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt index 21c71a471..363bf901c 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt @@ -25,13 +25,13 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.crashes.CrashListActivity import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.settings -import org.mozilla.fenix.utils.Do import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.about.AboutItemType.LICENSING_INFO import org.mozilla.fenix.settings.about.AboutItemType.PRIVACY_NOTICE import org.mozilla.fenix.settings.about.AboutItemType.RIGHTS import org.mozilla.fenix.settings.about.AboutItemType.SUPPORT import org.mozilla.fenix.settings.about.AboutItemType.WHATS_NEW +import org.mozilla.fenix.utils.Do import org.mozilla.fenix.whatsnew.WhatsNew import org.mozilla.geckoview.BuildConfig as GeckoViewBuildConfig @@ -145,39 +145,39 @@ class AboutFragment : Fragment(), AboutPageListener { val context = requireContext() return listOf( - AboutPageItem.Item( + AboutPageItem( AboutItem.ExternalLink( WHATS_NEW, SupportUtils.getWhatsNewUrl(context) ), getString(R.string.about_whats_new, getString(R.string.app_name)) ), - AboutPageItem.Item( + AboutPageItem( AboutItem.ExternalLink( SUPPORT, SupportUtils.getSumoURLForTopic(context, SupportUtils.SumoTopic.HELP) ), getString(R.string.about_support) ), - AboutPageItem.Item( + AboutPageItem( AboutItem.Crashes, getString(R.string.about_crashes) ), - AboutPageItem.Item( + AboutPageItem( AboutItem.ExternalLink( PRIVACY_NOTICE, SupportUtils.getMozillaPageUrl(SupportUtils.MozillaPage.PRIVATE_NOTICE) ), getString(R.string.about_privacy_notice) ), - AboutPageItem.Item( + AboutPageItem( AboutItem.ExternalLink( RIGHTS, SupportUtils.getSumoURLForTopic(context, SupportUtils.SumoTopic.YOUR_RIGHTS) ), getString(R.string.about_know_your_rights) ), - AboutPageItem.Item( + AboutPageItem( AboutItem.ExternalLink(LICENSING_INFO, ABOUT_LICENSE_URL), getString(R.string.about_licensing_information) ), - AboutPageItem.Item( + AboutPageItem( AboutItem.Libraries, getString(R.string.about_other_open_source_libraries) ) diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutItem.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutItem.kt index e8cf2a79c..95e221ee4 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutItem.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutItem.kt @@ -14,6 +14,4 @@ enum class AboutItemType { WHATS_NEW, SUPPORT, PRIVACY_NOTICE, RIGHTS, LICENSING_INFO } -sealed class AboutPageItem { - data class Item(val type: AboutItem, val title: String) : AboutPageItem() -} +data class AboutPageItem(val type: AboutItem, val title: String) diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt index e4b418dd7..e4355655a 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutPageAdapter.kt @@ -20,19 +20,16 @@ class AboutPageAdapter(private val listener: AboutPageListener) : } override fun onBindViewHolder(holder: AboutItemViewHolder, position: Int) { - holder.bind(getItem(position) as AboutPageItem.Item) + holder.bind(getItem(position)) } private object DiffCallback : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: AboutPageItem, newItem: AboutPageItem) = - oldItem === newItem + oldItem.title == newItem.title override fun areContentsTheSame(oldItem: AboutPageItem, newItem: AboutPageItem) = - when (oldItem) { - is AboutPageItem.Item -> - newItem is AboutPageItem.Item && oldItem.title == newItem.title - } + oldItem == newItem } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/viewholders/AboutItemViewHolder.kt b/app/src/main/java/org/mozilla/fenix/settings/about/viewholders/AboutItemViewHolder.kt index 90cdbcfa7..d42ee1a97 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/about/viewholders/AboutItemViewHolder.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/about/viewholders/AboutItemViewHolder.kt @@ -17,7 +17,7 @@ class AboutItemViewHolder( ) : RecyclerView.ViewHolder(view) { private val title = view.about_item_title - private lateinit var item: AboutPageItem.Item + private lateinit var item: AboutPageItem init { itemView.setOnClickListener { @@ -25,7 +25,7 @@ class AboutItemViewHolder( } } - fun bind(item: AboutPageItem.Item) { + fun bind(item: AboutPageItem) { this.item = item title.text = item.title } diff --git a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleAdapter.kt b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleAdapter.kt index 4020893ed..57648d87d 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/advanced/LocaleAdapter.kt @@ -23,9 +23,8 @@ class LocaleAdapter(private val interactor: LocaleSettingsViewInteractor) : private var selectedLocale: Locale = Locale.getDefault() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseLocaleViewHolder { - val view = - LayoutInflater.from(parent.context) - .inflate(R.layout.locale_settings_item, parent, false) + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.locale_settings_item, parent, false) return when (viewType) { ItemType.DEFAULT.ordinal -> SystemLocaleViewHolder( diff --git a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt index 235024cc9..1c2d5098c 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/quicksettings/WebsiteInfoView.kt @@ -10,7 +10,7 @@ import android.view.ViewGroup import androidx.core.content.ContextCompat.getColor import androidx.core.view.isVisible import kotlinx.android.extensions.LayoutContainer -import kotlinx.android.synthetic.main.quicksettings_website_info.view.* +import kotlinx.android.synthetic.main.quicksettings_website_info.* import mozilla.components.support.ktx.android.content.getDrawableWithTint import org.mozilla.fenix.R @@ -19,13 +19,14 @@ import org.mozilla.fenix.R * * Currently it does not support any user interaction. * - * @param containerView [ViewGroup] in which this View will inflate itself. + * @param container [ViewGroup] in which this View will inflate itself. */ class WebsiteInfoView( - override val containerView: ViewGroup + container: ViewGroup ) : LayoutContainer { - val view: View = LayoutInflater.from(containerView.context) - .inflate(R.layout.quicksettings_website_info, containerView, true) + + override val containerView: View = LayoutInflater.from(container.context) + .inflate(R.layout.quicksettings_website_info, container, true) /** * Allows changing what this View displays. @@ -39,25 +40,25 @@ class WebsiteInfoView( bindCertificateName(state.certificateName) } - private fun bindUrl(url: String) { - view.url.text = url + private fun bindUrl(websiteUrl: String) { + url.text = websiteUrl } - private fun bindTitle(title: String) { - view.title.text = title + private fun bindTitle(websiteTitle: String) { + title.text = websiteTitle } private fun bindCertificateName(cert: String) { - val certificateLabel = view.context.getString(R.string.certificate_info_verified_by, cert) - view.certificateInfo.text = certificateLabel - view.certificateInfo.isVisible = cert.isNotEmpty() + val certificateLabel = containerView.context.getString(R.string.certificate_info_verified_by, cert) + certificateInfo.text = certificateLabel + certificateInfo.isVisible = cert.isNotEmpty() } private fun bindSecurityInfo(uiValues: WebsiteSecurityUiValues) { - val tint = getColor(view.context, uiValues.iconTintRes) - view.securityInfo.setText(uiValues.securityInfoRes) - view.securityInfoIcon.setImageDrawable( - view.context.getDrawableWithTint(uiValues.iconRes, tint) + val tint = getColor(containerView.context, uiValues.iconTintRes) + securityInfo.setText(uiValues.securityInfoRes) + securityInfoIcon.setImageDrawable( + containerView.context.getDrawableWithTint(uiValues.iconRes, tint) ) } } diff --git a/app/src/main/java/org/mozilla/fenix/shortcut/NewTabShortcutIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/shortcut/NewTabShortcutIntentProcessor.kt index 94463aa53..a54809a43 100644 --- a/app/src/main/java/org/mozilla/fenix/shortcut/NewTabShortcutIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/shortcut/NewTabShortcutIntentProcessor.kt @@ -28,7 +28,7 @@ class NewTabShortcutIntentProcessor : IntentProcessor { * @param intent The intent to process. * @return True if the intent was processed, otherwise false. */ - override suspend fun process(intent: Intent): Boolean { + override fun process(intent: Intent): Boolean { val safeIntent = SafeIntent(intent) val (searchExtra, startPrivateMode) = when (safeIntent.action) { ACTION_OPEN_TAB -> StartSearchIntentProcessor.STATIC_SHORTCUT_NEW_TAB to false 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 21f416e1e..d3272be44 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayDialogFragment.kt @@ -10,11 +10,13 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatDialogFragment +import androidx.core.view.isVisible import androidx.core.view.updatePadding import androidx.fragment.app.FragmentManager import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import kotlinx.android.synthetic.main.component_tabstray.view.* +import kotlinx.android.synthetic.main.component_tabstray_fab.view.* import kotlinx.android.synthetic.main.fragment_tab_tray_dialog.* import kotlinx.android.synthetic.main.fragment_tab_tray_dialog.view.* import mozilla.components.browser.session.Session @@ -31,6 +33,7 @@ import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.TabCollectionStorage +import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.utils.allowUndo @@ -42,6 +45,10 @@ class TabTrayDialogFragment : AppCompatDialogFragment() { private val tabTrayView: TabTrayView get() = _tabTrayView!! + private val snackbarAnchor: View? + get() = if (tabTrayView.fabView.new_tab_button.isVisible) tabTrayView.fabView.new_tab_button + else null + private val collectionStorageObserver = object : TabCollectionStorage.Observer { override fun onCollectionCreated(title: String, sessions: List) { showCollectionSnackbar() @@ -54,11 +61,13 @@ class TabTrayDialogFragment : AppCompatDialogFragment() { private val selectTabUseCase = object : TabsUseCases.SelectTabUseCase { override fun invoke(tabId: String) { + requireContext().components.analytics.metrics.track(Event.OpenedExistingTab) requireComponents.useCases.tabsUseCases.selectTab(tabId) navigateToBrowser() } override fun invoke(session: Session) { + requireContext().components.analytics.metrics.track(Event.OpenedExistingTab) requireComponents.useCases.tabsUseCases.selectTab(session) navigateToBrowser() } @@ -66,11 +75,13 @@ class TabTrayDialogFragment : AppCompatDialogFragment() { private val removeTabUseCase = object : TabsUseCases.RemoveTabUseCase { override fun invoke(sessionId: String) { + requireContext().components.analytics.metrics.track(Event.ClosedExistingTab) showUndoSnackbarForTab(sessionId) requireComponents.useCases.tabsUseCases.removeTab(sessionId) } override fun invoke(session: Session) { + requireContext().components.analytics.metrics.track(Event.ClosedExistingTab) showUndoSnackbarForTab(session.id) requireComponents.useCases.tabsUseCases.removeTab(session) } @@ -134,6 +145,7 @@ class TabTrayDialogFragment : AppCompatDialogFragment() { ) tabLayout.setOnClickListener { + requireContext().components.analytics.metrics.track(Event.TabsTrayClosed) dismissAllowingStateLoss() } @@ -182,7 +194,8 @@ class TabTrayDialogFragment : AppCompatDialogFragment() { sessionManager.add(snapshot.session, isSelected, engineSessionState = state) }, operation = { }, - elevation = ELEVATION + elevation = ELEVATION, + anchorView = snackbarAnchor ) } } @@ -226,7 +239,8 @@ class TabTrayDialogFragment : AppCompatDialogFragment() { context?.components?.core?.sessionManager?.restore(snapshot) }, operation = { }, - elevation = ELEVATION + elevation = ELEVATION, + anchorView = snackbarAnchor ) } } @@ -239,6 +253,7 @@ class TabTrayDialogFragment : AppCompatDialogFragment() { isDisplayedWithBrowserToolbar = true, view = (view as View) ) + .setAnchorView(snackbarAnchor) .setText(requireContext().getString(R.string.create_collection_tabs_saved)) .setAction(requireContext().getString(R.string.create_collection_view)) { dismissAllowingStateLoss() 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 cf7ece6a5..0562f2fba 100644 --- a/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt +++ b/app/src/main/java/org/mozilla/fenix/tabtray/TabTrayView.kt @@ -30,6 +30,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.tabstray.BrowserTabsTray import org.mozilla.fenix.R +import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -64,6 +65,8 @@ class TabTrayView( get() = container init { + container.context.components.analytics.metrics.track(Event.TabsTrayOpened) + val hasAccessibilityEnabled = view.context.settings().accessibilityServicesEnabled toggleFabText(isPrivate) @@ -81,6 +84,7 @@ class TabTrayView( override fun onStateChanged(bottomSheet: View, newState: Int) { if (newState == BottomSheetBehavior.STATE_HIDDEN) { + container.context.components.analytics.metrics.track(Event.TabsTrayClosed) interactor.onTabTrayDismissed() } } @@ -154,6 +158,7 @@ class TabTrayView( } view.tab_tray_overflow.setOnClickListener { + container.context.components.analytics.metrics.track(Event.TabsTrayMenuOpened) menu = tabTrayItemMenu.menuBuilder.build(container.context) menu?.show(it) ?.also { pu -> @@ -167,6 +172,7 @@ class TabTrayView( view.tab_tray_new_tab.apply { isVisible = hasAccessibilityEnabled setOnClickListener { + sendNewTabEvent(isPrivateModeSelected) interactor.onNewTabTapped(isPrivateModeSelected) } } @@ -174,11 +180,22 @@ class TabTrayView( fabView.new_tab_button.apply { isVisible = !hasAccessibilityEnabled setOnClickListener { + sendNewTabEvent(isPrivateModeSelected) interactor.onNewTabTapped(isPrivateModeSelected) } } } + private fun sendNewTabEvent(isPrivateModeSelected: Boolean) { + val eventToSend = if (isPrivateModeSelected) { + Event.NewPrivateTabTapped + } else { + Event.NewTabTapped + } + + container.context.components.analytics.metrics.track(eventToSend) + } + fun expand() { behavior.state = BottomSheetBehavior.STATE_EXPANDED } @@ -195,6 +212,12 @@ class TabTrayView( updateState(view.context.components.core.store.state) scrollToSelectedTab() + + if (isPrivateModeSelected) { + container.context.components.analytics.metrics.track(Event.TabsTrayPrivateModeTapped) + } else { + container.context.components.analytics.metrics.track(Event.TabsTrayNormalModeTapped) + } } override fun onTabReselected(tab: TabLayout.Tab?) { /*noop*/ } @@ -294,6 +317,7 @@ class TabTrayItemMenu( context.getString(R.string.tab_tray_menu_item_save), textColorResource = R.color.primary_text_normal_theme ) { + context.components.analytics.metrics.track(Event.TabsTraySaveToCollectionPressed) onItemTapped.invoke(Item.SaveToCollection) }.apply { visible = shouldShowSaveToCollection }, @@ -301,6 +325,7 @@ class TabTrayItemMenu( context.getString(R.string.tab_tray_menu_item_share), textColorResource = R.color.primary_text_normal_theme ) { + context.components.analytics.metrics.track(Event.TabsTrayShareAllTabsPressed) onItemTapped.invoke(Item.ShareAllTabs) }, @@ -308,6 +333,7 @@ class TabTrayItemMenu( context.getString(R.string.tab_tray_menu_item_close), textColorResource = R.color.primary_text_normal_theme ) { + context.components.analytics.metrics.track(Event.TabsTrayCloseAllTabsPressed) onItemTapped.invoke(Item.CloseAllTabs) } ) 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 727e8d0a1..fbf5b28e3 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -309,7 +309,7 @@ class Settings private constructor( val shouldShowSearchShortcuts by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_show_search_shortcuts), - default = true + default = false ) val shouldUseDarkTheme by booleanPreference( @@ -775,6 +775,19 @@ class Settings private constructor( default = 0 ) + fun setOpenTabsCount(count: Int) { + preferences.edit().putInt( + appContext.getPreferenceKey(R.string.pref_key_open_tabs_count), + count + ).apply() + } + + val openTabsCount: Int + get() = preferences.getInt( + appContext.getPreferenceKey(R.string.pref_key_open_tabs_count), + 0 + ) + private var savedLoginsSortingStrategyString by stringPreference( appContext.getPreferenceKey(R.string.pref_key_saved_logins_sorting_strategy), default = SavedLoginsFragment.SORTING_STRATEGY_ALPHABETICALLY diff --git a/app/src/main/res/anim/placeholder_animation.xml b/app/src/main/res/anim/placeholder_animation.xml new file mode 100644 index 000000000..80c254842 --- /dev/null +++ b/app/src/main/res/anim/placeholder_animation.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/toolbar_background_private.xml b/app/src/main/res/drawable/toolbar_background_private.xml deleted file mode 100644 index 146188097..000000000 --- a/app/src/main/res/drawable/toolbar_background_private.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/account_preference.xml b/app/src/main/res/layout/account_preference.xml index d125df395..1a6f0af47 100644 --- a/app/src/main/res/layout/account_preference.xml +++ b/app/src/main/res/layout/account_preference.xml @@ -46,10 +46,9 @@ android:layout_height="wrap_content" android:layout_below="@id/displayName" android:layout_alignStart="@id/displayName" + android:textColor="?secondaryText" android:maxLines="4" - android:text="@string/preferences_account_default_name" - android:textColor="?primaryText" - app:fontFamily="@font/metropolis_bold" /> + android:text="@string/preferences_account_default_name" /> diff --git a/app/src/main/res/layout/collections_list_item.xml b/app/src/main/res/layout/collections_list_item.xml index ccf81e587..99fb2b038 100644 --- a/app/src/main/res/layout/collections_list_item.xml +++ b/app/src/main/res/layout/collections_list_item.xml @@ -56,7 +56,7 @@ android:ellipsize="end" android:maxLines="2" android:minLines="2" - android:textAppearance="@style/SubtitleTextStyle" + android:textColor="?secondaryText" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/collection_item" app:layout_constraintStart_toStartOf="@+id/collection_item" diff --git a/app/src/main/res/layout/component_collection_creation.xml b/app/src/main/res/layout/component_collection_creation.xml index 10d9e3cb6..88e156ef4 100644 --- a/app/src/main/res/layout/component_collection_creation.xml +++ b/app/src/main/res/layout/component_collection_creation.xml @@ -47,6 +47,7 @@ android:textAllCaps="false" android:textColor="@color/neutral_text" android:textSize="16sp" + android:fontFamily="@font/metropolis_bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="1" app:layout_constraintStart_toEndOf="@+id/guideline" @@ -163,7 +164,7 @@ android:text="@string/create_collection_save_to_collection_empty" android:textColor="?neutral" android:textSize="16sp" - android:textStyle="bold" + android:fontFamily="@font/metropolis_semibold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/save_button" app:layout_constraintStart_toEndOf="@id/bottom_bar_icon_button" @@ -176,7 +177,8 @@ android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:text="@string/create_collection_save" - android:textColor="?neutral" + android:textColor="@color/photonWhite" + app:fontFamily="@font/metropolis_medium" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/app/src/main/res/layout/component_collection_creation_select_collection.xml b/app/src/main/res/layout/component_collection_creation_select_collection.xml index 5e396d4a2..f08e5937b 100644 --- a/app/src/main/res/layout/component_collection_creation_select_collection.xml +++ b/app/src/main/res/layout/component_collection_creation_select_collection.xml @@ -140,6 +140,7 @@ android:gravity="center_vertical" android:singleLine="true" android:text="@string/create_collection_add_new_collection" + android:fontFamily="@font/metropolis" android:textColor="?neutral" android:textSize="16sp" android:textStyle="bold" diff --git a/app/src/main/res/layout/component_sync_tabs.xml b/app/src/main/res/layout/component_sync_tabs.xml index 6b82ef336..0ec378aad 100644 --- a/app/src/main/res/layout/component_sync_tabs.xml +++ b/app/src/main/res/layout/component_sync_tabs.xml @@ -6,7 +6,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/history_wrapper" + android:id="@+id/synced_tabs_wrapper" android:layout_width="match_parent" android:layout_height="match_parent"> + tools:listitem="@layout/sync_tabs_list_item"/> diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index d9d325649..c2a77fa70 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -11,38 +11,24 @@ android:background="?foundation" tools:context=".search.SearchFragment"> - - - - - + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toBottomOf="@id/toolbar"> + android:text="@string/enhanced_tracking_protection_blocked" /> + android:textAlignment="viewStart" /> + app:layout_constraintTop_toBottomOf="@+id/synced_tab_item_title" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/synced_tab_item_url" /> diff --git a/app/src/main/res/layout/tab_tray_item.xml b/app/src/main/res/layout/tab_tray_item.xml index 338631345..0a465794e 100644 --- a/app/src/main/res/layout/tab_tray_item.xml +++ b/app/src/main/res/layout/tab_tray_item.xml @@ -29,10 +29,20 @@ android:layout_height="69dp" android:layout_marginStart="16dp" android:layout_marginTop="8dp" + android:backgroundTint="?tabTrayThumbnailItemBackground" app:cardBackgroundColor="@color/photonWhite" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> + + - + android:layout_marginTop="8dp"> - + + + diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 64b1caf45..77eba73a6 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -544,7 +544,7 @@ android:name="org.mozilla.fenix.settings.about.AboutFragment"/> @color/tab_tray_item_media_background_dark_theme @color/tab_tray_heading_icon_dark_theme @color/tab_tray_heading_icon_inactive_dark_theme + @color/tab_tray_item_thumbnail_background_dark_theme + @color/tab_tray_item_thumbnail_icon_dark_theme @color/top_site_background_dark_theme @color/top_site_border_dark_theme @color/top_site_title_text_dark_theme + + @color/synced_tabs_separator_dark_theme + @color/collection_icon_color_violet_dark_theme @color/collection_icon_color_blue_dark_theme diff --git a/app/src/main/res/values-trs/strings.xml b/app/src/main/res/values-trs/strings.xml index d81ed3401..9afcbc3d9 100644 --- a/app/src/main/res/values-trs/strings.xml +++ b/app/src/main/res/values-trs/strings.xml @@ -1062,24 +1062,139 @@ Gāyì\'ì sēsiûn ngà si kamarât Gārāsun si kōrreôt si lūgaj + + Dūnâj Firefox si nāgi\'iaj nūguàn\'anj si kuentât, sanī si dure\'ej nej datô râj sunt ngà aché nunt riña aga\' nan. + + Dūnâj %s si nāgi\'iaj nūguàn\'anj si kuentât, sanī si dure\'ej nej datô râj sunt ngà aché nunt riña aga\' nan. Gāhuī riña internet Dūyichin\' + + Sī ga\'ue nādūnāt sa mà riña nej karpetâ ngà nīka \'naj + + + + Riña gā\'ue nāgi\'iát riña sa dugumî sò\' + + Sa huā hue\'ê doj guendâ nārán riña sa naga\'nāj a + + Nitāj gà\' \'ngō ganikò\' sò\' si gāchē nunt + + Duguminj nej si datôt. %s naran rayi\'ît riña nej sa naga\'nāj sa \'iát nga aché nunt. Gāhuin chrūn doj + + Sa huā chre\' (dàj huaj \'naj) + + Riña dòj sa naga\'nāj a naran. Dàj rû\' nayi\'nïnj riña pâjina nāyi\'nïn nīñanj. + + Ahuin si riñā narán sa dugumî sò\' \'na\' niñā guendâ nej sa naga\'nāj a Sa nùkuaj doj + + Narán man riña doj sa naga\'nāj a, nej nuguan\' nata\'a nī nej bēntanâ narugui\' man\'an. Hìo doj nayî\'nïnj riña nej pâjina, sanī huā sa sī ga\'ue gi\'iaj sun hue\'e. + + Ahuin si riñā narán sa nùkuaj doj dugumî sò\' \'na\' niñā guendâ nej sa naga\'nāj a + + Nāgi\'iaj mun\'ûn\' + + Nāguī nej sa naga\'nāj a asi a\'ngô sa riñā ruhuât naránt. + + Nan huin sa riñā narán sa dugumî sò\' \'na\' niñā guendâ nej sa naga\'nāj a Nej kôki + + Sa naga\'nāj riña nej sîtio nī nej rêd sociâl + + Si kokî nej sitiô nu atûjt + + Daran\' nej kokî ânej e (ga\'ue gī\'iaj sun a\'nan\' web gī\'ia) + + Daran\' nej kokî (ga\'ue dūre\'ej dā\'āj sîtio) + + Sa nīkāj sa naga\'nāj a + + Riña daran\' nej rakïj ñanj + + Màn riña nej rakïj ñanj huìi + + Màn riña nej rakïj ñanj nagi\'iaj mān\'ânt + + Nej kriptominêro + + Nej da\'nga\' rā\'a Nitāj si hūaj nāyi\'nïn Gā\'ue + + Nej sa naga\'nāj nej rêd sosiâl + + + Sī ga\'nïnjt riña nej rêd sōsiâl da\' nāga\'nāj nìko sa \'iát ngà aché nunt. + + Nej kokî naga\'nāj riña nej dūguì\' nej sîtio + + + Nārán riña nej kokî arâj sun nej rêd duyinga\' sa ane\'e nī nej dukuâ sun nadigi\'ñûn sa anïn ruhuâ guìi da\' si naga\'nāj nìko man nej sa \'iát nga aché nunt. + + Nej kriptominêro + + Nu â\'nïn riña nej skripts yi\'ìi da\' gātū nej man riña si āgâ\'t nī gīrī nej man san\'ānj nānèe. + + Nej sa nani\'in nej da\'nga\' rā\'a + + Nu â\'nïn da\' sī nari a\'ngô sa yi\'ìi nej nuguan\' nīkāj si āgâ\'t nī ga\'ue nāga\'nāj nej man sò\'. + + Sa nīkāj sa naga\'nāj a + + + Naran riña nej nuguan\' duyinga\' nej sa ane\'e, sa ni\'io\' nī riña nej nuguan\' nīkāj sa naga\'nāj a. Ga\'ue gā\'uì\' yī\'ij dàj \'iaj sun nej sîtio. + + Da\' nanûn kolô dînda riña eskûdo, ngà narán %s sa naga\'nāj riña \'ngō sitio. Gūru\'man ra\'a da\' gīni\'înt doj sa huā rayi\'î man. + + Ngà \'IAJ SUN nej sa dugumî sò\' riña sitiô nan + + NITĀJ SI \'IAJ SUN nej sa dugumî sò\' riña sitiô nan + + + Nitāj si \'iaj sun sa nùkuaj narán riña sa naga\'nāj a riña nej sitiô nan + + Gūij ne\' rūkùu + + Nej nuguan\' tna\'uēj rayi\'ît + + Dukuâ ñanj nīkāj kodigô huā nî\'nïnj arân sun ñûnj + + Sa nākà doj huā riña %s + + %s Dukuâ ñanj OSS + + + Sa rugûñu\'ūnj un + + Nej sa gahui a\'nan\' + + Nuguan\' huì huin si dūkuan + + + Gīni\'in nej nuguan\' tna\'uēj rayi\'ît + + Si nùguàn\' līsênsia + + Nej dukuâ ñanj arâj sun ñûnj + + Menû nagi\'aj hìo: gūru\'man ra\'a %1$d da\' nāchrūnt + Menû nagi\'aj hìo ngà \'iaj sun + 1 rakïj ñanj @@ -1088,22 +1203,58 @@ Gūxūn nī nāchrūnt a\'ngô hiūj u + + Gāchrūn & Gūij Gāchrūn + + URL ngà nachîn riña portapapeles + + + Gāchrūn man riña pantâya Dūyichin\' Nūtà\' + + Ginu ngè riña sitiô nan + + Si yūgui aksêso dīrêkto + + + Gā\'ue nāchrūnt sitiô nan riña pajinâ ayi\'ìt riña aga\' a\'min nīkājt da\' ga\'ue hìo gātūt riñanj dàj rû\' \'iaj \'ngō aplikāsiûn + + + Nej riña gayi\'ìt sēsiûn nī nej da\'nga\' huìi + + Nā\'nïnj sà\' nej riña gayi\'ìt sēsiûn nī nej da\'nga\' huìi + + Gāchìnj nì\'iaj nā\'nïnj sà\'t + + Nitāj āmān nā\'nïnj sà\'t + + Nāchra man\'an + + Nāgi\'iaj nūguàn\'àn nej riña ayì\'ìt sēsiûn Nāchrūn Dūnâ\’àj + + Gānātū ñû + + Gāyi\'ì sēsiûn riña Sync + + Sa gayi\'ìt sesiûn ngà naginu sà\' Gāhuin chrūn doj + + Nā\'nïnj sà\' + Nūtà\' diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 3c6241eba..305e19826 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -51,6 +51,7 @@ + @@ -59,6 +60,8 @@ + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b31fb08d0..2efbf79d8 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -47,6 +47,7 @@ #0015141A @android:color/white @color/light_grey_30 + @color/light_grey_30 @color/light_grey_80 #7542E5 #0250BB @@ -82,6 +83,8 @@ #312A65 @color/ink_20 @color/ink_20_48a + @color/light_grey_10 + @color/light_grey_60 #FBFBFE @@ -104,6 +107,7 @@ #F515141A @color/dark_grey_50 @color/dark_grey_10 + @color/dark_grey_10 @color/light_grey_90 #AB71FF #00B3F4 @@ -138,6 +142,8 @@ #9059FF @color/violet_50 @color/violet_50_48a + @color/dark_grey_50 + @color/dark_grey_05 #FBFBFE @@ -241,6 +247,8 @@ @color/tab_tray_item_media_background_light_theme @color/tab_tray_heading_icon_light_theme @color/tab_tray_heading_icon_inactive_light_theme + @color/tab_tray_item_thumbnail_background_light_theme + @color/tab_tray_item_thumbnail_icon_light_theme #DFDFE3 @@ -250,6 +258,9 @@ @color/top_site_border_light_theme @color/top_site_title_text_light_theme + + @color/synced_tabs_separator_light_theme + @color/collection_icon_color_violet_light_theme @color/collection_icon_color_blue_light_theme diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 08e09bdd2..294a50b4b 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -79,7 +79,7 @@ 12dp 8dp 8dp - 8dp + 18dp 18dp 40dp 20dp diff --git a/app/src/main/res/values/preference_keys.xml b/app/src/main/res/values/preference_keys.xml index 2a5dd38f2..7e2c43baa 100644 --- a/app/src/main/res/values/preference_keys.xml +++ b/app/src/main/res/values/preference_keys.xml @@ -177,6 +177,8 @@ pref_key_debug_settings + pref_key_open_tabs_count + pref_key_search_count pref_key_search_widget_cfr_display_count pref_key_search_widget_cfr_dismiss_count diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3d2ffb4a5..e84b80112 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -20,6 +20,7 @@ @style/DialogStyleNormal @style/DialogStyleNormal false + @android:color/transparent false @color/prompt_login_edit_text_cursor_color_normal_theme @color/readermode_start_gradient_normal_theme @color/readermode_end_gradient_normal_theme - + @color/synced_tabs_separator @color/tab_tray_item_background_normal_theme @color/tab_tray_item_selected_background_normal_theme @@ -83,6 +84,8 @@ @color/tab_tray_item_media_background_normal_theme @color/tab_tray_heading_icon_normal_theme @color/tab_tray_heading_icon_inactive_normal_theme + @color/tab_tray_item_thumbnail_background_normal_theme + @color/tab_tray_item_thumbnail_icon_normal_theme @drawable/ic_logo_wordmark_normal @@ -208,6 +211,8 @@ @color/tab_tray_item_media_background_private_theme @color/tab_tray_heading_icon_dark_theme @color/tab_tray_heading_icon_inactive_dark_theme + @color/tab_tray_item_thumbnail_background_normal_theme + @color/tab_tray_item_thumbnail_icon_normal_theme @drawable/ic_logo_wordmark_private @@ -445,7 +450,7 @@