Editions

Richie Android SDK Changelog

Changes in the Richie Android SDK, not limited to Editions

202408.25 (30.8.2024)

  • SDK
    • Fixes a crash when used with version 1.7.2 (or newer) of Kotlin serialization.

202408.23 (29.8.2024)

  • Editions
    • Breaking change: the maxZoomFactor setting in EditionsConfiguration has been removed.
    • Breaking change: EditionPresenter.editionDidFailWithNoEntitlements() has been removed after its deprecation in June 2023.
    • Breaking change: the two constructors have been merged into one, with adManager being a required parameter.
  • Ads
    • Fixed a layout issue in AdView where the content would sometimes be blank when the view is used in a Compose pager.

202406.8 (12.6.2024)

  • Editions
    • The device's font size is now used to scale the default zoom size. Using EditionsConfiguration.maxZoomFactor overrides this scale.
    • Pages can now be zoomed much further from the double-tap zoom scale by pinching.

202404.32 (23.4.2024)

  • Editions
    • Fixed an issue where calling Editions.updateFeed() during an active download could disrupt the download, causing it to appear stuck.

202404.29 (19.4.2024)

  • Editions
    • Breaking change: a new callback, DownloadProgressListener.editionDownloadCanceled(), has been added.

202404.24 (16.4.2024)

  • SDK
    • A new top-level SDK factory (Richie) has been added in the richiesdk artifact. This can be used to simplify SDK instance creation for Ads, Editions, and Books.
  • Editions
    • Breaking change: the Editions.editionProvider and Editions.editionProductsProvider properties are now nullable. The documentation has also been clarified to mention that these properties are available after a successful Editions.initialize() call.
    • Fixed missing MaggioEventKeys.EVENT_DID_CLOSE_TOC_LIST analytics event.
  • Books
    • Breaking change: Almost all parameters from BookLibraryController.start() have been moved to the constructor.
  • Ads
    • Added AdManager.nextFlightForSlots() for requesting an ad from multiple slots at once.
    • Fixed an issue where image-based ads would not be draggable in a Compose-based pager.

202402.25 (16.2.2024)

  • Editions
    • Deprecated two public analytics keys, MaggioEventKeys.ATTRIBUTE_ORGANIZATION and MaggioEventKeys.ATTRIBUTE_PRODUCT. These have not been used by the Android SDK for a while now and will be removed on both platforms at a later date.
    • Added support for external storage, via the storageLocation property in EditionsConfiguration. Note that this setting cannot be changed on the fly, and requires an app restart.
    • Fixed the Editions.initialize() completion callback not being called on subsequent calls after a successful completion.
  • Ads
    • Some only internally used but public API in AdManager has been made entirely internal to Ads, which may be a breaking change.
  • General
    • The minSdkVersion of all SDKs is now 26. (Android 8.0)
    • Breaking change: Removed two public analytics keys, ATTRIBUTE_USER_NAME and ATTRIBUTE_GLOBAL_ATTRIBUTES_EXTERNAL_USER_ID. They were not being used in SDK code, but were visible.

202401.23 (17.1.2024)

  • Editions
    • Breaking change: The type of the exception parameter of DownloadProgressListener.editionDidFailDownload has been changed from Exception? to Throwable?.
    • DownloadInfoExceptions (and other errors) in DownloadProgressListener.editionDidFailDownload are no longer wrapped in Exception.

202401.20 (16.1.2024)

  • Editions
    • Fix exception type thrown when a download fails with no token (DownloadInfoException.NoToken).
    • Fix Edition UUID missing from TokenProvider.RequestReason.NoEntitlements in some cases.

202312.37 (21.12.2023)

  • Editions
    • Fix the crossword analytics event being sent in the wrong thread.

202312.34 (21.12.2023)

  • Editions
    • Added missing "Did start filling crossword" analytics event. (EVENT_DID_START_FILLING_CROSSWORD)

202312.12 (5.12.2023)

  • Editions
    • Fixed issue where Editions.initialize() could only be called once.
    • Added API for getting an Edition cover as a byte array: EditionCoverProvider.coverBytesForEdition()
    • Added API for getting counts of Editions per year and month: EditionProvider.editionCounts()

202310.18 (12.10.2023)

  • Editions
    • Added EVENT_DID_BEGIN_READING to AnalyticsEventId.

202309.24 (29.9.2023)

  • Editions
    • Improvements to error handling when starting a download during poor network conditions.
    • Debug symbols for native libraries have been removed.
    • x86 builds of native libraries are now included. A number of Chromebooks with Android support require 32-bit Intel libraries.
  • Books
    • TokenProvider.token() should no longer be called for free content where it's not needed.
    • Overhauled customizing colors and fonts so that they can now be changed during runtime without relying on XML resources. This utilizes data binding, which means that the feature may need to be enabled in the host app as well. (via android.buildFeatures.dataBinding = true in build.gradle)

202309.4 (12.9.2023)

  • Editions
    • Added EditionsHolder singleton. You can use EditionsHolder.create() to initialize Editions, after which EditionsHolder.instance is available. Creating an Editions instance using its constructors also sets the EditionsHolder.instance property.
    • Debug symbols for native libraries are now included in the AAR packages.
  • Ads
    • All deprecated AdManager.pageViewDidOccur() methods and related functionality have been removed. These methods were deprecated in April 2017. Use AdManager.nextFlightForSlot() instead.

202306.55 (22.6.2023)

  • Editions
    • TokenProvider.token() requests should now use the correct request reason when requesting a new token in order to retry an edition download.
    • DownloadProgressListener.editionDidFailWithNoEntitlements() has been deprecated. Use DownloadProgressListener.editionDidFailDownload() instead, and check for the following errors:
      • DownloadInfoException.NoEntitlements
      • DownloadInfoException.EntitlementsExpired
      • DownloadInfoException.InvalidEntitlements
    • Fixed a timing issue where manually retrying a download after an entitlements error in either DownloadProgressListener.editionDidFailDownload() or DownloadProgressListener.editionDidFailWithNoEntitlements() would not work.

202306.37 (15.6.2023)

  • Books
    • Breaking change: BookLibraryController and many supporting classes are now a regular Kotlin class instead of static objects. However, only one instance of BookLibraryController is allowed during the lifetime of the hosting application.
  • Maggio
    • The IssueMeta class has been removed. Use LibraryIssue instead.

202305.33 (16.5.2023)

  • Editions
    • Improved error reporting when edition downloads fail.
  • Compile and target SDK version bumped to API level 33.

202212.3 (1.12.2022)

  • Added embedded Proguard configs for Common and Books.

202210.5 (12.10.2022)

  • Editions
    • Refactored EditionCoverProvider API to provide Bitmaps and offline support.

202208.29 (17.8.2022)

  • Editions
    • Fix loading existing editions for the first time if updating the feed fails.

202208.25 (16.8.2022)

  • General
    • Target SDK version bumped to API level 31.
    • Automatic retries are disabled for network requests when the device is offline, greatly improving usability.
  • Editions
    • Performance improvements when updating feeds.
  • Ads
    • Fixed erroneus taps in native image ad views.
  • Books
    • Dark mode support. Note that this still in practice requires night color overrides, but the support is there.

202201.20 (19.1.2022)

  • Editions
    • Fixed issue where a download requiring authentication would get stuck at 0% when given a null token.
    • Fixed crashes when calling Editions.updateFeed() before Editions.initialize() has been called.

202201.15 (13.1.2022)

  • Editions
    • Reduced memory use when consolidating feeds. (T-1048)

202201.12 (12.1.2022)

  • Books / Editions
    • Fixed an issue where various places would crash when TokenProvider callbacks were called in a background thread.
  • Editions
    • Avoid crashes in multiple places, either by performing more validation or early returning instead of throwing exceptions.

202201.9 (10.1.2022)

  • Editions
    • Fixed an issue where downloads would get stuck at 100% progress in some circumstances.

202201.6 (7.1.2022)

  • Books
    • Breaking API change: books, audiobook, booklibrary, and booklibraryui have been merged into one module: booklibraryui. This means that most classes from the first three modules have new packages.
  • Editions
    • Fixed crash when showing an HTML overlay in an issue.
    • Added new API to open editions to a give page, see EditionPresenter.

202110.6 (5.10.2021)

  • Ads
    • Fixed ads not working on Android 11. (SC#19842)
  • Audiobooks
    • Support for streaming audio without downloading it first.
  • Editions
    • Breaking API change in AnalyticsListener: new parameters in onNavigatedToPage().

202102.11 (23.2.2021)

  • Maggio
    • Reduced unnecessary error logging during downloads. (CH#18582)
    • Changed the way the keyboard is invoked in crosswords to potentially fix the keyboard not showing up on some Samsung devices. (CH#18606)

202101.17 (21.1.2021)

  • Maggio
    • Fixed issue where slot ads would occasionally not work in an edition. (CH#18376)

202012.18 (10.12.2020)

  • Book Library UI
    • Fixed issue where the top bar would always be hidden on the front page. (CH#18155)

202012.3 (2.12.2020)

  • All SDKs
    • In Richie Ads, richiecommon is now an api dependency instead of implementation, and has been removed as an explicit dependency in other SDKs.

202011.33 (19.11.2020)

  • Editions
    • API change: DownloadProgressListener#editionDownloadProgress() now also contains downloaded and expected total byte counts.
    • Fixed issue where all network requests would fail. (CH#17893)
  • Maggio
    • API change: AnalyticsListener#onNavigatedToPage() now also contains the issue page count.
    • Fixed issue where selecting an article from the TOC list would open the wrong page if the issue contains ads. (CH#17797)

202009.40 (24.9.2020)

  • Editions
    • Fixed the SDK sending malformed Accept-Encoding headers resulting in issues not updating or showing at all. (CH#17420)
  • All SDKs
    • Target SDK version bumped to SDK 29. (CH#17056)

202008.15 (17.8.2020)

  • Editions
    • Fix downloads getting stuck after being cancelled. (CH#16845)

202008.9 (14.8.2020)

  • Editions
    • Improve error handling to avoid opening editions from getting stuck with EDITION_ALREADY_BEING_OPENED error. (CH#16604)
    • Add a download queue to avoid more than one download simultaneously. (CH#16604)

202008.6 (10.8.2020)

  • Editions
    • Call editionDidFailDownload when trying to download an edition alredy downloaded or if the edition is not found in the feed. (CH#16532)
    • Avoid returning null if an edition is already being downloaded and download is called again, the same Cancellable is returned now. (CH#16532)
    • Fix internal state that could prevent an edtion to be downloaded or presented againg after a failure. (CH#16532)

202006.34 (30.6.2020)

  • Book Library
    • Fix for crash when searching in books with missing extra metadata. (CH#16389)
  • Ads
    • Fix for crash that occurs when Duktape (used for slot ads) cannot be loaded on certain devices. (CH#16414)
  • Editions
    • Add a configuration class to set the max zoom factor for editions. (CH#16386)

202006.13 (9.6.2020)

  • All SDKs
    • Added an optional contentId parameter to TokenProvider.RequestReason.NoToken. (CH#16283)
  • Book Library UI
    • Improved memory management across the library. Use BookLibraryController.onDestroyView() when the host activity is destroyed to ensure there aren't any leaks. (CH#16173)
  • Editions
    • Fix exception when deleting editions. (CH#16148)
    • Fix downloads do not start after they are cancelled the first time. (CH#16148)

202005.21 (18.5.2020)

  • Book Library UI
    • Show a spinner while waiting for the library's initial content. (CH#13949)
  • Audiobooks
    • Additional playback speed and sleep timer choices. (CH#15763)
  • Books
    • Fixed a crash when loading GIFs on older versions of Android. (CH#15868)
  • Maggio
    • Fixed bug where pages and/or images could be too bright. (CH#15893)
  • Ads
    • AdManager creation is now much faster. (CH#13393)
    • Fixed potential crash when checking for the existence of an SD card. (CH#15927)
  • Editions
    • Fixed token requested for free editions. (CH#16099)

202004.15 (6.4.2020)

  • Book Library UI
    • API change: added an Activity parameter to the remaining BookLibraryAnalytics calls. (CH#15724)

202004.9 (2.4.2020)

  • Books/Book Library UI
    • API change: the reading activity is now included in ReaderUiEventListener and BookLibraryAnalytics book navigation events. (CH#15695)

202004.5 (1.4.2020)

  • Editions
    • AnalyticsEvent contains now the reading activiy, this new property is optional and it is only included in EVENT_DID_NAVIGATE_TO_PAGE event.
  • Maggio/Editions
    • Did navigate to page event keeps measuring duration even if the user opens the grid view.

202003.46 (31.3.2020)

  • Book Library UI
    • An open book and its detail views are closed if the book in question is deleted from the feed. (CH#15228)
  • Audiobooks
    • Fixed crash in audio player error handling.

202003.19 (11.3.2020)

  • Maggio
    • Fixed NPE crash on IssueReadingActivity destruction.

202002.25 (19.2.2020)

  • Common
    • Renamed fi.richie.common.public to fi.richie.common.shared, since public is a keyword in Java, making classes in the package unusable. (CH#15293)

202002.19 (12.2.2020)

  • Audiobooks
    • Improved playback state management when receiving phone calls. (CH#15141)
  • Book Library UI
    • The library view and category list views now remember their scroll position when returning from a detail view. (CH#15195)
    • Improved support for app restoration in the detail view. (CH#15082)
  • Editions
    • Fix missing callbacks when opening editions through EditionPresenter. (CH#15171)

202001.51 (31.1.2020)

  • All SDKs
    • Disallow app installation on external storage. Background: If an app using Richie SDKs is installed directly on a FAT32-formatted memory card (as in, not in an ext4 container or similar), the app will crash when trying to initialize native libraries. SELinux requires the executable attribute to be set on the libs, which isn't possible on FAT32. (CH#15107)
  • Editions, Book Library
    • Breaking change: TokenProvider.RequestReason is now a sealed class instead of an enum. (CH#15098)
  • Editions
    • Include the edition id in TokenProvider.RequestReason.NoEntitlements when the token is requested. (CH#15098)
    • Editions.initialize() now works correctly if there is no internet connection if the appconfig is found on disk. (CH#15099)

202001.40 (28.1.2020)

  • Editions
    • Fix DownloadedEditionsProvider.downloadedEditions to only return fully downloaded editions.
  • Audiobooks
    • Fixed issue where pausing a playing book with wireless headphones wouldn't work. (CH#15075)
  • Books
    • Major performance improvements when opening large books. (CH#15029)
    • Fixed crash that could occur when opening multiple books. (CH#15075)
  • Book Library
    • Performance improvements when deleting books after a feed update. (CH#15075)

202001.6 (9.1.2020)

  • Editions
    • Use null for download date in EditionDisplayInfo if the edition is not downloaded.
  • Book Library
    • Added API for closing books that are currently open. (CH#13962)
    • BookLibraryController.resetUserState() now closes and deletes all books, in addition to resetting reading list sync (if enabled) and ratings (if enabled). (CH#13962)
    • Books in the reading list view are now sorted by when they've been last accessed, i.e. downloaded or read. (CH#14457)
    • Breaking API change: a hasToken property has been added to TokenProvider, in order to be able to check for the existence of a token synchronously. (CH#14771)

201912.12 (9.12.2019)

  • Book Library
    • Breaking API change: TokenProvider now provides an additional TokenRequestTrigger parameter, giving more context as to why a token was requested. (CH#14467)
  • Editions
    • Add download date information through EditionDisplayInfo.

201912.5 (4.12.2019)

  • Editions
    • Filter editions with no cover instead of causing the feed parsing to fail if an edition with no cover is found. (CH#14685)

201912.0 (3.12.2019)

  • Editions
    • Support for a separate issues-metadata-listing endpoint URL. (CH#14534)
  • Book Library UI
    • Preliminary support for showing ratings in the book lists and detail views. (CH#14139)
    • Logic and visual changes to downloading books on the detail view: a combined circular progress view is shown for downloads in conjunction with a button that downloads everything, and removing a book from the reading list also removes it from disk. (CH#14298)

201911.60 (21.11.2019)

  • Book Library UI
    • Optional support for showing book progress in the detail view. (CH#14207)
    • Fixed issue where a composition list item title and book list title would be repeated if they were identical. (CH#14333)

201911.14 (5.11.2019)

  • Editions
    • Add new constructor to initialize Editions using an existing AdManager. (CH#14300)
    • Modify EditionPresenter.openEdition to take a context instead of an activity. (CH#14300)

201911.3 (1.11.2019)

  • Audiobooks
    • Fixed crash when restoring the app to the audiobook player activity. (CH#14295)

201910.50 (31.10.2019)

  • Common
    • Renamed common module to richiecommon to avoid conflicts with integrators. (CH#14158)
  • Audiobooks
    • Fixed issue where starting the internal HTTP server could crash the application. Now streaming is disabled if the server cannot be started. (CH#14159)
    • Added optional player notification group key. Override the audiobooks_notification_group_key string resource to provide your own. (CH#14157)
  • Book Library
    • Potential fix for crash when updating library after a content feed update. (CH#14160)
  • Book Library UI
    • Support for an optional action menu in the detail view. (CH#14104)

201910.35 (21.10.2019)

  • Books
    • Fixed crash that could occur when opening a book. (CH#14056)
  • Book Library UI
    • Support for a miniplayer in the library view. Disabled by default. (CH#13719)
    • Improved support for state restoration. Views still expect the library to be initialized immediately; it just doesn't have to be in Application.onCreate(). More complete support is forthcoming. (CH#14097)

201910.25 (11.10.2019)

  • Book Library
    • Fixed issue where an existing content feed could be overwritten with an empty feed, causing crashes elsewhere. (CH#14021)
  • Book Library UI
    • Support for books belonging to multiple categories. (CH#13904)
    • Support for a batch edit mode in the library view. The mode is currently disabled by default. (CH#13904)
    • New string resources for the library view segmented control that can be overridden. (CH#14024)
      • All overridable segmented control strings:
        • booklibraryui_segmented_control_all (global)
        • booklibraryui_segmented_control_audiobooks (global)
        • booklibraryui_segmented_control_library_all (library view)
        • booklibraryui_segmented_control_library_audiobooks (library view)
        • booklibraryui_segmented_control_library_downloaded (library view)

201910.19 (8.10.2019)

  • Audiobooks
    • Downloading audiobooks that don't have any audio items is now not allowed. (CH#13966)
  • Book Library
    • Fixed crashes by detecting and deleting an invalid audiobook before using it. (CH#13966)

201910.18 (8.10.2019)

  • Audiobooks
    • Fixed bug where the player would constantly reset while downloading the book. (CH#13927)
    • Implemented several safeguards for avoiding multiple sticky audiobook player notifications. (CH#13931)

201910.12 (3.10.2019)

  • Audiobooks
    • Fixed crash when attempting to resume playback on a partially downloaded file. (CH#13883)
  • Book Library UI
    • The audiobook player now uses audiobook-specific cover art if any exists. (CH#13886)

201910.6 (2.10.2019)

  • Book Library UI
    • Removed unnecessary token request when opening books that are freely available. (CH#13876)
    • Fixed cover image requests using the incorrect image dimensions sometimes. (CH#13877)

201909.32 (27.9.2019)

  • Book Library UI
    • Fixed the search field text being blank on subsequent input after dismissing the keyboard with the search field's cross button. (CH#13712)
    • Fixed colors in the list of podcasts. (CH#13742)
    • Fixed TokenProvider request reasons for entitlements failures: NO_ACCESS and NO_ENTITLEMENTS were the wrong way around. (CH#13752)

201909.14 (13.9.2019)

  • Book Library UI
    • Added LibraryNavigationDelegate interface for following the user's navigation in the library. (CH#13541)
    • BookOpening.onDidOpenBook() now also gives the book's media type. (CH#13545)
    • Book now also contains the book's title and author. (CH#13545)
    • Added BookCoverOverlayProvider interface for showing overlays on top of book cover images. (CH#13543)
    • Added BookLibraryAnalytics interface for listening to Book Library UI and certain Books events. (CH#13603)

201909.2 (5.9.2019)

  • Book Library UI
    • Fixed issue where clicking the empty reading list button wouldn't call its callback. (CH#13480)
    • The empty reading list description view is no longer hidden when viewing an empty downloads tab. (CH#13480)
    • Most content in the detail view is now fetched on demand. This results in a much smaller main content feed, and improves memory use. (CH#13303)

201908.39 (30.8.2019)

  • Books
    • The action bar can now be hidden by clicking the book content. (CH#13399)
  • Book Library UI
    • An empty reading list view can now show a description text and an optional button, configured via ReadingListHost. (CH#13405)
    • BookOpening now gives a reason for the initial access denial. See the API documentation for details. Note that this changes behavior somewhat: a missing token or a network error no longer defaults to ALLOW. Instead, the request is denied and the reason is provided. (CH#13401)
    • Separate font resource for the category list title: booklibraryui_category_list_title. (CH#13471)

201908.32 (27.8.2019)

  • Book Library UI
    • Bottom tab bar label visibility is now configurable via the booklibraryui_bottom_tab_bar_show_labels boolean resource. (CH#13208)
    • Replaced generic font definitions with more specific ones. See the documentation for details. (CH#13341)

201908.14 (13.8.2019)

  • Audiobooks
    • The player activity is now closed if the audiobook is deleted while playing. (CH#12943)
    • Less strict assertions in many places: we now return instead of crashing on purpose, e.g. in cases where a book is deleted in an unexpected place. (CH#13257)
  • Book Library UI
    • You can now click anywhere on a book feature to open the detail view, instead of just the cover image. (CH#13261)
    • In the default action bar controller implementation, the keyboard is now automatically shown when the search view is opened. Additionally, the search field is prettier. (CH#13264)
    • ReadingListHost.onDidUpdateReadingList() now also has the previous list, which can be used to compute what was changed in the update. (CH#13277)
    • Book covers can be configured to use a consistent size in vertically scrolling lists, with the covers being filled by default. (CH#13254)
    • Fixed crash that could occur due to a configuration error. (CH#13193)
    • Changes to reading list functionality: books are no longer automatically removed from disk when they aren't on the reading list, nor are they automatically added to the reading list when downloaded. Instead, Book in the BookOpening API contains more details about the book which can be used to determine potential reading list membership. (CH#13282)

201907.0 (1.7.2019)

  • Book Library UI
    • Added BookLibraryUiConfiguration class for configuring various bits in the UI. (CH#12929)
    • In "All books", book categories and books inside the categories are sorted alphabetically. (CH#13008)
    • Improved the response time when pressing media buttons in the audiobook player notification. (CH#12927)
    • Added a label beneath the sleep timer button indicating remaining time. (CH#12971)
    • Show the book category in book details if it exists. (CH#13035)
    • Show a title in the book review section. (CH#13033)
    • Only fully downloaded books are shown in the "Downloaded" segment in the user's library view. (CH#13044)

201906.33 (17.6.2019)

  • Book Library UI
    • Support for showing downloaded books in the user's library view. (CH#12698)
    • The reading list can now be null. A null reading list implies that the host app doesn't have a list to give to the SDK yet. (CH#12724)
    • Show a book's on-disk state in the epub/audiobook icons in lists and compositions. (CH#12701)
    • More granular access checks in the BookOpening interface. (CH#12757)
    • Optionally check access from the backend before opening a book. (CH#12767)
    • Support for setting the initial tab to something other than Tab.FEATURED. (CH#12826)
    • Support for showing reviews in book detail views. (CH#12743)
    • ArticleOpener interface for opening an article attached to a book review. (CH#12828)
    • Blurred cover art behind the main cover art in the detail view. (CH#12842)

201906.11 (10.6.2019)

  • Book Library UI
    • Added BookOpening interface for additional entitlements checks before opening a book. (CH#12660)
    • Added reading list functionality. The default implementation's reading list is whatever's downloaded to disk. (CH#12666)

201906.0 (4.6.2019)

  • Books
    • Fixed TOC listings and position saving, which were broken on some devices. (CH#12641)

201905.50 (31.5.2019)

  • Internal changes.

201905.10 (14.5.2019)

  • All SDKs
    • New versioning scheme, based on the year and month of release.
  • Books
    • The SDK now works on old versions of Android (4.x), with a new implementation that is much faster. (CH#12200)

123 (12.4.2019)

  • All SDKs
    • Refactorings.

122 (2.4.2019)

  • Audiobooks
    • Initial support for streaming audio. For now limited to starting playback on a file that's currently downloading. (CH#10498)
    • Fixed potential crash when deleting an audiobook while it's playing. (CH#11418)

121 (1.4.2019)

  • All SDKs
    • Refactorings.

120 (27.3.2019)

  • All SDKs
    • Refactorings.

119 (22.3.2019)

  • Book Library
    • The content feed is now parsed in a background thread. (CH#11859)

118 (19.3.2019)

  • Book Library
    • New SDK that provides a unified library for Books and Audiobooks, with support for a content feed. (CH#11850)

117 (18.3.2019)

  • Audiobooks
    • Fixed bug where playing a downloaded book while another one is downloading would play the wrong book. (CH#11833)
    • Fixed crash when changing the playback speed on some Android 6.0 devices. (CH#10447)

116 (7.3.2019)

  • All SDKs
    • Refactorings.

115 (19.2.2019)

  • Ads
    • Added Duktape to the built-in Proguard config.

114 (15.2.2019)

  • All SDKs
    • OkHttp updated to 3.12.0. (CH#11495)
  • Ads
    • Duktape is now used instead of J2V8. This reduces the size of the library quite a bit. (CH#11494)

113 (4.2.2019)

  • All SDKs
    • Updated J2V8. The new version is now built for arm, arm64, and x86_64 (new). x86 support has been dropped.
  • Ads
    • Support for making native requests in MRAID. (CH#11089)
  • Audiobooks
    • Total time remaining is now shown above the seek bar. (CH#10994)

112 (18.1.2019)

  • Audiobooks
    • The playback speed and sleep timer controls are now on the same row as other playback controls, leaving more room for the author and title. (CH#10991)
    • The playback speed is now set via an action sheet, similar to the sleep timer. (CH#10991)
  • Maggio
    • Fixed issue downloads that were broken due to invalid JSON parsing. (CH#11082)

111 (17.1.2019)

  • Audiobooks
    • Added title and author metadata, which is shown on the lock screen on some devices. (CH#10714)
    • Fixed bug where a custom playback speed wouldn't be set when starting a new audiobook or changing the track. (CH#10628)
    • Fixed the seek bar not reflecting the correct playback speed after it's been changed by the user. (CH#10629)
    • Fixed audio player activity startup crash by finishing immediately on invalid state. (CH#10690)
    • Fixed crash that could occur when trying to show a notification for the currently playing book. (CH#10689)
    • Fixed the audiobook position being incorrect if the app is killed while playing a book. (CH#10703)
    • Fixed the current entry not showing in the TOC when returning to the player view of a book that's playing. (CH#10702)

110 (13.12.2018)

  • All SDKs
    • Internal refactoring.

109 (12.12.2018)

  • All SDKs
    • Internal refactoring.

108 (05.12.2018)

  • All SDKs
    • Open all external links in Chrome Custom Tabs with customizable toolbar tint color. (CH#9802)

107 (29.11.2018)

  • Audiobooks
    • The listening position is now saved more often, which protects against crashes and system shutdowns. (CH#10299)
    • Fixed issue where audio playback would continue after killing the app in the app switcher. (CH#10334)

106 (26.11.2018)

  • Maggio
    • Fixed potential crash when starting an issue download by reporting it as an error instead.

105 (9.11.2018)

  • All SDKs
    • Refactorings; minor release.

104 (2.11.2018)

  • Maggio
    • Fixed IllegalStateException: FragmentManager is already executing transactions crash in maggio reader, take 2. (CH#9814)

103 (1.11.2018)

  • All SDKs
    • Refactorings; minor release.

102 (30.10.2018)

  • Books
    • Fixed some books failing to open due to missing metadata. (CH#9766)

101 (26.10.2018)

  • Maggio
    • Fixed IllegalStateException: FragmentManager is already executing transactions crash in maggio reader. (CH#9814)

100 (23.10.2018)

  • All SDKs
    • Refactorings; minor release.

99 (19.10.2018)

  • All SDKs
    • The compile and target SDK is now 28.

98 (16.10.2018)

  • All SDKs
    • Refactorings; minor release.

97 (12.10.2018)

  • Maggio
    • Fixed crash that affected Intel 64-bit Android 6.0 devices when opening an issue. (CH#9199)

95 (2.10.2018)

  • All SDKs
    • Refactorings; minor release.

94 (25.9.2018)

  • Ads
    • Fixed bug where tel: and sms: URL schemes in content wouldn't work. (CH#8712)

93 (18.9.2018)

  • All SDKs
    • Refactorings; minor release.

92 (22.8.2018)

  • All SDKs
    • Enabled HTTP/2. OkHttp updated to 3.11. (CH#7747)
    • Fix unnecessary bookkeeping file system work happening when downloading manifests. (CH#7973)

91 (29.6.2018)

  • All SDKs
    • Refactorings; minor release.

90 (26.6.2018)

  • All SDKs
    • Refactorings; minor release.

89 (11.6.2018)

  • All SDKs
    • The Richie SDK now uses Java 8. If this presents any problems, please contact us.

88 (25.5.2018)

  • Ads
    • Native image ads can now configure their background color, which is useful when image has different aspect ratio than screen. (CH#7435)
    • HTML-based ads now have white background color (if they do not override it in HTML/CSS) to match desktop web browser default behaviour. (CH#7435)
  • Maggio
    • Fixed bug where ad pages had a white background instead of black. (CH#7435)

87 (18.5.2018)

  • Ads
    • Support for max-age parameter in global persisted parameters (richie.setGlobalPersistedParameter). Default max age is (about) six months. (CH#7392)

86 (3.5.2018)

  • All SDKs
    • Updated the target SDK to API level 27.
    • Very basic certificate pinning for appdata.richie.fi traffic. (CH#7059)
  • Maggio
    • Improvements to panning performance while zoomed. (CH#6850)
  • Ads
    • Ad views are now transparent. (CH#7025)

85 (27.3.2018)

  • Maggio
    • Improved error handling when loading native libraries fails. (CH#6923)

84 (2.3.2018)

  • Maggio
    • Fixed selected spread overlay disappearing when scrolling in the thumbnail grid view. (CH#6476)
    • Fixed bug where zoomed images would be too big on low-resolution devices.
  • Ads
    • Added synchronous AdManager.nextFlightForSlot() method. This replaces the previous asynchronous AdManager.pageViewDidOccur() methods, which have now been deprecated. (CH#6696)

83 (5.2.2018)

  • Maggio
    • The maximum rendered image size in zoomed mode has been limited in order to improve panning performance. (CH#6451)
    • Fixed bug where loading an issue could fail due to incorrect processing of pages. (CH#6455)

82 (24.1.2018)

  • All SDKs
    • ARM64 was previously not properly supported, due to both J2V8 and Crosswalk lacking support for it. This would then cause crashes in the app when trying to load native libraries on ARM64 devices. J2V8 has now been updated to include ARM64 support, while Crosswalk has been removed entirely. (this is elaborated upon below) As a result all SDKs should now work on all ARM64 devices out of the box, without any ABI filtering required. (CH#6311)
  • Maggio
    • Fixed bug where the TOC would show wrong page numbers and go to the wrong page when clicked. (CH#6294)
  • Ads
    • Replaced Crosswalk (XWalkView) with WebView in the ad view. Crosswalk does not have 64-bit support, nor will it ever, since it is no longer being developed. Devices with Android 5.0 and up make up a clear majority of all devices in use now, and those have the WebView provided by the Play Store. (CH#6311)

81 (8.12.2017)

  • Maggio
    • Fixed issue where cached thumbnail images would not be used. (CH#3966)
    • Fixed issue where issue loading would fail due to processing starting before all required resources were available. (CH#5840)
    • Fixed issue where issue processing would stop due to ad thumbnail processing failing. (CH#5861)

80 (29.11.2017)

  • Maggio
    • Added support for the m2017 variant.
    • Added a new issue deletion method: Maggio.deleteLibraryIssue(). This must be used to ensure correct behavior in both Maggio and Richie Ads.

79 (17.10.2017)

  • Maggio
    • Fixed bug where an issue download would become un-continuable if cancelled at the wrong moment. (CH#5465)

78 (9.10.2017)

  • Maggio
    • Fixed bug where zoomed pages would never get the fully rendered page, remaining blurry. (CH#5421)
    • Fixed bug where zooming pages that require tiling would look bad. (CH#5417)
    • Fixed bug where calling cancel() on an already opened LibraryIssue could make it unopenable again. (CH#5425)

77 (2.10.2017)

  • Books
    • Fixed NPE crash when an ad has completed loading. (CH#5388)

76 (28.9.2017)

  • Maggio
    • Fixed crash when getting an IssueMeta instance. It is still recommended that you use LibraryIssue instead of IssueMeta. (CH#5343)

75 (20.9.2017)

  • Fixed issue where a download would be retried after it's canceled. It would still fail due to the download being in canceled state.
  • Improved network request reliability. (CH#5214)

74 (13.9.2017)

  • Improved network request reliability. Resuming downloads should work more reliably now, and applies to all SDKs. (CH#4978)
  • Maggio
    • Fixed division by zero crash when the archive size is set to zero. (CH#5135)
    • Fixed a potential crash when clicking the thumbnail grid / TOC buttons. (CH#5116)

73 (6.9.2017)

  • Maggio
    • Added TOC support. If an issue has a table of contents, a button for it is shown in the thumbnail grid. (CH#4569)
  • Ads
    • The download.01.org Maven repository for Crosswalk is no longer required. We now host the version we use in our repository. (CH#5034)

72 (18.8.2017)

  • Maggio
    • IssueMeta has been renamed to LibraryIssue. The naming now mirrors Maggio on iOS. For compatibility, there is a (deprecated) IssueMeta subclass of LibraryIssue, but we recommend moving over to LibraryIssue as soon as possible. (CH#4853)
    • The issue processing progress callback in LibraryIssue has been removed. The callback is no longer useful, since issue opening no longer waits for processing. (CH#4564)
    • Fixed issue where changing the custom zoom factor when re-opening an issue would have no effect. The zoom factor is now set later, and should change correctly. (CH#4745)
    • The ability to set custom headers to IssueMeta downloads has been removed. (CH#4845)
  • Ads
    • Added support for storing data on an SD card. An additional constructor has been added for this purpose. Use StorageOption.availableStorageOptions() to see whether an SD card is available from Ads' perspective. (CH#2573)
    • Richie Ads' data directory has been moved from cache to files. The cache can be deleted during the lifetime of the app, which causes all sorts of problems with Ads. Data internal to Ads is migrated to the new location automatically. (CH#2573)
    • Added factory methods for creating AdManager instances. You can now use AdManager.create() to get new instances. The public constructor has been removed.
    • Fixed issue where ad impressions were not marked if an AdView was shown immediately after calling configure(). (CH#4357)
    • Impressions are now marked correctly when the app goes to the background. (CH#1269)

71 (4.7.2017)

  • Books
    • Fixed issue where persistent ads wouldn't show up in the book. (CH#4584)

70 (26.6.2017)

  • Ads
    • Richie Ads global params are accessible from AdSelector.js, which enables, for example, conditional display logic based on previously shown ads. (CH#4573)
    • Richie Ads global params store key expiry has been extended to six months. This way params can be used by ads in magazines (or other publications) that appear seldomly. Previous expiry time was 30 days which meant this feature could not be used for monthly magazines.

69 (14.6.2017)

  • Maggio
    • Improvements to issue opening speed. Fewer processed pages are now required for opening an issue, speeding up pre-processing a bit. (CH#4412)
  • Ads
    • Fixed memory leak. AdViews were never released, and consumed memory unnecessarily. (CH#4355)
    • Slightly reduced downloads of slot ad information between app launches. (CH#4202)

68 (17.5.2017)

  • Maggio
    • Integrated Richie Ad Inventory Analytics.
    • Fixes for various crashes.
  • Ads
    • Added Ad Inventory Analytics logging. See the integration instructions for some more information. (AdManager.logAdDisplayOpportunityEvent()) Note: Please ensure that AdManager is created in Application.onCreate(). This is required by Ad Inventory Analytics, which is also used by Maggio.
    • AdManager.pageViewDidOccur() has been deprecated. This is the method without any parameters. You should always specify the desired slot identifier. (The slot identifier the parameter-less version used was page)
    • Removed bundled mraid.js. Originally it was included to act as a fallback for cases where mraid.js download from the network would fail. This strategy was problematic, since bundled mraid.js got outdated pretty fast, and using it as a fallback could introduce more hard-to-investigate problems than fixing them. This will cause old ORMMA-style ads to stop functioning.
    • Fixed Richie network analytics header sending.

67 (10.4.2017)

  • Maggio
    • Fixed crash when the load delegate in IssueMeta was set to null before issue processing was completed.
  • Ads
    • Updated Crosswalk to version 22.52.561.4. This is likely the last update to Crosswalk that we'll implement, due to Crosswalk development ending. Version 23 is the last version of Crosswalk, and has some issues that prevent us from using it in Richie Ads.

66 (29.3.2017)

  • Maggio
    • Fixed a crash when downloading an issue with HTML overlays. This was mostly seen on slower devices. Issue processing was incorrectly marked as complete even though overlays were still being extracted. (CH#3591)
    • VariantConfigurator now picks a higher quality variant for improved image and text quality, especially on low-resolution devices.
  • Ads
    • Fixed issue where an URL opened from a native image ad was opened twice. Analytics were not affected by this issue, and were only logged once per click.
    • Replaced use of HttpURLConnection with OkHttp. This enables us to use HTTP/2 for more efficient networking. To avoid conflicts with your app, the library is embedded with all packages prefixed with fi.richie..
    • Fixed issue where MRAID calls didn't work correctly when a new local file was loaded in AdView. Now both appearance callbacks and subsequent MRAID calls should work in ad creatives. (CH#3729)

65 (7.2.2017)

  • Maggio
    • PDF link clicks are now logged in analytics.
    • Removed analytics events that served no real purpose, yet wasted space both locally and on the server.
  • Ads
    • Added AdManager.reset(). This method deletes all files used by Richie Ads, including the RichieData dir and the event database. If you need to use this method, it's recommended that you call it before creating your AdManager instance.
    • Fixed nullity annotation in event logging parameters. A parameters dictionary is not required.
    • Fixed issue in global parameters where null values were sent incorrectly to the ad view.

64 (19.1.2017)

  • Maggio
    • Fixed crash related to state restoration. If the app was backgrounded in the thumbnail grid, and the user returned to the app much later when the app has been killed, the app would crash.
    • IssueReadingActivity no longer throws (intentional) exceptions in onCreate(). An additional IssueMeta.intentForReadingActivity() method has been added, where an optional error message can be specified. This error message is then shown as a toast if the activity cannot be started due to some info missing.
  • Books
    • Performance improvements to book loading and layout.
  • Ads
    • Fixed out-of-memory crash in native image ads. Images are now scaled down to the device's screen size, and are also freed properly when dispose() is called.
    • Refactored slot ad selection to use J2V8 (a fast JavaScript runtime) instead of a WebView-based solution. This obviously introduces J2V8 as a dependency for Richie Ads, but it's not particularly big.
    • API change: AdManager.getPlaceholderImage() and AdManager.getRectForDrawingPlaceholderImage() are now static.

63 (22.12.2016)

  • Books
    • First release.
  • Ads
    • Updated Crosswalk to version 21.51.546.7.

62 (2.12.2016)

  • Ads
    • Fixed potential OOM crash in analytics event storage. The cursor used for reading the events was never closed, potentially causing a crash sometime during the app's lifetime.
    • Better handling for application lifecycle events. Analytics events are no longer uploaded at all when the app is in the background.

61 (21.11.2016)

  • Maggio
    • Fixed max zoom factor use. The issue's maximum zoom factor was used as a zoom factor for the paper size. Now, only a custom zoom factor set by the user of the SDK is used. The issue's own max zoom factor is only used as a fallback now.
  • Ads
    • Improved handling of analytics.
    • Modified mailto: links. They now create an ACTION_VIEW intent (same as regular URLs), since the OS does the right thing with them.

60 (7.11.2016)

  • Maggio
    • Fixed a crash that occurs when leaving IssueReadingActivity.
    • Added an embedded Proguard configuration file.

59 (27.10.2016)

  • Maggio
    • Fixed potential crash when rapidly starting and stopping a download. The error was due to lacking null-handling.
  • Ads
    • Internal refactoring: added a loading progress callback to WebViewWrapper.

58 (24.10.2016)

  • Maggio
    • Changes to AnalyticsListener:
      • Added page title and category parameters to onNavigatedToPage().
      • Added a new method, onIssueReadingActivityDestroy(). Triggered when IssueReadingActivity is destroyed.
    • Fixed a problem where issue processing was never started if a download was completed while another issue was open. This essentially left the issue download in limbo, and no further IssueMeta callbacks were received.
  • Ads
    • Use of Crosswalk web views (XWalkView) in AdView has been disabled on API level 24 and up (i.e. Android 7.0+). This is due to XWalkView both throwing an exception when it's initialized, and then despite failing earlier causes a crash when leaving the owning Activity.

57 (17.10.2016)

  • Maggio
    • Added support for slot ads in issues. To ensure that slot ads are ready as soon as possible, create your Maggio instance e.g. in the onCreate() method of an Application subclass.
    • Ad views are no longer re-created when changing the orientation of the device.
    • Updated the target SDK to API level 24.
    • The minimum API level is now 16.
  • Ads
    • Updated the target SDK to API level 24.
    • The minimum API level is now 16.
    • API changes:
      • Multiple slot listeners are now supported. setSlotlistener() has been replaced with addSlotListener() and removeSlotListener().
      • In the SlotListener interface, adAvailable() has been renamed to onAdAvailable(), and added onAllAdsDownloaded(), which is mainly intended for internal use.
    • Updated Crosswalk to version 21.51.546.6.

Pre-unified versioning changelog for Maggio

56

  • Manifest config for IssueReadingActivity is now baked into the library, and should be merged with the integrating app automatically.
  • Changed the versioning scheme, so that the version number only consists of the version code. This is similar to the versioning scheme on iOS, the difference being that Richie Ads and Maggio have different version numbers on Android.
  • Updated Richie Ads to version 50.

55

  • Fixed crasher on low memory devices by enabling tiled rendering when zooming.
  • Renamed DecryptingDataProcessor class, created factory method. The equivalent for new DecryptingDataProcessor(iv, key) is now CryptorDataProcessor.newAESNoPaddingDecryptor(iv, key).
  • Updated Richie Ads to version 6.0.49.

54

  • Updated Richie Ads to version 6.0.48.

53

  • Updated Richie Ads to version 5.1.47.

52

  • Fixed zooming issue when using tiling in conjunction with a <2.0 custom max zoom factor on low-spec devices.

51

  • Fixed issue where the custom zoom factor was ignored if the issue uses the original page size as the zoom size. Now, the custom zoom factor is used as the original page size's zoom factor if it has been set. This means that even a fairly low custom factor (e.g. 2.0) can lead to a quite significant zoom.
  • Updated Richie Ads to version 5.1.46.

50

  • Fixed issue where a spread could remain stuck in a zoomed state when panning at the same time.
  • Updated Richie Ads to version 5.1.45.

49

  • Use of Error has been replaced with Exception. Note that Error was never thrown, just returned or used as a parameter.
  • Fixes for most common crashes.
  • Updated Richie Ads to version 5.1.44.

48

  • Fixed issue where trying to decode an ad thumbnail with an unsupported color profile (e.g. on older Android devices) would fail, thus failing the entire issue's processing.
  • Updated Richie Ads to version 5.0.43.

47

  • Updated Richie Ads.

46

  • Updated Richie Ads.

45

  • The VariantConfigurator class is now public and should be used by integrators. See the documentation for details.
  • The maximum zoom level tries to match the physical product, if the issue supports it.
  • Fixed issue where ads were cropped on some display aspect ratios.

44

  • Fixed various minor issues.

43

  • Reader
    • If missing ads are detected during preparation, an attempt is made to download ads again.
    • Fixed crash that could occur when returning to the reading activity from the background. Now an attempt is made to exit the reader cleanly.
    • Fixed issue where images were never rendered if the app was paused during rendering, resulting in semi-permanently white images. The issue affected both full pages and thumbnails.
    • Fixed issue where ad views weren't disposed properly when destroying the reading activity.
    • Double-tap zoom now works on pages with HTML overlays.
  • Library
    • Fixed issue where network errors in login were reported as an incorrect login.

42

  • Reader
    • Ads are shown in the thumbnail grid.
    • Fixed issue where the wrong page was sometimes shown after orientation changes.
  • Library
    • Covers that are bigger than the screen are scaled down so that they fit.

41

  • Fixed to work with the latest changes in Richie Ads.

40

  • Improved download notification responsiveness.

39

  • Fixed issue with PDF links where the wrong link was sometimes opened.

38

  • Fixed some common crashes.

37

  • Support for per-issue iv.

36

  • Downloads can be stopped and resumed in the library view.
  • Instead of showing the amount of downloaded bytes, the library view now shows the download speed.
  • Apps now use the same language as their content, if a localization is available.
  • Console logging in release builds has been reduced.
  • Fixed occasional crashes when the login activity is opened despite a login view configuration not existing.
  • Fixed misrendered HTML overlays on devices running Lollipop.

35

  • Improved variant selection. Previously, only the android_webp_1200 variant was selected for all devices. Now the variant should be more appropriate for the device.

See README.md for notes on unit testing.

33

  • Fixed issue where re-downloading an issue containing ads in the same session after deleting it caused ads to be blank.

32

  • Fixed zoom issue in the last page of an issue in landscape mode.

31

  • New loading indicator in the library view.

30

  • A token identifying the user is attached to issue list requests and issue downloads.
  • Fixed crash where the minimum archive and metadata version was essentially set too high.

29

  • A generated user agent string is attached to issue downloads.

28

  • Fixed a crash that occurred when there were ads in an issue.

27

  • Support for interactive HTML overlays.
  • Fixed a bug where downloaded issues were occasionally removed on app updates.

25

  • Fixed a crash when leaving the reader activity in zoomed state

24

  • Download speeds has been improved on some devices

17

  • fixes images being visually corrupted (buffer synchronization issues), this has also caused downloads to fail with errors saying "decode bitmap returned null"
  • fixes NPE in IssueProcessor:696
  • moved some Bitmap generation related WARN level messages to DEBUG

16

  • includes all fixes/improvements made but not documented since .2 including rotate lock handling and Bitmap.recycle fixes

2

  • First versioned release.

Pre-unified versioning changelog for Richie Ads

50

  • Downgraded Crosswalk to version 18.48.477.13. The 19-series was causing issues with touch handling, e.g. swiping out of the ad view.
  • Set the XWalkView to be "animatable". This should lead to less strange behavior in a ViewPager, since it changes the way XWalkView renders its content.
  • Changed the versioning scheme, so that the version number only consists of the version code. This is similar to the versioning scheme on iOS, the difference being that Richie Ads and Maggio have different version numbers on Android.

49

  • Minor fixes and refactorings.
  • Updated Crosswalk to version 19.49.514.5.

48

  • Removed application lifecycle management from AdManager's public API. It is now handled internally by AdManager.

47

  • Fixed issue where a deleted ad wouldn't be detected, resulting in blank ad views. Now if a state mismatch is detected, the states of all ads are verified immediately.

46

  • Fixed issue where analytics may not have been sent due to the queue getting cleared prematurely.
  • Updated Crosswalk to version 19.49.514.4.

45

  • Fixed issue where a download could fail if the file already exists on disk in full, triggering further unnecessary downloads.
  • Updated Crosswalk to version 18.48.477.13.

44

  • If AdManager.pageViewDidOccur(slotName, userInfo) is called, it will now always call the AdManager.SlotListener.adAvailable() callback, even if there is no ad to show. This means that the slotAdFlight parameter is not necessarily always non-null if you use this method.
  • Added global, persisted parameters. This allows ad creatives to communicate with each other.

43

  • Added support for multiple slots. Use AdManager.pageViewDidOccur(slotName) to inform of page views in a slot. Use AdManager.pageViewDidOccur(slotName, userInfo) to optionally attach some data to the ad flight. The AdManager.SlotListener API has changed due to this.
  • Richie Ads now works without Crosswalk. Crosswalk is still the default if Richie Ads is used via Maven, but the standalone AAR release also works without Crosswalk.
  • Fixed issue where MRAID downloads were still downloaded too often.

42

  • Minor fixes and refactoring.

41

  • MRAID downloads now set the If-Modified-Since HTTP header so that unnecessary downloads are avoided.
  • Fixed an issue where unzipping a zip file without directory entries would fail.

40

  • Removed RichieException and the requirement for exception handling in AdManager's constructor.

39

  • Fixed potential bugs related to not overriding the default locale.
  • Updated the compile and target SDK to 23.

38

  • If an AdView's owning Activity is destroyed, and the AdView.dispose() has not been called, the AdView instance attempts to dispose itself.
  • The expected byte size of an ad package is now verified, and a download is marked as failed if the downloaded size doesn't match.

37

  • Added API to get bitmaps of the placeholder images of ads.
  • Changed a number of server API endpoints to be more secure (HTTPS).
  • If the MRAID Javascript isn't found in an ad (e.g. due to the file or tag missing), it is injected on load. Note that if the WebView fallback is triggered, this feature requires Android 4.4 (API level 19).

36

  • Fixed issue where downloading an ad to external storage would fail due to the temp dir existing on internal storage. The temp directory is now per container, instead of there being just one centralized temp dir.
  • Fixed an issue where an ad copy potentially failed due to incorrect handling of unprocessed ads. Specifically, copying an ad multiple times in succession could fail sometimes.

35

  • Hotfix for the XWalkView -> WebView fallback. XWalkView fails with a (supposedly) fatal error, so it needs more severe handling.

34

  • If XWalkView initialization fails in AdView, use WebView as a fallback for ad content. We are investigating what causes this to happen.
  • Updated Crosswalk to version 14.43.343.25.

33

  • Fixed issue where videos weren't paused when an AdView was no longer visible.

32

  • The built-in singleton has been removed, causing changes to initialization. See the integration instructions for more information.
  • AdManager.startAdManager() has been removed. The Application instance and application identifier are now taken in in the constructor.
  • Slot ads are now vended as SlotAdFlight instances. AdView also has a new configure() method that takes them in.
  • View count tracking for slot ads is more reliable. Views are only only tracked once an ad has been shown, instead of when its vended.
  • Renamed AdView.invalidateAdContent() to AdView.dispose() to make its intent clearer.
  • Fixes for common crashes.

31

  • onPageLoaded() in AdView.Listener is no longer public.

30

  • Fixed issue where copying an ad could result in other ads not being handled.

29

  • Fixes for concurrency issues in ad state handling.

28

  • Renamed AdView.invalidate() to AdView.invalidateAdContent(). It doesn't do anything similar to View.invalidate(), which it was accidentally overriding.
  • Pull-to-refresh has been disabled in XWalkView. This is a global setting, and cannot be modified. If this is an issue for your app, please let us know.
  • Fixed issue where an AdView may not have displayed its contents correctly if made visible before loading finished.
  • AdView.Listener is an abstract class again, with an added method, onPageLoaded(). This callback is not really useful for users of this SDK, but can be helpful when debugging.

27

  • Added support for configurable view intervals in slot ads.
  • Fixed issue where animations would stop working in newly created AdView instances.

26

  • If loading an ad view's content fails, no impressions are posted.
  • Files are saved to disk atomically.

25

  • AdView now uses Crosswalk (XWalkView) instead of WebView as its content view. This is to increase the likelihood of identical content rendering on different devices.
  • Added an invalidation method to AdView, so that XWalkView can free up its resources properly.

24

  • MRAID files on disk are now versioned, and old versions are removed when the SDK is updated.

23

  • Fixed an issue where videos in AdViews didn't work on older versions of Android. For videos to work correctly, the Activity that displays AdViews has to be hardware accelerated.

22

  • View count parameters in slots.json are now mandatory.

21

  • mailto: links are supported in ad content.
  • Fixed a potential crash when fetching an ad.

20

  • Download speeds have been improved on some devices.

18

  • Added robustness to action handling.
  • Fixed issue where the slots JSON download was resumed when not necessary.

16

  • Fixed leaking resource

15

  • Added convenience methods to Log and verbose level logging.

14

  • Fixes to AdSlotManager to delete old ads that do not exist anymore
  • Fixes to AdSlotManager to handle file moving and diretory creation
  • Improvements to slot ad responsiveness.

8

  • Fixes to analytics.

7

  • Implemented view counts for slot ads.
  • richie-modal-browser:// URLs in ads are forwarded to the MRAID event handler.
  • Fixed analytics URL.
  • Various bug fixes.

6

  • Fixed an issue where removing (or adding) a PersistentListener in a PersistentListener callback would cause an exception.

5

  • Most public methods now assert that they're run on the main thread. (Exceptions to this rule: deleteAd, deleteContainer, hasLoadedAd, isLoadingAd)
  • An ad is copied, not downloaded, if an ad with the same URL already exists on disk.
  • PersistentListener events are posted on the main thread.
  • Fixes for reported crashes.

4

  • Downloads now support HTTP redirects.
  • Added support for persistent ads. See the integration instructions for documentation.

3

  • Fixed a bug which caused uncaught exception to be thrown if SSL certificate validation failed.

2

  • URL downloads will now automatically resume (if server supports it and it hasn't been turned off explicitly)
  • All background processing of ads is now executed on a background thread priority, ensuring that the UI thread of the host application always gets priority.

1

  • Initial versioned release
Previous
App SDKs