Skip to content
This repository has been archived by the owner on Sep 2, 2022. It is now read-only.

Latest commit

 

History

History
111 lines (68 loc) · 5.78 KB

CHANGELOG.md

File metadata and controls

111 lines (68 loc) · 5.78 KB

Changelog

All notable changes to this project will be documented in this file.

Warning: Features marked as alpha may change or be removed in a future release without notice. Use with caution.

Changed

  • Upgraded to Kotlin 1.5.31 and Gradle 7.1.1.
  • Migrated to Jetpack Room for the SQLite database storing rights and passphrases (contributed by @stevenzeck).
    • Note that the internal SQL schema changed. You will need to update your app if you were querying the database manually.

Fixed

  • #267 Prints and copy characters left are now properly reported (contributed by @qnga).

Added

  • You can observe the progress of an acquisition by providing an onProgress closure to LcpService.acquirePublication().
  • Extensibility in licenses' Rights model.

Changed

  • The Renew Loan API got revamped to better support renewal through a web page.
    • You will need to implement LcpLicense.RenewListener to coordinate the UX interaction.
    • If your application fits Material Design guidelines, take a look at MaterialRenewListener for a default implementation.
  • Removed dependency on Joda's DateTime in public APIs.
    • You can always create a DateTime from the standard Date objects if you relied on Joda's features in the callers.

Fixed

  • #287 Make sure the passphrase input is visible on smaller devices in the authentication dialog.

Changed

  • Upgraded to Kotlin 1.4.10.

Fixed

  • When acquiring a publication, falls back on the media type declared in the license link if the server returns an unknown media type.

Added

  • LCP implementation of the Content Protection API to work with the new Streamer API (contributed by @qnga).
    • It is highly recommended that you upgrade to the new Streamer API to open publications, which will simplify DRM unlocking.
  • Two default implementations of LcpAuthenticating:
    • LcpDialogAuthentication to prompt the user for its passphrase with the official LCP dialog.
    • LcpPassphraseAuthentication to provide directly a passphrase, pulled for example from a database or a web service.
  • LcpService::isLcpProtected() provides a way to check if a file is protected with LCP.
  • All the LcpException errors are now implementing UserException and are suitable for user display. Use getUserMessage() to get the localized message.

Changed

  • The public API got modernized to be more Kotlin idiomatic (contributed by @qnga).
    • All asynchronous APIs are now suspending to take advantage of Kotlin's coroutines.
  • LcpAuthenticating is now provided with more information and you will need to update any implementation you may have.
    • If you copied the default authentication dialog, it's recommended to use LcpDialogAuthentication instead.
  • 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.
  • The private liblcp dependency is now accessed through reflection, to allow switching LCP dynamically (contributed by @qnga).
    • You need to add implementation "readium:liblcp:1.0.0@aar" to your build.gradle.
    • LcpService::create() returns null if lcplib is not found.

Fixed

  • Decrypting resources in some edge cases (contributed by @qnga)
  • Issues with LSD interactions:
    • Exceptions handling with renew and return interactions.
    • Presentation of the renew interaction through an HTML page.
  • The timeout of fetching the License Status Document is reduced to 5 seconds, to avoid blocking a publication opening in low Internet conditions.

Added

Changed

Fixed