changelog.md 114 KB
Newer Older
1
2
3
4
5
6
---
layout: page
title: Changelog
permalink: /changelog/
---

7
# 39.0.0-SNAPSHOT (In Development)
8

9
10
* [Commits](https://github.com/mozilla-mobile/android-components/compare/v38.0.0...master)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/98?closed=1)
Christian Sadilek's avatar
Christian Sadilek committed
11
12
13
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/master/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/master/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/master/buildSrc/src/main/java/Config.kt)
14

15
16
17
* **feature-media**
  * Muted media will not start the media service anymore, causing no media notification to be shown and no audio focus getting requested.

18
19
20
* **feature-fullscreen**
  * ⚠️ **This is a breaking change**: Added `viewportFitChanged` to support Android display cutouts.

21
22
23
24
25
26
27
28
# 38.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v37.0.0...v38.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/97?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v38.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v38.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v38.0.0/buildSrc/src/main/java/Config.kt)

29
30
31
32
33
34
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * **Merge day!**
    * `browser-engine-gecko-release`: GeckoView 75.0
    * `browser-engine-gecko-beta`: GeckoView 76.0
    * `browser-engine-gecko-nightly`: GeckoView 77.0

35
36
37
* **feature-session**
  * ⚠️ **This is a breaking change**: Added optional `customTabSessionId` param to [PictureInPictureFeature] so consumers can use this feature for custom tab sessions.

Jeff Boek's avatar
Jeff Boek committed
38
39
40
* **support-locale**
  * Updates `updateResources` to always update the context configuration

41
42
43
* **feature-toolbar**
  * Added `forceExpand` to [BrowserToolbarBottomBehavior] so consumers can expand the BrowserToolbar on demand.

44
45
46
* **feature-addons**
  * Added `AddonPermissionsAdapter.Style` and `AddonsManagerAdapter.Style` classes to allow UI customization.

47
48
* **service-accounts-push**
  * Fixed a bug where the push subscription was incorrectly cached and caused some `GeneralError`s.
49

50
51
52
53
54
* **feature-addons**
  * Added `DefaultAddonUpdater.UpdateAttemptStorage` allows to query the last known state for a previous attempt to update an add-on.

* **feature-accounts-push**
  * Re-subscribe for Sync push support when notified by `onSubscriptionChanged` events.
55

56
57
58
* **support-migration**
  * ⚠️ **This is a breaking change**: `FennecMigrator` now takes `Lazy` references to storage layers.

59
60
61
* **concept-storage**, **service-sync-logins**
  * 🆕 New API: `PlacesStorage#warmUp`, `SyncableLoginsStorage#warmUp` - allows consumers to ensure that underlying storage database connections are fully established.

62
63
64
* **feature-customtabs**
  * ⚠️ **This is a breaking change**: add parameter `handleError` to `CustomTabWindowFeature` constructor
    * This is used to show an error when the url can't be handled
65
  * `CustomTabIntentProcessor` to support `Browser.EXTRA_HEADERS`.
66

67
68
69
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * Fixed a memory leak when using a `SelectionActionDelegate` on `GeckoEngineView`.

70
71
72
* **feature-share**
  * Added `RecentAppsStorage.deleteRecentApp` and `RecentAppsDao.deleteRecentApp` to allow deleting a `RecentAppEntity`

73
74
* **feature-p2p**
  * Add new `P2PFeature` to send URLs and web pages through peer-to-peer networking.
75

76
77
78
79
80
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly, **browser-engine-system**
  * Added `GeckoEngineView#getInputResult()` to return an EngineView.InputResult indicating how a MotionEvent was handled by an EngineView.

* **concept-engine**
  * Will expose a new `InputResult` enum through `getInputResult()` indicating how an EngineView handled user's MotionEvent.
81
82
  * See above changes to browser-engine-*.

83
84
* **browser-toolbar**
  * `BrowserToolbarBottomBehavior` is now solely responsible to decide if the dynamic nav bar should animate or not.
85
  * See above changes to browser-engine-*, concept-engine.
86
87
88

* **feature-session**
  * `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.
89
  * See above changes to browser-engine-*, concept-engine.
90
  * Added androidx_swiperefreshlayout as a dependency because google_materials dependency was incremented to version 1.1.0 which no longer includes SwipeRefreshLayout
91

92
93
94
95
96
97
* **lib-crash**
  * ⚠️ **This is a breaking change**: added `support-base` dependency.

* **support-base**
  * `CrashReporting` allowing adding support for `submitCaughtException` without `lib-crash` dependency.

98
99
* **browser-tabstray**
 * Added ability to let consumers pass a custom layout of `TabViewHolder` in order to control layout inflation and view binding.
100
101
 * Added an optional URL view to the `TabViewHolder` to display the URL.
 * Will expose a new `layout` parameter which allows consumers to change the tabs tray layout.
102
 * Will only display a URL's hostname instead of the entire URL
103

104
105
106
* **browser-session**
  * ⚠️ **This is a breaking change**: `SessionManager.runWithSessionIdOrSelected` now returns the result from the `block` it executes. This is consistent with `runWithSession`.

107
108
109
* **feature-push**
  * Allow nullable AutoPush messages to be delivered to observers.

Michael Droettboom's avatar
Michael Droettboom committed
110
* **service-glean**
Michael Droettboom's avatar
Michael Droettboom committed
111
  * Glean was updated to v27.1.0
Michael Droettboom's avatar
Michael Droettboom committed
112
    * **Breaking change:** The regular expression used to validate labels is stricter and more correct.
Michael Droettboom's avatar
Michael Droettboom committed
113
    * 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))
Michael Droettboom's avatar
Michael Droettboom committed
114
115
116
117
118
    * Add more information about pings to markdown documentation:
      * State whether the ping includes client id;
      * Add list of data review links;
      * Add list of related bugs links.
    * `gradlew clean` will no longer remove the Miniconda installation in `~/.gradle/glean`. Therefore `clean` can be used without reinstalling Miniconda afterward every time.
Michael Droettboom's avatar
Michael Droettboom committed
119
120
    * 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).
    * The `events` ping now includes a reason code: `startup`, `background` or `max_capacity`.
Michael Droettboom's avatar
Michael Droettboom committed
121

122
123
124
125
126
127
128
129
# 37.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v36.0.0...v37.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/96?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v37.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v37.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/v37.0.0/master/buildSrc/src/main/java/Config.kt)

130
131
132
* **lib-state**, **browser-state**
  * 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.

133
134
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * Updated `removeAll()` from `TrackingProtectionExceptionFileStorage` to notify active sessions when all exceptions are removed.
135
136
137
138
139
140
  * Added `GeckoPort.senderUrl` which returns the associated content URL.

* **feature-accounts**
  * It should now be possible to log-in on stable, stage and china FxA servers using a WebChannel flow.
  *  ⚠️ **This is a breaking change**: `FxaWebChannelFeature` takes a `ServerConfig` as 4th parameter to ensure incoming WebChannel messages
     are sent by the expected FxA host.
141

142
143
144
* **feature-sitepermissions**
  * 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.

145
146
147
148
149
150
151
152
153
* **service-sync-logins**
  * ⚠️ **This is a breaking change**: `DefaultLoginValidationDelegate`, `GeckoLoginStorageDelegate` constructors changed to take `Lazy<LoginsStorage>` instead of `LoginsStorage`, to facilitate late initialization.

* **service-firefox-accounts**
  * ⚠️ **This is a breaking change**: `GlobalSyncableStoreProvider#configureStore` changed to take `Lazy<SyncableStore>` instead of `SyncableStore`, to facilitate late initialization.

* **feature-session**
  * ⚠️ **This is a breaking change**: `HistoryDelegate` constructor changed to take `Lazy<HistoryStorage>` instead of `HistoryStorage`, to facilitate late initialization.

154
155
156
157
158
159
* **concept-engine**
  * Added: `DataCleanable` a new interface that decouples the behavior of clearing browser data from the `Engine` and `EngineSession`.

* **feature-sitepermissions**
  *  Fixed [#6322](https://github.com/mozilla-mobile/android-components/issues/6322), now  `SitePermissionsStorage` allows to indicate an optional reference to `DataCleanable`.

160
161
162
163
* **browser-menu**
  * Added `canPropagate` param to all `BrowserMenuHighlight`s, making it optional to be displayed in other components
  * Changed `BrowserMenuItem.getHighlight` to filter the highlights which should not propagate.

164
165
166
167
* **feature-share**
    * Changed primary key of RecentAppEntity to activityName instead of packageName
      * ⚠️ **This is a breaking change**: all calls to app.packageName should now use app.activityName

168
169
170
171
172
173
174
175
# 36.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v35.0.0...v36.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/95?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v36.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v36.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v36.0.0/buildSrc/src/main/java/Config.kt)

176
177
178
179
180
181
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * **Merge day!**
    * `browser-engine-gecko-release`: GeckoView 74.0
    * `browser-engine-gecko-beta`: GeckoView 75.0
    * `browser-engine-gecko-nightly`: GeckoView 76.0

182
183
184
* **feature-addons**
  * 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.

185
186
187
188
* **feature-push**
  * `AutoPushFeature` now properly notifies observers that they have changed by the `Observer.onSubscriptionChanged` callback.
  *  ⚠️ **This is a breaking change**: `RustPushConnection.verifyConnection` now returns a list of subscriptions that have changed.

189
190
191
192
193
194
195
196
# 35.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v34.0.0...v35.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/94?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v35.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v35.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v35.0.0/buildSrc/src/main/java/Config.kt)

197
198
199
* **feature-sitepermissions**
  *  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.

200
201
202
* **feature-awesomebar**
  *  ⚠️ **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.

203
204
205
* **feature-intent**
  * ⚠️ **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.

206
207
208
* **feature-downloads**
  * Fixed APK downloads not prompting to install when the notification is clicked.

209
210
211
212
213
* **service-location**
  * Created `LocationService` interface and made `MozillaLocationService` implement it.
  * `RegionSearchLocalizationProvider` now accepts any `LocationService` implementation.
  * Added `LocationService.dummy()` which creates a dummy `LocationService` implementation that always returns `null` when asked for a `LocationService.Region`.

214
215
* **feature-accounts-push**
  * Add known prefix to FxA push scope.
216

217
218
* **browser-toolbar**
  * Add the possibility to listen to menu dismissal through `setMenuDismissAction` in `DisplayToolbar`
219

220
221
222
223
224
225
* **concept-storage**
  * New interface: `LoginsStorage`, describes a logins storage. A slightly cleaned-up version of what was in the `service-sync-logins`.

* **service-sync-logins**
  * ⚠️ **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.

226
227
228
229
230
* **feature-tabs**
  * Fixed close tabs callback incorrectly invoked on start.
  * ⚠️ **This is a breaking change**: Added `defaultTabsFilter` to `TabsFeature` for initial presenting of tabs.
    * `TabsFeature.filterTabs` also uses the same filter if no new filter is provided.

231
232
233
234
* **browser-session**
  * SessionManager will now close internal `EngineSession` instances on memory pressure when `onTrimMemory()` gets called
  * `SessionManager.onLowMemory()` is now deprecated and `SessionManager.onTrimMemory(level)` should be used instead.

235
236
237
* **browser-engine-system**
  * Updated tracking protection lists for more details see [#6163](https://github.com/mozilla-mobile/android-components/issues/6163).

238
239
240
* **concent-engine**, **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**, **browser-engine-system**
  * Add additional HTTP header support for `EngineSession.loadUrl()`.

241
242
243
244
245
246
247
248
# 34.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v33.0.0...v34.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/93?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v34.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v34.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v34.0.0/buildSrc/src/main/java/Config.kt)

249
250
251
252
253
254
255
256
257
258
* **concept-tabstray**
  * ⚠️ **This is a breaking change**: Removed dependency on `browser-session` and introduced tabs tray specific data classes.

* **browser-tabstray**
  * ⚠️ **This is a breaking change**: Refactored component to implement updated `concept-tabstray` interfaces.

* **feature-tabs**
  * ⚠️ **This is a breaking change**: Refactored component to use `browser-state` instead of `browser-session`.
  * Added additional method to `TabsUseCases` to select a tab based on its id.

259
260
261
* **feature-contextmenu**
  * Adds optional `shareTextClicked` lambda to `DefaultSelectionActionDelegate` which allows adding and dispatching a text selection share action

262
263
264
* **browser-icons**
  * ⚠️ **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()`.

265
266
267
* **support-webextensions**
  * Emit facts on installed and enabled addon ids after web extension is initialized.

268
269
270
271
* **feature-app-links**
  * ⚠️ **This is a breaking change**: `alwaysAllowedSchemes` is removed as a parameter for `AppLinksInterceptor`.
  * Added `engineSupportedSchemes` as a parameter for `AppLinksInterceptor`.  This allows the caller to specify which protocol is supported by the engine.
    * Using this information, app links can decide if a protocol should be launched in a third party app or not regardless of user preference.
272

273
274
275
* **feature-sitepermissions**
  * ⚠️ **This is a breaking change**: add parameters `autoplayAudible` and `autoplayInaudible` to `SitePermissionsRules`.
    * This allows autoplay settings to be controlled for specific sites, rather than globally.
276

277
278
279
* **concept-engine**
  * ⚠️ **This is a breaking change**: remove deprecated GeckoView setting `allowAutoplayMedia`
    * This should now be controlled for individual sites via `SitePermissionsRules`
280
  * Fixed a bug that would cause `TrackingProtectionPolicyForSessionTypes` to lose some information during transformations.
281

282
283
284
285
286
* **feature-downloads**
  * ⚠️ **This is a breaking change**: `customTabId` is renamed to `tabId`.

* **feature-contextmenu**
  * ⚠️ **This is a breaking change**: `customTabId` is renamed to `tabId`.
287

288
289
* **browser-menu**
  * Emit fact on the web extension id when a web extension menu item is clicked.
290

291
292
293
294
295
296
297
298
299
* **feature-push**
  * ⚠️ **This is a breaking change**:
    * Removed APIs from AutoPushFeature: `subscribeForType`, `unsubscribeForType`, `subscribeAll`.
    * Removed `PushType` enum and it's internal uses.
    * Use the new ✨ `subscribe` and `unsubscribe` APIs.

* **feature-accounts-push**
  * Updated `FxaPushSupportFeature` to use the new `AutoPushFeature` APIs.

300
301
302
303
304
305
306
307
308
* **concept-sync**
 * ⚠️ **This is a breaking change**:
  * `DeviceEvent` and related classes were expanded/refactored, and renamed to `AccountEvent`.
  * `DeviceConstellation` "event" related APIs were renamed to be "command"-centric.

* **service-firefox-accounts**
 * ⚠️ **This is a breaking change**:
  * `FxaAccountManager.registerForDeviceEvents` renamed to `FxaAccountManager.registerForAccountEvents`.

309
310
311
312
313
314
315
316
# 33.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v32.0.0...v33.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/93?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v33.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v33.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v33.0.0/buildSrc/src/main/java/Config.kt)

317
318
319
* **feature-share**
  * Added database to store recent apps
  * Added `RecentAppsStorage` to handle storing and retrieving most-recent apps
320

Jan-Erik Rediger's avatar
Jan-Erik Rediger committed
321
322
323
324
325
326
327
328
329
330
331
332
333
* **service-glean**
  * Glean was updated to v25.0.0:
    * General:
      * `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.
      * The version of `glean_parser` has been upgraded to 1.18.2:
        * **Breaking Change (Java API)** Have the metrics names in Java match the names in Kotlin.
          See [Bug 1588060](https://bugzilla.mozilla.org/show_bug.cgi?id=1588060).
        * The reasons a ping are sent are now included in the generated markdown documentation.
    * Android:
      * The `Glean.initialize` method runs mostly off the main thread ([#672](https://github.com/mozilla/glean/pull/672)).
      * Labels in labeled metrics now have a correct, and slightly stricter, regular expression.
        See [label format](https://mozilla.github.io/glean/user/metrics/index.html#label-format) for more information.

334
335
336
337
338
339
340
341
# 32.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v31.0.0...v32.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/92?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v32.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v32.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v32.0.0/buildSrc/src/main/java/Config.kt)

342
343
344
345
346
347
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * **Merge day!**
    * `browser-engine-gecko-release`: GeckoView 73.0
    * `browser-engine-gecko-beta`: GeckoView 74.0
    * `browser-engine-gecko-nightly`: GeckoView 75.0

348
349
350
* **browser-engine-gecko-nightly**, **concept-engine**
  * Updated `WebPushHandler` and `GeckoWebPushHandler` to accept push scopes for `onSubscriptionChanged` events.

Manuel Martin's avatar
Manuel Martin committed
351
352
353
354
* **WebExtensions refactor**
  * The Web Extensions related methods have been refactored from `Engine` into a new `WebExtensionRuntime` interface.
  * The `Engine` interface now implements the `WebExtensionRuntime` interface.
  * `WebCompatFeature` has been updated to receive a `WebExtensionRuntime` instead of a `Engine` as `install` method parameter.
355

356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
* **lib-crash**
  * Now supports adding telemetry crash reporting services.  Telemetry services will not require to prompt
  * the user since it is restricted by the telemetry preference of the user.
  ```kotlin
  CrashReporter(
      services = services,
      telemetryServices = telemetryServices,
      shouldPrompt = CrashReporter.Prompt.ALWAYS,
      promptConfiguration = CrashReporter.PromptConfiguration(
          appName = context.getString(R.string.app_name),
          organizationName = "Mozilla"
      ),
      enabled = true,
      nonFatalCrashIntent = pendingIntent
  )
  ```
372

373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
* **feature-search**
  * Adds `DefaultSelectionActionDelegate`, which may be used to add new actions to text selection context menus.
    * It currently adds "Firefox Search" or "Firefox Private Search", depending on whether the selected tab is private.
  * Adds `SearchFeature`, which consumes search requests made by other components.
  ```kotlin
  // Example usage

  // Attach `DefaultSelectionActionDelegate` to the `EngineView`
  override fun onCreateView(parent: View?, name: String, context: Context, attrs: AttributeSet): View? =
      when (name) {
          EngineView::class.java.name -> components.engine.createView(context, attrs).apply {
              selectionActionDelegate = DefaultSelectionActionDelegate(
                  components.store,
                  context,
                  "My App Name"
              )
          }.asView()
      }
391

392
393
394
395
396
397
398
399
400
401
402
403
404
405
  // Use `SearchFeature` to attach search requests to your own code
  private val searchFeature = ViewBoundFeatureWrapper<SearchFeature>()
  // ...
  searchFeature.set(
      feature = SearchFeature(components.store) {
          when (it.isPrivate) {
              false -> components.searchUseCases.newTabSearch.invoke(it.query)
              true -> components.searchUseCases.newPrivateTabSearch.invoke(it.query)
          }
      },
      owner = this,
      view = layout
  )
  ```
406

Michael Droettboom's avatar
Michael Droettboom committed
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
* **service-glean**
  * Glean was updated to v24.2.0:
    * Add `locale` to `client_info` section.
    * **Deprecation Warning** Since `locale` is now in the `client_info` section, the one
      in the baseline ping ([`glean.baseline.locale`](https://github.com/mozilla/glean/blob/c261205d6e84d2ab39c50003a8ffc3bd2b763768/glean-core/metrics.yaml#L28-L42))
      is redundant and will be removed by the end of the quarter.
    * Drop the Glean handle and move state into glean-core ([#664](https://github.com/mozilla/glean/pull/664))
    * If an experiment includes no `extra` fields, it will no longer include `{"extra": null}` in the JSON payload.
    * Support for ping `reason` codes was added.
      * The metrics ping will now include `reason` codes that indicate why it was
        submitted.
      * The baseline ping will now include `reason` codes that indicate why it was
        submitted. If an unclean shutdown is detected (e.g. due to force-close), this
        ping will be sent at startup with `reason: dirty_startup`.
    * The version of `glean_parser` has been upgraded to 1.17.3
    * Collections performed before initialization (preinit tasks) are now dispatched off
      the main thread during initialization.

425
426
427
* **feature-awesomebar**
  * Added `showDescription` parameter (default to `true`) to `SearchSuggestionProvider` constructors to add the possibility of removing search suggestion description.

428
429
430
* **support-migration**
  * Emit facts during migration.

431
432
433
434
435
436
437
# 31.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v30.0.0...v31.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/91?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v31.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v31.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v31.0.0/buildSrc/src/main/java/Config.kt)
438

439
* **feature-awesomebar**
440
  * ⚠️ **This is a breaking change**: Added resources parameter to `addSessionProvider` method from `AwesomeBarFeature` and to `SessionSuggestionProvider` constructor for accessing strings.
441
442


443
444
445
446
447
448
449
450
# 30.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v29.0.0...v30.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/90?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v30.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v30.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/mv30.0.0aster/buildSrc/src/main/java/Config.kt)

451
452
453
454
455
456
457
458
459

# 29.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v28.0.0...v29.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/89?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v29.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v29.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v29.0.0/buildSrc/src/main/java/Config.kt)

460
461
462
463
464
465
* **feature-error-pages**
  * ⚠️ **This is a breaking change**: ErrorResponse now has two data classes: Content (for data URI's) and Uri (for encoded URL's)
    * This will require a change in RequestInterceptors that override `onErrorRequest`.
    * Return the corresponding ErrorResponse (ErrorResponse.Content or ErrorResponse.Uri) as ErrorResponse can no longer be directly instantiated.
  * Added support for loading images into error pages with `createUrlEncodedErrorPage`. These error pages load dynamically with javascript by parsing params in the URL
  * ⚠️ To use custom HTML & CSS with image error pages, resources **must** be located in the assets folder
466

467
468
* **feature-prompts**
  * Save login prompts will no longer be closed on page load
469

470
471
* **lib-crash**
  * Glean reports now distinguishes between fatal and non-fatal native code crashes.
472

473
474
475
476
* **feature-pwa**
  * Added ability to query install state of an url.
  * Added ability load all manifests that apply to a certain url.
  * Added ability to track if an PWA is actively used.
477

478
479
480
481
482
483
484
485
# 28.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v27.0.0...v28.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/88?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v28.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v28.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v28.0.0/buildSrc/src/main/java/Config.kt)

486
487
488
489
490
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * **Merge day!**
    * `browser-engine-gecko-release`: GeckoView 72.0
    * `browser-engine-gecko-beta`: GeckoView 73.0
    * `browser-engine-gecko-nightly`: GeckoView 74.0
Michael Droettboom's avatar
Michael Droettboom committed
491

492
493
494
495
* **feature-session**
  * * ⚠️ **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.
    * **Added**: `TrackingProtectionUseCases.removeException(exception: TrackingProtectionException)`: now you can delete an exception without the need of having a `Session` by calling `removeException(trackingProtectionException)`.

496
* **service-glean**
Michael Droettboom's avatar
Michael Droettboom committed
497
  * Glean was updated to v24.1.0:
498
499
500
    * **Breaking Change** An `enableUpload` parameter has been added to the `initialize()`
      function. This removes the requirement to call `setUploadEnabled()` prior to calling
      the `initialize()` function.
Michael Droettboom's avatar
Michael Droettboom committed
501
502
503
    * A new metric `glean.error.preinit_tasks_overflow` was added to report when
      the preinit task queue overruns, leading to data loss. See [bug
      1609482](https://bugzilla.mozilla.org/show_bug.cgi?id=1609482)
504
505
506
507
508
509
510
    * The metrics ping scheduler will now only send metrics pings while the
      application is running. The application will no longer "wake up" at 4am
      using the Work Manager.
    * The code for migrating data from Glean SDK before version 19 was removed.
    * When using the `GleanTestLocalServer` rule in instrumented tests, pings are
      immediately flushed by the `WorkManager` and will reach the test endpoint as
      soon as possible.
Michael Droettboom's avatar
Michael Droettboom committed
511
512
513
514
515
516
    * The Glean Gradle Plugin correctly triggers docs and API updates when registry files
      change, without requiring them to be deleted.
    * `parseISOTimeString` has been made 4x faster. This had an impact on Glean
      migration and initialization.
    * Metrics with `lifetime: application` are now cleared when the application is started,
      after startup Glean SDK pings are generated.
Michael Droettboom's avatar
Michael Droettboom committed
517
518
519
    * ⚠️ **This is a breaking change**:
      * The public method `PingType.send()` (in all platforms) have been deprecated
        and renamed to `PingType.submit()`.
Michael Droettboom's avatar
Michael Droettboom committed
520
    * Rename `deletion_request` ping to `deletion-request` ping after glean_parser update
Michael Droettboom's avatar
Michael Droettboom committed
521
522
    * BUGFIX: The Glean Gradle plugin will now work if an app or library doesn't
      have a metrics.yaml or pings.yaml file.
Michael Droettboom's avatar
Michael Droettboom committed
523

524
525
526
527
528
529
530
531
532
533
* **feature-app-links**
  * AppLinksInterceptor can now be used without the AppLinksFeature. Set the new parameter launchFromInterceptor = true
  ```kotlin
  AppLinksInterceptor(
      applicationContext,
      interceptLinkClicks = true,
      launchInApp = { true },
      launchFromInterceptor = true
  )
  ```
Marcel Schneider's avatar
Marcel Schneider committed
534
  * Introduce a `ContextMenuCandidate` to open links in the corresponding external app, if installed
535

536
537
538
539
* **concept-storage**
  * Added classes related to login autofill
    * `LoginStorageDelegate` may be attached to an `Engine`, where it can be used to save logins.
    * `LoginValidationDelegate` may be used to read and update currently saved logins.
540

541
* **feature-prompts**
542
  * `PromptFeature` may now optionally accept a `LoginValidationDelegate`. If present, it users
543
  will be prompted to save their information after logging in to a website.
544
545
  * `PromptFeature` now accepts a false by default `isSaveLoginEnabled` lambda to be invoked before showing prompts. If true, users
    will be prompted to save their information after logging in to a website.
546
  * Prompts will now be closed automatically when pages have mostly loaded
547

548
* **service-sync-logins**
549
  * Added `GeckoLoginStorageDelegate`. This can be attached to a GeckoEngine, where it will be used
550
  to save user login credentials.
551
552
  * `GeckoLoginStorageDelegate` now accepts a false by default `isAutofillEnabled` lambda to be invoked before fetching logins. If false,
   logins will not be fetched to autofill.
553

554
555
556
557
* **service-firefox-accounts**
  * `signInWithShareableAccountAsync` now takes a `reuseAccount` parameter, allowing consumers
    to reuse existing session token (and FxA device) associated with the passed-in account.

Grisha Kruglov's avatar
Grisha Kruglov committed
558
559
560
* **support-migration**
  * **New Telemetry Notice**
  * Added a 'migration' ping, which contains telemetry data about migration via Glean. It's emitted whenever a migration is executed.
561
  * Added `MigrationIntentProcessor` for handling incoming intents when migration is in progress.
562
  * Added `AbstractMigrationProgressActivity` as a base activity to block user interactions during migration.
Grisha Kruglov's avatar
Grisha Kruglov committed
563

564
565
566
* **browser-menu**
  * Added `MenuButton` to let the browser menu be used outside of `BrowserToolbar`.

567
568
569
570
571
572
573
# 27.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v26.0.0...v27.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/86?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v27.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v27.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v27.0.0/buildSrc/src/main/java/Config.kt)
574

575
576
577
578
579
* **feature-remotetabs** was renamed to **feature-syncedtabs**
  * ⚠️ **This is a breaking change**:
  * `RemoteTabsFeature` is now `SyncedTabsFeature`, and some method names have corresponding changes.
  * `RemoteTabsStorageSuggestionProvider` is now `SyncedTabsStorageSuggestionProvider`.

580
581
582
583
* **service-glean**
  * Glean was updated to v22.1.0 ([Full changelog](https://github.com/mozilla/glean/compare/v21.3.0...v22.1.0))
    * Attempt to re-send the deletion ping on init even if upload is disabled.
    * Introduce the `InvalidOverflow` error for `TimingDistribution`s.
Michael Droettboom's avatar
Michael Droettboom committed
584
  * 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.
585

586
587
588
589
590
591
592
593
* **feature-app-links**
  * ⚠️ **This is a breaking change**:
  * Feature now contains two parts.  One part is the AppLinksFeature, the other part is RequestInterceptor.
  ```kotlin
  // add this call in the RequestInterceptor
  context.components.appLinksInterceptor.onLaunchIntentRequest(engineSession, uri, hasUserGesture, isSameDomain)
  ```

594
595
596
597
598
599
600
601
602
603
* **support-telemetry-sync**
  * Added new telemetry ping, to support password sync: `passwords_sync`.

* **service-firefox-accounts**
  * 🕵️  **New Telemetry Notice**
  * Added telemetry for password sync, via the new `passwords_sync` in **support-telemetry-sync**

* **sync-logins**
  * 🕵️  **New Telemetry Notice**
  * Added telemetry for password sync, via the new `passwords_sync` in **support-telemetry-sync**
Ryan Kelly's avatar
Ryan Kelly committed
604
605
606
607
608
609
610
  * The `service-sync-logins` component now collects some basic performance and quality metrics via Glean.
    Applications that send telemetry via Glean *must ensure* they have received appropriate data-review before integrating this component.
  * ⚠️ **This is a breaking change**: The `ServerPassword` fields `username`, `usernameField` and `passwordField` can no longer by `null`.
    Use the empty string to indicate an absent value for these fields.
  * ⚠️ **This is a breaking change**: The `AsyncLoginsStorageAdapter.inMemory` method has been removed.
    Use `AsyncLoginsStorageAdapter.forDatabase(":memory:")` instead.

611
612
613
614

* **samples-sync**
  * Added support for password synchronization (not reflected in the UI, but demonstrates how to integrate the component).

615
616
617
* **browser-menu**
  * Added `BrowserMenuHighlightableSwitch` to represent a highlightable item with a toggle switch.

618
619
620
621
622
623
624
625
* **lib-crash**
  * Now supports performing action after submitting crash report.
  ```kotlin
  crashReporter.submitReport(Crash.fromIntent(intent)) {
      stopSelf()
  }
  ```

Tiger Oakes's avatar
Tiger Oakes committed
626
627
* **support-ktx**
  * Added `Context.getDrawableWithTint` extension method to get a drawable resource with a tint applied.
628
	* `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.
Tiger Oakes's avatar
Tiger Oakes committed
629

630
631
632
633
634
635
636
637
* **support-base**
  * ⚠️ **This is a breaking change**:
  * Removed helper for unique notification id.
  * 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.
  * Added new API that allows user to request for the next available id using the same tag.

  ```kotlin
  // Get a unique id for the provided tag
638
  val id = SharedIdsHelper.getIdForTag(context, "mozac.my.feature")
639
640

  // Get the next unique id for the provided tag
641
  val id = SharedIdsHelper.getNextIdForTag(context, "mozac.my.feature")
642
643
  ```

644
645
646
* **browser-errorpages**
  * Added support for bypassing invalid SSL certification.

647
648
649
650
651
652
653
654
# 26.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v25.0.0...v26.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/85?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v26.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v26.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v26.0.0/buildSrc/src/main/java/Config.kt)

655
656
657
658
659
660
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * **Merge day!**
    * `browser-engine-gecko`: GeckoView 71.0
    * `browser-engine-gecko-beta`: GeckoView 72.0
    * `browser-engine-gecko-nightly`: GeckoView 73.0

661
662
663
* **browser-engine-system** and **browser-engine-gecko-nightly**
  * Added `EngineView.canClearSelection()` and `EngineView.clearSelection()` for clearing the selection.

664
665
666
667
668
669
670
671
672
673
674
675
* **feature-accounts**
  * ⚠️ **This is a breaking change**: Migrated `FxaPushSupportFeature` to the `feature-accounts-push` component.

* **feature-sendtab**
  * ⚠️ **This is a breaking change**: This component is now deprecated. See `feature-accounts-push`.

* **feature-accounts-push**
  * 🆕 New component for features that need Firefox Accounts and Push, e.g. Send Tab.
  * `SendTabFeature` and `SendTabUseCases` have been migrated here.
  * ⚠️ **This is a breaking change**: `SendTabFeature` no longer takes an instance of `AutoPushFeature`.
    * `FxaPushSupportFeature` is now needed for integrating Firefox Accounts with Push support.

676
* **support-test-libstate**
677
  * 🆕 New component providing utilities to test functionality that relies on lib-state.
678

679
680
* **browser-errorpages**
  * Removed list items semantics to improve a11y for unordered lists, preventing items being read twice.
681

682
683
684
* **support-locale**
    * Add `resetToSystemDefault` and `getSystemDefault` method to `LocaleManager`

685
686
687
688
689
690
691
692
# 25.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v24.0.0...v25.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/84?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v25.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v25.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v25.0.0/buildSrc/src/main/java/Config.kt)

693
694
695
* **feature-downloads**
  * Makes `DownloadState` parcelizable so that it can be passed to `FetchDownloadManager` when completed

696
697
* **feature-remotetabs**
  * Add new `RemoteTabsFeature` to view tabs from other synced devices and upload our own.
698
  * Add `RemoteTabsStorageSuggestionProvider` class to match remote tabs in awesomebar suggestions.
699

700
701
702
703
704
705
* **support-migration**
  * Added Fennec login migration logic.

* **service-sync-logins**
  * `AsyncLoginsStorage` interface gained a new method: `importLoginsAsync`, used for bulk-inserting logins (for example, during a migration).

706
707
708
709
710
711
712
713
# 24.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v23.0.0...v24.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/84?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v24.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v24.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v24.0.0/buildSrc/src/main/java/Config.kt)

714
715
716
* **browser-errorpages**
  * Added strings for "no network connection" error pages

717
718
719
720
* **browser-menu**
  * Replaced `BrowserMenuHighlightableItem.Highlight` with `BrowserMenuHighlight.HighPriority` to highlight a menu item with some background color. `Highlight` has been deprecated.
  * Added `BrowserMenuHighlight.LowPriority` to highlight a menu item with a dot over the icon.

721
722
723
724
725
726
* **storage-sync**
  * Added `RemoteTabsStorage` for synced tabs.

* **service-firefox-accounts**
  * Removed `StorageSync` interface as it is superseded by the sync manager.

727
728
729
730
731
732
733
* **service-glean**
  * Glean was updated to v21.3.0 ([Full changelog](https://github.com/mozilla/glean/compare/v21.2.0...21.3.0))
    * Timers are reset when disabled. That avoids recording timespans across disabled/enabled toggling.
    * Add a new flag to pings: send_if_empty.
    * Upgrade glean_parser to v1.12.0.
    * Implement the deletion request ping in Glean.

734
735
736
737
738
739
740
741
# 23.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v22.0.0...v23.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/83?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v23.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v23.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v23.0.0/buildSrc/src/main/java/Config.kt)

742
743
744
745
* **feature-downloads**
  * ⚠️ **This is a breaking change**:
  * Renamed to `OnDownloadCompleted` to `OnDownloadStopped` for increased clarity on when it's triggered

746
747
748
749
750
751
* **browser-state**
  * ⚠️ **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/).

* **feature-prompts** and **feature-downloads**
  * Fix [issue #6439](https://github.com/mozilla-mobile/fenix/issues/6439) "Crash when downloading Image"

752
753
754
* **service-firefox-accounts**
  * Account profile cache is now used, removing a network call from most instances of account manager instantiation.
  * Fixed a bug where account would disappear after restarting an app which hit authentication problems.
Edouard Oger's avatar
Edouard Oger committed
755
  * Deprecated the `StorageSync` class. Please use the `SyncManager` class instead.
Tiger Oakes's avatar
Tiger Oakes committed
756

Michael Droettboom's avatar
Michael Droettboom committed
757
* **service-glean**
Michael Droettboom's avatar
Michael Droettboom committed
758
  * Glean was updated to v21.2.0
Michael Droettboom's avatar
Michael Droettboom committed
759
760
761
762
763
764
765
766
767
768
769
770
    * Two new metrics were added to investigate sending of metrics and baseline pings.
      See [bug 1597980](https://bugzilla.mozilla.org/show_bug.cgi?id=1597980) for more information.
    * Glean's two lifecycle observers were refactored to avoid the use of reflection.
    * Timespans will now not record an error if stopping after setting upload enabled to false.
    * The `GleanTimerId` can now be accessed in Java and is no longer a `typealias`.
    * Fixed a bug where the metrics ping was getting scheduled twice on startup.
    * When constructing a ping, events are now sorted by their timestamp. In practice,
      it rarely happens that event timestamps are unsorted to begin with, but this
      guards against a potential race condition and incorrect usage of the lower-level
      API.
    * Metrics that can record errors now have a new testing method,
      `testGetNumRecordedErrors`.
Michael Droettboom's avatar
Michael Droettboom committed
771
772
773
774
775
    * The experiments API is no longer ignored before the Glean SDK initialized. Calls are
      recorded and played back once the Glean SDK is initialized.
    * String list items were being truncated to 20, rather than 50, bytes when using
      `.set()` (rather than `.add()`). This has been corrected, but it may result
      in changes in the sent data if using string list items longer than 20 bytes.
776

777
778
779
* **support-base**
  * Deprecated `BackHandler` interface. Use the `UserInteractionHandler.onBackPressed` instead.
  * Added generic `UserInteractionHandler` interface for fragments, features and other components that want to handle user interactions such as ‘back’ or 'home' button presses.
780

781
782
783
784
785
786
787
# 22.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v22.0.0...master)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/82?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v22.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v22.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v22.0.0/buildSrc/src/main/java/Config.kt)
Christian Sadilek's avatar
Christian Sadilek committed
788

789
790
791
* **feature-addons**
  *  ⚠️ **This is a breaking change**:
  * Renamed to `AddOnsCollectionsProvider` to `AddOnCollectionProvider` and added caching support:
792
  ```kotlin
793
794
  val addOnsProvider by lazy {
    // Keeps addon collection response cached and valid for one day
795
    AddOnCollectionProvider(applicationContext, client, maxCacheAgeInMinutes = 24 * 60)
796
797
798
799
800
801
802
803
804
  }

  // May return a cached result, if available
  val addOns = addOnsProvider.getAvailableAddOns()

  // Will never return a cached result
  val addOns = addOnsProvider.getAvailableAddOns(allowCache = false)
  ```

805
806
807
* **lib-nearby**
  * 🆕 New component for communicating directly between two devices
  using Google Nearby API.
808

809
810
811
* **sample-nearby-chat**
  * 🆕 New sample program demonstrating use of `lib-nearby`.

812
813
814
* **feature-customtabs**
  * ⚠️ `CustomTabWindowFeature` now takes `Activity` instead of `Context`.

815
816
817
* **concept-sync**, **service-firefox-accounts**
  * `OAuthAccount@authorizeOAuthCode` method is now `authorizeOAuthCodeAsync`.

818
819
820
821
822
823
824
* **service-firefox-accounts**
  * 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.
  * 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.
  * 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.
  *  ⚠️ **This is a breaking change**:
  * Several `FxaAccountManager` methods have been made internal, and are no longer part of the public API of this module: `createSyncManager`, `getAccountStorage`.

825
826
827
828
829
830
831
832
# 21.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v20.0.0...v21.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/81?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v21.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v21.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v21.0.0/buildSrc/src/main/java/Config.kt)

833
834
835
* **feature-downloads**
  * Added `tryAgain` which can be called on the feature in order to restart a failed download.

836
837
838
839
* **lib-dataprotect**
  * Added new `SecureAbove22Preferences` helper class, which is an encryption-aware wrapper for `SharedPreferences`. Only actually encrypts stored values when running on API23+.

* **service-firefox-accounts**
840
  * 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`.
841
842
843
844

* **concept-sync**
  * Added new `LockableStore` to facilitate syncing of "lockable" stores (such as `SyncableLoginsStore`).

845
846
* **feature-sitepermissions**
  * Added a new get operator to `SitePermissions` to facilitate the retrieval of permissions.
847
  ```kotlin
848
849
850
851
852
853
854
    val sitePermissions = SitePermissions(
            "dev.mozilla.org",
            notification = ALLOWED,
            savedAt = 0)

    sitePermissions[Permission.LOCATION] //  ALLOWED will be returned
  ```
855
856
857
* **engine-gecko-nightly**
  * Adds setDynamicToolbarMaxHeight ApI.

858
859
860
* **feature-push**
  * Added `unsubscribeAll` support from the Rust native layer.

861
862
863
864
865
866
867
868
# 20.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v19.0.0...v20.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/80?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v20.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v20.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v20.0.0/buildSrc/src/main/java/Config.kt)

869
870
871
* **browser-session**, **feature-customtabs**, **feature-session**, **feature-tabs**
  *  ⚠️ **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.

872
873
874
875
* **feature-downloads**
  * Added ability to pause, resume, cancel, and try again on a download through the `DownloadNotification`.
  * Added support for multiple, continuous downloads.
  * Added size of the file to the `DownloadNotification`.
876
  * Added open file functionality to the `DownloadNotification`.
877
    * Note: you must add a `FileProvider` to your manifest as well as `file_paths.xml`. See SampleBrowser for an example.
878
    * To open .apk files, you must still add the permission `android.permission.INSTALL_PACKAGES` to your manifest.
879
  * Improved visuals of `SimpleDownloadDialogFragment` to better match `SitePermissionsDialogFragment`.
880
    * `SimpleDownloadDialogFragment` can similarly be themed by using `PromptsStyling` properties.
881
  * Recreated download notification channel with lower importance for Android O+ so that the notification is not audibly intrusive.
882

883
884
* **feature-webnotifications**
  * Adds feature implementation for configuring and displaying web notifications to the user
885
  ```kotlin
886
887
888
889
  WebNotificationFeature(
      applicationContext, engine, icons, R.mipmap.ic_launcher, BrowserActivity::class.java
  )
  ```
890

891
892
893
* **service-glean**
   * Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing `stderr`.

894
895
* **concept-engine**
  * Adds support for WebPush abstraction to the Engine.
896
  * Adds support for WebShare abstraction as a PromptRequest.
897

898
899
* **engine-gecko-nightly**
  * Adds support for WebPush in GeckoEngine.
900

901
902
* **support-webextensions**
  * Adds support for sending messages to background pages and scripts in WebExtensions.
903

904
905
* **service-firefox-accounts**
  * Adds `authorizeOAuthCode` method for generating scoped OAuth codes.
906

907
908
* **feature-push**
  * ⚠️ The `AutoPushFeature` now throws when reaching exceptions in the native layer that are unrecoverable.
909
910
911

* **feature-prompts**
  * Adds support for Web Share API using `ShareDelegate`.
912

Mike Cooper's avatar
Mike Cooper committed
913
914
* **experiments**
  * Fixes a crash when the app version or the experiment's version specifiers are not in the expected format.
915

916
917
918
919
920
921
922
923
924
925
* **engine**, **engine-gecko-***, **support-webextensions**
  * Added support `browser.tabs.remove()` in web extensions.
  ```kotlin
  val engine = GeckoEngine(applicationContext, engineSettings)
  engine.registerWebExtensionTabDelegate(object : WebExtensionTabDelegate {
    override fun onCloseTab(webExtension: WebExtension?, engineSession: EngineSession) {
      store.state.tabs.find { it.engineState.engineSession === engineSession }?.let {
        store.dispatch(RemoveTabAction(tab.id))
      }
    }
926
  })
927
  ```
928

929
930
931
932
933
934
935
936
937
# 19.0.1

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v19.0.0...v19.0.1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v19.0.1/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v19.0.1/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v19.0.1/buildSrc/src/main/java/Config.kt)

* **service-glean**
   * Bumped the Glean SDK version to 19.1.0. This fixes a startup crash on Android SDK 22 devices due to missing `stderr`.
938

939
940
941
942
943
944
945
946
# 19.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v18.0.0...v19.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/79?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v19.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v19.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v19.0.0/buildSrc/src/main/java/Config.kt)

947
948
* **browser-toolbar**
  * ⚠️ **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.
949

950
951
* **feature-accounts**
  * Add new `FxaPushSupportFeature` for some underlying support when connecting push and fxa accounts together.
952

Tiger Oakes's avatar
Tiger Oakes committed
953
954
955
* **browser-state**
  * Added `externalAppType` to `CustomTabConfig` to indicate how the session is being used.

956
957
958
* **service-glean**
   * The Rust implementation of the Glean SDK is now being used.
   * ⚠️ **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.
959

960
961
* **lib-push-firebase**
   * Fixes a potential bug where we receive a message for another push service that we cannot process.
962

963
964
965
966
* **feature-privatemode**
  * Added new feature for private browsing mode.
  * Added `SecureWindowFeature` to prevent screenshots in private browsing mode.

967
968
* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly**
  * **Merge day!**
969
    * `browser-engine-gecko`: GeckoView 70.0
970
971
972
    * `browser-engine-gecko-beta`: GeckoView 71.0
    * `browser-engine-gecko-nightly`: GeckoView 72.0

973
974
* **feature-push**
  * The `AutoPushFeature` now checks (once every 24 hours) to verify and renew push subscriptions if expired after a cold boot.
975

976
977
978
979
980
981
982
983
984
985
# 18.0.1

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v18.0.0...v18.0.1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v18.0.1/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v18.0.1/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v18.0.1/buildSrc/src/main/java/Config.kt)

* **feature-prompts**
  * Fixed a crash when showing the file picker.

986
987
988
989
990
991
992
993
# 18.0.0

* [Commits](https://github.com/mozilla-mobile/android-components/compare/v17.0.0...v18.0.0)
* [Milestone](https://github.com/mozilla-mobile/android-components/milestone/78?closed=1)
* [Dependencies](https://github.com/mozilla-mobile/android-components/blob/v18.0.0/buildSrc/src/main/java/Dependencies.kt)
* [Gecko](https://github.com/mozilla-mobile/android-components/blob/v18.0.0/buildSrc/src/main/java/Gecko.kt)
* [Configuration](https://github.com/mozilla-mobile/android-components/blob/v18.0.0/buildSrc/src/main/java/Config.kt)

994
* **browser-menu**
995
  * Adds the ability to create a BrowserMenuCategory, a menu item that defines a category for other menu items
996

997
* **concept-engine**
998
  * Adds the setting `forceUserScalableContent`.
999
1000

* **engine-gecko-nightly**
For faster browsing, not all history is shown. View entire blame