Bug 1801648 - Fix autoplay settings are not getting updated in private mode
[gecko.git] / mobile / android / docs / changelog.md
blob2efb6464285932a31cc0922e9202f5bd33482f8c
1 ---
2 layout: page
3 title: Changelog
4 permalink: /changelog/
5 ---
6 # 109.0.0 (In Development)
7 * [Commits](https://github.com/mozilla-mobile/firefox-android/compare/v108.0.0...main)
8 * [Dependencies](https://github.com/mozilla-mobile/firefox-android/blob/main/android-components/plugins/dependencies/src/main/java/DependenciesPlugin.kt)
9 * [Gecko](https://github.com/mozilla-mobile/firefox-android/blob/main/android-components/plugins/dependencies/src/main/java/Gecko.kt)
10 * [Configuration](https://github.com/mozilla-mobile/firefox-android/blob/main/android-components/.config.yml)
12 * **browser-menu**:
13   * πŸš’ Bug Fixed [bug #1800885](https://bugzilla.mozilla.org/show_bug.cgi?id=1800885) Increase touch target of Add/Edit checkbox from `mozac_browser_menu_item_image_text_checkbox_button.xml` to improve accessibility.
14   
15 * **All components**
16   * βš οΈIncreased `compileSdkVersion` to 33 (Android 13)
17 * **feature-awesomebar**
18   * `SearchSuggestionProvider` and `SearchActionProvider` now have a new parameter `suggestionsHeader`, to add title to suggestions.
20 * **lib-crash**
21   * πŸš’ Bug fixed [bug #1801349](https://bugzilla.mozilla.org/show_bug.cgi?id=1801349).  Execute `recordCrashBreadcrumb()` inside our coroutine scope to avoid issues with mutating the array from multiple threads at once.
22 * **lib-crash-sentry**
23   * πŸš’ Bug fixed [bug #1801349](https://bugzilla.mozilla.org/show_bug.cgi?id=1801349).  Copy the breadcrumb date to the Sentry breadcrumb.
25 * **support-ktx**:
26   * Added `String.toShortUrl` extension that allows making URLs more user friendly [#1796379](https://bugzilla.mozilla.org/show_bug.cgi?id=1796379)
28 * **browser-engine-gecko**
29   * πŸ†• Added `GeckoCookieBannersStorage.kt` to manage cookie banner exceptions [bug #1797605](https://bugzilla.mozilla.org/show_bug.cgi?id=1797605).
31 * **concept-engine**
32   * πŸš’ Bug fixed [bug #1801648](https://bugzilla.mozilla.org/show_bug.cgi?id=1801648). Fix autoplay settings are not getting updated in private mode.
34 # 108.0.0
35 * [Commits](https://github.com/mozilla-mobile/firefox-android/compare/v107.0.0...v108.0.0)
36 * [Dependencies](https://github.com/mozilla-mobile/firefox-android/blob/v108.0.0/android-components/buildSrc/src/main/java/Dependencies.kt)
37 * [Gecko](https://github.com/mozilla-mobile/firefox-android/blob/v108.0.0/android-components/buildSrc/src/main/java/Gecko.kt)
38 * [Configuration](https://github.com/mozilla-mobile/firefox-android/blob/v108.0.0/android-components/.config.yml)
40 * **feature-search**
41   * πŸ†• A new action `RefreshSearchEnginesAction` was added to the `BrowserAction` to allow for refreshing search engines when app locale is changed. For more references see [bug #1800209](https://bugzilla.mozilla.org/show_bug.cgi?id=1800209).
43 * **ui-autocomplete**
44   * πŸš’ Bug fixed [bug #1794933](https://bugzilla.mozilla.org/show_bug.cgi?id=1794933) Immediately remove autocomplete when not applicable anymore.
46 * **concept-engine**
47   * [bug #1798359](https://bugzilla.mozilla.org/show_bug.cgi?id=1798359) Set Total Cookie Protection as the default cookie policy for all Tracking Protection modes. Read more about Total Cookie Protection [here](https://blog.mozilla.org/en/mozilla/firefox-rolls-out-total-cookie-protection-by-default-to-all-users-worldwide/).
48   * Renamed `EngineSession.onSaveToPdfError` to `EngineSession.onSaveToPdfException`.
50 * **browser-engine-gecko**
51   * πŸ†• A new action `SaveToPdfExceptionAction` was added to the `EngineAction` to allow for notifying consumers on unsuccessful Save to PDF requests. For more references see [bug #1796482](https://bugzilla.mozilla.org/show_bug.cgi?id=1796482).
52   * βš οΈ When using the save to pdf feature, now it's required have a middleware that handles the `SaveToPdfExceptionAction`, or your application will crash when an error happens when requesting a page to be saved as PDF.
54 * **compose-cfr**
55   * πŸ†• New composable popup allowing to offer more context about a specific View anchor on the screen. Supports RTL along with many other customizations and anchorings.
57 * **feature-qr**
58   * QRFeature now allows querying if scanning is in progress with a new `isScanInProgress` property. This helps deciding on whether to resume scanning by calling `scan` in a new `QRFeature` instance as it can happen if the process is restarted as a followup to the user updating system permissions for the app.
60 * **concept-engine**:
61   * Added support for changing the cookie banner handling setting in regular and private browsing. [Bugzilla](https://bugzilla.mozilla.org/show_bug.cgi?id=1796144)
63 * **concept-storage**:
64   * πŸ†• New API: `StorageMaintenanceRegistry` in `concept-storage` that deals with registering/unregistering storage maintenance workers.
65   * βš οΈ **This is a breaking change**: Added a new parameter `dbSizeLimit` to `Storage.runMaintenance` API to indicate Maximum DB size to aim for, in bytes.
67 * **browser-storage-sync**:
68   * πŸ†• New: An abstract WorkManager Worker class `StorageMaintenanceWorker` is introduced. [Bugzilla](https://bugzilla.mozilla.org/show_bug.cgi?id=1795903)
69   * πŸ†• New: A Kotlin object `GlobalPlacesDependencyProvider` is introduced to provide `placesStorage: PlacesStorage` globally when needed.
70   * βš οΈ **This is a breaking change**: `PlacesStorage.runMaintenance` API has changed. Now it needs `dbSizeLimit` parameter as it implements new version of `Storage` API.
72 * **support-ktx**:
73   * The colors of the icons from the status bar should be in contrast with the status bar background color [#1795650](https://bugzilla.mozilla.org/show_bug.cgi?id=1795650)
75 * **service-glean**
76   * Re-export TextMetricType, RateMetricType, DenominatorMetricType, NumeratorMetricType to make them usable by applications [#13010](https://github.com/mozilla-mobile/android-components/pull/13010)
78 * **browser-state**:
79   * `UpdateThumbnailAction` and `RemoveThumbnailAction` now throw an exception if those actions are not handled with a middleware.
80   * See `BrowserThumbnails` and `ThumbnailsMiddleware` for example usages within other features.
81   * Removed handling of `LowMemoryAction` in `SystemReducer` on in-memory thumbnails.
83 * **browser-tabstray**:
84   * `TabViewHolder` no longer checks if a thumbnail is in memory before retrieving a thumbnail from the `ImageLoader`.
86 # 107.0.0
87 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v106.0.0..v107.0.0)
88 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/154?closed=1)
89 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v107.0.0/buildSrc/src/main/java/Dependencies.kt)
90 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v107.0.0/buildSrc/src/main/java/Gecko.kt)
91 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v107.0.0/.config.yml)
93 * **feature-syncedtabs**
94   * πŸš’ Bug fixed [issue #12930](https://github.com/mozilla-mobile/android-components/issues/12930) Ensure `DefaultPresenter` will unregister it's `FxaAccountManager` observers when it's `lifecycleOwner` is stopped to prevent memory leaks.
96 * **feature-app-links**
97   * πŸš’ Bug fixed [issue #12804](https://github.com/mozilla-mobile/android-components/issues/12804) Speculative fix for a TransactionTooLargeException or RuntimeException when querying activities.
99 * **all modules**
100   * Updated the locally published artifacts to use a single timestamp rather than many [#12902](https://github.com/mozilla-mobile/android-components/issues/12902)
102 * **nimbus-gradle-plugin**:
103   * Updated the plugin to use the version of application services defined in the buildSrc Dependencies.
105 * **browser-engine-gecko**:
106   * Canceling the "Open in app?" displays an empty page [#12894](https://github.com/mozilla-mobile/android-components/issues/12894)
108 * **feature-readerview**:
109   * πŸŒŸ Reader Mode now defers to the active dark mode for the default color scheme.
111 # 106.0.0
112 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v105.0.0..v106.0.0)
113 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/153?closed=1)
114 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v106.0.0/buildSrc/src/main/java/Dependencies.kt)
115 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v106.0.0/buildSrc/src/main/java/Gecko.kt)
116 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v106.0.0/.config.yml)
118 * **concept-engine**, **feature-sitepermissions**
119   * πŸ†• New `name` property for Permission which allows to easily identify and differentiate Permissions.
120   * Use the permission name when reporting telemetry for the permission dialogs. [#12683](https://github.com/mozilla-mobile/android-components/issues/12683).
122 * **browser-engine-gecko**
123   * πŸš’ Bug fixed [fenix issue #16943](https://github.com/mozilla-mobile/fenix/issues/26943) - Prevent crashes when accessing a time picker with blank step value.
125 * **browser-storage-sync**:
126   * πŸš’ Bug fixed [issue #12689](https://github.com/mozilla-mobile/android-components/issues/12689) Decouple autocomplete suggestions from history search suggestions by using a separate reader which allows for separate management.
128 * **support-ktx**
129   * πŸš’ Bug fixed [issue #12689](https://github.com/mozilla-mobile/android-components/issues/12689)  Make `Context.shareMedia` work with Android Direct Share.
131 * **feature-accounts-push**:
132   * βš οΈ **This is a breaking change**: `FxaPushSupportFeature` now requires to be explicitly started with `initialize`.
133   * The constructor for `FxaPushSupportFeature` has a `coroutineScope` parameter that defaults to a `CoroutineScope(Dispatchers.IO)`.
135 # 105.0.0
136 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v104.0.0...v105.0.0)
137 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/152?closed=1)
138 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v105.0.0/buildSrc/src/main/java/Dependencies.kt)
139 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v105.0.0/buildSrc/src/main/java/Gecko.kt)
140 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v105.0.0/.config.yml)
142 * **feature-search**:
143   * Allow the search widget to match the resized width [#12676](https://github.com/mozilla-mobile/android-components/issues/12676).
145 * **feature-findinpage**:
146   * πŸš’ Bug fixed [issue #12637](https://github.com/mozilla-mobile/android-components/issues/12637) Disable find in page previous and forward buttons if the query is empty
148 * **feature-search**:
149   * Implement the common part of search widget in Android Components [#12565](https://github.com/mozilla-mobile/android-components/issues/12565).
151 * **feature-prompts**:
152   * Added prompt dismiss listener to `ChoicePromptDelegate`. [#12562](https://github.com/mozilla-mobile/android-components/issues/12562)
154 * **browser-engine-gecko**:
155   * Add support for Save to PDF in the
157 * **concept-engine**:
158   * Add new `requestPdfToDownload` API in `Engine`. This is currently only supported in the Gecko Engine.
160 * **browser-storage-sync**:
161   * Stop reporting to the crash servers the expected `OperationInterrupted` exceptions for when interrupting in progress reads/writes from Application-Services. [#12557](https://github.com/mozilla-mobile/android-components/issues/12557), [#12569](https://github.com/mozilla-mobile/android-components/issues/12569).
163 * **support-migration**
164   * βš οΈ **This is a breaking change**: This component was removed since the Fennec -> Fenix migration is no longer supported (https://github.com/mozilla-mobile/fenix/pull/23651/)
166 * **nimbus-gradle-plugin**
167   * βš οΈ **This is a breaking change**: Updated the NimbusGradlePlugin to use the new nimbus cli commands.
169 # 104.0.0
170 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v103.0.0...v104.0.0)
171 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/151?closed=1)
172 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v104.0.0/buildSrc/src/main/java/Dependencies.kt)
173 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v104.0.0/buildSrc/src/main/java/Gecko.kt)
174 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v104.0.0/.config.yml)
176 * **feature-media**:
177   * πŸš’ Bug fixed [issue #12433](https://github.com/mozilla-mobile/android-components/issues/12433) Prevent media notifications updates that would cause it to flicker or loose the action button.
179 * **browser-awesomebar**:
180   * πŸš’ Bug fixed [issue #12469](https://github.com/mozilla-mobile/android-components/issues/12469) Cancel previous queries from the application-services persistence layer before new suggestions requests.
182 * **service-firefox-accounts**
183   * `SyncStatus` can now be `LoggedOut`.
184   * `SyncStoreSupport` will update the `SyncStore` with `LoggedOut` when observed.
186 * **browser-toolbar**
187   * πŸš’ Bug fixed [issue #12497](https://github.com/mozilla-mobile/android-components/issues/12497) - Set the same margin to toolbar background for display as for edit
189 * **feature-recentlyclosed**
190   * πŸš’ Bug fixed [issue #12470](https://github.com/mozilla-mobile/android-components/issues/12470) - Set autoMirrored to true to fix RTL issues
192 * **browser-awesomebar**:
193   * πŸš’ Bug fixed [issue #12469](https://github.com/mozilla-mobile/android-components/issues/12469) Cancel previous queries before new suggestions requests.
195 * **service-pocket**
196   * Add an index for sponsored stories foreign key to resolve a compilation warning. [#12406](https://github.com/mozilla-mobile/android-components/issues/12406)
198 * **service-pocket**
199   * Fix recent breakage of the sponsored stories feature and allow to dynamically make requests to either the development server or the production one. [Issue #12432](https://github.com/mozilla-mobile/android-components/issues/12432)
201 * **feature-top-sites**
202   * Replaced `frecencyConfig` from `TopSitesConfig` with `TopSitesFrecencyConfig`, which specifies the `FrecencyTresholdOption` and the frecency filter, an optional function used to filter the top frecent sites. [#12384] (https://github.com/mozilla-mobile/android-components/issues/12384)
204 * **browser-storage-sync**:
205   * Added exception handling for all places history and bookmark calls. This prevents the app from crashing on SQL errors. [#12300](https://github.com/mozilla-mobile/android-components/pull/12300)
207 # 103.0.0
208 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v102.0.0...v103.0.0)
209 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/150?closed=1)
210 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v103.0.0/buildSrc/src/main/java/Dependencies.kt)
211 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v103.0.0/buildSrc/src/main/java/Gecko.kt)
212 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v103.0.0/.config.yml)
214 * **site-permission-feature**
215   * πŸ†• [issue #12345](https://github.com/mozilla-mobile/android-components/issues/12345)
216   * - Add an id for all site permissions allowing to easily identify with what permissions the user interacts.
217   * - Emit facts for when a permission prompt is shown/allowed/denied.
219 * **site-permission-feature**
220   * πŸ†• [issue #12338](https://github.com/mozilla-mobile/android-components/issues/12338) - Add support for setting a custom text for the negative button of the site permission prompts. Use "Block" for the storage access prompt.
222 * **feature-recentlyclosed**
223   * πŸš’ Bug fixed [issue #12310](https://github.com/mozilla-mobile/android-components/issues/12310) - Catch all database exceptions thrown when querying recently closed tabs and clean the storage for corrupted data.
225 * **feature-media**
226   *  App should not be locked in landscape when a tab or custom tab loads while in pip mode. [#12298] (https://github.com/mozilla-mobile/android-components/issues/12298)
228 * **browser-toolbar**
229   * Expand toolbar when url changes. [#12215](https://github.com/mozilla-mobile/android-components/issues/12215)
231 * **service-pocket**
232   * Ensure sponsored stories profile deletion is retried in background until successful or the feature is re-enabled. [#12258](https://github.com/mozilla-mobile/android-components/issues/12258)
234 * **feature-prompts**:
235   * Added optional `addressPickerView` and `onManageAddresses` parameters through `AddressDelegate` to `PromptFeature` for a new `AddressPicker` to display a view for selecting addresses to autofill into a site. [#12061](https://github.com/mozilla-mobile/android-components/issues/12061)
236   * βš οΈ **This is a breaking change**: `PromptFeature` constructor now takes `LoginDelegate` and `CreditCardDelegate` instead of login picker and credit card picker parameters. [#12257](https://github.com/mozilla-mobile/android-components/issues/12257)
238 * **service-glean**
239   * πŸ†™ Updated Glean to version 50.0.1 ([changelog](https://github.com/mozilla/glean/releases/tag/v50.0.1))
240     * **This is a breaking change**. See <https://github.com/mozilla/glean/releases/tag/v50.0.0>) for full details.
241       Notable breakage:
242       * `testGetValue` on all metric types now returns `null` when no data is recorded instead of throwing an exception.
243       * `testGetValue` on metrics with more complex data now return new objects for inspection.
244       * `testHasValue` on all metric types is deprecated.
245       * On `TimingDistributionMetric`, `CustomDistributionMetric`, `MemoryDistributionMetric` the `accumulateSamples` method now takes a `List<Long>` instead of `LongArray`.
246         Use `listOf` instead of `longArrayOf` or call `.toList`
247       * `TimingDistributionMetricType.start` now always returns a valid `TimerId`, `TimingDistributionMetricType.stopAndAccumulate` always requires a `TimerId`.
249 * **support-rusterrors**
250   * πŸ†• New component to report Rust errors
252 * **lib-auth**
253   *  Added new `lib-auth` component for various forms of authentication.
254   *  Adds a new `BiometricPromptAuth` for authenticating with biometrics or PIN.
255     [issue # 12289](https://github.com/mozilla-mobile/android-components/issues/12289)
257 # 102.0.0
258 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v101.0.0...v102.0.1)
259 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/149?closed=1)
260 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v102.0.1/buildSrc/src/main/java/Dependencies.kt)
261 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v102.0.1/buildSrc/src/main/java/Gecko.kt)
262 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v102.0.1/.config.yml)
264 * **service-firefox-accounts**
265   * πŸ†• SyncStore to abstract account and Sync details.
267 * **browser-state**:
268   * πŸŒŸοΈ Add support for tab prioritization via `SessionPrioritizationMiddleware` for more information see [#12190](https://github.com/mozilla-mobile/android-components/issues/12190).
270 * **service-pocket**
271   * πŸŒŸοΈ Add support for rotating and pacing Pocket sponsored stories. [#12184](https://github.com/mozilla-mobile/android-components/issues/12184)
272   * See component's [README](https://github.com/mozilla-mobile/android-components/blob/main/components/service/pocket/README.md) to get more info.
274 * **support-ktx**
275   * πŸŒŸοΈ Add support for optionally persisting the default value when `stringPreference` is used to read a string from SharedPreferences. [issue #12207](https://github.com/mozilla-mobile/android-components/issues/12207).
277 * **service-pocket**
278   * βš οΈ **This is a breaking change**: Add a new `PocketStory` supertype for all Pocket stories. [#12171](https://github.com/mozilla-mobile/android-components/issues/12171)
280 * **service-pocket**
281   * πŸŒŸοΈ Add support for Pocket sponsored stories.
282   * See component's [README](https://github.com/mozilla-mobile/android-components/blob/main/components/service/pocket/README.md) to get more info.
284 * **support-test**
285   * βš οΈ **This is a breaking change**: `MainCoroutineRule` constructor now takes a `TestDispatcher` instead of deprecated `TestCoroutineDispatcher`. Default is `UnconfinedTestDispatcher`.
286   * βš οΈ **This is a breaking change**: `MainCoroutineRule.runBlockingTest` is replaced with a `runTestOnMain` top level function. . This method is preferred over the global `runTest` because it reparents new child coroutines to the test coroutine context.
288 * **concept-engine**:
289   * Adds a new `SelectAddress` in `PromptRequest` to display a prompt for selecting an address to autofill. [#12060](https://github.com/mozilla-mobile/android-components/issues/12060)
290   * Adds a new `SaveCreditCard` in `PromptRequest` to display a prompt for saving a credit card on autofill. [#11249](https://github.com/mozilla-mobile/android-components/issues/11249)
292 * **feature-autofill**
293   * πŸš’ Bug fixed [issue #11893](https://github.com/mozilla-mobile/android-components/issues/11893) - Fix issue with autofilling in 3rd party applications not being immediately available after unlocking the autofill service.
295 * **feature-contextmenu**
296   * πŸŒŸ Add new `additionalValidation` parameter to context menu options builders allowing clients to know when these options to be shown and potentially block showing them.
298 * **feature-pwa**
299   * [TrustedWebActivityIntentProcessor] is now deprecated. See [issue #12024](https://github.com/mozilla-mobile/android-components/issues/12024).
301 * **feature-top-sites**
302   * Added `providerFilter` to `TopSitesProviderConfig`, allowing the client to filter the provided top sites.
304 * **feature-prompts**:
305   * Add a `CreditCardSaveDialogFragment` that is displayed for a `SaveCreditCard` prompt request to handle saving and updating a credit card. [#11338](https://github.com/mozilla-mobile/android-components/issues/11338)
307 * **feature-media**
308   * Set default screen orientation if playing media in pip
309     [issue # 12118](https://github.com/mozilla-mobile/android-components/issues/12118)
311 * **concept-storage**:
312   * Added `CreditCardValidationDelegate` which is a delegate that will check against the `CreditCardsAddressesStorage` to determine if a `CreditCard` can be persisted in storage. [#9838](https://github.com/mozilla-mobile/android-components/issues/9838)
313   * Refactors `CreditCard` from `concept-engine` to `CreditCardEntry` in `concept-storage` so that it can validated with the `CreditCardValidationDelegate`. [#9838](https://github.com/mozilla-mobile/android-components/issues/9838)
315 * **browser-storage-sync**
316   * βš οΈ **This is a breaking change**: When constructing a `RemoteTabsStorage` object you must now a `Context` which is used to determine the location of the sqlite database which is used to persist the remote tabs [#11799](https://github.com/mozilla-mobile/android-components/pull/11799).
317   * Fixed a low frequency crasher that might occur when the app attempts to delete all history. [#12112](https://github.com/mozilla-mobile/android-components/pull/12112)
319 * **feature-syncedtabs**
320   * βš οΈ **This is a breaking change**: When constructing a `SyncedTabsStorage`, the `tabsStorage: RemoteTabsStorage` parameter is no longer optional so must be supplied [#11799](https://github.com/mozilla-mobile/android-components/pull/11799).
322 # 101.0.0
323 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v100.0.0...v101.0.0)
324 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/148?closed=1)
325 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v101.0.0/buildSrc/src/main/java/Dependencies.kt)
326 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v101.0.0/buildSrc/src/main/java/Gecko.kt)
327 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v101.0.0/.config.yml)
329 * **feature-media**
330   * Support reverse landscape orientation for fullscreen videos
331     [issue # 12034](https://github.com/mozilla-mobile/android-components/issues/12034)
332 * **feature-downloads**:
333   * πŸš’ Bug fixed [issue #11259](https://github.com/mozilla-mobile/android-components/issues/11259) - Improved mime type inference for when sharing images from the contextual menu.
335 * **feature-webnotifications**
336   * πŸŒŸ The Engine notification (WebNotification) is now persisted in the native notification, transparent to the consuming app which can delegate the native notification click to a new `WebNotificationIntentProcessor` to actually check and trigger a WebNotification click when appropriate.
338 * **feature-media**
339   * Media playback is now paused when AudioManager.ACTION_AUDIO_BECOMING_NOISY is broadcast by the system.
341 # 100.0.0
342 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v99.0.0...v100.0.0)
343 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/147?closed=1)
344 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v100.0.0/buildSrc/src/main/java/Dependencies.kt)
345 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v100.0.0/buildSrc/src/main/java/Gecko.kt)
346 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v100.0.0/.config.yml)
348 * **browser-errorpages**
349   * πŸŒŸ The https-only error page will now show also an image.
351 * **service-pocket**
352   * πŸš’ Bug fixed [issue #11905](https://github.com/mozilla-mobile/android-components/issues/11905) - Delete existing stories when their `imageUrl` is updated allowing those stories to be replaced.
354 * **feature-serviceworker**
355   * πŸ†• New `ServiceWorkerSupport` component for handling all service workers' events and callbacks. Currently this is supported only for using `GeckoEngine`.
357 * **feature-autofill**
358   * βš οΈ **This is a breaking change**: Removed unused `context` parameter in `FxaWebChannelFeature`. [#11864](https://github.com/mozilla-mobile/android-components/pull/11864).
360 * **feature-autofill**
361   * πŸš’ Bug fixed [issue #11869](https://github.com/mozilla-mobile/android-components/issues/11869) - Fix regression causing autofill to not work after unlocking the app doing the autofill or after accepting that the authenticity of the autofill target could not be verified.
363 * **feature-tab-collections**
364   * βš οΈ **This is a breaking change**: Removed unused `reader` parameter in `TabCollectionStorage`. [#11864](https://github.com/mozilla-mobile/android-components/pull/11864).
366 * **feature-contextmenu**
367   * πŸš’ Bug fixed [issue #11829](https://github.com/mozilla-mobile/android-components/pull/11830) - To make the additional note visible in landscape mode.
369 * **feature-intent**
370   * βš οΈ **This is a breaking change**: Removed unused `loadUrlUseCase` parameter in `TabIntentProcessor`. [#11864](https://github.com/mozilla-mobile/android-components/pull/11864).
372 * **browser-toolbar**
373   * Removed reflective access to non-public SDK APIs controlling the sensitivity of the gesture detector following which sparingly and for very short time a pinch/spread to zoom gesture might be identified first as a scroll gesture and move the toolbar a little before snapping to it's original position.
374   * βš οΈ **This is a breaking change**: Replaced `addEditAction` in `BrowserToolbar` with `addEditActionStart` and `addEditActionEnd` to add actions to the left and right of the URL in edit mode. [#11890](https://github.com/mozilla-mobile/android-components/issues/11890)
376 * **feature-session**
377    * πŸ†• New `ScreenOrientationFeature` to enable support for setting a requested screen orientation as part of supporting the ScreenOrientation web APIs.
379 * **concept-sync**
380   * πŸŒŸοΈοΈ Add `onReady` method to `AccountObserver`, allowing consumers to know when they can start querying account state.
382 * **service-firefox-accounts**
383   * βš οΈ **This is a breaking change**: `fetchProfile` was removed from `FxaAccountManager`.
385 * **lib-crash-sentry**
386   * πŸŒŸοΈοΈ Add `sendCaughtExceptions` config flag to `SentryService`, allowing consumers to disable submitting caught exceptions. By default it's enabled, maintaining prior behaviour. Useful in projects with high volumes of caught exceptions and multiple release channels.
388 * **site-permission-feature**
389   * πŸ†• New Add to SitePermissionsFeature a property to set visibility for NotAskAgainCheckBox
391 * **feature-search**
392   * πŸ†• Update search Engines and Search Engine Icons
394 # 99.0.0
395 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v98.0.0...v99.0.0)
396 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/146?closed=1)
397 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v99.0.0/buildSrc/src/main/java/Dependencies.kt)
398 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v99.0.0/buildSrc/src/main/java/Gecko.kt)
399 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v99.0.0/.config.yml)
401 * **feature-top-sites**
402   * βš οΈ **This is a breaking change**: This changes `fetchProvidedTopSites` in `TopSitesConfig` into a data class `TopSitesProviderConfig` that specifies whether or not to display the top sites from the provider. [#11654](https://github.com/mozilla-mobile/android-components/issues/11654)
404 * **support-base**
405   * βš οΈ **This is a breaking change**: Refactor `Frequency` out of **feature-addons** and **service-pocket** [#11732](https://github.com/mozilla-mobile/android-components/pull/11732).
407 * **support-utils**
408   * πŸŒŸοΈοΈ **Added new Browsers constant for Fennec `Browsers.FIREFOX_FENNEC_NIGHTLY`.
409   * βš οΈ **This is a breaking change**: `Browsers.FIREFOX_NIGHTLY` now points to `org.mozilla.fenix`, for fennec nightly use `Browsers.FIREFOX_FENNEC_NIGHTLY` [#11682](https://github.com/mozilla-mobile/android-components/pull/11682).
410 * **feature-downloads**:
411   * πŸš’ Bug fixed [issue #8567](https://github.com/mozilla-mobile/android-components/issues/8567) - Prevent crashes when trying to add to the system databases.
413 * **concept-engine**
414   * πŸŒŸοΈοΈ Add `EngineSessionStateStorage`, describing a storage of `EngineSessionState` instances.
416 * **browser-session-storage**
417   * πŸŒŸοΈοΈ Add `FileEngineSessionStateStorage`, an implementation of `EngineSessionStateStorage` for persisting engine state outside of the regular RecoverableBrowserState flow.
419 * **browser-state**
420   * βš οΈ **This is a breaking change**: Shape of `RecoverableTab` changed. There's now a tab-state wrapper called `TabState`; use it when `engineSessionState` isn't necessary right away.
422 * **feature-recentlyclosed**
423   * πŸŒŸοΈοΈ Add `RecentlyClosedTabsStorage`, which knows how to write/read recently closed tabs.
425 * **feature-tabs**
426   * βš οΈ **This is a breaking change**: `RestoreUseCase` implementation responsible for restoring `RecoverableTab` instances now takes a `TabState` and a `EngineSessionStateStorage` instead (and will read/rehydrate an EngineSessionState prior to restoring).
429 # 98.0.0
430 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v97.0.0...v98.0.0)
431 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/145?closed=1)
432 * [Dependencies](https://github.com/mozilla-mobile/android-components/v98.0.0/main/buildSrc/src/main/java/Dependencies.kt)
433 * [Gecko](https://github.com/mozilla-mobile/android-components/v98.0.0/main/buildSrc/src/main/java/Gecko.kt)
434 * [Configuration](https://github.com/mozilla-mobile/android-components/v98.0.0/main/.config.yml)
436 * **support-utils**
437   * πŸŒŸοΈοΈ **Add a `PendingUtils.defaultFlags`** property to ease setting PendingIntent mutability as required for Android 31+.
439 * **feature-prompts**:
440   * More prompts are dismissable.
441   * βš οΈ **This is a breaking change**: Success / dismiss callbacks are now consistently ordered.
443 * **feature-search**
444   * Adds the `extraAdServersRegexps` of Baidu to help sending the baidu search telemetry of ads. [#11582](https://github.com/mozilla-mobile/android-components/pull/11582)
446 * **browser-toolbar**
447   * πŸš’ Bug fixed [issue #11499](https://github.com/mozilla-mobile/android-components/issues/11499) - Update tracking protection icon state even when is not displayed
449 * **browser-toolbar**
450   * πŸš’ Bug fixed [issue #11545](https://github.com/mozilla-mobile/android-components/issues/11545) - `clearColorFilter` doesn't work on Api 21, 22, so the default white filter remains set.Use `clearColorFilter` only when the version of API is bigger than 22
452 * **support-ktx**
453   * πŸš’ Bug fixed [issue #11527](https://github.com/mozilla-mobile/android-components/issues/11527) - Fix some situations in which the immersive mode wasn't properly applied.
455 * **lib-crash**
456   * πŸš’ Bug fixed [issue #11627](https://github.com/mozilla-mobile/android-components/issues/11627) - Firefox crash notification is not displayed on devices with Android 11/Android 12
458 * **lib-publicsuffixlist**
459   * βš οΈ **This is a breaking change**: Removed `String.urlToTrimmedHost` extension method.
461 * **feature-top-sites**
462   * βš οΈ **This is a breaking change**: The existing data class `TopSite` has been converted into a sealed class. [#11483](https://github.com/mozilla-mobile/android-components/issues/11483)
463   * Extend `DefaultTopSitesStorage` to accept a `TopSitesProvider` for fetching top sites. [#11483](https://github.com/mozilla-mobile/android-components/issues/11483)
464   * βš οΈ **This is a breaking change**: Added a new parameter `fetchProvidedTopSites` to `TopSitesConfig` to specify whether or not to fetch top sites from the `TopSitesProvider`. [#11605](https://github.com/mozilla-mobile/android-components/issues/11605)
466 * **concept-storage**
467   * βš οΈ **This is a breaking change**: Adds a new `isRemote` property in `VisitInfo` which distinguishes visits made on the device and those that come from Sync.
469 * **service-contile**
470   * Adds a `ContileTopSitesProvider` that implements `TopSitesProvider` for returning top sites from the Contile services API. [#11483](https://github.com/mozilla-mobile/android-components/issues/11483)
472 * **service-glean**
473   * πŸ†™ Updated Glean to version 43.0.2 ([changelog](https://github.com/mozilla/glean/releases/tag/v43.0.2))
474     * Includes new `build_date` metric
476 * **lib-push-amazon**
477   * βŒ **This is a breaking change**: This component is now removed since we no longer support it.
479 # 97.0.0
480 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v96.0.0...v97.0.0)
481 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/144?closed=1)
482 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v97.0.0/buildSrc/src/main/java/Dependencies.kt)
483 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v97.0.0/buildSrc/src/main/java/Gecko.kt)
484 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v97.0.0/.config.yml)
486 * **support-ktx**
487   * πŸš’ Bug fixed [issue #11374](https://github.com/mozilla-mobile/android-components/issues/11374) - Restore immersive mode after interacting with other Windows.
488   * βš οΈ **This is a breaking change**: `OnWindowFocusChangeListener` parameter is removed from `Activity.enterToImmersiveMode()`. There was no way to guarantee that the argument knew to handle immersive mode. Now everything is handled internally.
490 * **feature-prompts**:
491   * Removes deprecated constructor in `PromptFeature`.
493 * * **browser-engine**, **concept-engine*** **feature-sitepermissions**
494   * πŸŒŸοΈοΈ **Add support for a new `storage_access` API prompt.
496 * **concept-storage**:
497   * βš οΈ **This is a breaking change**: `KeyProvider#key` has been renamed to `KeyProvider#getOrGenerateKey` and is now `suspend`.
498   * βš οΈ **This is a breaking change**: `KeyRecoveryHandler` has been removed.
499   * βš οΈ **This is a breaking change**: `CreditCardsAddressesStorage` gained a new method - `scrubEncryptedData`.
500   * πŸŒŸοΈοΈ **Add an abstract `KeyManager` which implements `KeyProvider` and knows how to store, retrieve and verify managed keys.
502 * **service-sync-logins**:
503   * `LoginsCrypto` is now using `concept-storage`@`KeyManager` as its basis.
505 * **service-sync-autofill**:
506   * `AutofillCrypto` is now using `concept-storage`@`KeyManager` as its basis.
507   * `AutofillCrypto` is now able to recover from key loss (by scrubbing encrypted credit card data).
509 * **browser-errorpages**
510   * `ErrorPages.createUrlEncodedErrorPage()` allows overriding the title or description for specific error types now.
512 * **browser-engine-gecko**
513   * Added `EngineSession.goBack(boolean)` and `EngineSession.goForward(boolean)` for user interaction based navigation.
515 * **feature-session**
516   * Added support in `SessionUseCases.GoBackUseCase` and `SessionUseCases.GoForwardUseCase` to support optional `userInteraction` parameter in the Gecko engine.
518 * **service-glean**
519   * πŸ†™ Updated Glean to version 42.3.0 ([changelog](https://github.com/mozilla/glean/releases/tag/v42.3.0))
520     * Includes automatic detection of tags.yaml files
522 # 96.0.0
523 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v95.0.0...v96.0.0)
524 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/143?closed=1)
525 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v96.0.0/buildSrc/src/main/java/Dependencies.kt)
526 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v96.0.0/buildSrc/src/main/java/Gecko.kt)
527 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v96.0.0/.config.yml)
529 * **browser-engine-gecko**:
530   * Removes deprecated `GeckoLoginDelegateWrapper`. Please use `GeckoAutocompleteStorageDelegate`. [#11311](https://github.com/mozilla-mobile/android-components/issues/11311)
531   * Added setting for HTTPS-Only mode [#5935](https://github.com/mozilla-mobile/focus-android/issues/5935)
533 * **support-utils**
534   * πŸŒŸοΈ Add `String.toCreditCardNumber` for removing characters other than digits from a credit card string number.
535   * πŸš’ Bug fixed [issue #11360](https://github.com/mozilla-mobile/android-components/issues/11360) - Crash when saving credit cards
537 # 95.0.0
538 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v94.0.0...v95.0.0)
539 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/142?closed=1)
540 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v95.0.0/buildSrc/src/main/java/Dependencies.kt)
541 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v95.0.0/buildSrc/src/main/java/Gecko.kt)
542 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v95.0.0/.config.yml)
544 * **feature-session**
545   * πŸŒŸοΈοΈ **Add callback as a parameter to RemoveAllExceptionsUseCase which will be called after exceptions removing
547 * **concept-toolbar**
548   * πŸŒŸοΈοΈ **Add removeNavigationAction method which removes a previously added navigation action
550 * **support-utils**
551   * πŸŒŸοΈοΈ **Add Firefox Focus packages to known browsers list
553 * **concept-tabstray**
554   * βš οΈ **This is a breaking change**: This component will be removed in future release.
555      * Instead use the `TabsTray` interface from `browser-tabstray`.
556 * **feature-session**
557   * * πŸŒŸοΈ Adds a new `TrackingProtectionUseCases.addException`: Now allows to persist the exception in private mode using the parameter`persistInPrivateMode`.
559 * **browser-state**:
560   * πŸŒŸοΈ Adds a new `previewImageUrl` in `ContentState` which provides a preview image of the page (e.g. the hero image), if available.
562 * **compose-awesomebar**
563   * `AwesomeBar` takes an optional `Profiler`. If passed in, two new profiler markers will be added: `SuggestionFetcher.fetch` and `Suggestion update`.
565 # 94.0.0
566 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v93.0.0...v94.0.0)
567 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/141?closed=1)
568 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v94.0.0/buildSrc/src/main/java/Dependencies.kt)
569 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v94.0.0/buildSrc/src/main/java/Gecko.kt)
570 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v94.0.0/.config.yml)
572 * **browser-awesomebar**
573   * `BrowserAwesomeBar` is now deprecated in favor of using the `AwesomeBar()` composable from the `compose-awesomebar` component.
575 * **BrowserAction**, **TabListReducer**, **TabsUseCases**:
576   * πŸŒŸοΈ Adds MoveTabs (reordering) Action and UseCase
578 * **feature-contextmenu**:
579   * πŸš’ Bug fixed [issue #10982](https://github.com/mozilla-mobile/android-components/issues/10982) - Add ScrollView as a main container in mozac_feature_context_dialog in order to see the entire image context menu on small screens
581 * **concept-storage**, **browser-storage-sync**
582   * πŸŒŸοΈ New API: `HistoryMetadataStorage.deleteHistoryMetadata`, allows removing specific metadata entries either by key or search term.
584 * **browser-engine-gecko**:
585   * Switch to the `geckoview-omni` releases. `-omni` packages also ship the Glean Core native code.
587 * **service-glean**
588   * πŸ†™ Updated Glean to version 41.1.0 ([changelog](https://github.com/mozilla/glean/releases/tag/v41.1.0))
589     * The Glean Core native code is now shipped through GeckoView
590     * βš οΈ **This is a breaking change**: `Glean.initialize` now requires a `buildInfo` parameter to pass in build time version information.
591       A suitable instance is generated by `glean_parser` in `${PACKAGE_ROOT}.GleanMetrics.GleanBuildInfo.buildInfo`.
592       Support for not passing in a `buildInfo` object has been removed.
594 # 93.0.0
595 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v92.0.0...v93.0.0)
596 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/140?closed=1)
597 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v93.0.0/buildSrc/src/main/java/Dependencies.kt)
598 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v93.0.0/buildSrc/src/main/java/Gecko.kt)
599 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v93.0.0/.config.yml)
601 * **concept-toolbar**, **concept-engine**, **browser-engine-gecko**, **browser-state**, **feature-toolbar**, **browser-toolbar**,
602   * πŸŒŸοΈ The toolbar now supports two new methods: `expand` and `collapse` to immediately execute this actions if the toolbar is dynamic. `expand` is used as of now as a callback for when GeckoView needs the toolbar to be shown depending on tab content changes.
604 * **ui-icons**:
605   * πŸŒŸοΈ Adds icons: mozac_ic_add_to_home_screen, mozac_ic_help, mozac_ic_shield, mozac_ic_shield_disabled
606   * πŸŒŸοΈ Update icons: mozac_ic_home, mozac_ic_settings, mozac_ic_clear
608 * **feature-contextmenu**:
609   * πŸŒŸοΈ Adds `additionalNote` which it will be attached to the bottom of context menu but for a specific `HitResult`
611 # 92.0.0
612 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v91.0.0...v92.0.0)
613 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/139?closed=1)
614 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v92.0.0/buildSrc/src/main/java/Dependencies.kt)
615 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v92.0.0/buildSrc/src/main/java/Gecko.kt)
616 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v92.0.0/.config.yml)
618 * **browser-feature-awesomebar**:
619   * πŸŒŸοΈ Adds `CombinedHistorySuggestionProvider` that combines the results from `HistoryMetadataSuggestionProvider` and `HistoryStorageSuggestionProvider` so that if not enough metadata history results are available then storage history results are added to return the requested maxNumberOfSuggestions of awesomeBar suggestions.
621 * **browser-toolbar**
622   * πŸš’ Bug fixed [issue #10555](https://github.com/mozilla-mobile/android-components/issues/10555) - Prevent new touches from expanding a collapsed toolbar. Wait until there's a response from GeckoView on how the touch was handled to expand/collapse the toolbar.
623   * πŸŒŸοΈ Adds Long-click support to `Button` and gives `TwoStateButton` all the features of `BrowserMenuItemToolbar.TwoStateButton`
625 * **support-test**
626   * βš οΈ  Deprecation: `createTestCoroutinesDispatcher()` should be replaced with the preferred `TestCoroutineDispatcher()` from the `kotlinx-coroutines-test` library.
627   * βš οΈ **This is a breaking change**: `MainCoroutineRule`'s constructor takes a more strict `TestCoroutineDispatcher` instead of a `CoroutineDispatcher`
628   * πŸŒŸοΈ Adds `MainCoroutineRule.runBlockingTest`, which is a convenience method for `MainCoroutineRule.testDispatcher.runBlockingTest`. These methods are preferred over the global `runBlockingTest` because they reparent new child coroutines to the test coroutine context.
630 * **feature-search**
631   * πŸŒŸοΈ New `AdsTelemetry` based on a web extension that identify whether there are ads in search results of particular providers for which a (Component.FEATURE_SEARCH to SERP_SHOWN_WITH_ADDS) Fact will be emitted and whether an ad was clicked for which a (Component.FEATURE_SEARCH to SERP_ADD_CLICKED) Fact will be emitted if the `AdsTelemetryMiddleware` is set for `BrowserStore`.
632   * πŸŒŸοΈ New `InContentTelemetry` based on a web extension that identify follow-on and organic web searches for which a (Component.FEATURE_SEARCH to IN_CONTENT_SEARCH) Fact will be emitted.
634 * **feature-tabs**
635   * Adds `lastAccess` to the `Tab` data class that is used in `TabsTray`.
636   * Adds a new SelectOrAddUseCase for reopening existing tab with matching HistoryMetadataKey. [#10611](https://github.com/mozilla-mobile/android-components/issues/10611)
637   * Adds `recoverable` parameter to `RemoveAllTabsUseCase.invoke()` to specify whether `UndoMiddleware` should make the removed tabs recoverable.
638   * Applies `createdAt` property from `TabSessionState` when filtering tabs in `RestoreUseCase` with timeout.
640 * **browser-store**
641   * Adds `createdAt` properpty to the the `BrowserStore` to know when a tab is first created.
643 # 91.0.0
644 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v91.0.0...main)
645 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/138?closed=1)
646 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v91.0.0/buildSrc/src/main/java/Dependencies.kt)
647 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v91.0.0/buildSrc/src/main/java/Gecko.kt)
648 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v91.0.0/.config.yml)
650 * **browser-errorpages**:
651   * `ErrorType.ERROR_SECURITY_SSL` will now no longer display `Advanced` button on the SSL Error Page.
653 * **browser-state**:
654   * πŸŒŸοΈ Adds a new `lastMediaAccess` in `TabSessionState` as an easy way to check the timestamp of when media last started playing on a particular webpage. The value will be 0 if no media was started. To observe the media playback and updating this property one needs to add a new `LastMediaAccessMiddleware` to `BrowserStore`.
656 * **feature-search**
657   * Updated the icon of the bing search engine.
659 * **browser-menu**
660   * Adds `showAddonsInMenu` in WebExtensionBrowserMenuBuilder to allow the option of removing `Add-ons` item even if another extensions are displayed
662 * **feature-privatemode**
663   * Adds `clearFlagOnStop = true` in SecureWindowFeature to allow the option of keeping `FLAG_SECURE` when calling `stop()`
665 * **browser-feature-awesomebar**:
666   * πŸŒŸοΈ Adds a new `maxNumberOfSuggestions` parameter to `HistoryStorageSuggestionProvider` as a way to specify a different number than the default of 20 for how many history results to be returned.
667   * πŸŒŸοΈ Adds a new `maxNumberOfSuggestions` parameter to `HistoryMetadataSuggestionProvider` as a way to specify a different number than the default of 5 for how many history results to be returned.
668   * HistoryMetadataSuggestionProvider - only return pages user spent time on.
669   * `AwesomeBarFeature.addHistoryProvider` allows specifying a positive value for `maxNumberOfSuggestions`. If zero or a negative value is used the default number of history suggestions will be returned.
671 * **browser-storage-sync**
672   * Adds `CrashReporting` to the `RemoteTabsStorage`.
674 * **concept-engine**
675   * πŸŒŸοΈ Adds a new `SitePermissionsStorage` interface that represents a common API to store site permissions.
677 * **browser-engine-gecko**:
678   * βš οΈ **This is a breaking change**: `GeckoPermissionRequest.Content` changed its signature from `GeckoPermissionRequest.Content(uri: String, type: Int, callback: PermissionDelegate.Callback)` to `GeckoPermissionRequest.Content(uri: String, type: Int, geckoPermission: PermissionDelegate.ContentPermission, geckoResult: GeckoResult<Int>)`.
679   * πŸŒŸοΈ Adds a new `GeckoSitePermissionsStorage` this allows to store permissions using the GV APIs for more information see [the geckoView ticket](https://bugzilla.mozilla.org/show_bug.cgi?id=1654832).
680   * πŸŒŸοΈ Integrated the new GeckoView permissions APIs that will bring many improvements in how site permissions are handled, see the API abstract document for [more information](https://docs.google.com/document/d/1KUq0gejnFm5erkHNkswm8JsT7nLOmWvs1KEGFz9FWxk/edit#heading=h.ls1dr18v7zrx).
681   * πŸŒŸοΈ Tracking protection exceptions have been migrated to the GeckoView storage see [#10245](https://github.com/mozilla-mobile/android-components/issues/10245), for more details.
683 * **feature-sitepermissions**
684   * βš οΈ **This is a breaking change**: The `SitePermissionsStorage` has been renamed to `OnDiskSitePermissionsStorage`.
685   * βš οΈ **This is a breaking change**: The `SitePermissions` has been moved to the package `mozilla.components.concept.engine.permission.SitePermissions`.
687 # 90.0.0
689 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v90.0.0)
690 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/137?closed=1)
691 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v90.0.0/buildSrc/src/main/java/Dependencies.kt)
692 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v90.0.0/buildSrc/src/main/java/Gecko.kt)
693 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v90.0.0/.config.yml)
695 * **lib-crash**:
696   * πŸš’ Bug fixed [issue #10515](https://github.com/mozilla-mobile/android-components/issues/10515) - Populate the crash reporter view.
698 * **feature-prompts**:
699   * βš οΈ **This is a breaking change**: [#8989](https://github.com/mozilla-mobile/android-components/issues/8989) - Add support for multiple prompts in ContentState and help avoid some Exceptions.
701 * **concept-engine** and **browser-engine-gecko**
702   * πŸŒŸοΈ Added `TrackingProtectionPolicy.cookiePolicyPrivateMode` it allows to control how cookies should behave in private mode, if not specified it defaults to the value of `TrackingProtectionPolicy.cookiePolicyPrivateMode`.
704 * **feature-prompts** **browser-storage-sync**
705   * βš οΈ A new `isCreditCardAutofillEnabled` callback is available in `PromptFeature` and `GeckoCreditCardsAddressesStorageDelegate` to allow clients controlling whether credit cards should be autofilled or not. Default is false*
707 * **service-pocket**
708   * βš οΈ **This is a breaking change**: Rebuilt from the ground up to better support offering to clients Pocket recommended articles.
709   * See component's [README](https://github.com/mozilla-mobile/android-components/blob/main/components/service/pocket/README.md) to get more info.
711 * **feature-contextmenu**:
712   * βš οΈ Long pressing on web content won't show a contextual menu if the URL of the touch target is one blocked from loading in the browser.
714 * **feature-prompts**:
715   * Refactor `LoginPickerView` into a more generic view `SelectablePromptView` that can be reused by any prompts that displays a list of selectable options. [#10216](https://github.com/mozilla-mobile/android-components/issues/10216)
716   * Added optional `creditCardPickerView`, `onManageCreditCards` and `onSelectCreditCard` parameters to `PromptFeature` for a new `CreditCardPicker` to display a view for selecting credit cards to autofill into a site. [#9457](https://github.com/mozilla-mobile/android-components/issues/9457), [#10369](https://github.com/mozilla-mobile/android-components/pull/10369)
717   * Added handling of biometric authentication for a credit card selection prompt request. [#10369](https://github.com/mozilla-mobile/android-components/pull/10369)
719 * **concept-engine**
720   * πŸŒŸοΈ `getBlockedSchemes()` now exposes the list of url shemes that the engine won't load.
721   * Adds a new `CreditCard` data class which is a parallel of GeckoView's `Autocomplete.CreditCard`. [#10205](https://github.com/mozilla-mobile/android-components/issues/10205)
722   * Adds a new `SelectCreditCard` in `PromptRequest` to display a prompt for selecting a credit card to autocomplete. [#10205](https://github.com/mozilla-mobile/android-components/issues/10205)
724 * **browser-menu**:
725   * πŸš’ Bug fixed [issue #10133](https://github.com/mozilla-mobile/android-components/issues/10133) - A BrowserMenuCompoundButton used in our BrowserMenu setup with a DynamicWidthRecyclerView is not clipped anymore.
727 * **browser-engine-gecko**:
728   * Implements the new GeckoView `Autocomplete.StorageDelegate` interface in `GeckoStorageDelegateWrapper`. This will replace the deprecated `GeckoLoginDelegateWrapper` and provide additional autocomplete support for credit cards. [#10140](https://github.com/mozilla-mobile/android-components/issues/10140)
730 * **feature-downloads**:
731   * βš οΈ **This is a breaking change**: `AbstractFetchDownloadService.openFile()` changed its signature from `AbstractFetchDownloadService.openFile(context: Context, filePath: String, contentType: String?)` to `AbstractFetchDownloadService.openFile(applicationContext: Context, download: DownloadState)`.
732   * πŸš’ Bug fixed [issue #10138](https://github.com/mozilla-mobile/android-components/issues/10138) - The downloaded files cannot be seen.
733   * πŸš’ Bug fixed [issue #10157](https://github.com/mozilla-mobile/android-components/issues/10157) - Crash on startup when tying to restore data URLs from the db.
735 * **browser-engine-gecko(-nightly/beta)**
736   * βš οΈ From now on there will be only one `concept-engine` implementation using [GeckoView](https://mozilla.github.io/geckoview/). On `main` this will be the Nightly version. In release versions it will be the corresponding Beta or Release version. More about this in [RFC 7](https://mozac.org/rfc/0007-synchronized-releases).
737   * Implements `onCreditCardSelect` in `GeckoPromptDelegate` to handle a credit card selection prompt request. [#10205](https://github.com/mozilla-mobile/android-components/issues/10205)
739 * **concept-sync**, **browser-storage-sync**
740   * βš οΈ **This is a breaking change**: `SyncableStore` now has a `registerWithSyncManager` method for use in newer storage layers.
742 * **concept-storage**, **service-sync-autofill**
743   * βš οΈ **This is a breaking change**: Update and add APIs now take specific `UpdatableCreditCardFields` and `NewCreditCardFields` data classes as arguments.
744   * βš οΈ **This is a breaking change**: `CreditCard`'s number field changed to `encryptedCardNumber`, `cardNumberLast4` added.
745   * New `CreditCardNumber` class, which encapsulate either an encrypted or plaintext versions of credit cards.
746   * `AutofillCreditCardsAddressesStorage` reflects these breaking changes.
747   * Introduced a new `CreditCardCrypto` interface for for encrypting and decrypting a credit card number. [#10140](https://github.com/mozilla-mobile/android-components/issues/10140)
748   * πŸŒŸοΈ New APIs for managing keys - `ManagedKey`, `KeyProvider` and `KeyRecoveryHandler`. `AutofillCreditCardsAddressesStorage` implements these APIs for managing keys for credit card storage.
749   * πŸŒŸοΈ New support for bookmarks to retrieve latest added bookmark nodes. `PlacesBookmarksStorage` now implements `getRecentBookmarks`.
751 * **service-firefox-accounts**
752   * πŸŒŸοΈ When configuring syncable storage layers, `SyncManager` now takes an optional `KeyProvider` to handle encryption/decryption of protected values.
753   * πŸŒŸοΈ Support for syncing Address and Credit Cards
755 * **service-glean**
756   * `ConceptFetchHttpUploader` adds support for private requests. By default, all requests are non-private.
757   * πŸ†™ Updated Glean to version 39.0.0 ([changelog](https://github.com/mozilla/glean/releases/tag/v39.0.0))
758     * Also includes v38.0.0 ([changelog](https://github.com/mozilla/glean/releases/tag/v38.0.0))
759     * βš οΈ  Deprecation: The old event recording API is replaced by a new one, accepting a typed object. See the [event documentation](https://mozilla.github.io/glean/book/reference/metrics/event.html#recordobject) for details.
760     * Skip build info generation for libraries.
763 * **lib-state**
764   * πŸŒŸοΈ Added `AbstractBinding` for simple features that want to observe changes to the `State` in a `Store` without needing to manually manage the CoroutineScope. This can now be handled like other `LifecycleAwareFeature` implementations:
765     ```kotlin
766     class SimpleFeature(store: BrowserStore) : AbstractBinding<BrowserState>(store) {
767       override suspend fun onState(flow: Flow<BrowserState>) {
768         // Interact with flowable state.
769       }
770     }
771     ```
773 * **feature-tab-collections**:
774     * [addTabsToCollection] now returns the id of the collection which the tabs were added to.
776 * **service-nimbus**
777   * Added UI components for displaying a list of branches and the selected branch related to a Nimbus experiments.
779 * **support-utils**:
780   * Added `CreditCardUtils` which provides methods for retrieving the credit card issuer network from a provided card number. [#9813](https://github.com/mozilla-mobile/android-components/issues/9813)
782 # 75.0.0
784 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v74.0.0...v75.0.0)
785 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/136?closed=1)
786 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v75.0.0/buildSrc/src/main/java/Dependencies.kt)
787 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v75.0.0/buildSrc/src/main/java/Gecko.kt)
788 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v75.0.0/.config.yml)
791 * **browser-menu**:
792   * πŸŒŸοΈ New StickyHeaderLinearLayoutManager and StickyFooterLinearLayoutManager that can be used to keep an item from being scrolled off-screen.
793   * To use this set `isSticky = true` for any menu item of the menu. Since only one sticky item is supported if more items have this property the sticky item will be the one closest to the top the menu anchor.
794   * πŸš’ Bug fixed [issue #10032](https://github.com/mozilla-mobile/android-components/issues/10032) - Fix a recent issue with ExpandableLayout - user touches on an expanded menu might not have any effect on Samsung devices.
795   * πŸš’ Bug fixed [issue #10005](https://github.com/mozilla-mobile/android-components/issues/10005) - Fix a recent issue with BrowserMenu#show() - endOfMenuAlwaysVisible not being applied.
796   * πŸš’ Bug fixed [issue #9922](https://github.com/mozilla-mobile/android-components/issues/9922) - The browser menu will have it's dynamic width calculated only once, before the first layout.
797   * πŸŒŸοΈ BrowserMenu support a bottom collapsed/expandable layout through a new ExpandableLayout that will wrap a menu layout before being used in a PopupWindow and automatically allow the collapse/expand behaviors.
798   * To use this set `isCollapsingMenuLimit = true` for any menu item of a bottom anchored menu.
799   * πŸŒŸοΈ `WebExtensionBrowserMenuBuilder` provide a new way to customize how items look like via `Style()` where the `tintColor`, `backPressDrawable` and `addonsManagerDrawable` can be customized.
800   * βš οΈ **This is a breaking change**: `WebExtensionBrowserMenuBuilder.webExtIconTintColorResource` constructor parameter has been removed, please use `WebExtensionBrowserMenuBuilder`.`Style` instead. For more details see [issue #9787](https://github.com/mozilla-mobile/android-components/issues/10091).
802 * **browser-toolbar**
803 * **feature-session**
804   * πŸš’️ **Various issues related to the dynamic toolbar and pull to refresh will be fixed with with GeckoView offering more details about how the touch event will be handled.
806 * **concept-engine**
807   * βš οΈ **EngineView#InputResult is deprecated in favor of InputResultDetail which offers more details about how a touch event will be handled.
809 * **feature-downloads**:
810   * πŸš’ Bug fixed [issue #9964](https://github.com/mozilla-mobile/android-components/issues/9964) - Downloads notification strings are not localized.
812 * **service-nimbus**
813   * Added `getExperimentBranches` method to `Nimbus` for retrieving a list of experiment branches for a given experiment. [issue #9895](https://github.com/mozilla-mobile/android-components/issues/9895)
815 * **feature-tabs**
816   * Added usecase for duplicating tabs to `TabsUseCases`.
818 # 74.0.0
820 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v73.0.0...v74.0.0)
821 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/135?closed=1)
822 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v74.0.0/buildSrc/src/main/java/Dependencies.kt)
823 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v74.0.0/buildSrc/src/main/java/Gecko.kt)
824 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v74.0.0/.config.yml)
826 * **feature-downloads**:
827   * πŸš’ Bug fixed [issue #9821](https://github.com/mozilla-mobile/android-components/issues/9821) - Crash for downloads inferred empty mime types.
829 * **intent-processing**
830   * πŸŒŸοΈ Added support for opening links from ACTION_MAIN Intents. This Intents could the result of `Intent.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_APP_BROWSER)` calls.
832 * **browser-toolbar**
833   * πŸŒŸοΈ Added `ToolbarBehaviorController` to automatically block the `BrowserToolbar` being animated by the `BrowserToolbarBehavior` while the tab is loading. This new class just has to be initialized by AC clients, similar to `ToolbarPresenter`.
835 * **feature-downloads**:
836   * πŸš’ Bug fixed [issue #9757](https://github.com/mozilla-mobile/android-components/issues/9757) - Remove downloads notification when private tabs are closed.
837   * πŸš’ Bug fixed [issue #9789](https://github.com/mozilla-mobile/android-components/issues/9789) - Canceled first PDF download prevents following attempts from downloading.
838   * πŸš’ Bug fixed [issue #9823](https://github.com/mozilla-mobile/android-components/issues/9823) - Downloads prompts do not show again when a user denies system permission twice.
840 * **concept-engine**,**browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**, **browser-engine-system**
841   * βš οΈ **This is a breaking change**: `EngineSession`.`enableTrackingProtection()` and `EngineSession`.`disableTrackingProtection()` have been removed, please use `EngineSession`.`updateTrackingProtection()` instead , for more details see [issue #9787](https://github.com/mozilla-mobile/android-components/issues/9787).
843 * **feature-push**
844   * βš οΈ **This is a breaking change**: Removed `databasePath` from `RustPushConnection` constructor and added `context`. The file path is now queries lazily.
846 * **feature-top-sites**
847   * βš οΈ **This is a breaking change**: Replace `TopSitesUseCases.renameTopSites` with `TopSitesUseCases.updateTopSites` which allows for updating the title and the url of a top site. [#9599](https://github.com/mozilla-mobile/android-components/issues/9599)
849 * **service-sync-autofill**
850   * Refactors `AutofillCreditCardsAddressesStorage` from **browser-storage-sync** into its own component. [#9801](https://github.com/mozilla-mobile/android-components/issues/9801)
852 * **service-firefox-accounts**,**browser-storage-sync**,**service-nimbus**,**service-sync-logins**
853   * Due to a temporary build issue in the Application Services project, it is not currently
854   possible to run some service-related unittests on a Windows host. [#9731](https://github.com/mozilla-mobile/android-components/pull/9731)
855     * Work on restoring this capability will be tracked in [application-services#3917](https://github.com/mozilla/application-services/issues/3917).
857 * **service-firefox-accounts**
858   * βš οΈ **This is a breaking change**: Removed the currently unused `authorizeOAuthCode` from FirefoxAccount API surface.
860 * **service-nimbus**
861   * Added UI components for displaying a list of active Nimbus experiments.
863 * **support-locale**
864   * βš οΈ **This is a breaking change**: Extended support for locale changes. The `LocaleManager` can now handle notifications about `Locale` changes through `LocaleUseCase`s, which are then reflected in the `BrowserStore`.
865   * πŸš’ Bug fixed [issue #17190](https://github.com/mozilla-mobile/fenix/issues/17190) - Private browsing notifications are updated with the correct language when the app locale is changed.
868 # 73.0.0
870 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v72.0.0...v73.0.0)
871 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/134?closed=1)
872 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v73.0.0/buildSrc/src/main/java/Dependencies.kt)
873 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v73.0.0/buildSrc/src/main/java/Gecko.kt)
874 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v73.0.0/.config.yml)
876 * **All components**
877   * βš οΈIncreased `targetSdkVersion` to 30 (Android R)
879 * **browser-toolbar**
880   * πŸŒŸ Added `BrowserToolbarBehavior#forceCollapse` to easily collapse the top/bottom toolbar.
882 * **browser-toolbar**
883   * βš οΈ **This is a breaking change**: `BrowserToolbarBottomBehavior` is renamed to `BrowserToolbarBehavior` as it is now a common behavior for toolbars be them placed at the bottom or at the top of the screen.
885 * **feature-session**
886   * βš οΈ **This is a breaking change**: `EngineViewBottomBehavior` is renamed to `EngineViewBrowserToolbarBehavior` as it is now the glue between `EngineView` and `BrowserToolbar` irrespective of if the toolbar is placed at the bottom oir at the top of the `EngineView`.
888 * **feature-downloads**:
889   * πŸŒŸ New `ShareDownloadFeature` will listen for `AddShareAction` and download, cache locally and then share internet resources.
890   * βš οΈ **This is a breaking change**: This is a breaking change with clients expected to create and register a new instance of the this new feature otherwise the "Share image" from the browser contextual menu will do nothing.
892 * **support-ktx**
893   * πŸŒŸ Added `Context.shareMedia` that allows to easily share a specific locally stored file through the Android share menu.
895 * **feature-downloads**:
896   * πŸš’ Bug fixed [issue #9441](https://github.com/mozilla-mobile/android-components/issues/9441) - Don't ask for redundant system files permission if not required.
897   * πŸš’ Bug fixed [issue #9526](https://github.com/mozilla-mobile/android-components/issues/9526) - Downloads with generic content types use the correct file extension.
898   * πŸš’ Bug fixed [issue #9553](https://github.com/mozilla-mobile/android-components/issues/9553) - Multiple files were unable to be opened after being download.
900 * **feature-webauthn**
901   * πŸ†• New component to enable support for WebAuthn specification with `WebAuthnFeature`.
903 * **feature-awesomebar**
904   * added `SearchEngineSuggestionProvider` that offers suggestion(s) for search engines based on user search engine list
906 * **browser-storage-sync**
907   * Added `AutofillCreditCardsAddressesStorage` implementation of the `CreditCardsAddressesStorage` interface back by the application-services' `autofill` library.
909 * **concept-engine**
910   * Added `defaultSettings: Settings?` parameter to registerTabHandler to supply a default Tracking Policy when opening a new extension tab.
911   * When calling `onNewTab` in `registerTabHandler` from `GeckoWebExtension.kt` a default `TrackingProtectionPolicy.strict()` is supplied to the new `GeckoEngineSession`. This was added in to avoid WebExtension tabs without any ETP settings.
913 * **concept-storage**
914   * Introduced `CreditCardsAddressesStorage` interface for describing credit card and address storage.
916 * **support-base**
917   * Add `NamedThreadFactory`, a `ThreadFactory` that names its threads with the given argument.
919 * **lib-state**
920   * Add `threadNamePrefix` parameter to `Store` to give threads created by the `Store` a specific name.
922 * **service-glean**
923   * πŸ†™ Updated Glean to version 35.0.0 ([changelog](https://github.com/mozilla/glean/releases/tag/v35.0.0))
925 # 72.0.0
927 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v71.0.0...v72.0.0)
928 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/133?closed=1)
929 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v72.0.0/buildSrc/src/main/java/Dependencies.kt)
930 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v72.0.0/buildSrc/src/main/java/Gecko.kt)
931 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v72.0.0/.config.yml)
933 * **feature-prompts**:
934   * πŸš’ Bug fixed [issue #9471](https://github.com/mozilla-mobile/android-components/issues/9471) - Confirm and alert js dialogs don't show "OK" and "Cancel" buttons when the message is too long.
936 * **support-base**
937   * βš οΈ **This is a breaking change**: Update the signature of `ActivityResultHandler.onActivityResult` to avoid conflict with internal Android APIs.
939 * **feature-addons**
940   * πŸš’ Bug fixed [issue #9484] https://github.com/mozilla-mobile/android-components/issues/9484) - Handle multiple add-ons update that require new permissions.
942 * **feature-top-sites**
943   * βš οΈ **This is a breaking change**: Replaces `includeFrecent` with an optional `frecencyConfig` in `TopSitesConfig` and `TopSitesStorage.getTopSites` to specify the frecency threshold for the returned list of top frecent sites see [#8690](https://github.com/mozilla-mobile/android-components/issues/8690).
945 * **service-nimbus**
946  * Upgraded nimbus-sdk to enable `getExperimentBranch()` (and friends) to be callable from the main thread.
947  * Split up `updateExperiments()` in to two methods: `fetchExperiments()` and `applyPendingExperiments()`.
948  * Exposed `setExperimentsLocally()` for testing and startup.
950 # 71.0.0
952 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v70.0.0...v71.0.0)
953 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/132?closed=1)
954 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v71.0.0/buildSrc/src/main/java/Dependencies.kt)
955 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v71.0.0/buildSrc/src/main/java/Gecko.kt)
956 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v71.0.0/.config.yml)
958 * **feature-prompts**:
959   * πŸš’ Bug fixed [issue #9351] Camera images are available even with "Don't keep activities" enabled.
961 * **ui-autocomplete**:
962   * Pasting from the clipboard now cleans up any unwanted uri schemes.
964 * **support-utils**:
965   * πŸŒŸ Added SafeUrl#stripUnsafeUrlSchemes that can cleanup unwanted uri schemes. Interested clients can specify what these are by overwriting "mozac_url_schemes_blocklist".
967 * **concept-fetch**:
968   * πŸŒŸ Added `Request#private` to allow requests to be performed in a private context, the feature is not support in all `Client`s check support before using.
970 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
971   * πŸŒŸ Added support for `Request#private`.
973 * **feature-prompts**:
974   * πŸš’ Bug fixed [issue #9229](https://github.com/mozilla-mobile/android-components/issues/9229) - Dismiss SelectLoginPrompt from the current tab when opening a new one ensuring the new one can show it's own. When returning to the previous tab users should focus a login field to see the SelectLoginPrompt again.
975   * PromptFeature now implements UserInteractionHandler.onBackPressed to dismiss loginPicker.
977 * **browser-session**
978   * πŸš’ Bug fixed [issue #9445](https://github.com/mozilla-mobile/android-components/issues/9445) - LinkEngineSessionAction does not consider restoreState result.
980 * **feature-contextmenu**
981   * πŸŒŸ New functionality [issue #9392](https://github.com/mozilla-mobile/android-components/issues/9392) - Add share and copy link context menu options to images.
983 * **feature-customtabs**
984   * βš οΈ **This is a breaking change**: Multiple breaking changes after migrating `feature-customtabs` to use the browser store, `CustomTabIntentProcessor` requires `AddCustomTabUseCase`,  `CustomTabsToolbarFeature` requires the `BrowserStore` and `CustomTabsUseCases` for more details see [issue #4257](https://github.com/mozilla-mobile/android-components/issues/4257).
986 * **feature-intent**
987   * βš οΈ **This is a breaking change**: Multiple breaking changes after migrating `feature-intent` to use the browser store, `TabIntentProcessor` requires `TabsUseCases` and removes the `openNewTab` parameter, for more details see [issue #4279](https://github.com/mozilla-mobile/android-components/issues/4279).
989 * **feature-tabs**
990   * βš οΈ **This is a breaking change**: `TabsUseCases` now requires `SessionStorage` for more info see [issue #9323](https://github.com/mozilla-mobile/android-components/issues/9323).
992 * **browser-icons**
993   * πŸš’ Bug fixed [issue #7888](https://github.com/mozilla-mobile/android-components/issues/7888) - Fixed crash when fetching icon with invalid URI scheme.
995 * **feature-media**
996   * πŸš’ Bug fixed [issue #9243](https://github.com/mozilla-mobile/android-components/issues/9243) - Pausing YouTube Video for A While Causes Media Notification to Disappear.
997   * πŸš’ Bug fixed [issue #9254](https://github.com/mozilla-mobile/android-components/issues/9254) - Headphone control does not pause or play video.
999 * **support-webextensions**
1000   * πŸš’ Bug fixed [issue #9210](https://github.com/mozilla-mobile/android-components/issues/9210) - White page shown in custom tab when ublock blocks page.
1002 * **feature-downloads**:
1003   * Allow browsers to change the download notification accent color by providing `Style()` in `AbstractFetchDownloadService`, for more information see [#9299](https://github.com/mozilla-mobile/android-components/issues/9299).
1005 * **feature-accounts-push**
1006   * Rolling back to previous behaviour of renewing push registration token when the `subscriptionExpired` flag is observed.
1008 * **browser-icons**
1009   * Catch `IOException` that may be thrown when deleting icon caches.
1011 * **feature-qr**
1012   * QR Scanner can now scan inverted QR codes, by decoding inverted source when the decoding the original source fails.
1014 * **feature-sitepermissions**
1015   * βš οΈ **This is a breaking change**: The `SitePermissions` constructor, now parameter types for `autoplayAudible` and `autoplayInaudible` have changed to `AutoplayStatus` as autoplay permissions only support two status `ALLOWED` and `BLOCKED`.
1017 * **feature-app-links**
1018   * βš οΈ **This is a breaking change**: Migrated this component to use `browser-state` instead of `browser-session`. It is now required to pass a `BrowserStore` instance (instead of `SessionManager`) to `AppLinksFeature`.
1020 * **browser-toolbar**
1021   * βš οΈ **This is a breaking change**: The API for showing the site permission indicators has been replaced to API to show an dot notification instead, for more information see [#9378](https://github.com/mozilla-mobile/android-components/issues/9378).
1023 * **service-nimbus**
1024   * Added a `NimbusDisabled` class to provide implementers who are not able to use Nimbus yet.
1026 * **support-base**
1027   * πŸŒŸ Add an `ActivityResultHandler` for features that want to consume the result.
1029 * **concept-engine**,**browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1030   * πŸŒŸ Added a new `ActivityDelegate` for handling intent requests from the engine.
1031   * βš οΈ **This is a breaking change**: `EngineSessionState`.`toJSON()` has been removed for more details see [issue #8370](https://github.com/mozilla-mobile/android-components/issues/8370).
1033 * **browser-engine-gecko(-nightly)**
1034   * Added `GeckoActivityDelegate` for the GeckoView `activityDelegate`.
1036 * **feature-tabs**
1037   * βš οΈ **This is a breaking change**: Removed the `TabCounterToolbarButton#privateColor` attribute which are replaced by the `tabCounterTintColor` Android styleable attribute.
1039 * **lib-nearby**, **feature-p2p**, **samples-nearby**
1040   * βš οΈ **This is a breaking change**: Removed Nearby component and related samples.
1042 # 70.0.0
1044 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v69.0.0...v70.0.0)
1045 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/131?closed=1)
1046 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v70.0.0/buildSrc/src/main/java/Dependencies.kt)
1047 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v70.0.0/buildSrc/src/main/java/Gecko.kt)
1048 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v70.0.0/.config.yml)
1050 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1051   * **Merge day!**
1052     * `browser-engine-gecko-release`: GeckoView 84.0
1053     * `browser-engine-gecko-beta`: GeckoView 85.0
1054     * `browser-engine-gecko-nightly`: GeckoView 86.0
1056 * **browser-toolbar**
1057   * πŸŒŸ Added API to show site permission indicators for more information see [#9131](https://github.com/mozilla-mobile/android-components/issues/9131).
1059 * **browser-awesomebar**:
1060     * Awesomebar can now be customized for bottom toolbar using the [customizeForBottomToolbar] property
1062 * **service-numbus**
1063   * Added a `NimbusDisabled` class to provide implementers who are not able to use Nimbus yet.
1064 # 69.0.0
1066 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v68.0.0...v69.0.0)
1067 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/130?closed=1)
1068 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v69.0.0/buildSrc/src/main/java/Dependencies.kt)
1069 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v69.0.0/buildSrc/src/main/java/Gecko.kt)
1070 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v69.0.0/.config.yml)
1072 * **browser-session**
1073   * βš οΈ **This is a breaking change**: `Session.searchTerms` has been removed. Use `ContentState.searchTerms` (`browser-state`) instead.
1074   * βš οΈ **This is a breaking change**: `Session.desktopMode` has been removed. Use `ContentState.desktopMode` (`browser-state`) instead.
1076 * **feature-search**
1077   * βš οΈ **This is a breaking change**: Use cases in `SearchUseCases` now take the ID of s session/tab as parameter instead of a `Session` instance.
1078   * βš οΈ **This is a breaking change**: `SearchUseCases` no longer depends on `SessionManager` and requires a `TabsUseCases` instance now.
1080 * **feature-tabs**
1081   * βš οΈ **This is a breaking change**: Use cases in `TabsUseCases` that previously returned a `Session` instance now return the ID of the `Session`.
1083 * **support-test-libstate**
1084   * Added `CaptureActionsMiddleware`: A `Middleware` implementation for unit tests that want to inspect actions dispatched on a `Store`.
1086 * **feature-sitepermissions**
1087   * βš οΈ **This is a breaking change**: The `SitePermissionsRules` constructor, now requires a new parameter `mediaKeySystemAccess`.
1088   * πŸŒŸ Added support for EME permission prompts, see [#7121](https://github.com/mozilla-mobile/android-components/issues/7121).
1090 * **browser-thumbnail**
1091   * Catch `IOException` that may be thrown when deleting thumbnails.
1093 * **browser-tabstray**
1094   * βš οΈ **This is a breaking change**: Support temporary hiding if a tab is selected. For this you should use partial bindings with PAYLOAD_(DONT_)HIGHLIGHT_SELECTED_ITEM; override TabsAdapter#isTabSelected for new item bindings; override TabViewHolder#updateSelectedTabIndicator.
1096 * **concept-tabstray**:
1097   * βš οΈ **This is a breaking change**: A new method - `isTabSelected` was added that exposes to clients an easy way to change what a "selected" tab means.
1099 # 68.0.0
1101 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v67.0.0...v68.0.0)
1102 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/129?closed=1)
1103 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v68.0.0/buildSrc/src/main/java/Dependencies.kt)
1104 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v68.0.0/buildSrc/src/main/java/Gecko.kt)
1105 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v68.0.0/.config.yml)
1107 * β„ΉοΈ Note that various AndroidX dependencies have been updated in this release.
1109 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1110   * πŸš’ Bug fixed [issue #8464](https://github.com/mozilla-mobile/android-components/issues/8464) - Crash when confirming a prompt that was already confirmed
1112 * **feature-downloads**
1113   * πŸš’ Bug fixed [issue #9033](https://github.com/mozilla-mobile/android-components/issues/9033) - Fix resuming downloads in slow networks more details see the [Fenix issue](https://github.com/mozilla-mobile/fenix/issues/9354#issuecomment-731267368).
1114   * πŸš’ Bug fixed [issue #9073](https://github.com/mozilla-mobile/android-components/issues/9073) - Fix crash downloading a file with multiple dots on it, for more details see the [Fenix issue](https://github.com/mozilla-mobile/fenix/issues/16443).
1116 * **feature-session**
1117   * πŸš’ Bug fixed [issue #9109](https://github.com/mozilla-mobile/android-components/issues/9109) - Tracking protection shield not getting updated after deleting exception by url [Fenix issue](https://github.com/mozilla-mobile/fenix/issues/16670).
1119 * **feature-app-links**
1120   * Added handling of PackageItemInfo.packageName NullPointerException on some Xiaomi and TCL devices
1122 * **service-glean**
1123   * πŸ†™ Updated Glean to version 33.1.2 ([changelog](https://github.com/mozilla/glean/releases/tag/v33.1.2))
1125 * **feature-tab-collections**:
1126     * [createCollection] now returns the id of the newly created collection
1128 * **browser-errorpages**:
1129   * βš οΈ The url encoded error page - `error_page_js` is now clean of inline code. Clients should not rely on inlined code anymore.
1130   * βš οΈ **This is a breaking change**: Removed the data url encoded error page - `error_pages` which was already deprecated by `error_page_js`.
1132 # 67.0.0
1134 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v66.0.0...v67.0.0)
1135 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/128?closed=1)
1136 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v67.0.0/buildSrc/src/main/java/Dependencies.kt)
1137 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v67.0.0/buildSrc/src/main/java/Gecko.kt)
1138 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v67.0.0/.config.yml)
1140 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1141   * **Merge day!**
1142     * `browser-engine-gecko-release`: GeckoView 83.0
1143     * `browser-engine-gecko-beta`: GeckoView 84.0
1144     * `browser-engine-gecko-nightly`: GeckoView 85.0
1146 * **feature-sitepermissions**
1147   * πŸš’ Bug fixed [issue #8943](https://github.com/mozilla-mobile/android-components/issues/8943) Refactor `SwipeRefreshFeature` to not use `EngineSession.Observer`, this result in multiple site permissions bugs getting fixed see [fenix#8987](https://github.com/mozilla-mobile/fenix/issues/8987) and [fenix#16411](https://github.com/mozilla-mobile/fenix/issues/16411).
1149 * **feature-prompts**
1150   * πŸš’ Bug fixed [issue #8967](https://github.com/mozilla-mobile/android-components/issues/8967) Crash when trying to upload a file see [fenix#16537](https://github.com/mozilla-mobile/fenix/issues/16537), for more information.
1151   * πŸš’ Bug fixed [issue #8953](https://github.com/mozilla-mobile/android-components/issues/8953) - Scroll to selected prompt choice if one exists.
1153 * **feature-accounts-push**
1154   * βš οΈ `FxaPushSupportFeature` now re-subscribes to push instead of triggering the registration renewal process - this is a temporary workaround and will be removed in the future, see [#7143](https://github.com/mozilla-mobile/android-components/issues/7143).
1155   * `FxaPushSupportFeature` now takes an optional crash reporter in the constructor.
1157 # 66.0.0
1159 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v65.0.0...v66.0.0)
1160 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/127?closed=1)
1161 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v66.0.0/buildSrc/src/main/java/Dependencies.kt)
1162 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v66.0.0/buildSrc/src/main/java/Gecko.kt)
1163 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v66.0.0/.config.yml)
1165 * **accounts-push**
1166   * πŸš’ Bug fixed [issue #8745](https://github.com/mozilla-mobile/android-components/issues/8745) - Remove OneTimeFxaPushReset from FxaPushSupportFeature
1167     * βš οΈ **This is a breaking change** because the public API changes with the removal of the class.
1169 * **feature-downloads**
1170   * πŸš’ Bug fixed [issue #8904](https://github.com/mozilla-mobile/android-components/issues/8904) - Fix resuming downloads in nightly/beta more details see the [Fenix issue](https://github.com/mozilla-mobile/fenix/issues/9354).
1172 * **feature-search**
1173   * βš οΈ **This is a breaking change**: `SearchUseCases` no longer requires a `Context` parameter in the constructor.
1175 * **feature-sitepermissions**
1176   * βš οΈ **This is a breaking change**: The `SitePermissionsFeature`'s constructor does not requires a `sessionManager` parameter anymore pass a `store` instead.
1178 * **browser-session**
1179   * `SelectionAwareSessionObserver` is now deprecated. All session state changes can be observed using the browser store (`browser-state` module).
1181 * **feature-addons**
1182   * `AddonManager.getAddons()` now accepts a new (optional) `allowCache` parameter to configure whether or not a cached response may be returned. This is useful in case a UI flow needs the most up-to-date addons list, or to support "refresh" functionality. By default, cached responses are allowed.
1184 * **service-nimbus**
1185   * Added new Nimbus rapid experiment library component. This is a Rust based component that is delivered to A-C through the appservices megazord. See the [nimbus-sdk repo](https://github.com/mozilla/nimbus-sdk) for more info.
1187 # 65.0.0
1189 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v64.0.0...v65.0.0)
1190 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/126?closed=1)
1191 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v65.0.0/buildSrc/src/main/java/Dependencies.kt)
1192 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v65.0.0/buildSrc/src/main/java/Gecko.kt)
1193 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v65.0.0/.config.yml)
1195 * **feature-tabs**
1196   * Added `TabsUseCases.RemoveTabsUseCase` for removing an arbitrary list of tabs.
1198 * **browser-state**
1199   * Added `TabListAction.RemoveTabsAction` to `BrowserAction`.
1201 * **feature-downloads**
1202   * πŸš’ Bug fixed [issue #8823](https://github.com/mozilla-mobile/android-components/issues/8823) Downloads for data URLs were failing on nightly and beta more details in the [Fenix issue](https://github.com/mozilla-mobile/fenix/issues/16228#issuecomment-717976737).
1203   * πŸš’ Bug fixed [issue #8847](https://github.com/mozilla-mobile/android-components/issues/8847) crash when trying to download a file and switching from a normal to a private mode.
1204   * πŸš’ Bug fixed [issue #8857](https://github.com/mozilla-mobile/android-components/issues/8857)  Sometimes it is not possible to dismiss download notifications see [Fenix#15527](https://github.com/mozilla-mobile/fenix/issues/15527) for more information.
1206 * **feature-sitepermissions**
1207   * βš οΈ **This is a breaking change**: The `SitePermissionsFeature`'s constructor, now requires a new parameter `BrowserStore` object.
1208   * πŸŒŸ Moved sitePermissionsFeature from using session to using kotlin flow for observing content and app permission requests[#8554](https://github.com/mozilla-mobile/android-components/issues/8554)
1210 * **feature-addons**
1211   * πŸŒŸοΈ Added dividers for sections in add-ons list, see [#8703](https://github.com/mozilla-mobile/android-components/issues/8703).
1213 * **feature-top-sites**
1214   * Added `RenameTopSiteUseCase` to rename pinned site entries. [#8751](https://github.com/mozilla-mobile/android-components/issues/8751)
1216 * **browser-engine-gecko-nightly**
1217   * Adds optional `PreferredColorScheme` param to `GeckoEngineView`
1218   * On `GeckoView` init call `coverUntilFirstPaint()` with `PreferredColorScheme`
1220 * **feature-push**
1221   * Added `disableRateLimit` to `PushConfig` to allow for easier debugging of push during development.
1222   * Made `AutoPushFeature` aware of the `PushConfig.disableRateLimit` flag.
1224 * **feature-accounts-push**
1225   * Made `FxaPushSupportFeature` aware of the `PushConfig.disableRateLimit` flag.
1227 * **support-base**
1228   * Add `LazyComponent`, a wrapper around `lazy` that avoids initializing recursive dependencies until component use.
1230 # 64.0.0
1232 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v63.0.0...v64.0.0)
1233 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/125?closed=1)
1234 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v64.0.0/buildSrc/src/main/java/Dependencies.kt)
1235 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v64.0.0/buildSrc/src/main/java/Gecko.kt)
1236 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v64.0.0/.config.yml)
1238 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1239   * Exposes GeckoView `CompositorController#ClearColor` as Setting
1241 * **browser-engine-system**
1242   * βš οΈ **This is a breaking change**: Renames `blackListFile` to `blocklistFile`.
1243   * βš οΈ **This is a breaking change**: Renames `whiteListFile` to `safelistFile`.
1245 * **feature-addons**
1246   * πŸš’ Bug fixed [issue #7879](https://github.com/mozilla-mobile/android-components/issues/7879) Crash when the default locale is not part of the translations fields of an add-on
1247   * βš οΈ Removed `Addon.translatedName`, `Addon.translatedSummary` and `Addon.translatedDescription` and added `Addon.translateName(context: Context)`, `Addon.translateSummary(context: Context)` and `Addon.translateDescription(context: Context)`
1249 * **concept-engine**
1250   * βš οΈ Removed `TrackingCategory`.`SHIMMED`, for user usability reasons, we are going to mark SHIMMED categories as blocked, to follow the same pattern as Firefox desktop for more information see [#8769](https://github.com/mozilla-mobile/android-components/issues/8769)
1252 * **feature-downloads**
1253   * πŸš’ Bug fixed [issue #8585](https://github.com/mozilla-mobile/android-components/issues/8784) create download directory when it doesn't exists for more information see [mozilla-mobile/fenix#15527](https://github.com/mozilla-mobile/fenix/issues/5829).
1255 # 63.0.0
1257 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v62.0.0...v63.0.0)
1258 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/124?closed=1)
1259 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v63.0.0/buildSrc/src/main/java/Dependencies.kt)
1260 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v63.0.0/buildSrc/src/main/java/Gecko.kt)
1261 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v63.0.0/.config.yml)
1263 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1264   * **Merge day!**
1265     * `browser-engine-gecko-release`: GeckoView 82.0
1266     * `browser-engine-gecko-beta`: GeckoView 83.0
1267     * `browser-engine-gecko-nightly`: GeckoView 84.0
1269 * **feature-addons**
1270   * πŸš’ Bug fixed [issue #8681](https://github.com/mozilla-mobile/android-components/issues/8681) Fenix was consuming a lot of extra space on disk, when an add-on update requires a new permission, more info can be found [here](https://github.com/mozilla-mobile/android-components/issues/8681)
1271   ```
1273 * All components
1274  * Updated to Kotlin 1.4.10 and Coroutines 1.3.9.
1275  * Updated to Android Gradle plugin 4.0.1 (downstream projects need to update too).
1277 * **service-glean**
1278   * Glean was upgraded to v33.0.0
1279     * βš οΈ **This is a breaking change**: Updated to the Android Gradle Plugin v4.0.1 and Gradle 6.5.1. Projects using older versions of these components will need to update in order to use newer versions of the Glean SDK.
1281 * **browser-toolbar**
1282   * Clear tint of tracking protection icon when animatable
1284 * **concept-engine**
1285   * Added `MediaSession` for the media session API.
1286   * πŸŒŸ Added a new `TrackingCategory`.`SHIMMED` to indicate that content that would have been blocked has instead been replaced with a shimmed file. See more on [Fenix #14071](https://github.com/mozilla-mobile/fenix/issues/14071)
1288 * **browser-engine-gecko(-nightly)**
1289   * Added `GeckoMediaSessionController` and `GeckoMediaSessionDelegate` for the media session API.
1291 * **browser-state**
1292   * Added `MediaSessionState` to `SessionState`.
1293   * Added `MediaSessionAction` to `BrowserAction`.
1295 * **feature-sitepermissions**
1296   * βš οΈ **This is a breaking change**: The `SitePermissionsRules`'s constructor, now requires a new parameter `persistentStorage`.
1297   * πŸŒŸ Added support for the local storage site permission see [#3153](https://github.com/mozilla-mobile/android-components/issues/3153).
1299 * **browser-toolbar**
1300   * πŸŒŸ Added API to add a click listener to the iconView.
1302 * **feature-prompts**
1303   * The repost prompt now has different text and will also dismiss the pull to refresh throbber.
1305 * **lib-push-firebase**
1306   * Upgrade Firebase Cloud Messaging to v20.3.0.
1307     * βš οΈ **This is a breaking change**: `RemoteMessage` is now non-null in `onMessageReceived`.
1309 # 62.0.0
1311 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v61.0.0...v62.0.0)
1312 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/122?closed=1)
1313 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v62.0.0/buildSrc/src/main/java/Dependencies.kt)
1314 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v62.0.0/buildSrc/src/main/java/Gecko.kt)
1315 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v62.0.0/.config.yml)
1317 * **browser-state**
1318   * βš οΈ **This is a breaking change**: `DownloadState` doesn't support [Parcelable](https://developer.android.com/reference/android/os/Parcelable) anymore.
1320 * **feature-downloads**
1321   * πŸš’ Bug fixed [issue #8585](https://github.com/mozilla-mobile/android-components/issues/8585) fixed regression files not been added to the downloads database system.
1322   * πŸŒŸ Added new use cases for removing individual downloads (`removeDownload`) and all downloads (`removeAllDownloads`).
1323   * πŸŒŸ Added support for new download [GeckoView API](https://mozilla.github.io/geckoview/javadoc/mozilla-central/org/mozilla/geckoview/GeckoSession.ContentDelegate.html#onExternalResponse-org.mozilla.geckoview.GeckoSession-org.mozilla.geckoview.GeckoResult-).
1325 * **service-glean**
1326   * Glean was upgraded to v32.4.1
1327     * Update `glean_parser` to 1.28.6
1328       * BUGFIX: Ensure Kotlin arguments are deterministically ordered
1329     * BUGFIX: Transform ping directory size from bytes to kilobytes before accumulating to `glean.upload.pending_pings_directory_size`
1331 * **feature-customtabs**
1332   * The drawable for the Action button icon in custom tabs is now scaled to 24dp width an 24dp height.
1334 * **support-images**
1335   * βš οΈ **This is a breaking change**: `ImageLoader` and `ImageRequest` have moved to the `concept-base` component.
1337 * **browser-session**
1338   * πŸš’ Bug fixed: Having a larger number of tabs slows down cold startup see more on [#8535](https://github.com/mozilla-mobile/android-components/issues/8535) and [#7304](https://github.com/mozilla-mobile/android-components/issues/7304).
1340 * **browser-toolbar**
1341   * πŸš’ Bug fixed: Crash IllegalArgumentException BrowserGestureDetector$CustomScrollDetectorListener see more on [#8356](https://github.com/mozilla-mobile/android-components/issues/8356)
1343 * **feature-qr**
1344   * πŸš’ Bug fixed: Pair message show at every scan after you try to login using scan qr see [#8537](https://github.com/mozilla-mobile/android-components/issues/8537)
1346 * **feature-addons**
1347   * βš οΈ This is a breaking change for call sites that don't rely on named arguments:
1348     * `AddonCollectionProvider` now supports configuring a custom collection owner (via AMO user ID or name).
1349     * `AddonCollectionProvider` now supports configuring the sort order of recommended collections, defaulting to sorting descending by popularity
1350   ```kotlin
1351    val addonCollectionProvider by lazy {
1352         AddonCollectionProvider(
1353             applicationContext,
1354             client,
1355             collectionUser = "16314372"
1356             collectionName = "myCollection",
1357             sortOption = SortOption.NAME
1358             maxCacheAgeInMinutes = DAY_IN_MINUTES
1359         )
1360     }
1361   * Temporary add-ons installed via web-ext are no longer displayed as unsupported.
1363 # 61.0.0
1365 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v60.0.0...v61.0.0)
1366 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/121?closed=1)
1367 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v60.0.0/buildSrc/src/main/java/Dependencies.kt)
1368 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v60.0.0/buildSrc/src/main/java/Gecko.kt)
1369 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v60.0.0/.config.yml)
1371 * **browser-session**
1372   * Added "undo" functionality via `UndoMiddleware`.
1373 * **feature-tabs**
1374   * Added `TabsUseCases.UndoTabRemovalUseCase` for undoing the removal of tabs.
1375 * **feature-webcompat-reporter**
1376   * Added the ability to automatically add a screenshot as well as more technical details when submitting a WebCompat report.
1377 * **feature-addons**
1378   * Temporary add-ons installed via web-ext are no longer displayed as unsupported.
1379   * πŸš’ Bug fixed [issue #8267](https://github.com/mozilla-mobile/android-components/issues/8267) Devtools permission had wrong translation.
1380   ```
1381 * **concept-menu**
1382   * πŸŒŸ Added `AsyncDrawableMenuIcon` class to use icons in a menu that will be loaded later.
1384 # 60.0.0
1386 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v59.0.0...v60.0.0)
1387 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/120?closed=1)
1388 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v60.0.0/buildSrc/src/main/java/Dependencies.kt)
1389 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v60.0.0/buildSrc/src/main/java/Gecko.kt)
1390 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v60.0.0/.config.yml)
1392 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1393   * πŸš’ Bug fixed [issue #8431](https://github.com/mozilla-mobile/android-components/issues/8431) update `Session.trackerBlockingEnabled` and `SessionState#trackingProtection#enabled` with the initial tracking protection state.
1394 * **feature-tabs**
1395   * Added `TabsUseCases.removeNormalTabs()` and `TabsUseCases.removePrivateTabs()`.
1396   * βš οΈ **This is a breaking change**: Removed `TabsUseCases.removeAllTabsOfType()`.
1397 * **browser-session**
1398   * Added `SessionManager.removeNormalSessions()` and `SessionManager.removePrivateSessions()`.
1399 * **feature-downloads**
1400   * πŸš’ Bug fixed [issue #8456](https://github.com/mozilla-mobile/android-components/issues/8456) Crash SQLiteConstraintException UNIQUE constraint failed: downloads.id (code 1555).
1401 * **service-glean**
1402   * Glean was upgraded to v32.4.0
1403     * Allow using quantity metric type outside of Gecko ([#1198](https://github.com/mozilla/glean/pull/1198))
1404     * Update `glean_parser` to 1.28.5
1405       * The `SUPERFLUOUS_NO_LINT` warning has been removed from the glinter. It likely did more harm than good, and makes it hard to make metrics.yaml files that pass across different versions of `glean_parser`.
1406       * Expired metrics will now produce a linter warning, `EXPIRED_METRIC`.
1407       * Expiry dates that are more than 730 days (~2 years) in the future will produce a linter warning, `EXPIRATION_DATE_TOO_FAR`.
1408       * Allow using the Quantity metric type outside of Gecko.
1409       * New parser configs `custom_is_expired` and `custom_validate_expires` added. These are both functions that take the expires value of the metric and return a bool. (See `Metric.is_expired` and `Metric.validate_expires`). These will allow FOG to provide custom validation for its version-based `expires` values.
1410     * Add a limit of 250 pending ping files. ([#1217](https://github.com/mozilla/glean/pull/1217)).
1411     * Don't retry the ping uploader when waiting, sleep instead. This avoids a never-ending increase of the backoff time ([#1217](https://github.com/mozilla/glean/pull/1217)).
1413 # 59.0.0
1415 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v58.0.0...v59.0.0)
1416 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/119?closed=1)
1417 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v59.0.0/buildSrc/src/main/java/Dependencies.kt)
1418 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v59.0.0/buildSrc/src/main/java/Gecko.kt)
1419 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v59.0.0/buildSrc/src/main/java/Config.kt)
1421 * **feature-downloads**
1422   * πŸš’ Bug fixed [issue #8354](https://github.com/mozilla-mobile/android-components/issues/8354) Do not restart FAILED downloads.
1423 * **browser-tabstray**
1424   * Removed the `BrowserTabsTray` that was deprecated in previous releases.
1425 * **service-telemetry**
1426   * This library has been removed. Please use `service-glean` instead.
1427 * **service-glean**
1428   * Glean was upgraded to v32.3.2
1429     * Track the size of the database file at startup ([#1141](https://github.com/mozilla/glean/pull/1141)).
1430     * Submitting a ping with upload disabled no longer shows an error message ([#1201](https://github.com/mozilla/glean/pull/1201)).
1431     * BUGFIX: scan the pending pings directories **after** dealing with upload status on initialization. This is important, because in case upload is disabled we delete any outstanding non-deletion ping file, and if we scan the pending pings folder before doing that we may end up sending pings that should have been discarded. ([#1205](https://github.com/mozilla/glean/pull/1205))
1432     * Move logic to limit the number of retries on ping uploading "recoverable failures" to glean-core. ([#1120](https://github.com/mozilla/glean/pull/1120))
1433     * The functionality to limit the number of retries in these cases was introduced to the Glean SDK in `v31.1.0`. The work done now was to move that logic to the glean-core in order to avoid code duplication throughout the language bindings.
1434     * Update `glean_parser` to `v1.28.3`
1435       * BUGFIX: Generate valid C# code when using Labeled metric types.
1436       * BUGFIX: Support `HashSet` and `Dictionary` in the C# generated code.
1437     * Add a 10MB quota to the pending pings storage. ([#1100](https://github.com/mozilla/glean/pull/1110))
1438     * Handle ping registration off the main thread. This removes a potential blocking call ([#1132](https://github.com/mozilla/glean/pull/1132)).
1439 * **feature-syncedtabs**
1440   * Added support for indicators to synced tabs `AwesomeBar` suggestions.
1441 * **feature-addons**
1442   * βš οΈ **This is a breaking change**: The `Addon.translatePermissions` now requires a `context` object and returns a list of localized strings instead of a list of id string resources.
1443   * πŸš’ Bug fixed [issue #8323](https://github.com/mozilla-mobile/android-components/issues/8323) Add-on permission dialog does not prompt for host permissions.
1445 # 58.0.0
1447 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v57.0.0...v58.0.0)
1448 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/118?closed=1)
1449 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v58.0.0/buildSrc/src/main/java/Dependencies.kt)
1450 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v58.0.0/buildSrc/src/main/java/Gecko.kt)
1451 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v58.0.0/buildSrc/src/main/java/Config.kt)
1453 * **feature-recentlyclosed**
1454   * Added a new [RecentlyClosedTabsStorage] and a [RecentlyClosedMiddleware] to maintain a list of restorable recently closed tabs.
1456 # 57.0.0
1458 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v56.0.0...v57.0.0)
1459 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/117?closed=1)
1460 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v57.0.0/buildSrc/src/main/java/Dependencies.kt)
1461 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v57.0.0/buildSrc/src/main/java/Gecko.kt)
1462 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v57.0.0/buildSrc/src/main/java/Config.kt)
1464 * **feature-search**
1465   * βš οΈ **This is a breaking change**: `SearchFeature.performSearch` now takes a second parameter.
1466   * `BrowserStoreSearchAdapter` and `SearchFeature` can now take a `tabId` parameter.
1468 * **feature-top-sites**
1469   * βš οΈ **This is a breaking change**: Renames `TopSiteStorage` to `PinnedSitesStorage`.
1470   * βš οΈ **This is a breaking change**: Renames `TopSiteDao` to `PinnedSiteDao`.
1471   * βš οΈ **This is a breaking change**: Renames `TopSiteEntity` to `PinnedSiteEntity`.
1472   * βš οΈ **This is a breaking change**: Replaces `TopSite` interface with a new generic `TopSite` data class.
1473   * Implements TopSitesFeature based on the RFC [0006-top-sites-feature.md](https://github.com/mozilla-mobile/android-components/blob/main/docs/rfcs/0006-top-sites-feature.md).
1474   * Downloads, redirect targets, reloads, embedded resources, and frames are no longer considered for inclusion in top sites. Please see [this Application Services PR](https://github.com/mozilla/application-services/pull/3505) for more details.
1476 * **lib-push-firebase**
1477   * Removed non-essential dependency on `com.google.firebase:firebase-core`.
1479 * **lib-crash**
1480   * Crash report timestamp is now set to when the crash occurred.
1481   * When breadcrumbs limit is reached, oldest breadcrumbs are dropped.
1483 * **feature-toolbar**
1484   * Added `ContainerToolbarFeature` to update the toolbar with the container page action whenever the selected tab changes.
1486 * **browser-state**
1487   * Added `LastAccessMiddleware` to dispatch `TabSessionAction.UpdateLastAccessAction` when a tab is selected.
1489 * **feature-prompts**
1490   * Replaced generic icon in `LoginDialogFragment` with site icon (keep the generic one as fallback)
1492 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1493   * πŸš’ Bug fixed [issue #8240](https://github.com/mozilla-mobile/android-components/issues/8240) Crash when dismissing Share dialog.
1495 * **feature-downloads**
1496   * βš οΈ **This is a breaking change**: `AndroidDownloadManager.download` returns a `Strings`, `AndroidDownloadManager.tryAgain` requires a `Strings` `id` parameter.
1497   * βš οΈ **This is a breaking change**: `ConsumeDownloadAction` requires a `Strings` `id` parameter.
1498   * βš οΈ **This is a breaking change**: `DownloadManager#onDownloadStopped` requires a `Strings` `(DownloadState, Long, Status) -> Unit`.
1499   * βš οΈ **This is a breaking change**: `DownloadsUseCases.invoke` requires an `Strings` `downloadId` parameter.
1500   * βš οΈ **This is a breaking change**: `DownloadState.id` has changed its type from `Long` to `String`.
1501   * βš οΈ **This is a breaking change**: `BrowserState.downloads` has changed it's type from `Map<Long, DownloadState>` to `Map<String, DownloadState>`.
1502   * πŸŒŸ Added support for persisting/restoring downloads see issue [#7762](https://github.com/mozilla-mobile/android-components/issues/7762).
1503   * πŸŒŸ Added `DownloadStorage` for querying stored download metadata.
1504   * πŸš’ Bug [issue #8190](https://github.com/mozilla-mobile/android-components/issues/8190) ArithmeticException: divide by zero in Download notification.
1505   * πŸš’ Bug [issue #8363](https://github.com/mozilla-mobile/android-components/issues/8363) IllegalStateException: Not allowed to start service Intent.
1507 * **ui-widgets**
1508   * πŸ†• New VerticalSwipeRefreshLayout that comes to resolve many of the issues of the platform SwipeRefreshLayout and filters out other gestures than swipe down/up.
1510 # 56.0.0
1512 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v55.0.0...v56.0.0)
1513 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/116?closed=1)
1514 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v55.0.0/buildSrc/src/main/java/Dependencies.kt)
1515 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v55.0.0/buildSrc/src/main/java/Gecko.kt)
1516 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v55.0.0/buildSrc/src/main/java/Config.kt)
1518 * **feature-prompts**
1519   * πŸŒŸ Added optional `LoginPickerView` and `onManageLogins` params to `PromptFeature` for a new [LoginPicker] to display a view for selecting one of multiple matching saved logins to fill into a site.
1521 * **concept-tabstray**
1522   * πŸŒŸ Added `onTabsUpdated` to `TabsTray.Observer` for notifying observers when one or more tabs have been added/removed.
1524 * **browser-tabstray**
1525   * πŸŒŸ Added the convenience function `TabsAdapter.doOnTabsUpdated` for performing actions only once when the tabs are updated.
1527 * **feature-app-links**
1528   * πŸš’ Bug fixed [issue #8169](https://github.com/mozilla-mobile/android-components/issues/8169) App links dialog will now call `showNow` to immediately show the dialog.
1530 * **browser-thumbnails**
1531   * πŸŒŸ Exposed `BrowserThumbnail.requestThumbnail` API for consumers.
1533 * **browser-engine-gecko-nightly**
1534   * πŸŒŸ Added `onPaintStatusReset` when a session's paint has been reset.
1535   * πŸš’ Bug fixed [issue #8123](https://github.com/mozilla-mobile/android-components/issues/8123) Fix history title crash.
1537 * **browser-engine-gecko-beta and **browser-engine-gecko **
1538   * πŸš’ Bug fixed [issue #8123](https://github.com/mozilla-mobile/android-components/issues/8123) Fix history title crash.
1540 * **concept-menu**
1541   * πŸŒŸ Added `MenuStyle` class to set menu background and width.
1543 * **browser-menu**
1544   * πŸŒŸ Added `style` parameter to `BrowserMenu.show`.
1545   * πŸš’ Bug fixed [issue #8223](https://github.com/mozilla-mobile/android-components/issues/8223): Fix compound drawable position for RTL.
1547 * **browser-menu2**
1548   * πŸŒŸ Added `style` parameter to `BrowserMenuController`.
1550 * **ui-widgets**
1551   * πŸŒŸ Added widget for showing a website in a list, such as in bookmarks or history. The `mozac_primary_text_color` and `mozac_caption_text_color` attributes should be set.
1553 * **browser-icons**
1554   * πŸŒŸ Expose `BrowserIcons.clear()` as a public API to remove all saved data from disk and memory caches.
1556 * **feature-downloads**
1557   * πŸš’ Bug fixed [issue #8202](https://github.com/mozilla-mobile/android-components/issues/8202): Download's ui were always showing failed status.
1559 * **feature-pwa**
1560   * βš οΈ **This is a breaking change**: The `SiteControlsBuilder` interface has changed. `buildNotification` now takes two parameters: `Context` and `Notification.Builder`.
1561   * `WebAppSiteControlsFeature` now supports displaying monochrome icons.
1563 * **service-glean**
1564   * Glean was updated to v32.1.1
1565       * Support installing glean_parser in offline mode.
1566       * Fix a startup crash on some Android 8 (SDK=25) devices, due to a [bug in the Java compiler](https://issuetracker.google.com/issues/110848122#comment17).
1568 * **feature-readerview**
1569   * πŸš’ Bug fixed [issue #8208](https://github.com/mozilla-mobile/android-components/issues/8208): Add a link to the original page in Reader Mode.
1571 * **feature-addons**
1572   * πŸŒŸ Feature [issue #8200](https://github.com/mozilla-mobile/android-components/issues/8200): "users" in add-ons manager should be renamed to "reviews".
1574 # 55.0.0
1576 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v54.0.0...v55.0.0)
1577 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/115?closed=1)
1578 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v55.0.0/buildSrc/src/main/java/Dependencies.kt)
1579 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v55.0.0/buildSrc/src/main/java/Gecko.kt)
1580 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v55.0.0/buildSrc/src/main/java/Config.kt)
1582 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1583   * Fixed issue [#7983](https://github.com/mozilla-mobile/android-components/issues/7983), crash when a file name wasn't provided when uploading a file.
1585 * **service-glean**
1586   * Glean was updated to v32.1.0
1587     * The rate limiter now allows 15, rather than 10, pings per minute.
1589 * **storage-sync**
1590   * Fixed [issue #8011](https://github.com/mozilla-mobile/android-components/issues/8011) PlacesConnectionBusy: Error executing SQL: database is locked.
1592 * **feature-app-links**
1593   * Fixed [issue #8122](https://github.com/mozilla-mobile/android-components/issues/8122) App link redirecting to Play Store, rather than to installed app.
1595 # 54.0.0
1597 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v53.0.0...v54.0.0)
1598 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/113?closed=1)
1599 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v54.0.0/buildSrc/src/main/java/Dependencies.kt)
1600 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v54.0.0/buildSrc/src/main/java/Gecko.kt)
1601 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v54.0.0/buildSrc/src/main/java/Config.kt)
1603 * **concept-menu**
1604   * Added `orientation` parameter to `MenuController.show`. Passing null (the default) tells the menu to determine the best orientation itself.
1606 * **browser-menu2**
1607   * βš οΈ **This is a breaking change**: `BrowserMenuController.show` no longer supports the width parameter.
1609 * **feature-app-links**
1610   * Added `loadUrlUseCase` as a parameter for `AppLinksFeature`.  This is used to load the URL if the user decides to not launch the link in the external app.
1612 * **concept-awesomebar**
1613   * Added `AwesomeBar.setOnEditSuggestionListener()` to register a callback when a search term is selected to be edited further.
1615 * **browser-toolbar**
1616   * `BrowserToolbar.setSearchTerms()` can now be called during `State.EDIT`
1618 * **browser-awesomebar**
1619   * The view of `DefaultSuggestionViewHolder` now contains a button to select a search term for further editing. Clicking it will invoke the callback registered in `BrowserAwesomeBar.setOnEditSuggestionListener()`
1621 * **browser-menu**
1622   * βš οΈ **This is a breaking change**: Removed `SimpleBrowserMenuHighlightableItem.itemType`. Use a WeakMap instead if you need to attach private data.
1624 * **browser-menu**
1625   * For a11y, `BrowserMenuImageSwitch` now highlights the entire row, not just the switch
1627 * **concept-engine**
1628   * Added the `cookiePurging` property to `TrackingProtectionPolicy` and `TrackingProtectionPolicyForSessionTypes` constructors to enable/disable cookie purging feature read more about it [here](https://blog.mozilla.org/blog/2020/08/04/latest-firefox-rolls-out-enhanced-tracking-protection-2-0-blocking-redirect-trackers-by-default/).
1630 * **browser-engine-nightly**
1631   * Added `cookiePurging` to `TrackingProtectionPolicy.toContentBlockingSetting`.
1633 * **feature-addons**
1634   * βš οΈ **This is a breaking change**: Unified addons icons design with the one of favicons used all throughout the app. Specifying a different background is not possible anymore.
1636 # 53.0.0
1638 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v52.0.0...v53.0.0)
1639 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/112?closed=1)
1640 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v53.0.0/buildSrc/src/main/java/Dependencies.kt)
1641 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v53.0.0/buildSrc/src/main/java/Gecko.kt)
1642 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v53.0.0/buildSrc/src/main/java/Config.kt)
1644 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
1645   * **Merge day!**
1646     * `browser-engine-gecko`: GeckoView 79.0
1647     * `browser-engine-gecko-beta`: GeckoView 80.0
1648     * `browser-engine-gecko-nightly`: GeckoView 81.0
1650 * **feature-downloads**
1651   * βš οΈ **This is a breaking change**: Removed the following properties from `DownloadJobState` in `AbstractFetchDownloadService` and added to `DownloadState`: `DownloadJobStatus` (now renamed to `DownloadStatus`) and `currentBytesCopied`. These properties can now be read from `DownloadState`.
1652   * βš οΈ **This is a breaking change**: Removed the enum class `DownloadJobStatus` from `AbstractFetchDownloadService` and moved into `DownloadState`, and removed the `ACTIVE` state while introducing two new states called `INITIATED` and `DOWNLOADING`.
1653   * βš οΈ **This is a breaking change**: Renamed the following data classes from `BrowserAction`: `QueuedDownloadAction` to `AddDownloadAction`, `RemoveQueuedDownloadAction` to `RemoveDownloadAction`, `RemoveAllQueuedDownloadsAction` to `RemoveAllDownloadsAction`, and `UpdateQueuedDownloadAction` to `UpdateDownloadAction`.
1654   * βš οΈ **This is a breaking change**: Renamed `queuedDownloads` from `BrowserState` to `downloads` .
1655   * Removed automatic deletion of `downloads` upon a completed download.
1656   * πŸ†• Added support for choosing a third party app to perform a download.
1658 * **browser-menu**
1659   * βš οΈ **This is a breaking change**: `BrowserMenuItemToolbar.Button.longClickListener` is now nullable and defaults to null.
1661 * **concept-menu**
1662   * Added `SmallMenuCandidate.onLongClick` to handle long click of row menu buttons.
1664 * **service-glean**
1665   * Glean was updated to v31.6.0
1666     * Limit ping request body size to 1MB. ([#1098](https://github.com/mozilla/glean/pull/1098))
1667     * BUGFIX: Require activities executed via `GleanDebugView` to be exported.
1669 * **feature-downloads**
1670   * βš οΈ **This is a breaking change**: `DownloadsFeature` is no longer accepting a custom download dialog but supporting customizations via the `promptStyling` parameter. The `dialog` parameter was unused so far. If it's required in the future it will need to be replaced with a lambda or factory so that the feature can create instances of the dialog itself, as needed.
1672 * **feature-webcompat-reporter**
1673   * Added a second parameter to the `install` method: `productName` allows to provide a unique product name per usage for automatic product-labelling on webcompat.com
1675 * **feature-contextmenu**
1676   * Do not show the "Download link" option for html URLs.
1677   * Uses a speculative check, may not work in all cases.
1679 * **ui-widgets**
1680   * Added shared ImageView style for favicons. The `mozac_widget_favicon_background_color` and `mozac_widget_favicon_border_color` attributes should be set, then `style="@style/Mozac.Widgets.Favicon"` can be added to an ImageView.
1682 # 52.0.0
1684 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v51.0.0...v52.0.0)
1685 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/111?closed=1)
1686 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v52.0.0/buildSrc/src/main/java/Dependencies.kt)
1687 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v52.0.0/buildSrc/src/main/java/Gecko.kt)
1688 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v52.0.0/buildSrc/src/main/java/Config.kt)
1690 * **browser-icons**
1691   * Added `BrowserIcons.clear()` to remove all saved data from disk and memory caches.
1693 * **support-images**
1694   * βš οΈ **This is a breaking change**: Removed `ImageLoader.loadIntoView(view: ImageView, id: String)` extension function.
1696 * **service-glean**
1697   * Glean was updated to v31.6.0
1698     * Implement ping tagging (i.e. the `X-Source-Tags` header) ([#1074](https://github.com/mozilla/glean/pull/1074)). Note that this is not yet implemented for iOS.
1699     * String values that are too long now record `invalid_overflow` rather than `invalid_value` through the Glean error reporting mechanism. This affects the string, event and string list metrics.
1700     * `metrics.yaml` files now support a `data_sensitivity` field to all metrics for specifying the type of data collected in the field.
1701     * Allow defining which `Activity` to run next when using the `GleanDebugActivity`.
1702     * Implement JWE metric type ([#1073](https://github.com/mozilla/glean/pull/1073), [#1062](https://github.com/mozilla/glean/pull/1062)).
1703     * DEPRECATION: `getUploadEnabled` is deprecated (respectively `get_upload_enabled` in Python) ([#1046](https://github.com/mozilla/glean/pull/1046))
1704       * Due to Glean's asynchronous initialization the return value can be incorrect.
1705         Applications should not rely on Glean's internal state.
1706         Upload enabled status should be tracked by the application and communicated to Glean if it changes.
1707         Note: The method was removed from the C# and Python implementation.
1708     * Update `glean_parser` to `v1.28.1`
1709       * The `glean_parser` linting was leading consumers astray by incorrectly suggesting that `deletion-request` be instead `deletion_request` when used for `send_in_pings`. This was causing metrics intended for the `deletion-request` ping to not be included when it was collected and submitted. Consumers that are sending metrics in the `deletion-request` ping will need to update the `send_in_pings` value in their metrics.yaml to correct this.
1710       * Fixes a bug in doc rendering.
1712 * **feature-syncedtabs**
1713   * βš οΈ **This is a breaking change**: Adds context to the constructor of `SyncedTabsFeature`.
1715 * **browser-tabstray**
1716   * βš οΈ **This is a breaking change**: The `BrowserTabsTray` is now deprecated. Using a `RecyclerView` directly is now recommended.
1717   * βš οΈ **This is a breaking change**: `ViewHolderProvider` no longer has a second param.
1718   * βš οΈ **This is a breaking change**: `TabsAdapter` has a `styling` field `TabsTrayStyling`.
1720 * **browser-menu2**
1721   * Added new component to replace **browser-menu**. menu2 uses immutable data types and better integrates with `BrowserStore`.
1723 * **concept-menu**
1724   * Added concept component to contain data classes for menu items and interfaces for menu controllers.
1726 * **browser-toolbar**
1727   * Added support for the new `MenuController` interface for menu2.
1728     When a menu controller is added to a toolbar, it will be used in place of the `BrowserMenuBuilder`.
1729     The builder will supply items to the `MenuController` in `invalidateMenu` if it is kept.
1731 * **feature-containers**
1732   * Adds a `ContainerMiddleware` that connects container browser actions with the `ContainerStorage`.
1734 * **feature-app-links**
1735   * βš οΈ **This is a breaking change**: add `lastUri` as a parameter for `AppLinksInterceptor`.
1737 * **concept-engine**, **browser-engine-***
1738   * βš οΈ **This is a breaking change**: add `lastUri` as a parameter for `RequestInterceptor.onLoadRequest`.
1740 * **support-ktx**
1741   * Added `Vibrator.vibrateOneShot` compat method.
1743 # 51.0.0
1745 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v50.0.0...v51.0.0)
1746 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/110?closed=1)
1747 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v51.0.0/buildSrc/src/main/java/Dependencies.kt)
1748 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v51.0.0/buildSrc/src/main/java/Gecko.kt)
1749 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v51.0.0/buildSrc/src/main/java/Config.kt)
1751 * **browser-session**
1752   * βš οΈ **This is a breaking change**: Removed the following properties from `Session`: `findResults`, `hitResult`, `fullScreenMode` and `layoutInDisplayCutoutMode`. The values still exist in `BrowserState` and can be read from there.
1754 * **support-images**
1755   * βš οΈ **This is a breaking change**: Removed `ImageRequest` in favor of `ImageSaveRequest` and `ImageLoadRequest` to separate the information passed to methods that load and save images.
1756   * βš οΈ **This is a breaking change**: `ImageLoader.loadIntoView()` now takes an `ImageSaveRequest` instead of an `ImageRequest`.
1758 * **browser-thumbnails**
1759   * βš οΈ **This is a breaking change**: `ThumbnailStorage.saveThumbnail()` now takes an `ImageSaveRequest` instead of an `ImageRequest`.
1760   * βš οΈ **This is a breaking change**: `ThumbnailStorage.loadThumbnail()` now takes an `ImageLoadRequest` instead of an `ImageRequest`.
1762 * **feature-addons**
1763     * AddonManager now receives a `WebExtensionRuntime` instead of an `Engine`. This has no impact to consumers of `feature-addons` as `Engine` already implements `WebExtensionRuntime`.
1765 * **browser-session**
1766   * βš οΈ **This is a breaking change**: `Session.Source` was moved to browser-state and is now `SessionState.Source`. No change is required other than fixing imports.
1768 * **browser-engine-beta**
1769   * Added `TrackingProtectionPolicy.toContentBlockingSetting` extension methods to convert a policy to GeckoView's `ContentBlocking.Setting`.
1771 * **browser-engine-nightly**
1772   * Added `TrackingProtectionPolicy.toContentBlockingSetting` extension methods to convert a policy to GeckoView's `ContentBlocking.Setting`.
1773   * Added checks to not apply the same policy twice if they are the same as already on the engine.
1775 * **feature-pwa**
1776   * Added `ManifestStorage.loadShareableManifests` to get manifest with a `WebAppManifest.ShareTarget`.
1778 * **support-ktx**
1779   * Add `Activity.reportFullyDrawnSafe`, a function to call `Activity.reportFullyDrawn` while catching crashes under some circumstances.
1781 # 50.0.0
1783 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v49.0.0...v50.0.0)
1784 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/109?closed=1)
1785 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v50.0.0/buildSrc/src/main/java/Dependencies.kt)
1786 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v50.0.0/buildSrc/src/main/java/Gecko.kt)
1787 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v50.0.0/buildSrc/src/main/java/Config.kt)
1789 * **feature-session**
1790   * Added `SessionFeature.release()`: Calling this method stops the feature from rendering sessions on the `EngineView` (until explicitly started again) and releases an already rendering session from the `EngineView`.
1791   * Added `SessionUseCases.goToHistoryIndex` to allow consumers to jump to a specific index in a session's history.
1792   * Added `flags` parameter to `ReloadUrlUseCase`.
1794 * **support-ktx**
1795   * Adds `Bundle.contentEquals` function to check if two bundles are equal.
1797 * **concept-engine**
1798   * Added `EngineSession.goToHistoryIndex` to jump to a specific index in a session's history.
1799   * Adds `flags` parameter to `reload`.
1801 * **service-glean**
1802   * Glean was updated to v31.4.1
1803     * Remove locale from baseline ping. ([1609968](https://bugzilla.mozilla.org/show_bug.cgi?id=1609968), [#1016](https://github.com/mozilla/glean/pull/1016))
1804     * Persist X-Debug-ID header on store ping. ([1605097](https://bugzilla.mozilla.org/show_bug.cgi?id=1605097), [#1042](https://github.com/mozilla/glean/pull/1042))
1805     * BUGFIX: raise an error if Glean is initialized with an empty string as the `application_id` ([#1043](https://github.com/mozilla/glean/pull/1043)).
1806     * Enable debugging features through environment variables. ([#1058](https://github.com/mozilla/glean/pull/1058))
1807     * BUGFIX: fix `int32` to `ErrorType` mapping. The `InvalidOverflow` had a value mismatch between glean-core and the bindings. This would only be a problem in unit tests. ([#1063](https://github.com/mozilla/glean/pull/1063))
1808     * Enable propagating options to the main product Activity when using the `GleanDebugActivity`.
1809     * BUGFIX: Fix the metrics ping collection for startup pings such as `reason=upgrade` to occur in the same thread/task as Glean initialize. Otherwise, it gets collected after the application lifetime metrics are cleared such as experiments that should be in the ping. ([#1069](https://github.com/mozilla/glean/pull/1069))
1811 * **service-location**
1812   * `LocationService.hasRegionCached()` is introduced to query if the region is already cached and a long running operation to fetch the region is not needed.
1814 * **browser-state**
1815   * Added map of `SessionState.contextId` and their respective `ContainerState` in `BrowserState` to track the state of a container.
1817 * **browser-menu**
1818   * Added an optional `longClickListener` parameter to `BrowserMenuItemToolbar.Button` and `BrowserMenuItemToolbar.TwoStateButton` to handle long click events.
1820 # 49.0.0
1822 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v48.0.0...v49.0.0)
1823 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/108?closed=1)
1824 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v49.0.0/buildSrc/src/main/java/Dependencies.kt)
1825 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v49.0.0/buildSrc/src/main/java/Gecko.kt)
1826 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v49.0.0/buildSrc/src/main/java/Config.kt)
1828 * **feature-session**
1829   * βš οΈ **This is a breaking change**: `FullScreenFeature`, `SettingsUseCases`, `SwipeRefreshFeature` and `SessionFeature` now require a `BrowserStore` instead of a `SessionManager`.
1830   * βš οΈ **This is a breaking change**: `SessionFeature` now requires an `EngineSessionUseCases` instance.
1831   * βš οΈ **This is a breaking change**: `TrackingProtectionUseCases` now requires a `BrowserStore` instead of a `SessionManager`.
1833 * **feature-tabs**
1834   * βš οΈ **This is a breaking change**: `TabsUseCases.AddNewTabUseCase` and `TabsUseCases.AddNewPrivateTabUseCase` now require a `BrowserStore` instead of a `SessionManager`.
1836 * **browser-session**
1837   * `SessionManager.getEngineSession()` is now deprecated. From now on please read `EngineSession` instances of tabs from `BrowserState`.
1839 * **service-sync-logins**
1840   * βš οΈ **This is a breaking change**: removed `isAutofillEnabled` lambda from `GeckoLoginStorageDelegate` because setting has been exposed through GV
1842 * **concept-engine**
1843   * Adds `profiler` property with `isProfilerActive`, `getProfilerTime` and `addMarker` Firefox Profiler APIs. These will allow to add profiler markers.
1845 * **support-ktx**
1846   * Adds `Resources.getSpanned` to format strings using style spans.
1847   * Adds `Resources.locale` to get the corresponding locale on all SDK versions.
1849 * **feature-logins**
1850   * πŸ†• New component for logins related features.
1851   * Adds `LoginExceptionStorage` for storing and accessing save login prompt exceptions.
1853 * **feature-prompts**
1854    * Added an optional `LoginExceptions` param that a storage layer can implement to check for exceptions before showing a save login prompt.
1856 # 48.0.0
1858 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v47.0.0...v48.0.0)
1859 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/107?closed=1)
1860 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v48.0.0/buildSrc/src/main/java/Dependencies.kt)
1861 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v48.0.0/buildSrc/src/main/java/Gecko.kt)
1862 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v48.0.0/buildSrc/src/main/java/Config.kt)
1864 * **feature-intent**
1865    * βš οΈ **This is a breaking change**: `IntentProcessor.process` is not a suspend function anymore.
1867 * **feature-search**
1868   * Adds optional `parentSession` to attach to a new search session in `SearchUseCases`
1870 * **feature-contextmenu**
1871   * Add "Share image" to context menu.
1873 * **feature-session**
1874   * βš οΈ **This is a breaking change**: `AbstractCustomTabsService` now requires `CustomTabsServiceStore`.
1875   * βš οΈ **This is a breaking change**: `httpClient` and `apiKey` have been removed from `AbstractCustomTabsService`. They should be replaced with building `DigitalAssetLinksApi` and passing it to `relationChecker`.
1876   * Added `relationChecker` to customize Digital Asset Links handling.
1878 * **feature-pwa**
1879   * βš οΈ **This is a breaking change**: `TrustedWebActivityIntentProcessor` now requires a `RelationChecker` instead of `httpClient` and `apiKey`.
1880   * βš οΈ **This is a breaking change**: Removed unused API from `WebAppShortcutManager`: uninstallShortcuts
1881   * `WebAppShortcutManager` gained a new API: recentlyUsedWebAppsCount. Allows counting recently used web apps.
1883 * **browser-thumbnails**
1884   * The `ThumbnailMiddleware` deletes the tab's thumbnail from the storage when the sessions are removed.
1885   * `BrowserThumbnails` waits for the `firstContentfulPaint` before requesting a screenshot.
1887 * **feature-tabs**
1888   * βš οΈ **This is a breaking change**: Removes unused `ThumbnailsUseCases` since we now load thumbnails via `ThumbnailLoader`. See [#7313](https://github.com/mozilla-mobile/android-components/issues/7313).
1889   * βš οΈ **This is a breaking change**: Removes `ThumbnailsUseCases` as a parameter in `TabsFeature` and `TabsTrayPresenter`.
1890   * βš οΈ **This is a breaking change**: Change the id parameter to accept a new `ImageRequest` in `ImageLoader`, which
1891     allows consumers of `ThumbnailLoader` to specify the preferred image size along with the id when loading an image.
1893 * **feature-privatemode**
1894   * Add `PrivateNotificationFeature` to display a notification when private sessions are open.
1896 * **service-glean**
1897   * Glean was updated to v31.2.3
1898     * BUGFIX: Correctly format the date and time in the Date header
1899     * Feature: Add rate limiting capabilities to the upload manager
1900     * BUGFIX: baseline pings with reason "dirty startup" are no longer sent if Glean did not full initialize in the previous run
1901     * BUGFIX: Compile dependencies with `NDEBUG` to avoid linking unavailable symbols.
1902       This fixes a crash due to a missing `stderr` symbol on older Android.
1903     * BUGFIX: Fix mismatch in events keys and values by using glean_parser version 1.23.0.
1905 * **feature-webnotifications**
1906   * `WebNotificationFeature` checks the site permissions first before showing a notification.
1907   * Notifications with a long text body are now expandable to show the full text.
1909 * **feature-addons**
1910   * Add `Addon.createdAtDate` and `Addon.updatedAtDate` extensions to get `Addon.createdAt` and `Addon.updatedAt` as a `Date`.
1912 # 47.0.0
1914 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v46.0.0...v47.0.0)
1915 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/106?closed=1)
1916 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v47.0.0/buildSrc/src/main/java/Dependencies.kt)
1917 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v47.0.0/buildSrc/src/main/java/Gecko.kt)
1918 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v47.0.0/buildSrc/src/main/java/Config.kt)
1920 * **service-digitalassetlinks**
1921   * Added new component for listing and checking Digital Asset Links. Contains a local checker and a version that uses Google's API.
1923 # 46.0.0
1925 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v44.0.0...v46.0.0)
1926 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/105?closed=1)
1927 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v46.0.0/buildSrc/src/main/java/Dependencies.kt)
1928 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v46.0.0/buildSrc/src/main/java/Gecko.kt)
1929 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v46.0.0/buildSrc/src/main/java/Config.kt)
1931 * **concept-engine**
1932   * Exposed `GeckoRuntimeSettings#setLoginAutofillEnabled` to control whether login forms should be automatically filled in suitable situations
1934 * **browser-icons**
1935   * Fixed issue [#7142](https://github.com/mozilla-mobile/android-components/issues/7142)
1937 * **feature-downloads**
1938   * On devices older than Q we were not adding downloads to the system download database for more information see [#7230](https://github.com/mozilla-mobile/android-components/issues/7230)
1940 * **browser-storage-sync**
1941   * Added `getTopFrecentSites` to `PlacesHistoryStorage`, which returns a list of the top frecent site infos
1942     sorted by most to least frecent.
1944 * **local development**
1945   * Enable local Gradle Build Cache to speed-up local builds. Build cache is located in `.build-cache/`, clear it if you run into strange problems and please file an issue.
1947 * **support-rustlog**
1948   * `RustLog.enable` now takes an optional [CrashReporting] instance which is used to submit error-level log messages as `RustErrorException`s.
1950 * **feature-push**
1951   * Fixed a bug where we do not verify subscriptions on first attempt.
1953 * **feature-prompts**
1954   * Select a regular tab first if that exists before checking custom tabs.
1956 * **feature-session**
1957   * βš οΈ **This is a breaking change**: `SettingsUseCases` now requires an engine reference, to clear speculative sessions if engine settings change.
1958   * βš οΈ **This is a breaking change**: `PictureInPictureFeature` now takes `BrowserStore` instead of `SessionManager`.
1959   * βš οΈ **This is a breaking change**: The `pipChanged` callback has been removed. You should now observe `ContentState.pictureInPictureEnabled` instead.
1961 * **feature-containers**
1962   * Adds a new storage component to store containers (contextual identities) in a Room database and provides the
1963     necessary APIs to get, add and remove containers.
1965 * **feature-webnotifications**
1966   * Adds support for displaying the `source` URL the WebNotification originated from.
1968 * **feature-tabs**
1969   * βš οΈ **This is a breaking change**: `TabsFeature` now supports providing custom use case implementations. Therefore, an instance of `SelectTabUseCase` and `RemoveTabUseCase` have to be provided.
1971 * **support-ktx**
1972   * Added `Uri.sameHostAs` to check if two Uris have the same host (both http/https, both same domain).
1973   * Added `Uri.sameOriginAs` to check if two Uris have the same origin (same host, same port).
1974   * Added `Uri.isInScope` to check if a Uri is within one of the given scopes.
1976 * **browser-state**
1977   * Added `ContentState.pictureInPictureEnabled` to track if Picture in Picture mode is in use.
1979 * **feature-pwa**
1980   * βš οΈ **This is a breaking change**: `WebAppHideToolbarFeature` now takes `BrowserStore` instead of `SessionManager`. `trustedScopes` is now derived from `CustomTabsServiceStore` and `WebAppManifest`. `setToolbarVisibility` should now be used set the visibility of the toolbar.
1981   * βš οΈ **This is a breaking change**: `onToolbarVisibilityChange` has been removed. You should now observe `BrowserStore` instead.
1983 * **feature-tab-collections**:
1984   * βš οΈ **This is a breaking change**: `TabCollectionStorage.getCollections` now returns `Flow` instead of `LiveData`. Use `Flow.asLiveData` to convert the result into a `LiveData` again.
1986 * **feature-top-sites**:
1987   * βš οΈ **This is a breaking change**: `TopSiteStorage.getTopSites` now returns `Flow` instead of `LiveData`. Use `Flow.asLiveData` to convert the result into a `LiveData` again.
1989 * **service-glean**
1990   * Glean was updated to v31.1.1
1991     * Smaller binary library after a big dependency was dropped
1992     * Limit the number of upload retries in all implementations
1994 * **support-images**:
1995   * Added `ImageLoader` API for loading images directly into an `ImageView`.
1997 * **browser-tabstray**:
1998   * βš οΈ **This is a breaking change**: `TabsAdapter` and `DefaultTabViewHolder` take an optional `ImageLoader` for loading browser thumbnails.
1999   * Fixed a bug in `TabsThumbnailView` where the `scaleFactor` was not applied all the time when expected.
2001 * **browser-menu**:
2002   * DynamicWidthRecyclerView will still be able to have a dynamic width between xml set minWidth and maxWidth attributes but we'll now enforce the following:
2003     - minimum width 112 dp
2004     - maximum width - screen width minus a 48dp tappable β€œexit area”
2006 # 45.0.0
2008 * βš οΈ This release can't be used due to a bad build.
2010 # 44.0.0
2012 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v43.0.0...v44.0.0)
2013 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/104?closed=1)
2014 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v44.0.0/buildSrc/src/main/java/Dependencies.kt)
2015 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v44.0.0/buildSrc/src/main/java/Gecko.kt)
2016 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v44.0.0/buildSrc/src/main/java/Config.kt)
2018 * **browser-engine-gecko-nightly**
2019   * Added support for [onbeforeunload prompt](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload)
2021 * **feature-tabs**
2022   * Added an optional `ThumbnailsUseCases` to `TabsFeature` and `TabsTrayPresenter` for loading a
2023     tab's thumbnail.
2025 * **browser-thumbnails**
2026   * Adds `LoadThumbnailUseCase` in `ThumbnailsUseCases` for loading the thumbnail of a tab.
2027   * Adds `ThumbnailStorage` as a storage layer for handling saving and loading a thumbnail from the
2028     disk cache.
2030 * **feature-push**
2031   * Adds the `getSubscription` call to check if a subscription exists.
2033 * **browser-engine-gecko-***
2034   * Fixes GeckoWebPushDelegate to gracefully return when a subscription is not available.
2036 * **feature-session**
2037   * Removes unused `ThumbnailsFeature` since this has been refactored into its own browser-thumbnails component in
2038     [#6827](https://github.com/mozilla-mobile/android-components/issues/6827).
2040 * **browser-state**
2041   * Adds `BrowserState.getNormalOrPrivateTabs(private: Boolean)` to get `normalTabs` or `privateTabs` based on a boolean condition.
2043 * **support-utils**
2044   * `URLStringUtils.isURLLikeStrict`, deprecated in 40.0.0, was now removed due to performance issues. Use the less strict and much faster `isURLLike` instead or customize based on `:lib-publicsuffixlist`.
2046 * **support-ktx**
2047   * `String.isUrlStrict`, deprecated in 40.0.0, was now removed due to performance issues. Use the less strict `isURL` instead or customize based on `:lib-publicsuffixlist`.
2049 * **service-glean**
2050   * Glean was updated to v31.0.2
2051     * Provide a new upload mechanism, now driven by internals. This has no impact to consumers of service-glean.
2052     * Automatically Gzip-compress ping payloads before upload
2053     * Upgrade `glean_parser` to v1.22.0
2055 # 43.0.0
2057 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v42.0.0...v43.0.0)
2058 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/103?closed=1)
2059 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v43.0.0/buildSrc/src/main/java/Dependencies.kt)
2060 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v43.0.0/buildSrc/src/main/java/Gecko.kt)
2061 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v43.0.0/buildSrc/src/main/java/Config.kt)
2063 * **feature-downloads**
2064   * βš οΈ **This is a breaking change**: DownloadManager and DownloadService are now using the browser store to keep track of queued downloads. Therefore, an instance of the store needs to be provided when constructing manager and service. There's also a new DownloadMiddleware which needs to be provided to the store.
2066   ```kotlin
2067    val store by lazy {
2068         BrowserStore(middleware = listOf(
2069             MediaMiddleware(applicationContext, MediaService::class.java),
2070             DownloadMiddleware(applicationContext, DownloadService::class.java),
2071             ...
2072         ))
2073     }
2074   )
2076   val feature = DownloadsFeature(
2077       requireContext().applicationContext,
2078       store = components.store,
2079       useCases = components.downloadsUseCases,
2080       fragmentManager = childFragmentManager,
2081       onDownloadStopped = { download, id, status ->
2082           Logger.debug("Download done. ID#$id $download with status $status")
2083       },
2084       downloadManager = FetchDownloadManager(
2085           requireContext().applicationContext,
2086           components.store, // Store needs to be provided now
2087           DownloadService::class
2088       ),
2089       tabId = sessionId,
2090       onNeedToRequestPermissions = { permissions ->
2091           requestPermissions(permissions, REQUEST_CODE_DOWNLOAD_PERMISSIONS)
2092       }
2093   )
2095   class DownloadService : AbstractFetchDownloadService() {
2096     override val httpClient by lazy { components.core.client }
2097     override val store: BrowserStore by lazy { components.core.store } // Store needs to be provided now
2098   }
2099   ```
2101   * Fixed issue [#6893](https://github.com/mozilla-mobile/android-components/issues/6893).
2102   * Add notification grouping to downloads Fenix issue [#4910](https://github.com/mozilla-mobile/android-components/issues/4910).
2104 * **feature-tabs**
2105   * Makes `TabsAdapter` open to subclassing.
2107 * **feature-intent**
2108   * Select existing tab by url when trying to open a new tab in `TabIntentProcessor`
2110 * **feature-media**
2111   * Adds `MediaFullscreenOrientationFeature` to autorotate activity while in fullscreen based on media aspect ratio.
2113 * **support-images**
2114   * βš οΈ **This is a breaking change**: Extracts `AndroidIconDecoder`, `IconDecoder` and `DesiredSize` out of `browser-icons`
2115     into a new component `support-images`, which provides helpers for handling images. `AndroidIconDecoder` and `IconDecoder`
2116     are renamed to `AndroidImageDecoder` and `ImageDecoder` in `support-images`.
2118 * **support-utils**
2119   * `URLStringUtils.isURLLike()` will now consider URLs containing double dash ("--") as valid.
2121 * **browser-thumbnails**
2122   * Adds `ThumbnailDiskCache` for storing and restoring thumbnail bitmaps into a disk cache.
2124 * **concept-engine**
2125   * Adds `onHistoryStateChanged` method and corresponding `HistoryItem` data class.
2127 * **browser-state**
2128   * Adds `history` to `ContentState` to check the back and forward history list.
2130 * **service-glean**
2131   * BUGFIX: Fix a race condition that leads to a `ConcurrentModificationException`. [Bug 1635865](https://bugzilla.mozilla.org/1635865)
2133 * **browser-menu**
2134   * Added `AbstractParentBrowserMenuItem` and `ParentBrowserMenuItem` for handling nested sub menu items on view click.
2135   * βš οΈ **This is a breaking change**: `WebExtensionBrowserMenuBuilder` now returns as a sub menu entry for add-ons. The sub
2136     menu also contains an access entry for Add-ons Manager, for which `onAddonsManagerTapped` needs to be passed in the
2137     constructor.
2139 * **feature-syncedtabs**
2140   * When the SyncedTabsFeature is started it syncs the devices and account first.
2142 # 42.0.0
2144 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v41.0.0...42.0.0)
2145 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/102?closed=1)
2146 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/42.0.0/buildSrc/src/main/java/Dependencies.kt)
2147 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/42.0.0/buildSrc/src/main/java/Gecko.kt)
2148 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/42.0.0/buildSrc/src/main/java/Config.kt)
2150 * **browser-state**
2151   * Adds `firstContentfulPaint` to `ContentState` to know if first contentful paint has happened.
2153 * **service-glean**
2154   * βš οΈ **This is a breaking change**: Glean's configuration now requires explicitly setting an http client. Users need to pass one at construction.
2155     A default `lib-fetch-httpurlconnection` implementation is available.
2156     Add it to the configuration object like this:
2157     `val config = Configuration(httpClient = ConceptFetchHttpUploader(lazy { HttpURLConnectionClient() as Client }))`.
2158     See [PR #6875](https://github.com/mozilla-mobile/android-components/pull/6875) for details and full code examples.
2160 * **browser-store**
2161   * Added `webAppManifest` property to `ContentState`.
2163  * **feature-qr**
2164    * Added `CustomViewFinder`, a `View` that shows a ViewFinder positioned in center of the camera view and draws an Overlay
2165    * Added optional String resource `scanMessage` param to `QrFeature` for adding a message below the viewfinder
2167 * **service-experiments**
2168   * βš οΈ **This is a breaking change**: Mako's configuration now requires explicitly setting an http client. Users need to pass one at construction.
2170 * **feature-prompts**
2171   * Added `mozacPromptLoginEditTextCursorColor` attribute to be able to change cursor color of TextInputEditTexts from `mozac_feature_prompt_login_prompt`.
2173 # 41.0.0
2175 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v40.0.0...v41.0.0)
2176 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/101?closed=1)
2177 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v41.0.0/buildSrc/src/main/java/Dependencies.kt)
2178 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v41.0.0/buildSrc/src/main/java/Gecko.kt)
2179 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v41.0.0/buildSrc/src/main/java/Config.kt)
2181 * **feature-tabs**
2182   * Fixed issue [#6907](https://github.com/mozilla-mobile/android-components/issues/6907). Uses MediaState when mapping BrowserState to tabs.
2184 * **concept-tabstray**
2185   * For issue [#6907](https://github.com/mozilla-mobile/android-components/issues/6907). Adds `Media.State` to `Tab`
2187 * **feature-session**
2188   * βš οΈ **This is a breaking change**: Added optional `crashReporting` param to [PictureInPictureFeature] so we can record caught exceptions.
2190 * **feature-downloads**
2191   * Fixed issue [#6881](https://github.com/mozilla-mobile/android-components/issues/6881).
2193 * **feature-addons**
2194   * Added optional `addonAllowPrivateBrowsingLabelDrawableRes` DrawableRes parameter to `AddonPermissionsAdapter.Style` constructor to allow the clients to add their own drawable. This is used to clearly label the WebExtensions that run in private browsing.
2196 * **browser-menu**
2197   * BrowserMenu will now support dynamic width based on two new attributes: `mozac_browser_menu_width_min` and `mozac_browser_menu_width_max`.
2199 * **browser-tabstray**
2200   * Added optional `itemDecoration` DividerItemDecoration parameter to `BrowserTabsTray` constructor to allow the clients to add their own dividers. This is used to ensure setting divider item decoration after setAdapter() is called.
2202 * **service-glean**
2203   * Glean was updated to v29.1.0
2204     * βš οΈ **This is a breaking change**: glinter errors found during code generation will now return an error code.
2205     * The minimum and maximum values of a timing distribution can now be controlled by the `time_unit` parameter. See [bug 1630997](https://bugzilla.mozilla.org/show_bug.cgi?id=1630997) for more details.
2207 * **feature-accounts**
2208   *  βš οΈ **This is a breaking change**: Refactored component to use `browser-state` instead of `browser-session`. The `FxaWebChannelFeature`  now requires a `BrowserStore` instance instead of a `SessionManager`.
2210 * **lib-push-fcm**, **lib-push-adm**, **concept-push**
2211   * Allow nullable encoding values in push messsages. If they are null, we attempt to use `aes128gcm` for encoding.
2213 * **browser-toolbar**
2214   * It will only be animated for vertical scrolls inside the EngineView. Not for horizontal scrolls. Not for zoom gestures.
2216 * **browser-thumbnails**
2217   * βš οΈ **This is a breaking change**: Migrated this component to use `browser-state` instead of `browser-session`. It is now required to pass a `BrowserStore` instance (instead of `SessionManager`) to `BrowserThumnails`.
2219 # 40.0.0
2221 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v39.0.0...v40.0.0)
2222 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/100?closed=1)
2223 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v40.0.0/buildSrc/src/main/java/Dependencies.kt)
2224 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v40.0.0/buildSrc/src/main/java/Gecko.kt)
2225 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v40.0.0/buildSrc/src/main/java/Config.kt)
2227 * **browser-tabstray**
2228   * Converts `TabViewHolder` to an abstract class with `DefaultTabViewHolder` as the default implementation.
2229   * Replaces `layoutId` with `viewHolderProvider` in the `TabsAdapter` for allowing tab customization.
2231 * **concept-engine**
2232   * Adds Fingerprinter to the recommended Tracking protection policy.
2234 * **support-locale**
2235   * Adds Android 8.1 to the check in `setLayoutDirectionIfNeeded` inside `LocaleAwareAppCompatActivity`
2237 * **feature-top-sites**
2238   * βš οΈ **This is a breaking change**: Added `isDefault` to the top site entity, which allows application to specify a default top site that is added by the application. This is called through `TopSiteStorage.addTopSite`.
2239     * If your application is using Nightly Snapshots of v40.0.0, please test that the Top Sites feature still works and update to the latest v40.0.0 if any schema errors are encountered.
2241 * **feature-push**
2242   * Simplified error handling and reduced non-fatal exception reporting.
2244 * **support-base**
2245   * βš οΈ **This is a breaking change**: `CrashReporting` allowing adding support for `recordCrashBreadcrumb` without `lib-crash` dependency.
2246   * βš οΈ **This is a breaking change**: `Breadcrumb` has moved from `lib-crash` to this component.
2248 * **support-utils**
2249   * `URLStringUtils.isURLLikeStrict` is now deprecated due to performance issues. Consider using the less strict `isURLLike` instead or creating a new method using `:lib-publicsuffixlist`.
2251 * **support-ktx**
2252   * `String.isUrlStrict` is now deprecated due to performance issues. Consider using the less strict `isURL` instead or creating a new method using `:lib-publicsuffixlist`.
2254 * **browser-menu**
2255   * Added `SimpleBrowserMenuHighlightableItem` which is a simple menu highlightable item (no images/icons).
2257 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2258   * Improve social trackers categorization see [ac#6851](https://github.com/mozilla-mobile/android-components/issues/6851) and [fenix#5921](https://github.com/mozilla-mobile/fenix/issues/5921)
2260 * **service-firefox-accounts**
2261   * βš οΈ **This is a breaking change**: `FxaAccountManager.withConstellation` puts the `DeviceConstellation` within the same scope as the block so you no longer need to use the `it` reference.
2263 * **feature-syncedtabs**
2264   * Moved `SyncedTabsFeature` to `SyncedTabsStorage`.
2265   * βš οΈ **This is a breaking change**: The new `SyncedTabsFeature` now orchestrates the correct state needed for consumers to handle by implementing the `SyncedTabsView`.
2267 * **browser-thumbnails**
2268   * πŸ†• New component for capturing browser thumbnails.
2269   * `ThumbnailsFeature` will be deprecated for the new `BrowserThumbnails` in a future.
2271 # 39.0.0
2273 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v38.0.0...v39.0.0)
2274 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/99?closed=1)
2275 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v39.0.0/buildSrc/src/main/java/Dependencies.kt)
2276 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v39.0.0/buildSrc/src/main/java/Gecko.kt)
2277 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v39.0.0/buildSrc/src/main/java/Config.kt)
2279 * **All components**
2280   * Increased `targetSdkVersion` to 29 (Android Q)
2282 * **browser-session**
2283   * `SnapshotSerializer` no longer restores source of a `Session`, added `Session.Source.RESTORED`
2285 * **feature-downloads**
2286   * Fixed issue [#6764](https://github.com/mozilla-mobile/android-components/issues/6764).
2288 * **support-locale**
2289   * Added fix for respecting RTL/LTR changes when activity is recreated in Android 8
2291 * **feature-sitepermissions**
2292   * βš οΈ **This is a breaking change**: The `SitePermissionsFeature`'s constructor, now requires a new parameter `onShouldShowRequestPermissionRationale` a lambda to allow the feature to query [ActivityCompat.shouldShowRequestPermissionRationale](https://developer.android.com/reference/androidx/core/app/ActivityCompat#shouldShowRequestPermissionRationale(android.app.Activity,%20java.lang.String)) or [Fragment.shouldShowRequestPermissionRationale](https://developer.android.com/reference/androidx/fragment/app/Fragment#shouldShowRequestPermissionRationale(java.lang.String)). This allows the `SitePermissionsFeature` to handle when a user clicks "Deny & don't ask again" button in a system permission dialog, for more information see [issue #6565](https://github.com/mozilla-mobile/android-components/issues/6565).
2294 * **ui-widgets**
2295   * πŸ†• New component for standardized Mozilla widgets and styles. A living style guide will be published soon that helps explain design choices made.
2296   * First version includes styling for buttons: `NeutralButton`, `PositiveButton`, and `DestructiveButton`
2298 * **feature-addons**
2299   * Added `AddonsManagerAdapter.updateAddon` and `AddonsManagerAdapter.updateAddons` to allow partial updates.
2300   * βš οΈ **This is a breaking change**: `AddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: ArrayList<Addon>)` is changed to `AddonsManagerAdapterDelegate.onNotYetSupportedSectionClicked(unsupportedAddons: List<Addon>)`.
2301   * Fixed [issue #6685](https://github.com/mozilla-mobile/android-components/issues/6685), now `DefaultSupportedAddonsChecker` will marked any newly supported add-on as enabled.
2302   * Added `Addon.translatedSummary` and `Addon.translatedDescription` to ease add-on translations.
2303   * Added `Addon.defaultLocale` Indicates which locale will be always available to display translatable fields.
2304   * βš οΈ **This is a breaking change**: `AddonManager.enableAddon` and `AddonManager.disableAddon` have a new optional parameter  `source` that indicates why the extension is enabled/disabled.
2305   * βš οΈ **This is a breaking change**: `Map<String, String>.translate` now is marked as internal, if you are trying to translate the summary or the description of an add-on, use `Addon.translatedSummary` and `Addon.translatedDescription`.
2307 * **feature-toolbar**
2308   * Disabled autocompleting when updating url upon entering edit mode in BrowserToolbar.
2310 * **feature-media**
2311   * Muted media will not start the media service anymore, causing no media notification to be shown and no audio focus getting requested.
2313 * **feature-fullscreen**
2314   * βš οΈ **This is a breaking change**: Added `viewportFitChanged` to support Android display cutouts.
2316   * **feature-qr**
2317     * Moved `AutoFitTextureView` from `support-base` to `feature-qr`.
2319 * **feature-session**
2320   * βš οΈ **This is a breaking change**: Added `viewportFitChanged` to `FullScreenFeature` for supporting Android display cutouts.
2322 * **feature-qr**
2323   * Moved `AutoFitTextureView` from `support-base` to `feature-qr`.
2325 * **service-sync-logins**
2326   * Adds fun `LoginsStorage.getPotentialDupesIgnoringUsername` for fetching list of potential duplicate logins from the underlying storage layer, ignoring username.
2328 * **feature-customtabs**
2329   * βš οΈ **This is a breaking change**: Removed `handleError` in `CustomTabWindowFeature` constructor
2330   * βš οΈ **This is a breaking change**: Added `onLaunchUrlFallback` to `CustomTabWindowFeature` constructor
2332 * **browser-tabstray**
2333   * The iconView is no longer required in the template.
2334   * The URL text for items may be styled.
2336 * **service-glean**
2337   * Glean was updated to v28.0.0
2338     * The baseline ping is now sent when the application goes to foreground, in addition to background and dirty-startup.
2340 * **Developer ergonomics**
2341   * Improved autoPublication workflow. See https://mozac.org/contributing/testing-components-inside-app for updated documentation.
2343 * **browser-search**
2344   * Added `getSearchTemplate` to reconstruct the user-entered search engine url template
2346 # 38.0.0
2348 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v37.0.0...v38.0.0)
2349 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/97?closed=1)
2350 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v38.0.0/buildSrc/src/main/java/Dependencies.kt)
2351 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v38.0.0/buildSrc/src/main/java/Gecko.kt)
2352 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v38.0.0/buildSrc/src/main/java/Config.kt)
2354 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2355   * **Merge day!**
2356     * `browser-engine-gecko-release`: GeckoView 75.0
2357     * `browser-engine-gecko-beta`: GeckoView 76.0
2358     * `browser-engine-gecko-nightly`: GeckoView 77.0
2360 * **feature-session**
2361   * βš οΈ **This is a breaking change**: Added optional `customTabSessionId` param to [PictureInPictureFeature] so consumers can use this feature for custom tab sessions.
2363 * **support-locale**
2364   * Updates `updateResources` to always update the context configuration
2366 * **feature-toolbar**
2367   * Added `forceExpand` to [BrowserToolbarBottomBehavior] so consumers can expand the BrowserToolbar on demand.
2369 * **feature-addons**
2370   * Added `AddonPermissionsAdapter.Style` and `AddonsManagerAdapter.Style` classes to allow UI customization.
2372 * **service-accounts-push**
2373   * Fixed a bug where the push subscription was incorrectly cached and caused some `GeneralError`s.
2374 * **feature-addons**
2375   * Added `DefaultAddonUpdater.UpdateAttemptStorage` allows to query the last known state for a previous attempt to update an add-on.
2377 * **feature-accounts-push**
2378   * Re-subscribe for Sync push support when notified by `onSubscriptionChanged` events.
2380 * **support-migration**
2381   * βš οΈ **This is a breaking change**: `FennecMigrator` now takes `Lazy` references to storage layers.
2383 * **concept-storage**, **service-sync-logins**
2384   * πŸ†• New API: `PlacesStorage#warmUp`, `SyncableLoginsStorage#warmUp` - allows consumers to ensure that underlying storage database connections are fully established.
2386 * **feature-customtabs**
2387   * βš οΈ **This is a breaking change**: add parameter `handleError` to `CustomTabWindowFeature` constructor
2388     * This is used to show an error when the url can't be handled
2389   * `CustomTabIntentProcessor` to support `Browser.EXTRA_HEADERS`.
2391 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2392   * Fixed a memory leak when using a `SelectionActionDelegate` on `GeckoEngineView`.
2394 * **feature-share**
2395   * Added `RecentAppsStorage.deleteRecentApp` and `RecentAppsDao.deleteRecentApp` to allow deleting a `RecentAppEntity`
2397 * **feature-p2p**
2398   * Add new `P2PFeature` to send URLs and web pages through peer-to-peer networking.
2400 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly, **browser-engine-system**
2401   * Added `GeckoEngineView#getInputResult()` to return an EngineView.InputResult indicating how a MotionEvent was handled by an EngineView.
2403 * **concept-engine**
2404   * Will expose a new `InputResult` enum through `getInputResult()` indicating how an EngineView handled user's MotionEvent.
2405   * See above changes to browser-engine-*.
2407 * **browser-toolbar**
2408   * `BrowserToolbarBottomBehavior` is now solely responsible to decide if the dynamic nav bar should animate or not.
2409   * See above changes to browser-engine-*, concept-engine.
2411 * **feature-session**
2412   * `SwipeRefreshLayout` will now trigger pull down to refresh only if the website is scrolled to top and it itself did not consume the swype event.
2413   * See above changes to browser-engine-*, concept-engine.
2414   * Added androidx_swiperefreshlayout as a dependency because google_materials dependency was incremented to version 1.1.0 which no longer includes SwipeRefreshLayout
2416 * **lib-crash**
2417   * βš οΈ **This is a breaking change**: added `support-base` dependency.
2419 * **support-base**
2420   * `CrashReporting` allowing adding support for `submitCaughtException` without `lib-crash` dependency.
2422 * **browser-tabstray**
2423  * Added ability to let consumers pass a custom layout of `TabViewHolder` in order to control layout inflation and view binding.
2424  * Added an optional URL view to the `TabViewHolder` to display the URL.
2425  * Will expose a new `layout` parameter which allows consumers to change the tabs tray layout.
2426  * Will only display a URL's hostname instead of the entire URL
2428 * **browser-session**
2429   * βš οΈ **This is a breaking change**: `SessionManager.runWithSessionIdOrSelected` now returns the result from the `block` it executes. This is consistent with `runWithSession`.
2431 * **feature-push**
2432   * Allow nullable AutoPush messages to be delivered to observers.
2434 * **service-glean**
2435   * Glean was updated to v27.1.0
2436     * **Breaking change:** The regular expression used to validate labels is stricter and more correct.
2437     * BUGFIX: baseline pings sent at startup with the `dirty_startup` reason will now include application lifetime metrics ([#810](https://github.com/mozilla/glean/pull/810))
2438     * Add more information about pings to markdown documentation:
2439       * State whether the ping includes client id;
2440       * Add list of data review links;
2441       * Add list of related bugs links.
2442     * `gradlew clean` will no longer remove the Miniconda installation in `~/.gradle/glean`. Therefore `clean` can be used without reinstalling Miniconda afterward every time.
2443     * Glean will now detect when the upload enabled flag changes outside of the application, for example due to a change in a config file. This means that if upload is disabled while the application wasn't running (e.g. between the runs of a Python command using the Glean SDK), the database is correctly cleared and a deletion request ping is sent. See [#791](https://github.com/mozilla/glean/pull/791).
2444     * The `events` ping now includes a reason code: `startup`, `background` or `max_capacity`.
2446 # 37.0.0
2448 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v36.0.0...v37.0.0)
2449 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/96?closed=1)
2450 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v37.0.0/buildSrc/src/main/java/Dependencies.kt)
2451 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v37.0.0/buildSrc/src/main/java/Gecko.kt)
2452 * [Configuration](https://github.com/mozilla-mobile/android-components/v37.0.0/main/buildSrc/src/main/java/Config.kt)
2454 * **lib-state**, **browser-state**
2455   * Added the ability to add `Middleware` instances to a `Store`. A `Middleware` can rewrite or intercept an `Action`, as well as dispatch additional `Action`s or perform side-effects when an `Action` gets dispatched.
2457 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2458   * Updated `removeAll()` from `TrackingProtectionExceptionFileStorage` to notify active sessions when all exceptions are removed.
2459   * Added `GeckoPort.senderUrl` which returns the associated content URL.
2461 * **feature-accounts**
2462   * It should now be possible to log-in on stable, stage and china FxA servers using a WebChannel flow.
2463   *  βš οΈ **This is a breaking change**: `FxaWebChannelFeature` takes a `ServerConfig` as 4th parameter to ensure incoming WebChannel messages
2464      are sent by the expected FxA host.
2466 * **feature-sitepermissions**
2467   * Fixed issue [#6299](https://github.com/mozilla-mobile/android-components/issues/6299), from now on, any media requests like a microphone or a camera permission will require the system permissions to be granted before a dialog can be shown.
2469 * **service-sync-logins**
2470   * βš οΈ **This is a breaking change**: `DefaultLoginValidationDelegate`, `GeckoLoginStorageDelegate` constructors changed to take `Lazy<LoginsStorage>` instead of `LoginsStorage`, to facilitate late initialization.
2472 * **service-firefox-accounts**
2473   * βš οΈ **This is a breaking change**: `GlobalSyncableStoreProvider#configureStore` changed to take `Lazy<SyncableStore>` instead of `SyncableStore`, to facilitate late initialization.
2475 * **feature-session**
2476   * βš οΈ **This is a breaking change**: `HistoryDelegate` constructor changed to take `Lazy<HistoryStorage>` instead of `HistoryStorage`, to facilitate late initialization.
2478 * **concept-engine**
2479   * Added: `DataCleanable` a new interface that decouples the behavior of clearing browser data from the `Engine` and `EngineSession`.
2481 * **feature-sitepermissions**
2482   *  Fixed [#6322](https://github.com/mozilla-mobile/android-components/issues/6322), now  `SitePermissionsStorage` allows to indicate an optional reference to `DataCleanable`.
2484 * **browser-menu**
2485   * Added `canPropagate` param to all `BrowserMenuHighlight`s, making it optional to be displayed in other components
2486   * Changed `BrowserMenuItem.getHighlight` to filter the highlights which should not propagate.
2488 * **feature-share**
2489     * Changed primary key of RecentAppEntity to activityName instead of packageName
2490       * βš οΈ **This is a breaking change**: all calls to app.packageName should now use app.activityName
2492 # 36.0.0
2494 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v35.0.0...v36.0.0)
2495 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/95?closed=1)
2496 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v36.0.0/buildSrc/src/main/java/Dependencies.kt)
2497 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v36.0.0/buildSrc/src/main/java/Gecko.kt)
2498 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v36.0.0/buildSrc/src/main/java/Config.kt)
2500 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2501   * **Merge day!**
2502     * `browser-engine-gecko-release`: GeckoView 74.0
2503     * `browser-engine-gecko-beta`: GeckoView 75.0
2504     * `browser-engine-gecko-nightly`: GeckoView 76.0
2506 * **feature-addons**
2507   * Added `DefaultSupportedAddonsChecker` which checks for add-ons that were previously unsupported, and creates a notification to let the user known when they are available to be used.
2509 * **feature-push**
2510   * `AutoPushFeature` now properly notifies observers that they have changed by the `Observer.onSubscriptionChanged` callback.
2511   *  βš οΈ **This is a breaking change**: `RustPushConnection.verifyConnection` now returns a list of subscriptions that have changed.
2513 # 35.0.0
2515 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v34.0.0...v35.0.0)
2516 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/94?closed=1)
2517 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v35.0.0/buildSrc/src/main/java/Dependencies.kt)
2518 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v35.0.0/buildSrc/src/main/java/Gecko.kt)
2519 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v35.0.0/buildSrc/src/main/java/Config.kt)
2521 * **feature-sitepermissions**
2522   *  Fixed [#5616](https://github.com/mozilla-mobile/android-components/issues/5616) issue now when a new exception is added if the [sitePermissionsRules](https://github.com/mozilla-mobile/android-components/blob/52de7118a706a88e88036ead6192e042d4423dc6/components/feature/sitepermissions/src/main/java/mozilla/components/feature/sitepermissions/SitePermissionsFeature.kt#L72) object is present its values are going to be taken into consideration as default values for the new exception.
2524 * **feature-awesomebar**
2525   *  βš οΈ **This is a breaking change**: Refactored component to use `browser-state` instead of `browser-session`. Feature and `SuggestionProvider` implementations may require a `BrowserStore` instance instead of a `SessionManager` now.
2527 * **feature-intent**
2528   * βš οΈ **This is a breaking change**: Removed `IntentProcessor.matches()` method from interface. Calling `process()` and examining the boolean return value is enough to know whether an `Intent` matched.
2530 * **feature-downloads**
2531   * Fixed APK downloads not prompting to install when the notification is clicked.
2533 * **service-location**
2534   * Created `LocationService` interface and made `MozillaLocationService` implement it.
2535   * `RegionSearchLocalizationProvider` now accepts any `LocationService` implementation.
2536   * Added `LocationService.dummy()` which creates a dummy `LocationService` implementation that always returns `null` when asked for a `LocationService.Region`.
2538 * **feature-accounts-push**
2539   * Add known prefix to FxA push scope.
2541 * **browser-toolbar**
2542   * Add the possibility to listen to menu dismissal through `setMenuDismissAction` in `DisplayToolbar`
2544 * **concept-storage**
2545   * New interface: `LoginsStorage`, describes a logins storage. A slightly cleaned-up version of what was in the `service-sync-logins`.
2547 * **service-sync-logins**
2548   * βš οΈ **This is a breaking change**: Refactored `AsyncLoginsStorage`, which is now called `SyncableLoginsStorage`. New class caches the db connection, and removes lock/unlock operations from the public API.
2550 * **feature-tabs**
2551   * Fixed close tabs callback incorrectly invoked on start.
2552   * βš οΈ **This is a breaking change**: Added `defaultTabsFilter` to `TabsFeature` for initial presenting of tabs.
2553     * `TabsFeature.filterTabs` also uses the same filter if no new filter is provided.
2555 * **browser-session**
2556   * SessionManager will now close internal `EngineSession` instances on memory pressure when `onTrimMemory()` gets called
2557   * `SessionManager.onLowMemory()` is now deprecated and `SessionManager.onTrimMemory(level)` should be used instead.
2559 * **browser-engine-system**
2560   * Updated tracking protection lists for more details see [#6163](https://github.com/mozilla-mobile/android-components/issues/6163).
2562 * **concent-engine**, **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**, **browser-engine-system**
2563   * Add additional HTTP header support for `EngineSession.loadUrl()`.
2565 # 34.0.0
2567 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v33.0.0...v34.0.0)
2568 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/93?closed=1)
2569 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v34.0.0/buildSrc/src/main/java/Dependencies.kt)
2570 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v34.0.0/buildSrc/src/main/java/Gecko.kt)
2571 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v34.0.0/buildSrc/src/main/java/Config.kt)
2573 * **concept-tabstray**
2574   * βš οΈ **This is a breaking change**: Removed dependency on `browser-session` and introduced tabs tray specific data classes.
2576 * **browser-tabstray**
2577   * βš οΈ **This is a breaking change**: Refactored component to implement updated `concept-tabstray` interfaces.
2579 * **feature-tabs**
2580   * βš οΈ **This is a breaking change**: Refactored component to use `browser-state` instead of `browser-session`.
2581   * Added additional method to `TabsUseCases` to select a tab based on its id.
2583 * **feature-contextmenu**
2584   * Adds optional `shareTextClicked` lambda to `DefaultSelectionActionDelegate` which allows adding and dispatching a text selection share action
2586 * **browser-icons**
2587   * βš οΈ **This is a breaking change**: Migrated this component to use `browser-state` instead of `browser-session`. It is now required to pass a `BrowserStore` instance (instead of `SessionManager`) to `BrowserIcons.install()`.
2589 * **support-webextensions**
2590   * Emit facts on installed and enabled addon ids after web extension is initialized.
2592 * **feature-app-links**
2593   * βš οΈ **This is a breaking change**: `alwaysAllowedSchemes` is removed as a parameter for `AppLinksInterceptor`.
2594   * Added `engineSupportedSchemes` as a parameter for `AppLinksInterceptor`.  This allows the caller to specify which protocol is supported by the engine.
2595     * Using this information, app links can decide if a protocol should be launched in a third party app or not regardless of user preference.
2597 * **feature-sitepermissions**
2598   * βš οΈ **This is a breaking change**: add parameters `autoplayAudible` and `autoplayInaudible` to `SitePermissionsRules`.
2599     * This allows autoplay settings to be controlled for specific sites, rather than globally.
2601 * **concept-engine**
2602   * βš οΈ **This is a breaking change**: remove deprecated GeckoView setting `allowAutoplayMedia`
2603     * This should now be controlled for individual sites via `SitePermissionsRules`
2604   * Fixed a bug that would cause `TrackingProtectionPolicyForSessionTypes` to lose some information during transformations.
2606 * **feature-downloads**
2607   * βš οΈ **This is a breaking change**: `customTabId` is renamed to `tabId`.
2609 * **feature-contextmenu**
2610   * βš οΈ **This is a breaking change**: `customTabId` is renamed to `tabId`.
2612 * **browser-menu**
2613   * Emit fact on the web extension id when a web extension menu item is clicked.
2615 * **feature-push**
2616   * βš οΈ **This is a breaking change**:
2617     * Removed APIs from AutoPushFeature: `subscribeForType`, `unsubscribeForType`, `subscribeAll`.
2618     * Removed `PushType` enum and it's internal uses.
2619     * Use the new βœ¨ `subscribe` and `unsubscribe` APIs.
2621 * **feature-accounts-push**
2622   * Updated `FxaPushSupportFeature` to use the new `AutoPushFeature` APIs.
2624 * **concept-sync**
2625  * βš οΈ **This is a breaking change**:
2626   * `DeviceEvent` and related classes were expanded/refactored, and renamed to `AccountEvent`.
2627   * `DeviceConstellation` "event" related APIs were renamed to be "command"-centric.
2629 * **service-firefox-accounts**
2630  * βš οΈ **This is a breaking change**:
2631   * `FxaAccountManager.registerForDeviceEvents` renamed to `FxaAccountManager.registerForAccountEvents`.
2633 # 33.0.0
2635 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v32.0.0...v33.0.0)
2636 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/93?closed=1)
2637 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v33.0.0/buildSrc/src/main/java/Dependencies.kt)
2638 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v33.0.0/buildSrc/src/main/java/Gecko.kt)
2639 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v33.0.0/buildSrc/src/main/java/Config.kt)
2641 * **feature-share**
2642   * Added database to store recent apps
2643   * Added `RecentAppsStorage` to handle storing and retrieving most-recent apps
2645 * **service-glean**
2646   * Glean was updated to v25.0.0:
2647     * General:
2648       * `ping_type` is not included in the `ping_info` any more ([#653](https://github.com/mozilla/glean/pull/653)), the pipeline takes the value from the submission URL.
2649       * The version of `glean_parser` has been upgraded to 1.18.2:
2650         * **Breaking Change (Java API)** Have the metrics names in Java match the names in Kotlin.
2651           See [Bug 1588060](https://bugzilla.mozilla.org/show_bug.cgi?id=1588060).
2652         * The reasons a ping are sent are now included in the generated markdown documentation.
2653     * Android:
2654       * The `Glean.initialize` method runs mostly off the main thread ([#672](https://github.com/mozilla/glean/pull/672)).
2655       * Labels in labeled metrics now have a correct, and slightly stricter, regular expression.
2656         See [label format](https://mozilla.github.io/glean/user/metrics/index.html#label-format) for more information.
2658 # 32.0.0
2660 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v31.0.0...v32.0.0)
2661 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/92?closed=1)
2662 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v32.0.0/buildSrc/src/main/java/Dependencies.kt)
2663 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v32.0.0/buildSrc/src/main/java/Gecko.kt)
2664 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v32.0.0/buildSrc/src/main/java/Config.kt)
2666 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2667   * **Merge day!**
2668     * `browser-engine-gecko-release`: GeckoView 73.0
2669     * `browser-engine-gecko-beta`: GeckoView 74.0
2670     * `browser-engine-gecko-nightly`: GeckoView 75.0
2672 * **browser-engine-gecko-nightly**, **concept-engine**
2673   * Updated `WebPushHandler` and `GeckoWebPushHandler` to accept push scopes for `onSubscriptionChanged` events.
2675 * **WebExtensions refactor**
2676   * The Web Extensions related methods have been refactored from `Engine` into a new `WebExtensionRuntime` interface.
2677   * The `Engine` interface now implements the `WebExtensionRuntime` interface.
2678   * `WebCompatFeature` has been updated to receive a `WebExtensionRuntime` instead of a `Engine` as `install` method parameter.
2680 * **lib-crash**
2681   * Now supports adding telemetry crash reporting services.  Telemetry services will not require to prompt
2682   * the user since it is restricted by the telemetry preference of the user.
2683   ```kotlin
2684   CrashReporter(
2685       services = services,
2686       telemetryServices = telemetryServices,
2687       shouldPrompt = CrashReporter.Prompt.ALWAYS,
2688       promptConfiguration = CrashReporter.PromptConfiguration(
2689           appName = context.getString(R.string.app_name),
2690           organizationName = "Mozilla"
2691       ),
2692       enabled = true,
2693       nonFatalCrashIntent = pendingIntent
2694   )
2695   ```
2697 * **feature-search**
2698   * Adds `DefaultSelectionActionDelegate`, which may be used to add new actions to text selection context menus.
2699     * It currently adds "Firefox Search" or "Firefox Private Search", depending on whether the selected tab is private.
2700   * Adds `SearchFeature`, which consumes search requests made by other components.
2701   ```kotlin
2702   // Example usage
2704   // Attach `DefaultSelectionActionDelegate` to the `EngineView`
2705   override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? =
2706       when (name) {
2707           EngineView::class.java.name -> components.engine.createView(context, attrs).apply {
2708               selectionActionDelegate = DefaultSelectionActionDelegate(
2709                   components.store,
2710                   context,
2711                   "My App Name"
2712               )
2713           }.asView()
2714       }
2716   // Use `SearchFeature` to attach search requests to your own code
2717   private val searchFeature = ViewBoundFeatureWrapper<SearchFeature>()
2718   // ...
2719   searchFeature.set(
2720       feature = SearchFeature(components.store) {
2721           when (it.isPrivate) {
2722               false -> components.searchUseCases.newTabSearch.invoke(it.query)
2723               true -> components.searchUseCases.newPrivateTabSearch.invoke(it.query)
2724           }
2725       },
2726       owner = this,
2727       view = layout
2728   )
2729   ```
2731 * **service-glean**
2732   * Glean was updated to v24.2.0:
2733     * Add `locale` to `client_info` section.
2734     * **Deprecation Warning** Since `locale` is now in the `client_info` section, the one
2735       in the baseline ping ([`glean.baseline.locale`](https://github.com/mozilla/glean/blob/c261205d6e84d2ab39c50003a8ffc3bd2b763768/glean-core/metrics.yaml#L28-L42))
2736       is redundant and will be removed by the end of the quarter.
2737     * Drop the Glean handle and move state into glean-core ([#664](https://github.com/mozilla/glean/pull/664))
2738     * If an experiment includes no `extra` fields, it will no longer include `{"extra": null}` in the JSON payload.
2739     * Support for ping `reason` codes was added.
2740       * The metrics ping will now include `reason` codes that indicate why it was
2741         submitted.
2742       * The baseline ping will now include `reason` codes that indicate why it was
2743         submitted. If an unclean shutdown is detected (e.g. due to force-close), this
2744         ping will be sent at startup with `reason: dirty_startup`.
2745     * The version of `glean_parser` has been upgraded to 1.17.3
2746     * Collections performed before initialization (preinit tasks) are now dispatched off
2747       the main thread during initialization.
2749 * **feature-awesomebar**
2750   * Added `showDescription` parameter (default to `true`) to `SearchSuggestionProvider` constructors to add the possibility of removing search suggestion description.
2752 * **support-migration**
2753   * Emit facts during migration.
2755 # 31.0.0
2757 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v30.0.0...v31.0.0)
2758 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/91?closed=1)
2759 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v31.0.0/buildSrc/src/main/java/Dependencies.kt)
2760 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v31.0.0/buildSrc/src/main/java/Gecko.kt)
2761 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v31.0.0/buildSrc/src/main/java/Config.kt)
2763 * **feature-awesomebar**
2764   * βš οΈ **This is a breaking change**: Added resources parameter to `addSessionProvider` method from `AwesomeBarFeature` and to `SessionSuggestionProvider` constructor for accessing strings.
2767 # 30.0.0
2769 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v29.0.0...v30.0.0)
2770 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/90?closed=1)
2771 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v30.0.0/buildSrc/src/main/java/Dependencies.kt)
2772 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v30.0.0/buildSrc/src/main/java/Gecko.kt)
2773 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/mv30.0.0aster/buildSrc/src/main/java/Config.kt)
2776 # 29.0.0
2778 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v28.0.0...v29.0.0)
2779 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/89?closed=1)
2780 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v29.0.0/buildSrc/src/main/java/Dependencies.kt)
2781 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v29.0.0/buildSrc/src/main/java/Gecko.kt)
2782 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v29.0.0/buildSrc/src/main/java/Config.kt)
2784 * **feature-error-pages**
2785   * βš οΈ **This is a breaking change**: ErrorResponse now has two data classes: Content (for data URI's) and Uri (for encoded URL's)
2786     * This will require a change in RequestInterceptors that override `onErrorRequest`.
2787     * Return the corresponding ErrorResponse (ErrorResponse.Content or ErrorResponse.Uri) as ErrorResponse can no longer be directly instantiated.
2788   * Added support for loading images into error pages with `createUrlEncodedErrorPage`. These error pages load dynamically with javascript by parsing params in the URL
2789   * βš οΈ To use custom HTML & CSS with image error pages, resources **must** be located in the assets folder
2791 * **feature-prompts**
2792   * Save login prompts will no longer be closed on page load
2794 * **lib-crash**
2795   * Glean reports now distinguishes between fatal and non-fatal native code crashes.
2797 * **feature-pwa**
2798   * Added ability to query install state of an url.
2799   * Added ability load all manifests that apply to a certain url.
2800   * Added ability to track if an PWA is actively used.
2802 # 28.0.0
2804 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v27.0.0...v28.0.0)
2805 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/88?closed=1)
2806 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v28.0.0/buildSrc/src/main/java/Dependencies.kt)
2807 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v28.0.0/buildSrc/src/main/java/Gecko.kt)
2808 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v28.0.0/buildSrc/src/main/java/Config.kt)
2810 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2811   * **Merge day!**
2812     * `browser-engine-gecko-release`: GeckoView 72.0
2813     * `browser-engine-gecko-beta`: GeckoView 73.0
2814     * `browser-engine-gecko-nightly`: GeckoView 74.0
2816 * **feature-session**
2817   * * βš οΈ **This is a breaking change**: `TrackingProtectionUseCases.fetchExceptions`: now receives a `(List<TrackingProtectionException>) -> Unit` instead of a `(List<String>) -> Unit` to add support for deleting individual exceptions.
2818     * **Added**: `TrackingProtectionUseCases.removeException(exception: TrackingProtectionException)`: now you can delete an exception without the need of having a `Session` by calling `removeException(trackingProtectionException)`.
2820 * **service-glean**
2821   * Glean was updated to v24.1.0:
2822     * **Breaking Change** An `enableUpload` parameter has been added to the `initialize()`
2823       function. This removes the requirement to call `setUploadEnabled()` prior to calling
2824       the `initialize()` function.
2825     * A new metric `glean.error.preinit_tasks_overflow` was added to report when
2826       the preinit task queue overruns, leading to data loss. See [bug
2827       1609482](https://bugzilla.mozilla.org/show_bug.cgi?id=1609482)
2828     * The metrics ping scheduler will now only send metrics pings while the
2829       application is running. The application will no longer "wake up" at 4am
2830       using the Work Manager.
2831     * The code for migrating data from Glean SDK before version 19 was removed.
2832     * When using the `GleanTestLocalServer` rule in instrumented tests, pings are
2833       immediately flushed by the `WorkManager` and will reach the test endpoint as
2834       soon as possible.
2835     * The Glean Gradle Plugin correctly triggers docs and API updates when registry files
2836       change, without requiring them to be deleted.
2837     * `parseISOTimeString` has been made 4x faster. This had an impact on Glean
2838       migration and initialization.
2839     * Metrics with `lifetime: application` are now cleared when the application is started,
2840       after startup Glean SDK pings are generated.
2841     * βš οΈ **This is a breaking change**:
2842       * The public method `PingType.send()` (in all platforms) have been deprecated
2843         and renamed to `PingType.submit()`.
2844     * Rename `deletion_request` ping to `deletion-request` ping after glean_parser update
2845     * BUGFIX: The Glean Gradle plugin will now work if an app or library doesn't
2846       have a metrics.yaml or pings.yaml file.
2848 * **feature-app-links**
2849   * AppLinksInterceptor can now be used without the AppLinksFeature. Set the new parameter launchFromInterceptor = true
2850   ```kotlin
2851   AppLinksInterceptor(
2852       applicationContext,
2853       interceptLinkClicks = true,
2854       launchInApp = { true },
2855       launchFromInterceptor = true
2856   )
2857   ```
2858   * Introduce a `ContextMenuCandidate` to open links in the corresponding external app, if installed
2860 * **concept-storage**
2861   * Added classes related to login autofill
2862     * `LoginStorageDelegate` may be attached to an `Engine`, where it can be used to save logins.
2863     * `LoginValidationDelegate` may be used to read and update currently saved logins.
2865 * **feature-prompts**
2866   * `PromptFeature` may now optionally accept a `LoginValidationDelegate`. If present, it users
2867   will be prompted to save their information after logging in to a website.
2868   * `PromptFeature` now accepts a false by default `isSaveLoginEnabled` lambda to be invoked before showing prompts. If true, users
2869     will be prompted to save their information after logging in to a website.
2870   * Prompts will now be closed automatically when pages have mostly loaded
2872 * **service-sync-logins**
2873   * Added `GeckoLoginStorageDelegate`. This can be attached to a GeckoEngine, where it will be used
2874   to save user login credentials.
2875   * `GeckoLoginStorageDelegate` now accepts a false by default `isAutofillEnabled` lambda to be invoked before fetching logins. If false,
2876    logins will not be fetched to autofill.
2878 * **service-firefox-accounts**
2879   * `signInWithShareableAccountAsync` now takes a `reuseAccount` parameter, allowing consumers
2880     to reuse existing session token (and FxA device) associated with the passed-in account.
2882 * **support-migration**
2883   * **New Telemetry Notice**
2884   * Added a 'migration' ping, which contains telemetry data about migration via Glean. It's emitted whenever a migration is executed.
2885   * Added `MigrationIntentProcessor` for handling incoming intents when migration is in progress.
2886   * Added `AbstractMigrationProgressActivity` as a base activity to block user interactions during migration.
2888 * **browser-menu**
2889   * Added `MenuButton` to let the browser menu be used outside of `BrowserToolbar`.
2891 * **browser-menu**
2892   * Added new `MenuController` and `MenuCandidate` items that replace `BrowserMenuBuilder` and `BrowserMenuItem`.
2893     * Menu candidates are pure data classes and state changes are done by submitting a new list of menu candidates, rather than mutating menu items.
2894     * The current state of a `BrowserMenuItem` can be converted to a menu candidate with `asCandidate(Context)`.
2895     * `MenuController` replaces both `BrowserMenuBuilder` and `BrowserMenu`, and handles showing the menu and adjusting the displayed items.
2896     * `MenuView` lets the menu be used outside of popups.
2897     * Menu candidates add support for buttons inside menu options, text to the side of a menu option, and improved a11y.
2898   * βš οΈ **This is a breaking change**: Added `asCandidate` method to `BrowserMenuItem` interface.
2900 * **browser-toolbar**
2901   * Added support for the new menu controller through the `DisplayToolbar.menuController` property.
2904 # 27.0.0
2906 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v26.0.0...v27.0.0)
2907 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/86?closed=1)
2908 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v27.0.0/buildSrc/src/main/java/Dependencies.kt)
2909 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v27.0.0/buildSrc/src/main/java/Gecko.kt)
2910 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v27.0.0/buildSrc/src/main/java/Config.kt)
2912 * **feature-remotetabs** was renamed to **feature-syncedtabs**
2913   * βš οΈ **This is a breaking change**:
2914   * `RemoteTabsFeature` is now `SyncedTabsFeature`, and some method names have corresponding changes.
2915   * `RemoteTabsStorageSuggestionProvider` is now `SyncedTabsStorageSuggestionProvider`.
2917 * **service-glean**
2918   * Glean was updated to v22.1.0 ([Full changelog](https://github.com/mozilla/glean/compare/v21.3.0...v22.1.0))
2919     * Attempt to re-send the deletion ping on init even if upload is disabled.
2920     * Introduce the `InvalidOverflow` error for `TimingDistribution`s.
2921   * Glean now provides a Gradle plugin for automating the conversion from `metrics.yaml` and `pings.yaml` files to Kotlin code. This should be used instead of the deprecated Gradle script.  See [integrating with the build system docs](https://mozilla.github.io/glean/book/user/adding-glean-to-your-project.html#integrating-with-the-build-system) for more information.
2923 * **feature-app-links**
2924   * βš οΈ **This is a breaking change**:
2925   * Feature now contains two parts.  One part is the AppLinksFeature, the other part is RequestInterceptor.
2926   ```kotlin
2927   // add this call in the RequestInterceptor
2928   context.components.appLinksInterceptor.onLaunchIntentRequest(engineSession, uri, hasUserGesture, isSameDomain)
2929   ```
2931 * **support-telemetry-sync**
2932   * Added new telemetry ping, to support password sync: `passwords_sync`.
2934 * **service-firefox-accounts**
2935   * πŸ•΅οΈ  **New Telemetry Notice**
2936   * Added telemetry for password sync, via the new `passwords_sync` in **support-telemetry-sync**
2938 * **sync-logins**
2939   * πŸ•΅οΈ  **New Telemetry Notice**
2940   * Added telemetry for password sync, via the new `passwords_sync` in **support-telemetry-sync**
2941   * The `service-sync-logins` component now collects some basic performance and quality metrics via Glean.
2942     Applications that send telemetry via Glean *must ensure* they have received appropriate data-review before integrating this component.
2943   * βš οΈ **This is a breaking change**: The `ServerPassword` fields `username`, `usernameField` and `passwordField` can no longer by `null`.
2944     Use the empty string to indicate an absent value for these fields.
2945   * βš οΈ **This is a breaking change**: The `AsyncLoginsStorageAdapter.inMemory` method has been removed.
2946     Use `AsyncLoginsStorageAdapter.forDatabase(":memory:")` instead.
2949 * **samples-sync**
2950   * Added support for password synchronization (not reflected in the UI, but demonstrates how to integrate the component).
2952 * **browser-menu**
2953   * Added `BrowserMenuHighlightableSwitch` to represent a highlightable item with a toggle switch.
2955 * **lib-crash**
2956   * Now supports performing action after submitting crash report.
2957   ```kotlin
2958   crashReporter.submitReport(Crash.fromIntent(intent)) {
2959       stopSelf()
2960   }
2961   ```
2963 * **support-ktx**
2964   * Added `Context.getDrawableWithTint` extension method to get a drawable resource with a tint applied.
2965         * `String.isUrl` is now using a more lenient check for improved performance. Strictly checking whether a string is a URL or not is supported through the new `String.isUrlStrict` method.
2967 * **support-base**
2968   * βš οΈ **This is a breaking change**:
2969   * Removed helper for unique notification id.
2970   * Added helper for providing unique stable `Int` ids based on a `String` tag to avoid id conflicts between components and app code.  This is now for any id, not just notification id.
2971   * Added new API that allows user to request for the next available id using the same tag.
2973   ```kotlin
2974   // Get a unique id for the provided tag
2975   val id = SharedIdsHelper.getIdForTag(context, "mozac.my.feature")
2977   // Get the next unique id for the provided tag
2978   val id = SharedIdsHelper.getNextIdForTag(context, "mozac.my.feature")
2979   ```
2981 * **browser-errorpages**
2982   * Added support for bypassing invalid SSL certification.
2984 # 26.0.0
2986 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v25.0.0...v26.0.0)
2987 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/85?closed=1)
2988 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v26.0.0/buildSrc/src/main/java/Dependencies.kt)
2989 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v26.0.0/buildSrc/src/main/java/Gecko.kt)
2990 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v26.0.0/buildSrc/src/main/java/Config.kt)
2992 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
2993   * **Merge day!**
2994     * `browser-engine-gecko`: GeckoView 71.0
2995     * `browser-engine-gecko-beta`: GeckoView 72.0
2996     * `browser-engine-gecko-nightly`: GeckoView 73.0
2998 * **browser-engine-system** and **browser-engine-gecko-nightly**
2999   * Added `EngineView.canClearSelection()` and `EngineView.clearSelection()` for clearing the selection.
3001 * **feature-accounts**
3002   * βš οΈ **This is a breaking change**: Migrated `FxaPushSupportFeature` to the `feature-accounts-push` component.
3004 * **feature-sendtab**
3005   * βš οΈ **This is a breaking change**: This component is now deprecated. See `feature-accounts-push`.
3007 * **feature-accounts-push**
3008   * πŸ†• New component for features that need Firefox Accounts and Push, e.g. Send Tab.
3009   * `SendTabFeature` and `SendTabUseCases` have been migrated here.
3010   * βš οΈ **This is a breaking change**: `SendTabFeature` no longer takes an instance of `AutoPushFeature`.
3011     * `FxaPushSupportFeature` is now needed for integrating Firefox Accounts with Push support.
3013 * **support-test-libstate**
3014   * πŸ†• New component providing utilities to test functionality that relies on lib-state.
3016 * **browser-errorpages**
3017   * Removed list items semantics to improve a11y for unordered lists, preventing items being read twice.
3019 * **support-locale**
3020     * Add `resetToSystemDefault` and `getSystemDefault` method to `LocaleManager`
3022 # 25.0.0
3024 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v24.0.0...v25.0.0)
3025 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/84?closed=1)
3026 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v25.0.0/buildSrc/src/main/java/Dependencies.kt)
3027 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v25.0.0/buildSrc/src/main/java/Gecko.kt)
3028 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v25.0.0/buildSrc/src/main/java/Config.kt)
3030 * **feature-downloads**
3031   * Makes `DownloadState` parcelizable so that it can be passed to `FetchDownloadManager` when completed
3033 * **feature-remotetabs**
3034   * Add new `RemoteTabsFeature` to view tabs from other synced devices and upload our own.
3035   * Add `RemoteTabsStorageSuggestionProvider` class to match remote tabs in awesomebar suggestions.
3037 * **support-migration**
3038   * Added Fennec login migration logic.
3040 * **service-sync-logins**
3041   * `AsyncLoginsStorage` interface gained a new method: `importLoginsAsync`, used for bulk-inserting logins (for example, during a migration).
3043 # 24.0.0
3045 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v23.0.0...v24.0.0)
3046 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/84?closed=1)
3047 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v24.0.0/buildSrc/src/main/java/Dependencies.kt)
3048 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v24.0.0/buildSrc/src/main/java/Gecko.kt)
3049 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v24.0.0/buildSrc/src/main/java/Config.kt)
3051 * **browser-errorpages**
3052   * Added strings for "no network connection" error pages
3054 * **browser-menu**
3055   * Replaced `BrowserMenuHighlightableItem.Highlight` with `BrowserMenuHighlight.HighPriority` to highlight a menu item with some background color. `Highlight` has been deprecated.
3056   * Added `BrowserMenuHighlight.LowPriority` to highlight a menu item with a dot over the icon.
3058 * **storage-sync**
3059   * Added `RemoteTabsStorage` for synced tabs.
3061 * **service-firefox-accounts**
3062   * Removed `StorageSync` interface as it is superseded by the sync manager.
3064 * **service-glean**
3065   * Glean was updated to v21.3.0 ([Full changelog](https://github.com/mozilla/glean/compare/v21.2.0...21.3.0))
3066     * Timers are reset when disabled. That avoids recording timespans across disabled/enabled toggling.
3067     * Add a new flag to pings: send_if_empty.
3068     * Upgrade glean_parser to v1.12.0.
3069     * Implement the deletion request ping in Glean.
3071 # 23.0.0
3073 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v22.0.0...v23.0.0)
3074 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/83?closed=1)
3075 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v23.0.0/buildSrc/src/main/java/Dependencies.kt)
3076 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v23.0.0/buildSrc/src/main/java/Gecko.kt)
3077 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v23.0.0/buildSrc/src/main/java/Config.kt)
3079 * **feature-downloads**
3080   * βš οΈ **This is a breaking change**:
3081   * Renamed to `OnDownloadCompleted` to `OnDownloadStopped` for increased clarity on when it's triggered
3083 * **browser-state**
3084   * βš οΈ **This is a breaking change**: `DownloadState` doesn't include the property `filePath` in its constructor anymore, now it is a computed property. As the previous behavior caused some situations where `fileName` was initially null and after assigned a value to produce `filePath` values like "/storage/emulated/0/Download/null" [for more info](https://sentry.prod.mozaws.net/operations/reference-browser/issues/6609701/).
3086 * **feature-prompts** and **feature-downloads**
3087   * Fix [issue #6439](https://github.com/mozilla-mobile/fenix/issues/6439) "Crash when downloading Image"
3089 * **service-firefox-accounts**
3090   * Account profile cache is now used, removing a network call from most instances of account manager instantiation.
3091   * Fixed a bug where account would disappear after restarting an app which hit authentication problems.
3092   * Deprecated the `StorageSync` class. Please use the `SyncManager` class instead.
3094 * **service-glean**
3095   * Glean was updated to v21.2.0
3096     * Two new metrics were added to investigate sending of metrics and baseline pings.
3097       See [bug 1597980](https://bugzilla.mozilla.org/show_bug.cgi?id=1597980) for more information.
3098     * Glean's two lifecycle observers were refactored to avoid the use of reflection.
3099     * Timespans will now not record an error if stopping after setting upload enabled to false.
3100     * The `GleanTimerId` can now be accessed in Java and is no longer a `typealias`.
3101     * Fixed a bug where the metrics ping was getting scheduled twice on startup.
3102     * When constructing a ping, events are now sorted by their timestamp. In practice,
3103       it rarely happens that event timestamps are unsorted to begin with, but this
3104       guards against a potential race condition and incorrect usage of the lower-level
3105       API.
3106     * Metrics that can record errors now have a new testing method,
3107       `testGetNumRecordedErrors`.
3108     * The experiments API is no longer ignored before the Glean SDK initialized. Calls are
3109       recorded and played back once the Glean SDK is initialized.
3110     * String list items were being truncated to 20, rather than 50, bytes when using
3111       `.set()` (rather than `.add()`). This has been corrected, but it may result
3112       in changes in the sent data if using string list items longer than 20 bytes.
3114 * **support-base**
3115   * Deprecated `BackHandler` interface. Use the `UserInteractionHandler.onBackPressed` instead.
3116   * Added generic `UserInteractionHandler` interface for fragments, features and other components that want to handle user interactions such as β€˜back’ or 'home' button presses.
3118 # 22.0.0
3120 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v22.0.0...main)
3121 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/82?closed=1)
3122 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v22.0.0/buildSrc/src/main/java/Dependencies.kt)
3123 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v22.0.0/buildSrc/src/main/java/Gecko.kt)
3124 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v22.0.0/buildSrc/src/main/java/Config.kt)
3126 * **feature-addons**
3127   *  βš οΈ **This is a breaking change**:
3128   * Renamed to `AddOnsCollectionsProvider` to `AddOnCollectionProvider` and added caching support:
3129   ```kotlin
3130   val addOnsProvider by lazy {
3131     // Keeps addon collection response cached and valid for one day
3132     AddOnCollectionProvider(applicationContext, client, maxCacheAgeInMinutes = 24 * 60)
3133   }
3135   // May return a cached result, if available
3136   val addOns = addOnsProvider.getAvailableAddOns()
3138   // Will never return a cached result
3139   val addOns = addOnsProvider.getAvailableAddOns(allowCache = false)
3140   ```
3142 * **lib-nearby**
3143   * πŸ†• New component for communicating directly between two devices
3144   using Google Nearby API.
3146 * **sample-nearby-chat**
3147   * πŸ†• New sample program demonstrating use of `lib-nearby`.
3149 * **feature-customtabs**
3150   * βš οΈ `CustomTabWindowFeature` now takes `Activity` instead of `Context`.
3152 * **concept-sync**, **service-firefox-accounts**
3153   * `OAuthAccount@authorizeOAuthCode` method is now `authorizeOAuthCodeAsync`.
3155 * **service-firefox-accounts**
3156   * For supported Android API levels (23+), `FxaAccountManager` can now be configured to encrypt persisted FxA state, via `secureStateAtRest` flag on passed-in `DeviceConfig`. Defaults to `false`. For lower API levels, setting `secureStateAtRest` will continue storing FxA state in plaintext. If the device is later upgraded to 23+, FxA state will be automatically migrated to an encrypted storage.
3157   * FxA state is stored in application's data directory, in plaintext or encrypted-at-rest if configured via the `secureStateAtRest` flag. This state contains everything that's necessary to download and decrypt data stored in Firefox Sync.
3158   * An instance of a `CrashReporter` may now be passed to the `FxaAccountManager`'s constructor. If configured, it will be used to report any detected abnormalities.
3159   *  βš οΈ **This is a breaking change**:
3160   * Several `FxaAccountManager` methods have been made internal, and are no longer part of the public API of this module: `createSyncManager`, `getAccountStorage`.
3162 # 21.0.0
3164 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v20.0.0...v21.0.0)
3165 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/81?closed=1)
3166 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v21.0.0/buildSrc/src/main/java/Dependencies.kt)
3167 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v21.0.0/buildSrc/src/main/java/Gecko.kt)
3168 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v21.0.0/buildSrc/src/main/java/Config.kt)
3170 * **feature-downloads**
3171   * Added `tryAgain` which can be called on the feature in order to restart a failed download.
3173 * **lib-dataprotect**
3174   * Added new `SecureAbove22Preferences` helper class, which is an encryption-aware wrapper for `SharedPreferences`. Only actually encrypts stored values when running on API23+.
3176 * **service-firefox-accounts**
3177   * Support for keeping `SyncEngine.Passwords` engine unlocked during sync. If you're syncing this engine, you must use `SecureAbove22Preferences` to store encryption key (stored under "passwords" key), and pass an instance of these secure prefs to `GlobalSyncableStoreProvider.configureKeyStorage`.
3179 * **concept-sync**
3180   * Added new `LockableStore` to facilitate syncing of "lockable" stores (such as `SyncableLoginsStore`).
3182 * **feature-sitepermissions**
3183   * Added a new get operator to `SitePermissions` to facilitate the retrieval of permissions.
3184   ```kotlin
3185     val sitePermissions = SitePermissions(
3186             "dev.mozilla.org",
3187             notification = ALLOWED,
3188             savedAt = 0)
3190     sitePermissions[Permission.LOCATION] //  ALLOWED will be returned
3191   ```
3192 * **engine-gecko-nightly**
3193   * Adds setDynamicToolbarMaxHeight ApI.
3195 * **feature-push**
3196   * Added `unsubscribeAll` support from the Rust native layer.
3198 # 20.0.0
3200 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v19.0.0...v20.0.0)
3201 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/80?closed=1)
3202 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v20.0.0/buildSrc/src/main/java/Dependencies.kt)
3203 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v20.0.0/buildSrc/src/main/java/Gecko.kt)
3204 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v20.0.0/buildSrc/src/main/java/Config.kt)
3206 * **browser-session**, **feature-customtabs**, **feature-session**, **feature-tabs**
3207   *  βš οΈ **This is a breaking change**: The `WindowFeature` and `CustomTabWindowFeature` components have been migrated to `browser-state` from `browser-session`. Therefore creating these features now requires a `BrowserStore` instance (instead of a `SessionManager` instance). The `windowRequest` properties have been removed `Session` so window requests can now only be observed on a `BrowserStore` from the `browser-state` component. In addition, `WindowFeature` was moved from `feature-session` to `feature-tabs` because it now makes use of our `TabsUseCases` and this would otherwise cause a dependency cycle.
3209 * **feature-downloads**
3210   * Added ability to pause, resume, cancel, and try again on a download through the `DownloadNotification`.
3211   * Added support for multiple, continuous downloads.
3212   * Added size of the file to the `DownloadNotification`.
3213   * Added open file functionality to the `DownloadNotification`.
3214     * Note: you must add a `FileProvider` to your manifest as well as `file_paths.xml`. See SampleBrowser for an example.
3215     * To open .apk files, you must still add the permission `android.permission.INSTALL_PACKAGES` to your manifest.
3216   * Improved visuals of `SimpleDownloadDialogFragment` to better match `SitePermissionsDialogFragment`.
3217     * `SimpleDownloadDialogFragment` can similarly be themed by using `PromptsStyling` properties.
3218   * Recreated download notification channel with lower importance for Android O+ so that the notification is not audibly intrusive.
3220 * **feature-webnotifications**
3221   * Adds feature implementation for configuring and displaying web notifications to the user
3222   ```kotlin
3223   WebNotificationFeature(
3224       applicationContext, engine, icons, R.mipmap.ic_launcher, BrowserActivity::class.java
3225   )
3226   ```
3228 * **service-glean**
3229    * Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing `stderr`.
3231 * **concept-engine**
3232   * Adds support for WebPush abstraction to the Engine.
3233   * Adds support for WebShare abstraction as a PromptRequest.
3235 * **engine-gecko-nightly**
3236   * Adds support for WebPush in GeckoEngine.
3238 * **support-webextensions**
3239   * Adds support for sending messages to background pages and scripts in WebExtensions.
3241 * **service-firefox-accounts**
3242   * Adds `authorizeOAuthCode` method for generating scoped OAuth codes.
3244 * **feature-push**
3245   * βš οΈ The `AutoPushFeature` now throws when reaching exceptions in the native layer that are unrecoverable.
3247 * **feature-prompts**
3248   * Adds support for Web Share API using `ShareDelegate`.
3250 * **experiments**
3251   * Fixes a crash when the app version or the experiment's version specifiers are not in the expected format.
3253 * **engine**, **engine-gecko-***, **support-webextensions**
3254   * Added support `browser.tabs.remove()` in web extensions.
3255   ```kotlin
3256   val engine = GeckoEngine(applicationContext, engineSettings)
3257   engine.registerWebExtensionTabDelegate(object : WebExtensionTabDelegate {
3258     override fun onCloseTab(webExtension: WebExtension?, engineSession: EngineSession) {
3259       store.state.tabs.find { it.engineState.engineSession === engineSession }?.let {
3260         store.dispatch(RemoveTabAction(tab.id))
3261       }
3262     }
3263   })
3264   ```
3266 # 19.0.1
3268 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v19.0.0...v19.0.1)
3269 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v19.0.1/buildSrc/src/main/java/Dependencies.kt)
3270 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v19.0.1/buildSrc/src/main/java/Gecko.kt)
3271 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v19.0.1/buildSrc/src/main/java/Config.kt)
3273 * **service-glean**
3274    * Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing `stderr`.
3276 # 19.0.0
3278 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v18.0.0...v19.0.0)
3279 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/79?closed=1)
3280 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v19.0.0/buildSrc/src/main/java/Dependencies.kt)
3281 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v19.0.0/buildSrc/src/main/java/Gecko.kt)
3282 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v19.0.0/buildSrc/src/main/java/Config.kt)
3284 * **browser-toolbar**
3285   * βš οΈ **This is a breaking change**: Refactored the internals to use `ConstraintLayout`. As part of this change the public API was simplified and unused methods/properties have been removed.
3287 * **feature-accounts**
3288   * Add new `FxaPushSupportFeature` for some underlying support when connecting push and fxa accounts together.
3290 * **browser-state**
3291   * Added `externalAppType` to `CustomTabConfig` to indicate how the session is being used.
3293 * **service-glean**
3294    * The Rust implementation of the Glean SDK is now being used.
3295    * βš οΈ **This is a breaking change**: the `GleanDebugActivity` is no longer exposed from service-glean. Users need to use the one in `mozilla.telemetry.glean.debug.GleanDebugActivity` from the `adb` command line.
3297 * **lib-push-firebase**
3298    * Fixes a potential bug where we receive a message for another push service that we cannot process.
3300 * **feature-privatemode**
3301   * Added new feature for private browsing mode.
3302   * Added `SecureWindowFeature` to prevent screenshots in private browsing mode.
3304 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
3305   * **Merge day!**
3306     * `browser-engine-gecko`: GeckoView 70.0
3307     * `browser-engine-gecko-beta`: GeckoView 71.0
3308     * `browser-engine-gecko-nightly`: GeckoView 72.0
3310 * **feature-push**
3311   * The `AutoPushFeature` now checks (once every 24 hours) to verify and renew push subscriptions if expired after a cold boot.
3313 # 18.0.1
3315 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v18.0.0...v18.0.1)
3316 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v18.0.1/buildSrc/src/main/java/Dependencies.kt)
3317 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v18.0.1/buildSrc/src/main/java/Gecko.kt)
3318 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v18.0.1/buildSrc/src/main/java/Config.kt)
3320 * **feature-prompts**
3321   * Fixed a crash when showing the file picker.
3323 # 18.0.0
3325 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v17.0.0...v18.0.0)
3326 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/78?closed=1)
3327 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v18.0.0/buildSrc/src/main/java/Dependencies.kt)
3328 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v18.0.0/buildSrc/src/main/java/Gecko.kt)
3329 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v18.0.0/buildSrc/src/main/java/Config.kt)
3331 * **browser-menu**
3332   * Adds the ability to create a BrowserMenuCategory, a menu item that defines a category for other menu items
3334 * **concept-engine**
3335   * Adds the setting `forceUserScalableContent`.
3337 * **engine-gecko-nightly**
3338   * Implements the setting `forceUserScalableContent`.
3340 * **feature-prompts**
3341   * Deprecated `PromptFeature` constructor that has parameters for both `Activity` and `Fragment`. Use the constructors that just take either one instead.
3342   * Changed `sessionId` parameter name to `customTabId`.
3344 # 17.0.0
3346 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v16.0.0...v17.0.0)
3347 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/77?closed=1)
3348 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v17.0.0/buildSrc/src/main/java/Dependencies.kt)
3349 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v17.0.0/buildSrc/src/main/java/Gecko.kt)
3350 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v17.0.0/buildSrc/src/main/java/Config.kt)
3352 * **feature-contextmenu**
3353   * The "Save Image" context menu item will no longer prompt before downloading the image.
3355 * **concept-engine**
3356   * Added `WebAppManifest.ShareTarget` data class.
3358 * **lib-crash**
3359   * Now supports sending caught exceptions.  Use the 'submitCaughtException()' to send caught exceptions if the underlying crash reporter service supports it.
3360   ```kotlin
3361   val job = crashReporter.submitCaughtException(e)
3362   ```
3364 * **engine**, **engine-gecko-nightly**, **engine-gecko-beta**, **engine-gecko**
3365   * βš οΈ **This is a breaking change**: Renamed `WebExtensionTabDelegate` to `WebExtensionDelegate` to handle various web extensions related engine events:
3366   ```kotlin
3367   GeckoEngine(applicationContext, engineSettings).also {
3368     it.registerWebExtensionDelegate(object : WebExtensionDelegate {
3369         override fun onNewTab(webExtension: WebExtension?, url: String, engineSession: EngineSession) {
3370           sessionManager.add(Session(url), true, engineSession)
3371         }
3372     })
3373   }
3374   ```
3375   * βš οΈ **This is a breaking change**: Redirect source and target flags are now passed to history tracking delegates. As part of this change, `HistoryTrackingDelegate.onVisited()` receives a new `PageVisit` data class as its second argument, specifying the `visitType` and `redirectSource`. For more details, please see [PR #4268](https://github.com/mozilla-mobile/android-components/pull/4268).
3377 * **support-webextensions**
3378   * Added functionality to make sure web extension related events in the engine are reflected in the browser state / store. Instead of attaching a `WebExtensionDelegate` to the engine, and manually reacting to all events, it's now possible to initialize `WebExtensionSupport`, which provides overridable default behaviour for all web extension related engine events:
3379   ```kotlin
3380   // Makes sure web extension related events (e.g. an extension is installed, or opens a new tab) are dispatched to the browser store.
3381   WebExtensionSupport.initialize(components.engine, components.store)
3383   // If dispatching to the browser store is not desired, all actions / behaviour can be overridden:
3384   WebExtensionSupport.initialize(components.engine, components.store, onNewTabOverride = {
3385         _, engineSession, url -> components.sessionManager.add(Session(url), true, engineSession)
3386   })
3387   ```
3389 * **browser-menu**
3390    * Fixes background ripple of Switch in BrowserMenuImageSwitch
3392 # 16.0.0
3394 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v15.0.0...v16.0.0)
3395 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/76?closed=1)
3396 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v16.0.0/buildSrc/src/main/java/Dependencies.kt)
3397 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v16.0.0/buildSrc/src/main/java/Gecko.kt)
3398 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v16.0.0/buildSrc/src/main/java/Config.kt)
3400 * **feature-awesomebar**
3401   * βš οΈ **This is a breaking change**: `AwesomeBar.Suggestion` now directly takes a Bitmap for the icon param rather than a Unit.
3403 * **feature-pwa**
3404   * βš οΈ **This is a breaking change**: Intent sent from the `WebAppShortcutManager` now require the consumption of the `SHORTCUT_CATEGORY` in your manifest
3406 * **feature-customtabs**
3407   * 'CustomTabIntentProcessor' can create private sessions now.
3409 * **browser-session**, **browser-state**, **feature-prompts**
3410   *  βš οΈ **This is a breaking change**: The `feature-prompts` component has been migrated to `browser-state` from `browser-session`. Therefore creating a `PromptFeature` requires a `BrowserStore` instance (instead of a `SessionManager` instance). The `promptRequest` property has been removed `Session`. Prompt requests can now only be observed on a `BrowserStore` from the `browser-state` component.
3412 * **tooling-detekt**
3413   * Published detekt rules for internal use. Check module documentation for detailed ruleset description.
3415 * **feature-intent**
3416   * Added support for NFC tag intents to `TabIntentProcessor`.
3418 * **firefox-accounts**, **service-fretboard**
3419   * βš οΈ **This is a breaking change**: Due to migration to WorkManager v2.2.0, some classes like `WorkManagerSyncScheduler` and `WorkManagerSyncDispatcher` now expects a `Context` in their constructors.
3421 * **engine**, **engine-gecko-nightly** and **engine-gecko-beta**
3422   * Added `WebExtensionsTabsDelegate` to support `browser.tabs.create()` in web extensions.
3423   ```kotlin
3424   GeckoEngine(applicationContext, engineSettings).also {
3425     it.registerWebExtensionTabDelegate(object : WebExtensionTabDelegate {
3426         override fun onNewTab(webExtension: WebExtension?, url: String, engineSession: EngineSession) {
3427           sessionManager.add(Session(url), true, engineSession)
3428         }
3429     })
3430   }
3431   ```
3433 # 15.0.0
3435 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v14.0.0...v15.0.0)
3436 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/75?closed=1)
3437 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v15.0.0/buildSrc/src/main/java/Dependencies.kt)
3438 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v15.0.0/buildSrc/src/main/java/Gecko.kt)
3439 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v15.0.0/buildSrc/src/main/java/Config.kt)
3441 * **browser-session**, **browser-state**, **feature-contextmenu**, **feature-downloads**
3442   * * βš οΈ **This is a breaking change**: Removed the `download` property from `Session`. Downloads can now only be observed on a `BrowserState` from the `browser-state` component. Therefore `ContextMenuUseCases` and `DownloadsUseCases` now require a `BrowserStore` instance.
3444 * **support-ktx**
3445   * Adds `Resources.Theme.resolveAttribute(Int)` to quickly get a resource ID from a theme.
3446   * Adds `Context.getColorFromAttr` to get a color int from an attribute.
3448 * **feature-customtabs**
3449   * Added `CustomTabWindowFeature` to handle windows inside custom tabs, PWAs, and TWAs.
3451 * **feature-tab-collections**
3453   * Behavior change: In a collection List<TabEntity> is now ordered descending by creation date (newest tab in a collection on top)
3454 * **feature-session**, **engine-gecko-nightly** and **engine-gecko-beta**
3455   * Added api to manage the tracking protection exception list, any session added to the list will be ignored and the the current tracking policy will not be applied.
3457   ```kotlin
3458     val useCase = TrackingProtectionUseCases(sessionManager,engine)
3460     useCase.addException(session)
3462     useCase.removeException(session)
3464     useCase.removeAllExceptions()
3466     useCase.containsException(session){ contains ->
3467         // contains indicates if this session is on the exception list.
3468     }
3470     useCase.fetchExceptions { exceptions ->
3471         // exceptions is a list of all the origins that are in the exception list.
3472     }
3473   ```
3475 * **support-sync-telemetry**
3476   * πŸ†• New component containing building blocks for sync telemetry.
3478 * **concept-sync**, **services-firefox-accounts**
3479   βš οΈ **This is a breaking change**
3480   * Internal implementation of sync changed. Most visible change is that clients are now allowed to change which sync engines are enabled and disabled.
3481   * `FxaAccountManager#syncNowAsync` takes an instance of a `reason` instead of `startup` boolean flag.
3482   * `SyncEnginesStorage` is introduced, allowing applications to read and update enabled/disabled state configured `SyncEngine`s.
3483   * `SyncEngine` is no longer an `enum class`, but a `sealed class` instead. e.g. `SyncEngine.HISTORY` is now `SyncEngine.History`.
3484   * `DeviceConstellation#setDeviceNameAsync` now takes a `context` in addition to new `name`.
3485   * `FxaAuthData` now takes an optional `declinedEngines` set of SyncEngines.
3487 # 14.0.1
3489 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v14.0.0...v14.0.1)
3490 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v14.0.1/buildSrc/src/main/java/Dependencies.kt)
3491 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v14.0.1/buildSrc/src/main/java/Gecko.kt)
3492 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v14.0.1/buildSrc/src/main/java/Config.kt)
3494 * **feature-collections**
3495   * Fixed [#4514](https://github.com/mozilla-mobile/android-components/issues/4514): Do not restore parent tab ID for collections.
3497 * **service-glean**
3498   *  PR [#4511](https://github.com/mozilla-mobile/android-components/pull/4511/): Always set 'wasMigrated' to false in the Glean SDK.
3500 # 14.0.0
3502 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v13.0.0...v14.0.0)
3503 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/74?closed=1)
3504 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v14.0.0/buildSrc/src/main/java/Dependencies.kt)
3505 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v14.0.0/buildSrc/src/main/java/Gecko.kt)
3506 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v14.0.0/buildSrc/src/main/java/Config.kt)
3508 * **feature-customtabs**
3509   * Now the color of the tracking protection icon adapts to color of the toolbar.
3511 * **feature-session**, **engine-gecko-nightly** and **engine-gecko-beta**
3512   * Added a way to exposes the same amount of trackers as Firefox desktop has in it tracking protection panel via TrackingProtectionUseCases.
3514   ```kotlin
3515     val useCase = TrackingProtectionUseCases(sessionManager,engine)
3516     useCase.fetchTrackingLogs(
3517         session,
3518         onSuccess = { trackersLog ->
3519             // A list of all the tracker logger for this session
3520         },
3521         onError = { throwable ->
3522             //A throwable indication what went wrong
3523         }
3524     )
3525   ```
3527 * **browser-toolbar**
3528   * Resized icons on the toolbar see [#4490](https://github.com/mozilla-mobile/android-components/issues/4490) for more information.
3529   * Added a way to customize the color of the tracking protection icon via BrowserToolbar.
3530   ```kotlin
3531   val toolbar = BrowserToolbar(context)
3532   toolbar.trackingProtectionColor = Color.BLUE
3533   ```
3535 * **All components**
3536   * Increased `androidx.browser` version to `1.2.0-alpha07`.
3538 * **feature-media**
3539   * Playback will now be stopped and the media notification will get removed if the app's task is getting removed (app is swiped away in task switcher).
3541 * **feature-pwa**
3542   * Adds `WebAppHideToolbarFeature.onToolbarVisibilityChange` to be notified when the toolbar is shown or hidden.
3544 * **engine-gecko-nightly**
3545   * Added the ability to exfiltrate Gecko categorical histograms.
3547 * **support-webextensions**
3548   * πŸ†• New component containing building blocks for features implemented as web extensions.
3550 * **lib-push-amazon**
3551   * Fixed usage of cache version of registration ID in situations when app data is deleted.
3553 * **tools-detekt**
3554   * New (internal-only) component with custom detekt rules.
3556 * **service-glean**
3557   * βš  **This is a breaking change**: Glean.initialize() must be called on the main thread.
3559 # 13.0.0
3561 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v12.0.0...v13.0.0)
3562 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/73?closed=1)
3563 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v13.0.0/buildSrc/src/main/java/Dependencies.kt)
3564 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v13.0.0/buildSrc/src/main/java/Gecko.kt)
3565 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v13.0.0/buildSrc/src/main/java/Config.kt)
3567 * **All components**
3568   * Updated Kotlin version from `1.3.40` to `1.3.50`.
3569   * Updated Kotlin Coroutine library version from `1.2.2` to `1.3.0`.
3571 * **browser-session**
3572   * Clear session icon only if URL host changes.
3574 * **feature-pwa**
3575   * Adds `WebAppUseCases.isInstallable` to check if the current session can be installed as a Progressive Web App.
3577 * **feature-downloads**
3578   *  βš οΈ **This is a breaking change**: The `feature-downloads` component has been migrated to `browser-state` from `browser-session`. Therefore creating a `DownloadsFeature` requires a `BrowserStore` instance (instead of a `SessionManager` instance) and a `DownloadsUseCases` instance now.
3580 * **feature-contextmenu**
3581   *  βš οΈ **This is a breaking change**: The `feature-contextmenu` component has been migrated to `browser-state` from `browser-session`. Therefore creating a `ContextMenuFeature` requires a `BrowserStore` instance (instead of a `SessionManager` instance) and a `ContextMenuUseCases` instance now.
3583 * **service-glean**
3584   * βš οΈ **This is a breaking change**: applications need to use `ConceptFetchHttpUploader` for overriding the ping uploading mechanism instead of directly using `concept-fetch` implementations.
3586 * **feature-tabs**
3587   * βš οΈ **This is a breaking change**: Methods that have been accepting a parent `Session` parameter now expect the parent id (`String`).
3589 * **browser-menu**
3590    * Adds the ability to create a BrowserMenuImageSwitch, a BrowserMenuSwitch with icon
3592 * **feature-accounts**
3593   * Added ability to configure FxaWebChannelFeature with a set of `FxaCapability`. Currently there's just one: `CHOOSE_WHAT_TO_SYNC`. It defaults to `false`, so if you want "choose what to sync" selection during auth flows, please specify it.
3595 # 12.0.1
3597 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v12.0.0...v12.0.1)
3598 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v12.0.1/buildSrc/src/main/java/Dependencies.kt)
3599 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v12.0.1/buildSrc/src/main/java/Gecko.kt)
3600 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v12.0.1/buildSrc/src/main/java/Config.kt)
3602 * **lib-push-amazon**
3603   * Fixed [#4448](https://github.com/mozilla-mobile/android-components/issues/4458): Clearing app data does not reset the registration ID.
3605 # 12.0.0
3607 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v11.0.0...v12.0.0)
3608 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/72?closed=1)
3609 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v12.0.0/buildSrc/src/main/java/Dependencies.kt)
3610 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v12.0.0/buildSrc/src/main/java/Gecko.kt)
3611 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v12.0.0/buildSrc/src/main/java/Config.kt)
3613 * **browser-engine-gecko-nightly**, **browser-engine-gecko-beta** and **browser-engine-gecko**
3614   * The `TrackingProtectionPolicy.recommended()` and `TrackingProtectionPolicy.strict()`  policies are now aligned with standard and strict (respectively) policies on FireFox desktop, for more details see the [issue #4349](https://github.com/mozilla-mobile/android-components/issues/4349).
3616 * **browser-engine-gecko-nightly** and **browser-engine-gecko-beta**
3617   * The `TrackingProtectionPolicy.select` function now allows you to indicate if `strictSocialTrackingProtection` should be activated or not. When it is active blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the [issue #4320](https://github.com/mozilla-mobile/android-components/issues/4320)
3618   ```kotlin
3619   val policy = TrackingProtectionPolicy.select(
3620     strictSocialTrackingProtection = true
3621   )
3622   ```
3624 * **context-menu**
3625   * Exposed title tag from GV in HitResult. Fixes [#1444]. If title is null or blank the src value is returned for title.
3627 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
3628   * **Merge day!**
3629     * `browser-engine-gecko-release`: GeckoView 69.0
3630     * `browser-engine-gecko-beta`: GeckoView 70.0
3631     * `browser-engine-gecko-nightly`: GeckoView 71.0
3633 * **feature-toolbar**
3634   *  βš οΈ **This is a breaking change**: The `feature-toolbar` component has been migrated to `browser-state` from `browser-session`. Therefore creating a `ToolbarFeature` requires a `BrowserStore` instance instead of a `SessionManager` instance now.
3636 * **lib-crash**
3637   * Now supports Breadcrumbs.  Use the 'recordCrashBreadcrumb()' to record Breadcrumbs if the underlying crash reporter service supports it.
3638   ```kotlin
3639   crashReporter.recordCrashBreadcrumb(
3640       CrashBreadcrumb("Settings button clicked", data, "UI", Level.INFO, Type.USER)
3641   )
3642   ```
3644 * **browser-engine-gecko-nightly** and **browser-engine-gecko-beta**
3645   * The `TrackingProtectionPolicy.strict()` now blocks trackers from the social-tracking-protection-digest256 list, for more details take a look at the [issue #4213](https://github.com/mozilla-mobile/android-components/issues/4213)
3647 * **browser-session**
3648   *  βš οΈ **This is a breaking change**: `getSessionId` and `EXTRA_SESSION_ID` has moved to the `feature-intent` component.
3650 * **feature-intent**
3651   *  βš οΈ **This is a breaking change**: `TabIntentProcessor` has moved to the `processing` sub-package, but is still in the same component.
3653 * **browser-engine-gecko**
3654   * Like with the nightly and beta flavor previously this component now has a hard dependency on the new [universal GeckoView build](https://bugzilla.mozilla.org/show_bug.cgi?id=1508976) that is no longer architecture specific (ARM, x86, ..). With that apps no longer need to specify the GeckoView dependency themselves and synchronize the used version with Android Components. Additionally apps can now make use of [APK splits](https://developer.android.com/studio/build/configure-apk-splits) or [Android App Bundles (AAB)](https://developer.android.com/guide/app-bundle).
3656 * **browser-engine-servo**
3657   * βŒ We removed the `browser-engine-servo` component since it was not being maintained, updated and used.
3659 * **concept-sync**, **service-firefox-accounts**
3660   * βš οΈ **This is a breaking change**:
3661   * `SyncConfig`'s `syncableStores` has been renamed to `supportedEngines`, expressed via new enum type `SyncEngine`.
3662   * `begin*` OAuthAccount methods now return an `AuthFlowUrl`, which encapsulates an OAuth state identifier.
3663   * `AccountObserver:onAuthenticated` method now has `authType` parameter (instead of `newAccount`), which describes in detail what caused an authentication.
3664   * `GlobalSyncableStoreProvider.configureStore` now takes a pair of `Pair<SyncEngine, SyncableStore>`, instead of allowing arbitrary string names for engines.
3665   * `GlobalSyncableStoreProvider.getStore` is no longer part of the public API.
3667 * **feature-push**
3668   * Added more logging into `AutoPushFeature` to aid in debugging in release builds.
3670 * **support-ktx**
3671   * Added variant of `Flow.ifChanged()` that takes a mapping function in order to filter items where the mapped value has not changed.
3673 * **feature-pwa**
3674   * Adds the ability to create a basic shortcut with a custom label
3676 * **browser-engine-gecko-nightly**
3677   * Adds support for exposing Gecko scalars through the Glean SDK. See [bug 1579365](https://bugzilla.mozilla.org/show_bug.cgi?id=1579365) for details.
3679 * **support-utils**
3680   * `Intent.asForegroundServicePendingIntent(Context)` extension method to create pending intent for the service that will play nicely with background execution limitations introduced in Android O (e.g. foreground service).
3682 * **concept-sync**
3683   * βš οΈ **This is a breaking change**: `action` param of `AuthType.OtherExternal` is now optional. Missing `action` indicates that we really don't know what external authType we've hit.
3685 # 11.0.0
3687 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v10.0.0...v11.0.0)
3688 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/71?closed=1)
3689 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v11.0.0/buildSrc/src/main/java/Dependencies.kt)
3690 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v11.0.0/buildSrc/src/main/java/Gecko.kt)
3691 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v11.0.0/buildSrc/src/main/java/Config.kt)
3693 * **browser-icons**
3694   * Ensures icons are not cached on the disk in private sessions.
3696 * **browser-menu**
3697   * Added `startImage` to Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted
3698   * Highlight properties of HighlightableMenuItem `startImage` and `endImage` are now both optional
3700 * **lib-state**
3701   * Added `Store` extensions to observe `State` using Kotlin's `Flow` API: `Store.flow()`, `Store.flowScoped()`.
3703 * **support-ktx**
3704   * Added property delegates to work with `SharedPreferences`.
3705   * Added `Flow.ifChanged()` operator for filtering a `Flow` based on whether a value has changed from the previous one (e.g. `A, A, B, C, A -> A, B, C, A`).
3707 * **feature-customtabs**
3708   * Added `CustomTabsServiceStore` to track custom tab data in `AbstractCustomTabsService`.
3710 * **feature-pwa**
3711   * Added support for hiding the toolbar in a Trusted Web Activity.
3712   * Added `TrustedWebActivityIntentProcessor` to process TWA intents.
3713   * Added `CustomTabState.trustedOrigins` extension method to turn the verification state of a custom tab into a list of origins.
3714   * Added `WebAppHideToolbarFeature.onTrustedScopesChange` to change the trusted scopes after the feature is created.
3716 * **service-telemetry**
3717   * This component is now deprecated. Please use the [Glean SDK](https://mozilla.github.io/glean/book/index.html) instead. This library will not be removed until all projects using it start using the Glean SDK.
3719 * **browser-session**, **feature-intent**
3720   * βš οΈ **This is a breaking change**: Moved `Intent` related code from `browser-session` to `feature-intent`.
3722 * **feature-media**
3723   * The `Intent` launched from the media notification now has its action set to `MediaFeature.ACTION_SWITCH_TAB`. In addition to that the extra `MediaFeature.EXTRA_TAB_ID` contains the id of the tab the media notification is displayed for.
3725 # 10.0.1
3727 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v10.0.0...v10.0.1)
3728 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v10.0.1/buildSrc/src/main/java/Dependencies.kt)
3729 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v10.0.1/buildSrc/src/main/java/Gecko.kt)
3730 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v10.0.1/buildSrc/src/main/java/Config.kt)
3732 * **browser-menu**
3733   * Added `startImage` to Highlight of HighlightableMenuItem, which allows changing the startImage in addition to the endImage when highlighted
3734   * Highlight properties of HighlightableMenuItem `startImage` and `endImage` are now both optional
3736 * Imported latest state of translations.
3738 # 10.0.0
3740 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v9.0.0...v10.0.0)
3741 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/69?closed=1)
3742 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v10.0.0/buildSrc/src/main/java/Dependencies.kt)
3743 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v10.0.0/buildSrc/src/main/java/Gecko.kt)
3744 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v10.0.0/buildSrc/src/main/java/Config.kt)
3746 * **feature-toolbar**
3747   * Toolbar Menu is now closed on exiting the app.
3749 * **support-test-appservices**
3750   * πŸ†• New component for synchronizing Application Services' unit testing dependencies used in Android Components.
3752 * **service-location**
3753   * Added `RegionSearchLocalizationProvider` - A `SearchLocalizationProvider` implementation that uses a `MozillaLocationService` instance to do a region lookup via GeoIP.
3754   * βš οΈ **This is a breaking change**: An implementation of `SearchLocalizationProvider` now returns a `SearchLocalization` data class instead of multiple properties.
3756 * **service-glean**
3757   * βš οΈ **This is a breaking change**: `Glean.handleBackgroundEvent` is now an internal API.
3758   * Added a `QuantityMetricType` (for internal use by Gecko metrics only).
3760 * **browser-engine-gecko(-beta/nightly)**, **concept-engine**
3761   * Added simplified `Media.state` derived from `Media.playbackState` events.
3763 * **lib-push-adm**, **lib-push-firebase**, **concept-push**
3764   * Added `isServiceAvailable` to signify if the push service is supported on the device.
3766 * **concept-engine**
3767   * Added `WebNotification` data class for the web notifications API.
3769 * **browser-engine-system**
3770   * Fixed issue [4191](https://github.com/mozilla-mobile/android-components/issues/4191) where the `recommended()` tracking category was not getting applied for `SystemEngine`.
3772 * **concept-engine**, **browser-engine-gecko-nightly** and **browser-engine-gecko-beta**:
3773   * βš οΈ **This is a breaking change**: `TrackingProtectionPolicy` does not have a `safeBrowsingCategories` anymore, Safe Browsing is now a separate setting on the Engine level. To change the default value of `SafeBrowsingPolicy.RECOMMENDED` you have set it through `engine.settings.safeBrowsingPolicy`.
3774   * This decouples the tracking protection API and safe browsing from each other so you can change the tracking protection policy without affecting your safe browsing policy as described in this issue [#4190](https://github.com/mozilla-mobile/android-components/issues/4190).
3775   * βš οΈ **Alert for SystemEngine consumers**: The Safe Browsing API is not yet supported on this engine, this will be covered on [#4206](https://github.com/mozilla-mobile/android-components/issues/4206). If you use this API you will get a `UnsupportedSettingException`, however you can use a manifest tag to activate it.
3777   ```xml
3778     <manifest>
3779     <application>
3780         <meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
3781                    android:value="true" />
3782         ...
3783      </application>
3784     </manifest>
3785   ```
3787 # 9.0.0
3789 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v8.0.0...v9.0.0)
3790 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/68?closed=1)
3791 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v9.0.0/buildSrc/src/main/java/Dependencies.kt)
3792 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v9.0.0/buildSrc/src/main/java/Gecko.kt)
3793 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v9.0.0/buildSrc/src/main/java/Config.kt)
3795 * **browser-menu**
3796   * Updated the styling of the menu to not have padding on top or bottom. Also modified size of `BrowserMenuItemToolbar` to match `BrowserToolbar`'s height
3798 * **feature-media**
3799   * Do not display title/url/icon of website in media notification if website is opened in private mode.
3801 * **concept-engine** and **browser-session**
3802   * βš οΈ **This is a breaking change**: `TrackingProtectionPolicy` removes the `categories` property to expose two new ones `trackingCategories: Array<AntiTrackingCategory>` and `safeBrowsingCategories: Array<SafeBrowsingCategory>` to separate the tracking protection categories from the safe browsing ones.
3803   * βš οΈ **This is a breaking change**: `TrackingProtectionPolicy.all()` has been replaced by `TrackingProtectionPolicy.strict()` to have similar naming conventions with GeckoView api.
3804   * βš οΈ **This is a breaking change**: `Tracker#categories` has been replaced by `Tracker#trackingCategories` and `Tracker#cookiePolicies` to better report blocked content see [#4098](https://github.com/mozilla-mobile/android-components/issues/4098).
3805   * Added: `Session#trackersLoaded` A list of `Tracker`s that could be blocked but has been loaded in this session.
3806   * Added: `Session#Observer#onTrackerLoaded` Notifies that a tracker that could be blocked has been loaded.
3808 * **browser-toolbar**
3809   * HTTP sites are now marked as insecure with a broken padlock icon, rather than a globe icon. Apps can revert to the globe icon by using a custom `BrowserToolbar.siteSecurityIcon`.
3811 * **service-firefox-accounts**, **concept-sync**
3812   * `FxaAccountManager`, if configured with `DeviceCapability.SEND_TAB`, will now automatically refresh device constellation state and poll for device events during initialization and login.
3813   * `FxaAccountManager.syncNowAsync` can now receive a `debounce` parameter, allowing consumers to specify debounce behaviour of their sync requests.
3814   * βš οΈ **This is a breaking change:**
3815   * Removed public methods from `DeviceConstellation` and its implementation in `FxaDeviceConstellation`: `fetchAllDevicesAsync`, `startPeriodicRefresh`, `stopPeriodicRefresh`.
3816   * `DeviceConstellation#refreshDeviceStateAsync` was renamed to `refreshDevicesAsync`: no longer polls for device events, only updates device states (e.g. new devices, name changes)
3817   * `pollForEventsAsync` no longer returns the events. Use the observer API instead:
3818   ```kotlin
3819   val deviceConstellation = autheneticatedAccount()?.deviceConstellation() ?: return
3820   deviceConstellation.registerDeviceObserver(
3821     object: DeviceEventsObserver {
3822       override fun onEvents(events: List<DeviceEvent>) {
3823           // Process device events here.
3824       }
3825     }, lifecycleOwner, false)
3826   // Poll for events.
3827   deviceConstellation.pollForEventsAsync().await()
3828   ```
3830 * **browser-session**
3831   * Removed deprecated `CustomTabConfig` helpers. Use the equivalent methods in **feature-customtabs** instead.
3833 * **support-ktx**
3834   * Removed deprecated methods that have equivalents in Android KTX.
3836 * **concept-sync**, **service-firefox-account**
3837   * βš οΈ **This is a breaking change**
3838   * In `OAuthAccount` (and by extension, `FirefoxAccount`) `beginOAuthFlowAsync` no longer need to specify `wantsKeys` parameter; it's automatically inferred from the requested `scopes`.
3839   * Three new device types now available: `tablet`, `tv`, `vr`.
3841 # 8.0.0
3843 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v7.0.0...v8.0.0)
3844 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/67?closed=1)
3845 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v8.0.0/buildSrc/src/main/java/Dependencies.kt)
3846 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v8.0.0/buildSrc/src/main/java/Gecko.kt)
3847 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v8.0.0/buildSrc/src/main/java/Config.kt)
3849 * **service-glean**
3850   * Timing distributions now use a functional bucketing algorithm that does not require fixed limits to be defined up front.
3852 * **support-android-test**
3853   * Added `WebserverRule` - a junit rule that will run a webserver during tests serving content from assets in the test package ([#3893](https://github.com/mozilla-mobile/android-components/issues/3893)).
3855 * **browser-engine-gecko-nightly**
3856   * The component now exposes an implementation of the Gecko runtime telemetry delegate, `glean.GeckoAdapter`, which can be used to collect Gecko metrics with the Glean SDK.
3858 * **browser-engine-gecko-beta**
3859   * The component now handles situations where the Android system kills the content process (without killing the main app process) in order to reclaim resources. In those situations the component will automatically recover and restore the last known state of those sessions.
3861 * **browser-toolbar**
3862   * Changed `BrowserToolbar.siteSecurityColor` to use no icon color filter when the color is set to `Color.TRANSPARENT`.
3863   * Added `BrowserToolbar.siteSecurityIcon` to use custom security icons with multiple colors in the toolbar.
3865 * **feature-sendtab**
3866   * Added a `SendTabFeature` that observes account device events with optional support for push notifications.
3868   ```kotlin
3869   SendTabFeature(
3870     context,
3871     accountManager,
3872     pushFeature, // optional
3873     pushService // optional; if you want the service to also be started/stopped based on account changes.
3874     onTabsReceiver = { from, tabs -> /* Do cool things here! */ }
3875   )
3876   ```
3878 * **feature-media**
3879   * `MediaFeature` is no longer showing a notification for playing media with a very short duration.
3880   * Lowered priority of media notification channel to avoid the media notification making any sounds itself.
3882 # 7.0.0
3884 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v6.0.2...v7.0.0)
3885 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/66?closed=1)
3886 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v7.0.0/buildSrc/src/main/java/Dependencies.kt)
3887 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v7.0.0/buildSrc/src/main/java/Gecko.kt)
3888 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v7.0.0/buildSrc/src/main/java/Config.kt)
3890 * **browser-menu**
3891   * βš οΈ **This is a breaking change**: `BrowserMenuHighlightableItem` now has a ripple effect and includes an example of how to pass in a drawable properly to also include a ripple when highlighted
3893 * **feature-accounts**
3894     * βš οΈ **This is a breaking change**:
3895     * The `FirefoxAccountsAuthFeature` no longer needs an `TabsUseCases`, instead is taking a lambda to
3896       allow applications to decide which action should be taken. This fixes [#2438](https://github.com/mozilla-mobile/android-components/issues/2438) and [#3272](https://github.com/mozilla-mobile/android-components/issues/3272).
3898     ```kotlin
3899      val feature = FirefoxAccountsAuthFeature(
3900          accountManager,
3901          redirectUrl
3902      ) { context, authUrl ->
3903         // passed-in context allows easily opening new activities for handling urls.
3904         tabsUseCases.addTab(authUrl)
3905      }
3907      // ... elsewhere, in the UI code, handling click on button "Sign In":
3908      components.feature.beginAuthentication(activityContext)
3909     ```
3911 * **browser-engine-gecko-nightly**
3912   * Now supports window requests. A new tab will be opened for `target="_blank"` links and `window.open` calls.
3914 * **browser-icons**
3915   * Handles low-memory scenarios by reducing memory footprint.
3917 * **feature-app-links**
3918   * Fixed [#3944](https://github.com/mozilla-mobile/android-components/issues/3944) causing third-party apps being opened when links with a `javascript` scheme are clicked.
3920 * **feature-session**
3921   * βš οΈ **This is a breaking change**:
3922   * The `WindowFeature` no longer needs an engine. It can now be created using just:
3923   ```kotlin
3924      val windowFeature = WindowFeature(components.sessionManager)
3925   ```
3927 * **feature-pwa**
3928   * Added full support for pinning websites to the home screen.
3929   * Added full support for Progressive Web Apps, which can be pinned and open in their own window.
3931 * **service-glean**
3932   * Fixed a bug in`TimeSpanMetricType` that prevented multiple consecutive `start()`/`stop()` calls. This resulted in the `glean.baseline.duration` being missing from most [`baseline`](https://mozilla.github.io/glean/book/user/pings/baseline.html) pings.
3934 * **service-firefox-accounts**
3935   * βš οΈ **This is a breaking change**: `AccountObserver.onAuthenticated` now helps observers distinguish when an account is a new authenticated account one with a second `newAccount` boolean parameter.
3937 * **concept-sync**, **service-firefox-accounts**:
3938   * βš οΈ **This is a breaking change**: Added `OAuthAccount@disconnectAsync`, which replaced `DeviceConstellation@destroyCurrentDeviceAsync`.
3940 * **lib-crash**
3941   * βš οΈ **Known issue**: Sending a crash using the `MozillaSocorroService` with GeckoView 69.0 or 68.0, will lead to a `NoSuchMethodError` when using this particular version of android components. See [#4052](https://github.com/mozilla-mobile/android-components/issues/4052).
3943 # 6.0.2
3945 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v6.0.1...v6.0.2)
3946 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v6.0.2/buildSrc/src/main/java/Dependencies.kt)
3947 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v6.0.2/buildSrc/src/main/java/Gecko.kt)
3948 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v6.0.2/buildSrc/src/main/java/Config.kt)
3950 * **service-glean**
3951   * Fixed a bug in`TimeSpanMetricType` that prevented multiple consecutive `start()`/`stop()` calls. This resulted in the `glean.baseline.duration` being missing from most [`baseline`](https://mozilla.github.io/glean/book/user/pings/baseline.html) pings.
3953 # 6.0.1
3955 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v6.0.0...v6.0.1)
3956 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v6.0.1/buildSrc/src/main/java/Dependencies.kt)
3957 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v6.0.1/buildSrc/src/main/java/Gecko.kt)
3958 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v6.0.1/buildSrc/src/main/java/Config.kt)
3960 * **feature-app-links**
3961   * Fixed [#3944](https://github.com/mozilla-mobile/android-components/issues/3944) causing third-party apps being opened when links with a `javascript` scheme are clicked.
3963 * Imported latest state of translations.
3965 # 6.0.0
3967 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v5.0.0...v6.0.0)
3968 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/65?closed=1)
3969 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v6.0.0/buildSrc/src/main/java/Dependencies.kt)
3970 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v6.0.0/buildSrc/src/main/java/Gecko.kt)
3971 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v6.0.0/buildSrc/src/main/java/Config.kt)
3973 * **support-utils**
3974   * Fixed [#3871](https://github.com/mozilla-mobile/android-components/issues/3871) autocomplete incorrectly fills urls that contains a port number.
3976 * **feature-readerview**
3977   * Fixed [#3864](https://github.com/mozilla-mobile/android-components/issues/3864) now minus and plus buttons have the same size on reader view.
3979 * **browser-engine-gecko-nightly**
3980   * The component now handles situations where the Android system kills the content process (without killing the main app process) in order to reclaim resources. In those situations the component will automatically recover and restore the last known state of those sessions.
3981   * Now supports window requests. A new tab will be opened for `target="_blank"` links and `window.open` calls.
3983 * **service-location**
3984   * πŸ†• A new component for accessing Mozilla's and other location services.
3986 * **feature-prompts**
3987   * Improved month picker UI, now we have the same widget as Fennec.
3989 * **support-ktx**
3990   * Deprecated `ViewGroup.forEach` in favour of Android Core KTX.
3991   * Deprecated `Map.toBundle()` in favour of Android Core KTX `bundleOf`.
3993 * **lib-state**
3994   * Migrated `Store.broadcastChannel()` to `Store.channel()`returning a `ReceiveChannel` that can be read by only one receiver. Broadcast channels have a more complicated lifetime that is not needed in most use cases. For multiple receivers multiple channels can be created from the `Store` or Kotlin's `ReceiveChannel.broadcast()` extension method can be used.
3996 * **support-android-test**
3997   * Added `LeakDetectionRule` to install LeakCanary when running instrumented tests. If a leak is found the test will fail and the test report will contain the leak trace.
3999 * **lib-push-amazon**
4000   * πŸ†• Added a new component for Amazon Device Messaging push support.
4002 * **browser-icons**
4003   * Changed the maximum size for decoded icons. Icons are now scaled to the target size to save memory.
4005 * **service-firefox-account**
4006  * Added `isSyncActive(): Boolean` method to `FxaAccountManager`
4008 * **feature-customtabs**
4009   * `CustomTabsToolbarFeature` now optionally takes `Window` as a parameter. It will update the status bar color to match the toolbar color.
4010   * Custom tabs can now style the navigation bar using `CustomTabsConfig.navigationBarColor`.
4012 * **feature-sendtab**
4013   * πŸ†• New component for send tab use cases.
4015   ```kotlin
4016     val sendTabUseCases = SendTabUseCases(accountManager)
4018     // Send to a particular device
4019     sendTabUseCases.sendToDeviceAsync("1234", TabData("Mozilla", "https://mozilla.org"))
4021     // Send to all devices
4022     sendTabUseCases.sendToAllAsync(TabData("Mozilla", "https://mozilla.org"))
4024     // Send multiple tabs to devices works too..
4025     sendTabUseCases.sendToDeviceAsync("1234", listof(tab1, tab2))
4026     sendTabUseCases.sendToAllAsync(listof(tab1, tab2))
4027   ```
4029 * **support-ktx**
4030   * Added `Collection.crossProduct` to retrieve the cartesian product of two `Collections`.
4032 * **service-glean**
4033   * βš οΈ **This is a breaking change**: `Glean.enableTestingMode` is now `internal`. Tests can use the `GleanTestRule` to enable testing mode. [Updated docs available here](https://mozilla.github.io/glean/book/user/testing-metrics.html).
4035 * **feature-push**
4036   * Added default arguments when registering for subscriptions/messages.
4038 # 5.0.0
4040 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v4.0.0...v5.0.0)
4041 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/64?closed=1)
4042 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v5.0.0/buildSrc/src/main/java/Dependencies.kt)
4043 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v5.0.0/buildSrc/src/main/java/Gecko.kt)
4044 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v5.0.0/buildSrc/src/main/java/Config.kt)
4046 * **All components**
4047   * Increased `compileSdkVersion` to 29 (Android Q)
4049 * **feature-tab**
4050   * βš οΈ **This is a breaking change**: Now `TabsUseCases.SelectTabUseCase` is an interface, if you want to rely on its previous behavior you could keep using `TabsUseCases.selectTab` or use `TabsUseCases.DefaultSelectTabUseCase`.
4052 * **feature-awesomebar**
4053   * `SessionSuggestionProvider` now have a new parameter `excludeSelectedSession`, to ignore the selected session on the suggestions.
4055 * **concept-engine** and **browser-session**
4056   * βš οΈ **This is a breaking change**: Function signature changed from `Session.Observer.onTrackerBlocked(session: Session, blocked: String, all: List<String>) = Unit` to `Session.Observer.onTrackerBlocked(session: Session, tracker: Tracker, all: List<Tracker>) = Unit`
4057   * βš οΈ **This is a breaking change**: Function signature changed from `EngineSession.Observer.onTrackerBlocked(url: String) = Unit` to `EngineSession.Observer.onTrackerBlocked(tracker: Tracker) = Unit`
4058   * Added: To provide more details about a blocked content, we introduced a new class called `Tracker` this contains information like the `url` and `categories` of the `Tracker`. Among the categories we have `Ad`, `Analytic`, `Social`,`Cryptomining`, `Fingerprinting` and `Content`.
4060 * **browser-icons**
4061   * Added `BrowserIcons.loadIntoView` to automatically load an icon into an `ImageView`.
4063 * **browser-session**
4064   * Added `IntentProcessor` interface to represent a class that processes intents to create sessions.
4065   * Deprecated `CustomTabConfig.isCustomTabIntent` and `CustomTabConfig.createFromIntent`. Use `isCustomTabIntent` and `createFromCustomTabIntent` in feature-customtabs instead.
4067 * **feature-customtabs**
4068   * Added `CustomTabIntentProcessor` to create custom tab sessions from intents.
4069   * Added `isCustomTabIntent` to check if an intent is for creating custom tabs.
4070   * Added `createCustomTabConfigFromIntent` to create a `CustomTabConfig` from a custom tab intent.
4072 * **feature-downloads**
4073   * `FetchDownloadManager` now determines the filename during the download, resulting in more accurate filenames.
4075 * **feature-intent**
4076   * Deprecated `IntentProcessor` class and moved some of its code to the new `TabIntentProcessor`.
4078 * **feature-push**
4079   * Updated the default autopush service endpoint to `updates.push.services.mozilla.com`.
4081 * **service-glean**
4082   * Hyphens `-` are now allowed in labels for metrics.  See [1566764](https://bugzilla.mozilla.org/show_bug.cgi?id=1566764).
4083   * βš οΈ **This is a breaking change**: Timespan values are returned in their configured time unit in the testing API.
4085 * **lib-state**
4086   * Added ability to pause/resume observing a `Store` via `pause()` and `resume()` methods on the subscription
4087   * When using `observeManually` the returned `Subscription` is in paused state by default.
4088   * When binding a subscription to a `LifecycleOwner` then this subscription will automatically paused and resumed based on whether the lifecycle is in STARTED state.
4089   * When binding a subscription to a `View` then this subscription will be paused until the `View` gets attached.
4090   * Added `Store.broadcastChannel()` to observe state from a coroutine sequentially ordered.
4091   * Added helpers to process states coming from a `Store` sequentially via `Fragment.consumeFrom(Store)` and `View.consumeFrom(Store)`.
4093 * **support-ktx**
4094   * βš οΈ **This is a breaking behavior change**: `JSONArray.mapNotNull` is now an inline function, changing the behavior of the `return` keyword within its lambda.
4095   * Added `View.toScope()` to create a `CoroutineScope` that is active as long as the `View` is attached. Once the `View` gets detached the `CoroutineScope` gets cancelled automatically.  By default coroutines dispatched on the created [CoroutineScope] run on the main dispatcher
4097 * **concept-push**, **lib-push-firebase**, **feature-push**
4098   * Added `deleteToken` to the PushService interface.
4099   * Added the implementation for it to Firebase Push implementation.
4100   * Added `forceRegistrationRenewal` to the AutopushFeature for situations where our current registration token may be invalid for us to use.
4102 * **service-firefox-accounts**
4103   * Added `AccountMigration`, which may be used to query trusted FxA Auth providers and automatically sign-in into available accounts.
4105 # 4.0.1
4107 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v4.0.0...v4.0.1)
4108 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v4.0.1/buildSrc/src/main/java/Dependencies.kt)
4109 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v4.0.1/buildSrc/src/main/java/Gecko.kt)
4110 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v4.0.1/buildSrc/src/main/java/Config.kt)
4112 * **service-glean**
4113   * Hyphens `-` are now allowed in labels for metrics.  See [1566764](https://bugzilla.mozilla.org/show_bug.cgi?id=1566764).
4115 * Imported latest state of translations.
4117 * **support-rusthttp**
4118   * βš οΈ **This is a breaking change**: The application-services (FxA, sync, push) code now will send HTTP requests through a kotlin-provided HTTP stack in all configurations, however it requires configuration at startup. This may be done via the neq `support-rusthttp` component as follows:
4120   ```kotlin
4121   import mozilla.components.support.rusthttp.RustHttpConfig
4122   // Note: other implementions of `Client` from concept-fetch are fine as well.
4123   import mozilla.components.lib.fetch.httpurlconnection.HttpURLConnectionClient
4124   // some point before calling rust code that makes HTTP requests.
4125   RustHttpConfig.setClient(lazy { HttpURLConnectionClient() })
4126   ```
4128   * Note that code which uses a custom megazord **must** call this after initializing the megazord.
4131 # 4.0.0
4133 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v3.0.0...v4.0.0)
4134 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/63?closed=1)
4135 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v4.0.0/buildSrc/src/main/java/Dependencies.kt)
4136 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v4.0.0/buildSrc/src/main/java/Gecko.kt)
4137 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v4.0.0/buildSrc/src/main/java/Config.kt)
4139 * **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
4140   * **Merge day!**
4141     * `browser-engine-gecko-release`: GeckoView 68.0
4142     * `browser-engine-gecko-beta`: GeckoView 69.0
4143     * `browser-engine-gecko-nightly`: GeckoView 70.0
4145 * **browser-engine-gecko-beta**
4146   * Like with the nightly flavor previously (0.55.0) this component now has a hard dependency on the new [universal GeckoView build](https://bugzilla.mozilla.org/show_bug.cgi?id=1508976) that is no longer architecture specific (ARM, x86, ..). With that apps no longer need to specify the GeckoView dependency themselves and synchronize the used version with Android Components. Additionally apps can now make use of [APK splits](https://developer.android.com/studio/build/configure-apk-splits) or [Android App Bundles (AAB)](https://developer.android.com/guide/app-bundle).
4148 * **feature-media**
4149   * Added `MediaNotificationFeature` - a feature implementation to show an ongoing notification (keeping the app process alive) while web content is playing media.
4151 * **feature-downloads**
4152   * Added custom notification icon for `FetchDownloadManager`.
4154 * **feature-app-links**
4155   * Added whitelist for schemes of URLs to open with an external app. This defaults to `mailto`, `market`, `sms` and `tel`.
4157 * **feature-accounts**
4158   * βš οΈ **This is a breaking change**: Public API for interacting with `FxaAccountManager` and sync changes
4159   * `FxaAccountManager` now has a new, simplified public API.
4160   * `BackgroundSyncManager` is longer exists; sync functionality exposed directly via `FxaAccountManager`.
4161   * See component's [README](https://github.com/mozilla-mobile/android-components/blob/main/components/service/firefox-accounts/README.md) for detailed description of the new API.
4162   * As part of these changes, token caching issue has been fixed. See [#3579](https://github.com/mozilla-mobile/android-components/pull/3579) for details.
4164 * **concept-engine**, **browser-engine-gecko(-beta/nightly)**.
4165   * Added `TrackingProtectionPolicy.CookiePolicy` to indicate how cookies should behave for a given `TrackingProtectionPolicy`.
4166   * Now `TrackingProtectionPolicy.select` allows you to specify a `TrackingProtectionPolicy.CookiePolicy`, if not specified, `TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS` will be used.
4167   * Behavior change: Now `TrackingProtectionPolicy.none()` will get assigned a `TrackingProtectionPolicy.CookiePolicy.ACCEPT_ALL`, and both `TrackingProtectionPolicy.all()` and `TrackingProtectionPolicy.recommended()` will have a `TrackingProtectionPolicy.CookiePolicy.ACCEPT_NON_TRACKERS`.
4169 * **concept-engine**, **browser-engine-system**
4170   * Added `useWideViewPort` in `Settings` to support the viewport HTML meta tag or if a wide viewport should be used. (Only affects `SystemEngineSession`)
4172 * **browser-session**
4173   * Added `SessionManager.add(List<Session>)` to add a list of `Session`s to the `SessionManager`.
4175 * **feature-tab-collections**
4176   * βš οΈ **These are breaking changes below**:
4177   * `Tab.restore()` now returns a `Session` instead of a `SessionManager.Snapshot`
4178   * `TabCollection.restore()` and `TabCollection.restoreSubset()` now return a `List<Session>` instead of a `SessionManager.Snapshot`
4180 * **support-ktx**
4181   * Added `onNextGlobalLayout` to add a `ViewTreeObserver.OnGlobalLayoutListener` that is only called once.
4183 # 3.0.0
4185 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v2.0.0...v3.0.0)
4186 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/62?closed=1)
4187 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v3.0.0/buildSrc/src/main/java/Dependencies.kt)
4188 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v3.0.0/buildSrc/src/main/java/Gecko.kt)
4189 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v3.0.0/buildSrc/src/main/java/Config.kt)
4191 * **feature-prompts**
4192   * Improved file picker prompt by displaying the option to use the camera to capture images,
4193     microphone to record audio, or video camera to capture a video.
4194   * The color picker has been redesigned based on Firefox for Android (Fennec).
4196 * **feature-pwa**
4197   * Added preliminary support for pinning websites to the home screen.
4199 * **browser-search**
4200   * Loading search engines should no longer deadlock on devices with 1-2 CPUs
4202 * **concept-engine**, **browser-engine-gecko(-beta/nightly)**, **browser-engine-system**
4203   * Added `EngineView.release()` to manually release an `EngineSession` that is currently being rendered by the `EngineView`. Usually an app does not need to call `release()` manually since `EngineView` takes care of releasing the `EngineSession` on specific lifecycle events. However sometimes the app wants to release an `EngineSession` to immediately render it on another `EngineView`; e.g. when transforming a Custom Tab into a regular browser tab.
4205 * **browser-session**
4206   * βš οΈ **This is a breaking change**: Removed "default session" behavior from `SessionManager`. This feature was never used by any app except the sample browser.
4208 * **feature-downloads**
4209   * Added `FetchDownloadManager`, an alternate download manager that uses a fetch `Client` instead of the native Android `DownloadManager`.
4211 * **support-ktx**
4212   * Deprecated `String.toUri()` in favour of Android Core KTX.
4213   * Deprecated `View.isGone` and `View.isInvisible` in favour of Android Core KTX.
4214   * Added `putCompoundDrawablesRelative` and `putCompoundDrawablesRelativeWithIntrinsicBounds`, aliases of `setCompoundDrawablesRelative` that use Kotlin named and default arguments.
4216 # 2.0.0
4218 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v1.0.0...v2.0.0)
4219 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/61?closed=1)
4220 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v2.0.0/buildSrc/src/main/java/Dependencies.kt)
4221 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v2.0.0/buildSrc/src/main/java/Gecko.kt)
4222 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v2.0.0/buildSrc/src/main/java/Config.kt)
4225 * **browser-toolbar**
4226   * Adds `focus()` which provides a hook for calling `editMode.focus()` to focus the edit mode `urlView`
4228 * **browser-awesomebar**
4229   * Updated `DefaultSuggestionViewHolder` to have a style more consistent with Fenix mocks.
4230   * Fixed a bug with `InlineAutocompleteEditText` where the cursor would disappear if a user cleared an suggested URL.
4232 * **lib-state**
4233   * A new component for maintaining application, screen or component state via a redux-style `Store`. This component provides the architectural foundation for the `browser-state` component (in development).
4235 * **feature-downloads**
4236   * `onDownloadCompleted` no longer receives the download object and ID.
4238 * **support-ktx**
4239   * Deprecated `Resource.pxToDp`.
4240   * Added `Int.dpToPx` to convert from density independent pixels to an int representing screen pixels.
4241   * Added `Int.dpToFloat` to convert from density independent pixels to a float representing screen pixels.
4243 * **support-ktx**
4244   * Added `Context.isScreenReaderEnabled` extension to check if TalkBack service is enabled.
4246 * **browser-icons**
4247   * The component now ships with the [tippy-top-sites](https://github.com/mozilla/tippy-top-sites) top 200 list for looking up icon resources.
4249 * **concept-engine**, **browser-engine-gecko(-beta/nightly)**, **feature-session**, **feature-tabs**
4250   * Added to support for specifying additional flags when loading URLs. This can be done using the engine session directly, as well as via use cases:
4252   ```kotlin
4253   // Bypass cache
4254   sessionManager.getEngineSession().loadUrl(url, LoadUrlFlags.select(LoadUrlFlags.BYPASS_CACHE))
4256   // Bypass cache and proxy
4257   sessionUseCases.loadUrl.invoke(url, LoadUrlFlags.select(LoadUrlFlags.BYPASS_CACHE, LoadUrlFlags.BYPASS_PROXY))
4258   ```
4260 # 1.0.0
4262 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v0.56.0...v1.0.0)
4263 * [Milestone](https://github.com/mozilla-mobile/android-components/milestone/60?closed=1)
4264 * [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v1.0.0/buildSrc/src/main/java/Dependencies.kt)
4265 * [Gecko](https://github.com/mozilla-mobile/android-components/blob/v1.0.0/buildSrc/src/main/java/Gecko.kt)
4266 * [Configuration](https://github.com/mozilla-mobile/android-components/blob/v1.0.0/buildSrc/src/main/java/Config.kt)
4268 * πŸ›‘ Removed deprecated components (See [blog posting](https://mozac.org/2019/05/23/deprecation.html)):
4269   * feature-session-bundling
4270   * ui-progress
4271   * ui-doorhanger
4273 * **concept-engine**, **browser-engine-gecko(-beta/nightly)**, **browser-engine-system**
4274   * Added `Engine.version` property (`EngineVersion`) for printing and comparing the version of the used engine.
4276 * **browser-menu**
4277   * Added `endOfMenuAlwaysVisible` property/parameter to `BrowserMenuBuilder` constructor and to `BrowserMenu.show` function.
4278     When is set to true makes sure the bottom of the menu is always visible, this allows use cases like [#3211](https://github.com/mozilla-mobile/android-components/issues/3211).
4279   * Added `onDimiss` parameter to `BrowserMenu.show` function, called when the menu is dismissed.
4280   * Changed `BrowserMenuHighlightableItem` constructor to allow for dynamically toggling the highlight with `invalidate()`.
4282 * **browser-toolbar**
4283   * Added highlight effect to the overflow menu button when a highlighted `BrowserMenuHighlightableItem` is present.
4285 * **feature-tab-collections**
4286   * Tabs can now be restored without restoring the ID of the `Session` by using the `restoreSessionId` flag. An app may
4287     prefer to use new IDs if it expects sessions to get restored multiple times - otherwise breaking the promise of a
4288     unique ID.
4290 * **browser-search**
4291   * Added `getProvidedDefaultSearchEngine` to `SearchEngineManager` to return the provided default search engine or the first
4292     search engine if the default is not set. This allows use cases like [#3344](https://github.com/mozilla-mobile/android-components/issues/3344).
4294 * **feature-tab-collections**
4295   * Behavior change: `TabCollection` instances returned by `TabCollectionStorage` are now ordered by the last time they have been updated (instead of the time they have been created).
4297 * **lib-crash**
4298   * [Restrictions to background activity starts](https://developer.android.com/preview/privacy/background-activity-starts) in Android Q+ make it impossible to launch the crash reporter prompt after certain crashes. In those situations the library will show a "crash notification" instead. Clicking on the notification will launch the crash reporter prompt allowing the user to submit a crash report.
4300 ----
4302 For older versions see the [changelog archive]({{ site.baseurl }}/changelog/archive).