|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project will be documented in this file. |
| 4 | + |
| 5 | +**Warning:** Features marked as *alpha* may change or be removed in a future release without notice. Use with caution. |
| 6 | + |
| 7 | +<!--## [Unreleased]--> |
| 8 | + |
| 9 | +## [2.1.0] |
| 10 | + |
| 11 | +### Changed |
| 12 | + |
| 13 | +* Upgraded to Kotlin 1.5.31 and Gradle 7.1.1. |
| 14 | +* Migrated to Jetpack Room for the SQLite database storing rights and passphrases (contributed by [@stevenzeck](https://github.com/readium/r2-lcp-kotlin/pull/116)). |
| 15 | + * Note that the internal SQL schema changed. You will need to update your app if you were querying the database manually. |
| 16 | + |
| 17 | + |
| 18 | +## [2.0.0] |
| 19 | + |
| 20 | +### Fixed |
| 21 | + |
| 22 | +* [#267](https://github.com/readium/r2-testapp-kotlin/issues/267) Prints and copy characters left are now properly reported (contributed by [@qnga](https://github.com/readium/r2-lcp-kotlin/pull/104)). |
| 23 | + |
| 24 | + |
| 25 | +## [2.0.0-beta.2] |
| 26 | + |
| 27 | +### Added |
| 28 | + |
| 29 | +* You can observe the progress of an acquisition by providing an `onProgress` closure to `LcpService.acquirePublication()`. |
| 30 | +* Extensibility in licenses' `Rights` model. |
| 31 | + |
| 32 | +### Changed |
| 33 | + |
| 34 | +* The Renew Loan API got revamped to better support renewal through a web page. |
| 35 | + * You will need to implement `LcpLicense.RenewListener` to coordinate the UX interaction. |
| 36 | + * If your application fits Material Design guidelines, take a look at `MaterialRenewListener` for a default implementation. |
| 37 | +* Removed dependency on Joda's `DateTime` in public APIs. |
| 38 | + * You can always create a `DateTime` from the standard `Date` objects if you relied on Joda's features in the callers. |
| 39 | + |
| 40 | +### Fixed |
| 41 | + |
| 42 | +* [#287](https://github.com/readium/r2-testapp-kotlin/issues/287) Make sure the passphrase input is visible on smaller devices in the authentication dialog. |
| 43 | + |
| 44 | + |
| 45 | +## [2.0.0-beta.1] |
| 46 | + |
| 47 | +### Changed |
| 48 | + |
| 49 | +* Upgraded to Kotlin 1.4.10. |
| 50 | + |
| 51 | +### Fixed |
| 52 | + |
| 53 | +* When acquiring a publication, falls back on the media type declared in the license link if the server returns an unknown media type. |
| 54 | + |
| 55 | + |
| 56 | +## [2.0.0-alpha.2] |
| 57 | + |
| 58 | +### Added |
| 59 | + |
| 60 | +* LCP implementation of the [Content Protection API](https://readium.org/architecture/proposals/006-content-protection) to work with the new [Streamer API](https://readium.org/architecture/proposals/005-streamer-api) (contributed by [@qnga](https://github.com/readium/r2-lcp-kotlin/pull/79)). |
| 61 | + * It is highly recommended that you upgrade to the new `Streamer` API to open publications, which will simplify DRM unlocking. |
| 62 | +* Two default implementations of `LcpAuthenticating`: |
| 63 | + * `LcpDialogAuthentication` to prompt the user for its passphrase with the official LCP dialog. |
| 64 | + * `LcpPassphraseAuthentication` to provide directly a passphrase, pulled for example from a database or a web service. |
| 65 | +* `LcpService::isLcpProtected()` provides a way to check if a file is protected with LCP. |
| 66 | +* All the `LcpException` errors are now implementing `UserException` and are suitable for user display. Use `getUserMessage()` to get the localized message. |
| 67 | + |
| 68 | +### Changed |
| 69 | + |
| 70 | +* The public API got modernized to be more Kotlin idiomatic (contributed by [@qnga](https://github.com/readium/r2-lcp-kotlin/pull/84)). |
| 71 | + * All asynchronous APIs are now suspending to take advantage of Kotlin's coroutines. |
| 72 | +* `LcpAuthenticating` is now provided with more information and you will need to update any implementation you may have. |
| 73 | + * If you copied the default authentication dialog, it's recommended to use `LcpDialogAuthentication` instead. |
| 74 | +* Publications are now downloaded to a temporary location, to make sure disk storage can be recovered automatically by the system. After acquiring the publication, you need to move the downloaded file to another permanent location. |
| 75 | +* The private `liblcp` dependency is now accessed through reflection, to allow switching LCP dynamically (contributed by [@qnga](https://github.com/readium/r2-lcp-kotlin/pull/87)). |
| 76 | + * You need to add `implementation "readium:liblcp:1.0.0@aar"` to your `build.gradle`. |
| 77 | + * `LcpService::create()` returns `null` if `lcplib` is not found. |
| 78 | + |
| 79 | +### Fixed |
| 80 | + |
| 81 | +* Decrypting resources in some edge cases (contributed by [@qnga](https://github.com/readium/r2-lcp-kotlin/pull/84)) |
| 82 | +* Issues with LSD interactions: |
| 83 | + * Exceptions handling with `renew` and `return` interactions. |
| 84 | + * Presentation of the `renew` interaction through an HTML page. |
| 85 | +* The timeout of fetching the License Status Document is reduced to 5 seconds, to avoid blocking a publication opening in low Internet conditions. |
| 86 | + |
| 87 | + |
| 88 | +## [2.0.0-alpha.1] |
| 89 | + |
| 90 | +### Added |
| 91 | + |
| 92 | +* Support for [PDF](https://readium.org/lcp-specs/notes/lcp-for-pdf.html) and [Readium Audiobooks](https://readium.org/lcp-specs/notes/lcp-for-audiobooks.html) protected with LCP. |
| 93 | + |
| 94 | +### Changed |
| 95 | + |
| 96 | +* `LCPAuthenticating` can now return hashed passphrases in addition to clear ones. [This can be used by reading apps](https://github.com/readium/r2-lcp-kotlin/pull/64) fetching hashed passphrases from a web service or [Authentication for OPDS](https://readium.org/lcp-specs/notes/lcp-key-retrieval.html), for example. |
| 97 | + |
| 98 | +### Fixed |
| 99 | + |
| 100 | +* [`OutOfMemoryError` when downloading a large publication](https://github.com/readium/r2-lcp-kotlin/issues/70). This fix removed the dependency to [Fuel](https://github.com/kittinunf/fuel). |
| 101 | +* The `AndroidManifest.xml` is not forcing anymore `allowBackup` and `supportsRtl`, to let reading apps manage these features themselves (contributed by [@twaddington](https://github.com/readium/r2-lcp-kotlin/pull/63)). |
| 102 | + |
| 103 | + |
| 104 | +[unreleased]: https://github.com/readium/r2-lcp-kotlin/compare/master...HEAD |
| 105 | +[2.0.0-alpha.1]: https://github.com/readium/r2-lcp-kotlin/compare/1.1.3...2.0.0-alpha.1 |
| 106 | +[2.0.0-alpha.2]: https://github.com/readium/r2-lcp-kotlin/compare/2.0.0-alpha.1...2.0.0-alpha.2 |
| 107 | +[2.0.0-beta.1]: https://github.com/readium/r2-lcp-kotlin/compare/2.0.0-alpha.2...2.0.0-beta.1 |
| 108 | +[2.0.0-beta.2]: https://github.com/readium/r2-lcp-kotlin/compare/2.0.0-beta.1...2.0.0-beta.2 |
| 109 | +[2.0.0]: https://github.com/readium/r2-lcp-kotlin/compare/2.0.0-beta.2...2.0.0 |
| 110 | +[2.1.0]: https://github.com/readium/r2-lcp-kotlin/compare/2.0.0...2.1.0 |
| 111 | + |
0 commit comments