Fixed Embedded Clips instructions ignoring configured top and bottom insets. The Tap to Start button stays visible while the heading and instruction rows scroll above it on compact layouts.
Fixed web content in link modals and Sheets collapsing when pages use CSS viewport-height units such as vh or svh.
Reduced ad requests when ads are placed between Story pages. The SDK now preloads one creative at a time and retries an unfilled request only after the next scheduled ad opportunity. Replacement preloading starts at each opportunity so a one-page ad interval remains supported. Custom and first-party ads support forward and backward navigation; standard native and banner ads are placed forward only.
When ads are placed between Story pages, fixed duplicate ad opportunities during Story transitions and prevented stale ad insertion after navigation. Unused ad copies are removed after the pager settles, provided the same ad remains active. Reopening a Story now resets ad cadence consistently.
NextGen GAM Swipeable interstitials request the current window's safe content dimensions and uniformly fit the returned ad surface above host navigation on phones and tablets. The surface stays top aligned and horizontally centered; vertical drags remain Clips paging gestures instead of scrolling the ad document. Creative HTML and other ad formats are unchanged, and no public integration changes are required.
Tablet rotation now removes the current Swipeable interstitial and continues to the next available Clip without an advertising loader. Future ads reload off screen at the new dimensions, and passed placements cannot return.
Requires Android 6.0 / API 23 or newer for the core SDK; NextGen GAM requires API 24. See Choosing the SDK Release Line for upgrade guidance. Keep all Storyteller modules on version 12.0.0.
Android SDK 12.0.0 provides these changes on the separate Kotlin 2.1+ / Compose BOM 2026.06.01 line, with a minimum core SDK Android version of API 23. Version 11.7.0 retains its Kotlin 1.9 / Compose dependency line and API 21 core SDK support. See Choosing the SDK Release Line for compatibility and upgrade guidance; keep all Storyteller modules on the same exact version.
Tablet rotation for NextGen GAM swipeable interstitials remains under validation. Check the creative's layout after rotation before enabling this format in a tablet integration.
Added Story and Clip watch-time analytics across Stories, full-screen and Embedded Clips, and Android TV Clips. The new storyHeartbeat and clipVideoHeartbeat events report cumulative active time at five-second thresholds, while storyPageQuartile and clipVideoQuartile report 25, 50, and 75 percent progression milestones and existing completion events remain the 100-percent signals. Paused, buffered, backgrounded, off-screen, inactive, and ad-owned time is excluded. See Analytics for session, repeat, live-content, seek, privacy, and payload semantics.
Added independent server-configured font family and weight theming for rectangular Story and Clip titles in Compose rows, grids, category screens, and Search results. Configured family names resolve against matching host application res/font resources, with per-field feed-to-tenant inheritance and host theme/default fallback when a field or bundled font is unavailable.
Added shared light/dark sheet corner-radius theming through theme.sheets.cornerRadius and matching server Settings. Remote values override host values per appearance; 0 renders square top corners, while omitted or invalid values preserve the existing 32dp Search Filters and 8dp shared Compose sheet defaults.
Added light/dark multi-stop readability gradients for rectangular Story and Clip tile titles. Hosts can configure ordered StorytellerGradientStop values, while server themes can provide alpha-last #RRGGBBAA stops with feed-to-tenant fallback. Missing or malformed values preserve the existing Android title scrim and geometry.
Added server-configured Search result sections, including optional client-supplied Articles in a horizontal carousel, backend-controlled section order, an Articles content filter, standard result actions, and delegate-only visibility/tap analytics. Existing tenants retain the default Stories row followed by the Clips grid.
Added opt-in width-constrained Embedded Clips video sizing through local StorytellerEmbeddedClipsVideoSizing values and the remote theme.behavior.player.clips.embeddedVideoSizing field. The enabled mode preserves source aspect ratio, centres content and supported video ads at full viewport width without side cropping, and keeps legacy sizing as the default.
Added optional localized long descriptions to the Clips Player. Descriptions appear below the title and above navigable categories, share one More/Less control with other overflowing metadata, and return to the collapsed state when the viewer changes Clip. Category targets remain independently actionable.
Added automatic silent animated thumbnails to Story and Clip Compose rows and grids. At most one eligible visible tile plays across all foreground lists; rectangular and circular Story tiles use their matching shape-specific assets, rectangular Clip tiles use the Clip animated asset, and circular Clip tiles remain static. Static thumbnails remain as the missing shape-specific asset, loading, failure, legacy-response, reduced-motion, scrolling, and background fallback, and player resources are released whenever no tile is eligible.
Added nullable frequency and initialIndex overrides to StorytellerClipsAdConfiguration. Direct, Embedded, Compose Row/Grid, and View Row/Grid Clips presentations can override either eligible remote between-Clip cadence field independently without mutating global Settings. Null or invalid values inherit that remote field, zero remains a valid initial index, and remote strategy/source, consent, modules, timeout, and fill remain authoritative.
Added NextGen GAM swipeable interstitials for direct and Embedded between-Clip placements. The additive setClipsSwipeableInterstitialAdUnit(...) API and SWIPEABLE_INTERSTITIAL provider value support swipeable-first, standard-GAM-first, single-route, and no-fill fallback ordering per presentation while preserving the exact Google view, request/view-lifecycle destruction, a bounded late-result-safe load, Storyteller/client KVPs, and GAM analytics with adFormat=swipeableInterstitial. Stories, opening ads, IMA, bottom banners, Legacy, and GAM v24 are unchanged; production use requires Google/GAM activation and compatible trafficking.
Updated native ad rendering across Legacy GAM/AdMob, GAM v24, and NextGen, improving playback and progress restoration, navigation, media sizing, and control placement while preserving the existing public integration APIs and Google-owned ad views.
Updated the NextGen GAM product to Google Mobile Ads NextGen 1.4.0 and migrated banner loading, view ownership, visibility, and disposal from deprecated BannerAd APIs to Google's Activity-owned AdView path.
Added a fixed, accessible close button to SDK-owned Sheets in light and dark appearances. Tapping it dismisses the Sheet while preserving the existing grabber and swipe-down dismissal behavior.
Added optional theme.instructions.button.textSize and lineHeight controls for the Clips Instructions call-to-action while preserving the existing 16sp/21sp defaults.
Added the Clips Instructions screen to Embedded Clips for both Compose and StorytellerClipsFragment, sharing the same one-time per-user completion state as full-screen Clips.
Updated Android SDK installation guidance to use Maven Central and the com.getstoryteller group. Existing integrations using CloudRepo or MyGet should follow Migrating from the Legacy Storyteller Repository before both legacy repositories sunset with the SDK 12.0.0 release.
Fixed Search so returning from a result preserves loaded results and scroll position instead of unnecessarily reloading the active session.
Fixed consumed Clips ads so navigating back after advancing to the next Clip does not restore or request the same ad slot again.
Restored the mute control for Clips opened from Cards and prevented non-navigable single-Clip presentations from showing category links that open an empty player.
Fixed skipped IMA pre-roll transitions so the ad does not briefly zoom before the first Clip opens.
Fixed full-screen and Embedded Clips so adjacent, off-screen, or overlay-hidden players pause as soon as they lose playback ownership and cannot restart from refresh completion or force-resume, preventing overlapping audio after vertical paging or while category/profile surfaces cover the player.
Corrected Android TV repeat-one analytics so each natural repeat pass emits the existing completedLoop event instead of incorrectly emitting finishedClip.
Fixed API-normalized external search-result analytics so their existing body properties are preserved through delivery.
Fixed Android font-family resource and file-backed font weight selection on API 21–27 so configured numeric weights use the closest declared family face instead of collapsing to normal or bold. API 28+ behavior is unchanged.
Fixed Followable Categories so Android uses the backend's trimmed, lowercase dynamic category type code for follow and unfollow activity, Following state, and personalization attributes. Custom categories that previously arrived as legacy Other remain available through the compatible Other state, while built-in Player, Team, and other legacy category behavior is unchanged. The custom-attribute key __storyteller_followed_category_attribute_keys__ is reserved for SDK use.
Fixed Followable Category status after a CMS category type change, preventing a different category with the same external ID from incorrectly appearing followed.
Fixed internal sdkInitialized analytics so successful and failed initialization events are retained when enableStorytellerTracking is disabled. The event remains excluded from customer-facing onUserActivityOccurred() callbacks, preserves the actual tracking setting, and includes the existing hashed user identifier only when enableRemoteViewingStore is enabled.
Fixed Clips bottom banners so effective-bottom Embedded Clips use the available video geometry. Width-constrained video with enough measured bottom letterbox for the banner and its 16dp lower band now places the progress track at a fixed 16dp before the banner; without qualifying letterbox space, the existing banner-before-progress order remains unchanged. The compact 8dp progress region is retained, system and caller navigation are excluded from the letterbox measurement, direct/modal and no-banner layouts retain the 80dp target, and eligible Embedded above-action placement remains above the primary action and banner.
Fixed Embedded Clips bottom-banner layouts so host navigation stays clear and the action button remains aligned with the captions control. Banner taps and horizontal video scrubbing retain independent behavior.
Fixed Story and Clip list analytics parity: tileVisible now includes the originating content's complete custom metadata, while onTileTapped exposes additive nullable title, 1-based tileIndex, and custom metadata fields without changing the existing Story/Clip subtype constructors. Refreshed or reordered lists use the current displayed position and never reuse another tile's metadata.
Fixed custom Search back icons on Android so images with smaller intrinsic bounds, whether supplied as drawable resources or remote images, are centered inside the existing navigation touch target.
Fixed the Clips instruction screen so its default light and dark artwork accurately distinguishes vertical Clip navigation, horizontal video progress, pause, tag navigation, and category navigation gestures while preserving custom instruction icon overrides.
Fixed Search so changing the device appearance while Search or its Filters sheet is open applies the matching light or dark theme without reopening Search, while preserving the active Search session.
Fixed the Clips Instructions call-to-action label so it consistently uses theme.instructions.button.textColor, even when a host Compose text style supplies a conflicting colour.
Fixed Clips Instructions eligibility so local and remote Clip viewing history no longer suppresses the screen. Only explicit prior Instructions completion suppresses it, unless theme.instructions.show is false. After upgrading, users who viewed Clips but never completed Instructions may therefore see the screen once.
Fixed full-screen and Embedded Clips so a selected Following feed refreshes after returning from Manage Favourites or another host screen, including when an off-screen Following change leaves stale non-empty content. Explicit reloadData() calls preserve and refresh the selected For You or Following feed, and retained Embedded Clips players now respect host lifecycle playback ownership and user-reset cache invalidation.
Fixed Android Clip mute and unmute analytics activities to include the Clip's custom metadata, preserving integrator-defined values such as content_id in delegate callbacks and analytics delivery.
Fixed external deep links opened over an active Story or Clip player so one dismissal transaction and its normal analytics/host callback complete before the latest valid request opens. Story and Clip dismissal analytics use deepLinkReplacement; external Sheets remain single-instance through Activity recreation. Malformed links leave the active player unchanged; unavailable Story/Page/Category/Clip content reports onError, while unavailable Sheets retain their inline error UI. Before upgrading to 11.7.0, clients can temporarily sequence an unconditional dismissPlayer(animated = false) completion into openDeepLink(...).
Fixed provider-controlled AdMob native video in Stories so playback is refreshed after the device screen is turned off and back on when the ad had been playing before the interruption; Story progress remains paused until Google confirms playback has resumed.
Improved first-view Clips bottom-banner loading by beginning an eligible request after the active content Clip player is created instead of waiting for later content-load handling. Disabled placements, ad Clips, inactive or adjacent pages, unsettled swipes, and paused hosts do not request; Legacy GAM also reuses the provider-loaded banner view without issuing a duplicate load.
Corrected Clips bottom-banner analytics across Ad Opportunity, Ad Requested, Ad Loaded, Opened Ad, Ad Action Button Tapped, Ad Failed To Load, and Ad Paid. These events now use adPlacement=Bottom Banner and adSlotType=bottomBanner, omit full-screen adStrategy and adIndex, and retain clipIndex; clicks also include the request's adRequestId and playerSessionId, while Ad Opportunity continues to omit adUnitId by design.
Fixed Clips bottom-banner analytics so a presented Legacy GAM or NextGen banner emits one openedAd event with adSlotType set to bottomBanner. Prefetched banners do not emit, and lifecycle or navigation reattachment does not duplicate the event.
Fixed Clips bottom banners so banner taps and video scrubbing stay independent. Effective bottom placement keeps the visible progress track clear of the ad, while a transparent scrub surface over the banner region preserves the pre-banner drag-to-scrub reach: horizontal drags scrub without opening the ad, taps on the ad still open it, and the surrounding separation bands remain non-clickable. Eligible Embedded above-action placement remains above the primary action and banner; no-banner layout is unchanged.
Added the SDK-owned VAST bid defaults to GAM video tags generated by StorytellerImaModule.initWithGam(...), including physical-pixel viewport dimensions and mute-aware playback signals. Host tagParameters still merge last and can override every generated value; complete tags supplied through initWithAdTagUrl(...) remain unchanged.
Added the optional com.getstoryteller:ads-ima module for one true Google IMA pre-roll before the initially opened Clip on Android phones and tablets. The module supports GAM parameter callbacks or a complete HTTPS ad-tag callback, coexists with Legacy Ads, GAM v24, or NextGen Ads, and uses the core SDK's existing Media3 IMA runtime without an additional host dependency. Robust fail-open handling, lifecycle and navigation ownership, safe-area controls, and analytics keep content accessible while preserving later native Clips ad cadence and bottom banners.
Restored StorytellerClipsAdConfiguration.preRollEnabled as a default-true per-presentation control and added the optional betweenClipsAdProviderOrder provider allowlist/order with public VAST, GAM, and ADMOB values. Null preserves registered module/custom-module behavior, an explicit order overrides recognized standard providers for that presentation, and an empty list disables standard between-Clip requests. Existing omitted calls and the positional StorytellerClipsAdConfiguration(false) bottom-banner behavior remain source and binary compatible.
Exposed StorytellerAdRequestInfo.ItemInfo.contentId for dynamic ad callbacks while keeping it out of ItemInfo.toString() and incidental request logs.
Added request-scoped VAST/GAM/AdMob resolution for Clips so presentations can choose VAST-first, GAM-first, a single provider, or no standard providers without mutating process-wide module order. Provider attempts remain sequential and share the slot and adRequestId; diagnostics and analytics now attribute request, failure, loaded, and paid events to the attempted or winning provider.
Added asynchronous GAM request-builder enrichment across Legacy, GAM v24, and NextGen so host-owned APS, Nimbus, or equivalent bidder work can complete before native or bottom-banner requests are built and loaded. The additive completion API supports success with a prepared or replacement builder, no-fill, failure, cancellation, and exactly-once completion while preserving the existing synchronous callbacks.
Fixed Clips full-screen ads when the remote initialIndex is missing or null: Android no longer disables every slot and instead uses frequency-only later cadence, while the standard opening ad-as-Clip still requires an explicit zero index.
Fixed high-volume Stories rows failing with 414 URI Too Long by splitting Android poll hydration into bounded requests. Successfully hydrated polls and unrelated Story content now remain available when one poll batch fails.
Fixed Clips followable-category and profile navigation so rapid taps use the category bound to the tapped Clip instead of reusing a previously playing Clip.
Fixed full-screen and Embedded Clips so a currently visible empty top-level feed automatically refreshes after an app-managed Followings change, including setFollowedCategories(...), while a visible non-empty feed remains selected and uninterrupted.
Restored StorytellerAdMobModule and its runtime support in the ads24 artifact after it was omitted from 11.6.0. Applications upgrading from 11.5.1 can keep their existing AdMob configuration; use the same exact 11.6.3 version for sdk and ads24. See Ads.
Fixed programmatic Clips opening so a missing or invalid Clip ID reports failure instead of leaving an infinite loading state.
Fixed the Clips progress bar so it remains minimized while navigating between Clips and expands only when the user explicitly pauses playback.
Fixed the Clips Following empty-state call-to-action label so it consistently uses the configured theme.buttons.textColor in light and dark appearances.
Fixed Storyteller.user.setFollowedCategories(...) so app-managed replacements omit category IDs missing usable metadata from a successful lookup and apply the resolved subset. If none resolve, the followed state is cleared; request failures still preserve the previous state.
Added Clips player typography controls for selected and unselected feed-switcher labels, clip titles, and category-navigation labels while preserving existing styling defaults when values are omitted.
Added four optional Embedded Clips spacing controls covering title, categories, expansion controls, progress, and primary actions. Unset or invalid values preserve the current Android layout.
Added GAM request-builder callbacks for native and bottom-banner requests so host apps can attach bidder SDK parameters and other custom request settings.
Expanded the Clips Profile Screen with light/dark appearance controls and support for a horizontal Stories row, a Clips grid, or both. The screen remains behind the existing tenant rollout gate.
Added a modal Clips layout option that keeps lower controls above the safe screen bottom on tall viewports while preserving the existing video geometry, Embedded Clips layout, and ad behavior.
Added light/dark Clips progress-bar styling for played and remaining tracks, active scrubbing, and time labels, with independent fallback for partially configured themes.
Added light/dark Embedded Clips progress-bar positioning above a visible primary action or at the bottom of the media. Retained players now refresh the position after an in-process appearance change.
Added complete light/dark Search theming for backgrounds, inputs, filter controls, suggestions, no-results content, the Filters sheet, and its Apply button. Partial themes fall back per field and omitted Apply-button colours preserve the contrasting legacy treatment.
Added suspend Storyteller.user.setFollowedCategories(...) support so app-managed following integrations can atomically replace the complete followed-category set before reloading Storyteller content. See Set followed categories.
Fixed Embedded Clips scrubbing so cancelled bottom progress gestures dismiss the timecode and expanded scrub overlay instead of leaving stale UI over continuing playback.
Fixed Search opened from Story and Clip players so it consistently inherits the active player appearance instead of reusing a stale or global appearance.
Fixed Android ad analytics so first-party GAM and AdMob request attempts report the exact resolved adUnitId, including fallback and bottom-banner requests, and subsequent Stories and Clips ad lifecycle events include the same unit when available.
Fixed Clips native-ad metadata becoming unreadable over light creatives across Legacy Ads, GAM v24, and NextGen.
Fixed Clips full-screen ad cadence so a missing remote initial index no longer triggers opening pre-roll. Opening pre-roll now requires it to be explicitly enabled and scheduled before the first Clip.
Fixed a Story player crash that could occur after backgrounding, reopening, and dismissing the player.
Fixed a crash when rapidly closing the Clips player.
Fixed local Clips viewed, liked, and recently viewed state so it persists across app or process restarts when remote viewing storage is disabled.
Storyteller.StorytellerClipCollectionConfiguration.adConfiguration is now nullable (StorytellerClipsAdConfiguration?, default null). Full-screen Clips still enable opening pre-roll and bottom banner placements when the configuration is omitted, while Embedded Clips treat omitted configuration as opt-in with both placements disabled. Hosts that read configuration.adConfiguration directly must handle null.
Added Clips category navigation behavior, including category-label delimiter support and optional leading-hashtag hiding for category-derived Clip player titles.
Added Search filter visibility behavior, allowing the Sort, Date Posted, and Content Type filter sections to be shown or hidden independently while preserving native defaults for hidden sections.
Made Embedded Clips opening pre-roll and bottom banner placements opt-in by default across rememberStorytellerEmbeddedClipsState, StorytellerEmbeddedClipsState, and both StorytellerClipsFragment.create(...) overloads. Pass a concrete StorytellerClipsAdConfiguration to enable either placement.
Added Clips opening pre-roll handling for zero-index ad slots, requesting the ad before the first Clip while preserving existing between-Clip cadence behavior.
Added remote theme support for theme.behavior.following.feedSwitcher.selectionStyle so Clips For You / Following switchers can use the legacy selected underline or selected text-weight styling.
Missing or unknown values default to underline.
Updated Clips For You / Following switcher labels to use the configured SDK theme font in both underline and text-weight modes.
Added the Storyteller:ads-vast module for generic VAST linear video ads through the standard Storyteller.modules flow. The first release supports compatible VAST 2.0, 3.0, 4.0, 4.1, and 4.2 parsing, wrappers, media selection, click-through and click tracking, impression and playback tracking, skip tracking, static-resource VAST Icon overlay rendering, and deferred VAST error handling.
Added StorytellerGamVastModule for Google Ad Manager VAST tag setup through the Storyteller:ads-vast module, including host callbacks for iu, description_url, optional url, cust_params, SDK-owned GAM defaults, and merge-last top-level tag parameter overrides.
Added SDK-owned VAST bid defaults to generic VAST and GAM VAST requests, including physical-pixel vw/vh, mute-aware vplay, and client override support through generic requestParameters or GAM tagParameters.
Added StorytellerClipsAdConfiguration for Clips presentations so hosts can disable opening pre-roll and bottom banner placements per presentation. preRollEnabled = true by default permits an eligible opening zero-index pre-roll before the first Clip.
Added the tileVisible analytics event for Story and Clip list tiles, including tileIndex and list context fields while avoiding duplicate emissions from app foregrounding or player return alone.
Added player-session preloading for upcoming Clips and Stories pages, including nearby media, caption, and action asset preparation while avoiding duplicate downloads.
Improved Clips feed refresh behavior so viewed clips stay behind unviewed clips and newly dismissed clips append after fresh content.
Aligned Cards audio-toggle placement with Card theme padding and rounded-card geometry while preserving the 48 dp tap target.
Fixed Clips adRequested analytics so full-screen and bottom-banner requests include source clip action context (clipHasAction, clipActionType, and clipActionText) when available.
Fixed Clips zero-index pre-roll ad requests so the CMS-configured request timeout, or a 5 second SDK fallback when no CMS timeout is configured, starts the first clip immediately when an opening ad response is late. Later between-clips ad requests continue using normal loading behavior.
Fixed VAST ad presentation and playback stability, including first-open pre-roll startup, skip countdown display, CTA-return skipoffset handling, duplicate skip lifecycle events, icon positioning, white-flash transitions, and AdChoices static-resource overlay rendering while ignoring unsupported brand image metadata.
Fixed Story captions so repeated taps continue toggling captions on the same Story and after navigation.
Fixed video preloading queue cleanup so concurrent preload completion or cancellation no longer crashes while swiping Stories.
Fixed Clips instructions behavior so first-time instructions block underlying player interactions, handle back correctly, and keep player scrolling disabled until dismissed.
Fixed lock-screen Clip player launch animation so category-to-clip opens no longer briefly widens from both sides.
Fixed Embedded Clips invalid collection loads so data-load callbacks report failure instead of success.
Added publisherProvidedId support to StorytellerGamModule.init so GAM ad requests can pass Publisher Provided IDs through Google Mobile Ads' dedicated PPID request field.
Fixed Clips player lock-screen behavior so clip sessions no longer appear over keyguard by default, preserving normal unlock and share flows.
Fixed Clips native ad playback resume after CTA or lifecycle returns so active native ads continue from the expected state.
Fixed automatic round Story rows so bounded-height hosts keep stable tile sizing after refresh and circular thumbnails remain centered with consistent spacing.
Fixed Card action button text alignment so button-level style.button.textAlignment is respected when card-level alignment differs.
Fixed list views hosted in dialogs or modal windows without a ViewModelStoreOwner so StorytellerListView no longer crashes during Compose setup.
Added the Clips instructions screen with theme-driven content and one-time display behavior for new users.
Added theme.engagementUnits.poll.showImageAnswerGradientOverlay to control the default bottom gradient overlay on image poll answers.
Added support for Cards with aspectRatio = "3:4".
Added raw-resource Lottie overrides for Clips like transitions with theme.player.icons.like.animation.liked and theme.player.icons.like.animation.unliked.
Added Storyteller.useCustomShareHandling and StorytellerDelegate.onShareButtonTapped(text, title, url) for host-managed Story and Clip share handling.
Added theme.behavior.player.clips.enableProfileScreen Settings support for the newer Clips profile screen, while keeping the legacy Followable Category screen as the default.
Added Storyteller.user.getFollowableCategories() to fetch backend-backed followable category metadata and the current user's followed state.
Added clipId support for Embedded Clips so host apps can open a specific clip inside an embedded player.
Replaced web link handling in Stories, Clips, and Cards with the Compose LinkModal, preserving playback and sheet state while supporting internal and external navigation.
Fixed Clips navigation and state issues, including the missing root back button, infinite loader after clip collection links, Following empty-state fallback, app-resume pause preservation, and stale
real-time updates while the player is open.
Fixed Clip captions so API-disabled captions cannot remain visible from a persisted captions preference.
Fixed Story rendering and navigation issues, including scaled-down active stories, story ad tap-forward failures, and pager transform state after view reuse.
Fixed GAM and AdMob native ad behavior across video controls, foreground resume, CTA re-entry, video looping, AdChoices reparenting, blank template requests, NextGen mute visibility, and bottom-banner
click analytics.
Fixed ad analytics payloads for adSessionSummary, adUnitId, clipIndex, clipActionUrl, collectionClipCount, and followable icon ActionButtonTapped reporting.
Fixed UI regressions around Clips mute button sizing, like animation rendering, light-mode WebView/link modal bounds, search suggestion text overlap, full-height sheet loading resize, and legacy
parcelable cast warnings.
GAM v24 compatibility: When using the ads24 module (Google Ad Manager SDK 24.x), upgrade to SDK 11.3.5 or later. SDK 11.3.4 is not compatible with ads24 and will throw
NoSuchMethodError at runtime when ads load.
Added settings-theme Cards audio behavior for video Cards, including session-scoped mute/unmute behavior, no-audio Card handling, and cardAudioToggled analytics for explicit user mute/unmute
actions.
Added theme.cards.audio.mutedIcon and theme.cards.audio.unmutedIcon for Cards audio button icon overrides. The compatibility theme.cards.audio.unavailableIcon field is not rendered because
no-audio Cards hide the audio control.
Updated the default Cards audio button treatment and removed temporary Dev Zone Cards audio overrides so production behavior is driven by CMS/API settings.
Kept Cards audio state controlled by the Cards audio button after session initialization, independent of hardware volume or silent/ringer changes.
GAM v24 compatibility: When using the ads24 module (Google Ad Manager SDK 24.x), upgrade to SDK 11.3.5 or later. SDK 11.3.3 is not compatible with ads24 and will throw
NoSuchMethodError at runtime when ads load.
Improved row accessibility by making list rows scale with system font size when using automatic rows mode.
Added googleAdSource support for custom StorytellerModule implementations.
Migrated SDK annotation processing from kapt to KSP while keeping Kotlin on 1.9.0, which removes the old Java 17-only kapt workaround and restores JDK 21 build compatibility.
Updated StorytellerAnalyticsContext documentation to reflect the current public type alias shape: Map<String, String>.
Extended Cards theme support to allow light/dark text color overrides and text panel backgrounds in Cards with text bellow the content.
Added cardVideoStarted, cardVideoHeartbeat, and cardVideoCompleted analytics events for video cards. cardVideoHeartbeat and cardVideoCompleted reuse durationViewed to report active
playback duration.
Added Stories support for the new Google ad analytics events: adOpportunity, adRequested, adLoaded, adFailedToLoad, adPaid, and adSessionSummary.
Added support for externalApp actions in Custom Native Ads.
Added enableFollowableCategorySwipeFromRightEdge player theme property to allow disabling the right-edge swipe gesture to open Followable Categories.
Fixed Clips feed refresh and pagination issues across For You, Following, and fresh-feed loading.
Fixed duplicate deeplink navigation after dismissing stacked search flows.
Fixed card video playback when a reordered collection starts with a video card.
Fixed Clips followable icons with ActionType.NONE so the icon stays visible but does not open the followable screen or fire followable-category tap analytics.
Fixed clip player chip alignment and tablet story previous-tap hit zones.
Fixed banner story pages layout after tablet rotation.
Added support for readOrderingMode (Basic, StartedAware) from the backend Stories responses. When StartedAware is set, rows order stories as NeverOpened → InProgress → Completed while
retaining pinned/live/sort ordering. Default remains Basic for backward compatibility when the field is absent.
Added clip preloading APIs for first open to reduce initial load time for Clips collections.
Moved mute button to right-hand rail in Clips player for improved UI consistency
Updated action button widths to follow industry standards - buttons no longer span full width. Button width type is now configurable via CMS and received from backend, allowing per-action
customization
eventTrackingOptions can now only be set during SDK initialization by passing a StorytellerEventTrackingOptions object to the initialize method. Runtime modifications are no longer supported.
The property remains publicly readable via Storyteller.eventTrackingOptions. To change tracking options, you must reinitialize the SDK. See Privacy and Tracking for more
information
Removed deprecated Storyteller.currentUserId method for VPPA compliance
Removed showVoteCount property from EngagementTheme for Polls
Removed show property from TitleTheme
Removed default isScrollable parameter from StorytellerClipsGrid and StorytellerStoriesGrid
Added support for custom context data in analytics events. Context allows integrators to provide additional analytics attribution data for Storyteller rows, grids, cards, home screens, and
embedded clips. For details, see Context.
Added Progress Bar for Clips Player with scrubbing/seeking functionality and analytics events (scrubbedClip, completion type tracking)
Added Stories Captions support with CC button, enabling/disabling events, and global state persistence
Added Configurable Default Mute State with persistent mute preferences
Added Buttons for Cards with display, theming, and analytics support
Added Long Engagement Unit Answers supporting multi-line text display in Polls and Quizzes
Enhanced Following behavior with new public API methods and conditional logic based on followingFrom setting
Added automatic user attribute management for followed categories where Storyteller is handling all following logic, without the need for storing and syncing followed categories app-side.
See Following Model for more information
Added Card Viewed/Tapped Ordering for improved card content organization
Added actionLinkId property to analytics events with page/clip actions
Added story/clip context properties to ad analytics events
Added adFormat support for First-Party ads in Stories
Added completionType property to finishedClip and completedLoop events
Added captionsEnabled property to all Story analytics events
Added hasButton property to all Card analytics events
Added native back button support for webview navigation
Implemented VPPA compliance measures including SHA256 hashing for User IDs for requests and removal of Content Id from ad requests. See PrivacyAndTracking for details.
Deprecated Storyteller.currentUserId method as part of privacy enhancements. See Users for updated user management methods.
Added enableFullVideoAnalytics flag to eventTrackingOptions for granular video analytics control. See Analytics for details.
Introduced Cards feature - a new content type that can be displayed alongside Stories and Clips with full theming support, personalization, targeting, and analytics. See Cards for
event details.
Added Secondary Actions support for both Stories and Clips, allowing multiple action buttons per content item. See Analytics for additional fields added.
Cards support video playback based on visibility and include comprehensive analytics events (Card Tapped, Card Viewed). See Analytics for event details.
Enhanced analytics with new properties for Secondary Actions and Cards integration. See Analytics for complete event documentation.
The openDeepLink method now requires an AppCompatActivity instead of an Activity. Please update your calls accordingly. See DeepLinking for more details.
Introduced Sheets, a new way to display web content within the SDK experience. Sheets can be triggered via action buttons or opened directly.
See AdditionalMethods and DeepLinking for details.
Added analytics events for OpenedSheet and DismissedSheet. See Analytics.
dismissPlayer method now has an optional onCompletion callback that is called when the player is dismissed. Please, see the Additional Methods for more details
Enabled displaying the exact number of tiles per row on various screens. Please, see the visibleTiles property in the "Setting categories and collections, applying themes and styles" section of
the StorytellerCompose for more details.
Enabled changing the text casing for "Navigating Stories" header on the Instruction screen. Please, see theme.instructions.headingTextCaseThemes for more details.
Implemented custom fonts for the Instructions screens headers. Please, see theme.instructions.headingFontThemes for more details.
Added support for chip borders. Please, see the updated section Themes for more details.
Added customScreenForCategory() to StorytellerDelegate for handling custom followable category actions. StorytellerDelegates.md
Added useCustomScreenForCategory() to Storyteller for allowing the developer to conditionally show the custom screen for a specific category or
default. StorytellerDelegates.md
Note that if you are not using this feature you can simply return the default return values for these delegate methods.
added support for Standard ads GAM Google Ads Manager
introduced Storyteller Gam module StorytellerGamModule. It can be used to facilitate the integration of native ads into the Storyteller SDK so that the adverts are injected between the stories and
clips. see Ads for more details
added Storyteller.module list during initialization to enable the native ads feature. see StorytellerModule for more details
added new liveChip properties to rectangularTile the theme, see Themes for more details
added new fade loading effect for images in rows and grids when transitioning from placeholder to the actual image
added support for linking to a specific clip within the moments tab including correct analytic events surrounding this
exposed the property canGoBack from embedded clips to allow querying about the possibility of going back in the embedded clip collection,
see StorytellerClipsFragment for more details
added support for initial Category within the openCollection method, see Additional Methods for more details
added support for initial category for the deep links. Via the query param categoryId you can specify the initial category to open, see DeepLinking for more details
added support for initial category for embedded clips. see StorytellerClipsFragment for more details
renamed theme.player.liveChipImage to theme.player.liveChip.* that contains textColor, image, backgroundGradient, and backgroundColor properties for better customization,
see Themes for more details
removed theme.tiles.rectangularTile/circularTile.liveChip.textColor in favor of theme.tiles.rectangularTile/circularTile.liveChip.readTextColor and
theme.tiles.rectangularTile/circularTile.liveChip.unreadTextColor, see Themes for more details
reloadData() for embedded clips will take you back one level if not on the top level of the collection. se Reload Data
in StorytellerClipsFragment for more details
fixed an issue with tileSpacing where it was applied twice, so make sure to adjust your theme if you were using 2x tileSpacing value
introduced Followable Categories, enhancing user interaction and engagement by allowing users to follow/unfollow categories. For more details, please see User Customization
Embedded Clips has a new property bottomInset which can be used to set the bottom padding for the Clips Player, please see Inset Management section
in StorytellerClipsFragment for more details
Storyteller has a new property isSearchEnabled which can be used to check if the search is enabled for the current tenant, please see Additional Methods for more details
added accessibility support for Embedded Clips, Search, Instructions and Compose
rewritten StorytellerListViews fully in Jetpack Compose, please see StorytellerCompose for more details
Clip collections are not looping on StorytellerClipsFragment anymore (user cannot advance from last to first Clip), please see StorytellerClipsFragment
Please note that the Storyteller SDK is now distributed via CloudRepo. Please see GettingStarted for more details. MyGet repository is not working anymore
The only change required is to add the following maven repository to your project's build.gradle file and MyGet can be removed:
Composable views are part of the main SDK. Please refer to the StorytellerCompose documentation for more details.
instead of setting params on Android views (which are now marked as deprecated), StorytellerListViewConfiguration object was introduced. Please see StorytellerClipsView
and StorytellerStoriesView for more details.
Composable views are now also using StorytellerListViewConfiguration object. Please refer to the StorytellerCompose documentation for more details.
fixing an issue where it was possible for video playback to not start when viewing a video Page
fixing an issue where it was possible for Stories not not be marked as Read
fixing an issue where it was possible for video playback to start in the background
fixing an issue where it was possible for video playback to freeze unexpectedly
fixing an issue where it was possible for the instructions screen to layout incorrectly
fixing an issue where it was possible for the share button to not be clickable in certain scenarios
Improvements:
improving the performance of the Story Player
New Features:
adding the ability to enable/disable Storyteller event tracking via the SDK method enableEventTracking() and disableEventTracking - please see Additional Methods for more
information
adding action buttons instead of swipe ups for Stories
fixing a bug where the swipe up to in_app links was not working
New Features:
adding additional method openDeepLink(String,Boolean,(Error) -> Unit) to make Storyteller SDK integration easier - please see AdditionalMethods
and Deep Linking
adding secondaryColor property to themes - please see Themes for details
fixing a bug where it was possible for a user to be presented with a black screen with no loading indicator when opening the story view and on a slow connection
fixing a bug where it was possible for a loading indicator not to be presented when viewing an image page in certain circumstances over a slow/unreliable network
Improvements:
improving the handling of retries when assets in the story view fail to load
Deprecations and Changes:
adjusting the behavior of the instructions modal on tablets so that it appears over the story view rather than over the place in the app where it was presented from
cancelling requests to preload content for the story view if the user is on a slow network connection in order to maximize the chance they are able to view the content they have on screen
fixing a bug where it was possible for tiles to appear blank in the story carousel
removing a memory leak from within the SDK
fixing a bug where if the rowScale for a row was changed while the row was being rendered, the story tiles could appear at the wrong size
fixing a bug which could cause the SDK to crash in certain circumstances
fixing a bug where it was possible to get stuck in the story view when skipping through a large number of stories and pages
fixing a bug where it was possible for the story view to get stuck whilst dismissing
Improvements:
improving the behavior of the SDK with respect to transitions when a non-translucent status bar is used for the activity where the row view is displayed
improving the animation when a story is dismissed and returned to the row view
fixing a bug where stories were not marked as read until reloadData was called
fixing a bug where it was possible for a story to be marked as unread when a page was removed from the story
fixing a crash which could occur when retrieving or persisting encrypted data
fixing a bug where it was possible for the Story View to open in landscape mode
New Features:
adding a method to the StorytellerListViewDelegate called tileBecameVisible to allow the integrating app to be notified when a tile is visible on screen
fixing a bug where it was possible for Story events to fire for Ads
fixing a bug where it was possible for the SDK to crash when rendering certain client supplied ads
fixing a bug where it was possible for the SDK to crash when adding or removing pages to already published stories
Improvements:
improving fault tolerance around network timeouts
identifying and fixing 2 memory leaks within the SDK
Deprecations and Changes:
exposing a new FinishedAd event which rolls up the DismissedAd, SkippedAd and ViewedAdPageComplete events so it's easier to tell when an ad is not being presented to the user
fixing a crash which occurred when opening the Story View on Android 8
New Features:
UI improvements and bugfixes
UI Changes:
adding support for swiping up to the App Store or to a location within the integrating app from a page or an ad - see StorytellerRowViewDelegate for more details
fixing some bugs in the page navigation behavior around which pages are opened when stories are read/unread
fixing a bug where it was possible for durationViewed to be 0.0 in situations where the user had viewed content
Improvements:
improving the transitions when tapping a tile in the story row to open the Story View and when pulling down to dismiss the Story View
improvements to preloading of stories to make swiping and tapping through the Story View feel much smoother
encrypting user access tokens for the Storyteller API at rest
ensuring openedReason is included on OpenedAd events
ensuring openedReason is included on OpenedPage events
ensuring that DismissedAd events report the durationViewed and pagesViewedCount properties
New Features:
adding a ShareSuccess event to the SDK
adding the ability to supply ads to the SDK via the getAdsForRow callback on the StorytellerRowViewDelegate
adding new events for tracking user progress through ads - see Analytics for specifics
Deprecations and Changes:
when calling openPage or openStory, the onFailure callback will be called if the ID passed to openPage or openStory doesn't match a valid story or page
removing the onSuccess callback from openPage and openStory. If you would like to handle this case then please implement the onUserActivityOccurred callback and listen for openedStory or
openedPage events with an openedReason of deeplink
fixing issue where UserActivityData class did not have publicly visible members
New Features:
adding support for first-party ads loaded from the Storyteller CMS
emitting events related to ads playback via the onUserActivityOccurred callback
adding the ability to disable the story icon in the story view on a per-tenant basis
adding the ability to include a timestamp in the story view on a per-tenant basis
adding the ability to share a link configured in the CMS for each page (rather than the page's media) and the ability to configure this on a per-tenant basis
(beta) adding onUserActivityOccurred callback to StorytellerRowViewDelegate so the containing app can receive notifications when users take actions within the SDK
Deprecations and Changes:
removing onChannelsDataLoadStarted, onChannelsDataLoadComplete and onChannelDismissed callbacks from StorytellerRowViewDelegate
adding onStoriesDataLoadStarted, onStoriesDataLoadComplete, and onStoryDismissed callbacks to StorytellerRowViewDelegate
renaming public method openChannel to openStory
moving the store of read/unread pages from the server to the client
{"slug": "changelog", "page_title": "What's New", "page_url": "Changelog/", "canonical_url": "/android/Changelog/", "markdown": "# Changelog\n\n## **11.7.1** - 10/09/26\n\n### Bug Fixes\n\n- Fixed Embedded Clips instructions ignoring configured top and bottom insets. The Tap to Start button stays visible while the heading and instruction rows scroll above it on compact layouts.\n- Fixed web content in link modals and Sheets collapsing when pages use CSS viewport-height units such as `vh` or `svh`.\n- Reduced ad requests when ads are placed between Story pages. The SDK now preloads one creative at a time and retries an unfilled request only after the next scheduled ad opportunity. Replacement preloading starts at each opportunity so a one-page ad interval remains supported. Custom and first-party ads support forward and backward navigation; standard native and banner ads are placed forward only.\n- When ads are placed between Story pages, fixed duplicate ad opportunities during Story transitions and prevented stale ad insertion after navigation. Unused ad copies are removed after the pager settles, provided the same ad remains active. Reopening a Story now resets ad cadence consistently.\n- NextGen GAM Swipeable interstitials request the current window's safe content dimensions and uniformly fit the returned ad surface above host navigation on phones and tablets. The surface stays top aligned and horizontally centered; vertical drags remain Clips paging gestures instead of scrolling the ad document. Creative HTML and other ad formats are unchanged, and no public integration changes are required.\n- Tablet rotation now removes the current Swipeable interstitial and continues to the next available Clip without an advertising loader. Future ads reload off screen at the new dimensions, and passed placements cannot return.\n\n## **12.0.1** - 09/09/26\n\n### Bug Fixes\n\n- Includes the same [bug fixes listed for 11.7.1](#1171-100926), delivered on the [Kotlin 2.1 SDK line](GettingStarted.md#choosing-the-sdk-release-line). Keep all Storyteller modules on version `12.0.1`.\n\n## **12.0.0** - 04/09/26\n\n### Notes\n\n- Includes the same [new features, improvements and bug fixes listed for 11.7.0](#1170-040926), delivered for applications using **Kotlin 2.1+** and Compose BOM `2026.06.01`.\n- Requires Android 6.0 / API 23 or newer for the core SDK; NextGen GAM requires API 24. See [Choosing the SDK Release Line](GettingStarted.md#choosing-the-sdk-release-line) for upgrade guidance. Keep all Storyteller modules on version `12.0.0`.\n\n## **11.7.0** - 04/09/26\n\n### Notes\n\n- Android SDK [12.0.0](#1200-040926) provides these changes on the separate **Kotlin 2.1+** / Compose BOM `2026.06.01` line, with a minimum core SDK Android version of API 23. Version `11.7.0` retains its Kotlin 1.9 / Compose dependency line and API 21 core SDK support. See [Choosing the SDK Release Line](GettingStarted.md#choosing-the-sdk-release-line) for compatibility and upgrade guidance; keep all Storyteller modules on the same exact version.\n- Tablet rotation for NextGen GAM swipeable interstitials remains under validation. Check the creative's layout after rotation before enabling this format in a tablet integration.\n\n### New Features\n\n- Added Story and Clip watch-time analytics across Stories, full-screen and Embedded Clips, and Android TV Clips. The new `storyHeartbeat` and `clipVideoHeartbeat` events report cumulative active time at five-second thresholds, while `storyPageQuartile` and `clipVideoQuartile` report 25, 50, and 75 percent progression milestones and existing completion events remain the 100-percent signals. Paused, buffered, backgrounded, off-screen, inactive, and ad-owned time is excluded. See [Analytics](Analytics.md#story-heartbeat) for session, repeat, live-content, seek, privacy, and payload semantics.\n- Added independent server-configured font family and weight theming for rectangular Story and Clip titles in Compose rows, grids, category screens, and Search results. Configured family names resolve against matching host application `res/font` resources, with per-field feed-to-tenant inheritance and host theme/default fallback when a field or bundled font is unavailable.\n- Added shared light/dark [sheet corner-radius theming](Themes.md#sheets) through `theme.sheets.cornerRadius` and matching server Settings. Remote values override host values per appearance; `0` renders square top corners, while omitted or invalid values preserve the existing 32dp Search Filters and 8dp shared Compose sheet defaults.\n- Added light/dark multi-stop readability gradients for rectangular Story and Clip tile titles. Hosts can configure ordered `StorytellerGradientStop` values, while server themes can provide alpha-last `#RRGGBBAA` stops with feed-to-tenant fallback. Missing or malformed values preserve the existing Android title scrim and geometry.\n- Added server-configured [Search result sections](Search.md), including optional client-supplied Articles in a horizontal carousel, backend-controlled section order, an Articles content filter, standard result actions, and delegate-only visibility/tap analytics. Existing tenants retain the default Stories row followed by the Clips grid.\n- Added opt-in [width-constrained Embedded Clips video sizing](Themes.md#player) through local `StorytellerEmbeddedClipsVideoSizing` values and the remote `theme.behavior.player.clips.embeddedVideoSizing` field. The enabled mode preserves source aspect ratio, centres content and supported video ads at full viewport width without side cropping, and keeps legacy sizing as the default.\n- Added optional localized long descriptions to the Clips Player. Descriptions appear below the title and above navigable categories, share one More/Less control with other overflowing metadata, and return to the collapsed state when the viewer changes Clip. Category targets remain independently actionable.\n- Added automatic silent animated thumbnails to Story and Clip Compose rows and grids. At most one eligible visible tile plays across all foreground lists; rectangular and circular Story tiles use their matching shape-specific assets, rectangular Clip tiles use the Clip animated asset, and circular Clip tiles remain static. Static thumbnails remain as the missing shape-specific asset, loading, failure, legacy-response, reduced-motion, scrolling, and background fallback, and player resources are released whenever no tile is eligible.\n- Added nullable `frequency` and `initialIndex` overrides to `StorytellerClipsAdConfiguration`. Direct, Embedded, Compose Row/Grid, and View Row/Grid Clips presentations can override either eligible remote between-Clip cadence field independently without mutating global Settings. Null or invalid values inherit that remote field, zero remains a valid initial index, and remote strategy/source, consent, modules, timeout, and fill remain authoritative.\n- Added [NextGen GAM swipeable interstitials](Ads.md#nextgen-swipeable-interstitial-setup) for direct and Embedded between-Clip placements. The additive `setClipsSwipeableInterstitialAdUnit(...)` API and `SWIPEABLE_INTERSTITIAL` provider value support swipeable-first, standard-GAM-first, single-route, and no-fill fallback ordering per presentation while preserving the exact Google view, request/view-lifecycle destruction, a bounded late-result-safe load, Storyteller/client KVPs, and GAM analytics with `adFormat=swipeableInterstitial`. Stories, opening ads, IMA, bottom banners, Legacy, and GAM v24 are unchanged; production use requires Google/GAM activation and compatible trafficking.\n\n### Improvements\n\n- Updated native ad rendering across Legacy GAM/AdMob, GAM v24, and NextGen, improving playback and progress restoration, navigation, media sizing, and control placement while preserving the existing public integration APIs and Google-owned ad views.\n- Updated the NextGen GAM product to Google Mobile Ads NextGen 1.4.0 and migrated banner loading, view ownership, visibility, and disposal from deprecated `BannerAd` APIs to Google's Activity-owned `AdView` path.\n- Added a fixed, accessible close button to SDK-owned Sheets in light and dark appearances. Tapping it dismisses the Sheet while preserving the existing grabber and swipe-down dismissal behavior.\n- Added optional `theme.instructions.button.textSize` and `lineHeight` controls for the Clips Instructions call-to-action while preserving the existing 16sp/21sp defaults.\n\n- Added the Clips Instructions screen to Embedded Clips for both Compose and `StorytellerClipsFragment`, sharing the same one-time per-user completion state as full-screen Clips.\n- Updated Android SDK installation guidance to use Maven Central and the `com.getstoryteller` group. Existing integrations using CloudRepo or MyGet should follow [Migrating from the Legacy Storyteller Repository](GettingStarted.md#migrating-from-the-legacy-storyteller-repository) before both legacy repositories sunset with the SDK `12.0.0` release.\n\n### Bug Fixes\n\n- Fixed Search so returning from a result preserves loaded results and scroll position instead of unnecessarily reloading the active session.\n- Fixed consumed Clips ads so navigating back after advancing to the next Clip does not restore or request the same ad slot again.\n- Restored the mute control for Clips opened from Cards and prevented non-navigable single-Clip presentations from showing category links that open an empty player.\n- Fixed skipped IMA pre-roll transitions so the ad does not briefly zoom before the first Clip opens.\n- Fixed full-screen and Embedded Clips so adjacent, off-screen, or overlay-hidden players pause as soon as they lose playback ownership and cannot restart from refresh completion or force-resume, preventing overlapping audio after vertical paging or while category/profile surfaces cover the player.\n- Corrected Android TV repeat-one analytics so each natural repeat pass emits the existing `completedLoop` event instead of incorrectly emitting `finishedClip`.\n- Fixed API-normalized external search-result analytics so their existing body properties are preserved through delivery.\n- Fixed Android font-family resource and file-backed font weight selection on API 21\u201327 so configured numeric weights use the closest declared family face instead of collapsing to normal or bold. API 28+ behavior is unchanged.\n- Fixed Followable Categories so Android uses the backend's trimmed, lowercase dynamic category type code for follow and unfollow activity, Following state, and personalization attributes. Custom categories that previously arrived as legacy `Other` remain available through the compatible `Other` state, while built-in Player, Team, and other legacy category behavior is unchanged. The custom-attribute key `__storyteller_followed_category_attribute_keys__` is reserved for SDK use.\n- Fixed Followable Category status after a CMS category type change, preventing a different category with the same external ID from incorrectly appearing followed.\n- Fixed internal `sdkInitialized` analytics so successful and failed initialization events are retained when `enableStorytellerTracking` is disabled. The event remains excluded from customer-facing `onUserActivityOccurred()` callbacks, preserves the actual tracking setting, and includes the existing hashed user identifier only when `enableRemoteViewingStore` is enabled.\n- Fixed Clips bottom banners so effective-bottom Embedded Clips use the available video geometry. Width-constrained video with enough measured bottom letterbox for the banner and its 16dp lower band now places the progress track at a fixed 16dp before the banner; without qualifying letterbox space, the existing banner-before-progress order remains unchanged. The compact 8dp progress region is retained, system and caller navigation are excluded from the letterbox measurement, direct/modal and no-banner layouts retain the 80dp target, and eligible Embedded above-action placement remains above the primary action and banner.\n- Fixed Embedded Clips bottom-banner layouts so host navigation stays clear and the action button remains aligned with the captions control. Banner taps and horizontal video scrubbing retain independent behavior.\n- Fixed Story and Clip list analytics parity: `tileVisible` now includes the originating content's complete custom `metadata`, while `onTileTapped` exposes additive nullable `title`, 1-based `tileIndex`, and custom `metadata` fields without changing the existing Story/Clip subtype constructors. Refreshed or reordered lists use the current displayed position and never reuse another tile's metadata.\n- Fixed custom Search back icons on Android so images with smaller intrinsic bounds, whether supplied as drawable resources or remote images, are centered inside the existing navigation touch target.\n- Fixed the Clips instruction screen so its default light and dark artwork accurately distinguishes vertical Clip navigation, horizontal video progress, pause, tag navigation, and category navigation gestures while preserving custom instruction icon overrides.\n- Fixed [Search](Search.md#customization) so changing the device appearance while Search or its Filters sheet is open applies the matching light or dark theme without reopening Search, while preserving the active Search session.\n- Fixed the Clips Instructions call-to-action label so it consistently uses `theme.instructions.button.textColor`, even when a host Compose text style supplies a conflicting colour.\n- Fixed Clips Instructions eligibility so local and remote Clip viewing history no longer suppresses the screen. Only explicit prior Instructions completion suppresses it, unless `theme.instructions.show` is `false`. After upgrading, users who viewed Clips but never completed Instructions may therefore see the screen once.\n- Fixed full-screen and Embedded Clips so a selected Following feed refreshes after returning from Manage Favourites or another host screen, including when an off-screen Following change leaves stale non-empty content. Explicit `reloadData()` calls preserve and refresh the selected For You or Following feed, and retained Embedded Clips players now respect host lifecycle playback ownership and user-reset cache invalidation.\n- Fixed Android Clip mute and unmute analytics activities to include the Clip's custom `metadata`, preserving integrator-defined values such as `content_id` in delegate callbacks and analytics delivery.\n- Fixed external [deep links](DeepLinking.md#replacing-an-active-player) opened over an active Story or Clip player so one dismissal transaction and its normal analytics/host callback complete before the latest valid request opens. Story and Clip dismissal analytics use `deepLinkReplacement`; external Sheets remain single-instance through Activity recreation. Malformed links leave the active player unchanged; unavailable Story/Page/Category/Clip content reports `onError`, while unavailable Sheets retain their inline error UI. Before upgrading to `11.7.0`, clients can temporarily sequence an unconditional `dismissPlayer(animated = false)` completion into `openDeepLink(...)`.\n- Fixed provider-controlled AdMob native video in Stories so playback is refreshed after the device screen is turned off and back on when the ad had been playing before the interruption; Story progress remains paused until Google confirms playback has resumed.\n\n## **11.6.5** - 24/08/26\n\n### Improvements\n\n- Improved first-view Clips bottom-banner loading by beginning an eligible request after the active content Clip player is created instead of waiting for later content-load handling. Disabled placements, ad Clips, inactive or adjacent pages, unsettled swipes, and paused hosts do not request; Legacy GAM also reuses the provider-loaded banner view without issuing a duplicate load.\n\n### Bug Fixes\n\n- Corrected Clips bottom-banner analytics across Ad Opportunity, Ad Requested, Ad Loaded, Opened Ad, Ad Action Button Tapped, Ad Failed To Load, and Ad Paid. These events now use `adPlacement=Bottom Banner` and `adSlotType=bottomBanner`, omit full-screen `adStrategy` and `adIndex`, and retain `clipIndex`; clicks also include the request's `adRequestId` and `playerSessionId`, while Ad Opportunity continues to omit `adUnitId` by design.\n- Fixed Clips bottom-banner analytics so a presented Legacy GAM or NextGen banner emits one `openedAd` event with `adSlotType` set to `bottomBanner`. Prefetched banners do not emit, and lifecycle or navigation reattachment does not duplicate the event.\n- Fixed Clips bottom banners so banner taps and video scrubbing stay independent. Effective bottom placement keeps the visible progress track clear of the ad, while a transparent scrub surface over the banner region preserves the pre-banner drag-to-scrub reach: horizontal drags scrub without opening the ad, taps on the ad still open it, and the surrounding separation bands remain non-clickable. Eligible Embedded above-action placement remains above the primary action and banner; no-banner layout is unchanged.\n\n## **11.6.4** - 11/08/26\n\n### Improvements\n\n- Added the SDK-owned VAST bid defaults to GAM video tags generated by `StorytellerImaModule.initWithGam(...)`, including physical-pixel viewport dimensions and mute-aware playback signals. Host `tagParameters` still merge last and can override every generated value; complete tags supplied through `initWithAdTagUrl(...)` remain unchanged.\n\n## **11.6.3** - 04/08/26\n\n### New Features\n\n- Added the optional `com.getstoryteller:ads-ima` module for one true Google IMA pre-roll before the initially opened Clip on Android phones and tablets. The module supports GAM parameter callbacks or a complete HTTPS ad-tag callback, coexists with Legacy Ads, GAM v24, or NextGen Ads, and uses the core SDK's existing Media3 IMA runtime without an additional host dependency. Robust fail-open handling, lifecycle and navigation ownership, safe-area controls, and analytics keep content accessible while preserving later native Clips ad cadence and bottom banners.\n- Restored `StorytellerClipsAdConfiguration.preRollEnabled` as a default-true per-presentation control and added the optional `betweenClipsAdProviderOrder` provider allowlist/order with public `VAST`, `GAM`, and `ADMOB` values. Null preserves registered module/custom-module behavior, an explicit order overrides recognized standard providers for that presentation, and an empty list disables standard between-Clip requests. Existing omitted calls and the positional `StorytellerClipsAdConfiguration(false)` bottom-banner behavior remain source and binary compatible.\n- Exposed `StorytellerAdRequestInfo.ItemInfo.contentId` for dynamic ad callbacks while keeping it out of `ItemInfo.toString()` and incidental request logs.\n\n### Improvements\n\n- Added request-scoped VAST/GAM/AdMob resolution for Clips so presentations can choose VAST-first, GAM-first, a single provider, or no standard providers without mutating process-wide module order. Provider attempts remain sequential and share the slot and `adRequestId`; diagnostics and analytics now attribute request, failure, loaded, and paid events to the attempted or winning provider.\n- Added asynchronous [GAM request-builder enrichment](Ads.md#setup-with-asynchronous-request-enrichment) across Legacy, GAM v24, and NextGen so host-owned APS, Nimbus, or equivalent bidder work can complete before native or bottom-banner requests are built and loaded. The additive completion API supports success with a prepared or replacement builder, no-fill, failure, cancellation, and exactly-once completion while preserving the existing synchronous callbacks.\n\n### Bug Fixes\n\n- Fixed Clips full-screen ads when the remote `initialIndex` is missing or `null`: Android no longer disables every slot and instead uses frequency-only later cadence, while the standard opening ad-as-Clip still requires an explicit zero index.\n- Fixed high-volume Stories rows failing with `414 URI Too Long` by splitting Android poll hydration into bounded requests. Successfully hydrated polls and unrelated Story content now remain available when one poll batch fails.\n- Fixed Clips followable-category and profile navigation so rapid taps use the category bound to the tapped Clip instead of reusing a previously playing Clip.\n- Fixed full-screen and Embedded Clips so a currently visible empty top-level feed automatically refreshes after an app-managed Followings change, including `setFollowedCategories(...)`, while a visible non-empty feed remains selected and uninterrupted.\n- Restored `StorytellerAdMobModule` and its runtime support in the `ads24` artifact after it was omitted from 11.6.0. Applications upgrading from 11.5.1 can keep their existing AdMob configuration; use the same exact 11.6.3 version for `sdk` and `ads24`. See [Ads](Ads.md#storyteller-admob-sdk).\n- Fixed programmatic Clips opening so a missing or invalid Clip ID reports failure instead of leaving an infinite loading state.\n- Fixed the Clips progress bar so it remains minimized while navigating between Clips and expands only when the user explicitly pauses playback.\n\n## **11.6.2** - 29/07/26\n\n### Bug Fixes\n\n- Fixed the Clips Following empty-state call-to-action label so it consistently uses the configured `theme.buttons.textColor` in light and dark appearances.\n\n## **11.6.1** - 28/07/26\n\n### Bug Fixes\n\n- Fixed `Storyteller.user.setFollowedCategories(...)` so app-managed replacements omit category IDs missing usable metadata from a successful lookup and apply the resolved subset. If none resolve, the followed state is cleared; request failures still preserve the previous state.\n\n## **11.6.0** - 22/07/26\n\n### New Features\n\n- Added [Clips player typography controls](Themes.md#player) for selected and unselected feed-switcher labels, clip titles, and category-navigation labels while preserving existing styling defaults when values are omitted.\n- Added light/dark controls for the [top and bottom Clips readability gradients](Themes.md#player), including custom colours, gradient directions, and transparent visual opt-out.\n- Added four optional [Embedded Clips spacing controls](Themes.md#player) covering title, categories, expansion controls, progress, and primary actions. Unset or invalid values preserve the current Android layout.\n- Added [GAM request-builder callbacks](Ads.md#legacy-and-gam-v24-sdks) for native and bottom-banner requests so host apps can attach bidder SDK parameters and other custom request settings.\n- Expanded the [Clips Profile Screen](Themes.md#player) with light/dark appearance controls and support for a horizontal Stories row, a Clips grid, or both. The screen remains behind the existing tenant rollout gate.\n- Added a [modal Clips layout option](Themes.md#player) that keeps lower controls above the safe screen bottom on tall viewports while preserving the existing video geometry, Embedded Clips layout, and ad behavior.\n- Added light/dark [Clips progress-bar styling](Themes.md#player) for played and remaining tracks, active scrubbing, and time labels, with independent fallback for partially configured themes.\n- Added light/dark [Embedded Clips progress-bar positioning](Themes.md#player) above a visible primary action or at the bottom of the media. Retained players now refresh the position after an in-process appearance change.\n- Added complete light/dark [Search theming](Search.md#customization) for backgrounds, inputs, filter controls, suggestions, no-results content, the Filters sheet, and its Apply button. Partial themes fall back per field and omitted Apply-button colours preserve the contrasting legacy treatment.\n- Added suspend `Storyteller.user.setFollowedCategories(...)` support so app-managed following integrations can atomically replace the complete followed-category set before reloading Storyteller content. See [Set followed categories](Users.md#set-followed-categories).\n\n### Bug Fixes\n\n- Fixed Embedded Clips scrubbing so cancelled bottom progress gestures dismiss the timecode and expanded scrub overlay instead of leaving stale UI over continuing playback.\n- Fixed [Search](Search.md#customization) opened from Story and Clip players so it consistently inherits the active player appearance instead of reusing a stale or global appearance.\n- Fixed Android [ad analytics](Analytics.md#ad-unit-id) so first-party GAM and AdMob request attempts report the exact resolved `adUnitId`, including fallback and bottom-banner requests, and subsequent Stories and Clips ad lifecycle events include the same unit when available.\n- Fixed Clips native-ad metadata becoming unreadable over light creatives across Legacy Ads, GAM v24, and NextGen.\n- Fixed Clips full-screen ad cadence so a missing remote initial index no longer triggers opening pre-roll. Opening pre-roll now requires it to be explicitly enabled and scheduled before the first Clip.\n- Fixed a Story player crash that could occur after backgrounding, reopening, and dismissing the player.\n- Fixed a crash when rapidly closing the Clips player.\n- Fixed local Clips viewed, liked, and recently viewed state so it persists across app or process restarts when remote viewing storage is disabled.\n\n## **11.5.1** - 01/07/26\n\n### Breaking Changes\n\n- `Storyteller.StorytellerClipCollectionConfiguration.adConfiguration` is now nullable (`StorytellerClipsAdConfiguration?`, default `null`). Full-screen Clips still enable opening pre-roll and bottom banner placements when the configuration is omitted, while Embedded Clips treat omitted configuration as opt-in with both placements disabled. Hosts that read `configuration.adConfiguration` directly must handle `null`.\n\n### New Features\n\n- Added Clips category navigation behavior, including category-label delimiter support and optional leading-hashtag hiding for category-derived Clip player titles.\n- Added Search filter visibility behavior, allowing the Sort, Date Posted, and Content Type filter sections to be shown or hidden independently while preserving native defaults for hidden sections.\n\n### Improvements\n\n- Made Embedded Clips opening pre-roll and bottom banner placements opt-in by default across `rememberStorytellerEmbeddedClipsState`, `StorytellerEmbeddedClipsState`, and both `StorytellerClipsFragment.create(...)` overloads. Pass a concrete `StorytellerClipsAdConfiguration` to enable either placement.\n\n## **11.5.0** - 22/06/26\n\n### New Features\n\n- Added Clips opening pre-roll handling for zero-index ad slots, requesting the ad before the first Clip while preserving existing between-Clip cadence behavior.\n- Added remote theme support for `theme.behavior.following.feedSwitcher.selectionStyle` so Clips For You / Following switchers can use the legacy selected underline or selected text-weight styling.\n Missing or unknown values default to `underline`.\n- Updated Clips For You / Following switcher labels to use the configured SDK theme font in both underline and text-weight modes.\n- Added the `Storyteller:ads-vast` module for generic VAST linear video ads through the standard `Storyteller.modules` flow. The first release supports compatible VAST 2.0, 3.0, 4.0, 4.1, and 4.2 parsing, wrappers, media selection, click-through and click tracking, impression and playback tracking, skip tracking, static-resource VAST Icon overlay rendering, and deferred VAST error handling.\n- Added `StorytellerGamVastModule` for Google Ad Manager VAST tag setup through the `Storyteller:ads-vast` module, including host callbacks for `iu`, `description_url`, optional `url`, `cust_params`, SDK-owned GAM defaults, and merge-last top-level tag parameter overrides.\n- Added SDK-owned VAST bid defaults to generic VAST and GAM VAST requests, including physical-pixel `vw`/`vh`, mute-aware `vplay`, and client override support through generic `requestParameters` or GAM `tagParameters`.\n- Added `StorytellerClipsAdConfiguration` for Clips presentations so hosts can disable opening pre-roll and bottom banner placements per presentation. `preRollEnabled = true` by default permits an eligible opening zero-index pre-roll before the first Clip.\n- Added the `tileVisible` analytics event for Story and Clip list tiles, including `tileIndex` and list context fields while avoiding duplicate emissions from app foregrounding or player return alone.\n\n### Improvements\n\n- Added player-session preloading for upcoming Clips and Stories pages, including nearby media, caption, and action asset preparation while avoiding duplicate downloads.\n- Improved Clips feed refresh behavior so viewed clips stay behind unviewed clips and newly dismissed clips append after fresh content.\n- Aligned Cards audio-toggle placement with Card theme padding and rounded-card geometry while preserving the 48 dp tap target.\n\n### Bug Fixes\n\n- Fixed Clips `adRequested` analytics so full-screen and bottom-banner requests include source clip action context (`clipHasAction`, `clipActionType`, and `clipActionText`) when available.\n- Fixed Clips zero-index pre-roll ad requests so the CMS-configured request timeout, or a 5 second SDK fallback when no CMS timeout is configured, starts the first clip immediately when an opening ad response is late. Later between-clips ad requests continue using normal loading behavior.\n- Fixed VAST ad presentation and playback stability, including first-open pre-roll startup, skip countdown display, CTA-return skipoffset handling, duplicate skip lifecycle events, icon positioning, white-flash transitions, and AdChoices static-resource overlay rendering while ignoring unsupported brand image metadata.\n- Fixed Story captions so repeated taps continue toggling captions on the same Story and after navigation.\n- Fixed video preloading queue cleanup so concurrent preload completion or cancellation no longer crashes while swiping Stories.\n- Fixed Clips instructions behavior so first-time instructions block underlying player interactions, handle back correctly, and keep player scrolling disabled until dismissed.\n- Fixed lock-screen Clip player launch animation so category-to-clip opens no longer briefly widens from both sides.\n- Fixed Embedded Clips invalid collection loads so data-load callbacks report failure instead of success.\n\n## **11.4.1** - 12/06/26\n\n### New Features\n\n- Added `publisherProvidedId` support to `StorytellerGamModule.init` so GAM ad requests can pass Publisher Provided IDs through Google Mobile Ads' dedicated PPID request field.\n\n### Bug Fixes\n\n- Fixed Clips player lock-screen behavior so clip sessions no longer appear over keyguard by default, preserving normal unlock and share flows.\n- Fixed Clips native ad playback resume after CTA or lifecycle returns so active native ads continue from the expected state.\n- Fixed automatic round Story rows so bounded-height hosts keep stable tile sizing after refresh and circular thumbnails remain centered with consistent spacing.\n- Fixed Card action button text alignment so button-level `style.button.textAlignment` is respected when card-level alignment differs.\n- Fixed list views hosted in dialogs or modal windows without a `ViewModelStoreOwner` so `StorytellerListView` no longer crashes during Compose setup.\n\n## **11.4.0** - 12/05/26\n\n### New Features\n\n- Added the Clips instructions screen with theme-driven content and one-time display behavior for new users.\n- Added `theme.engagementUnits.poll.showImageAnswerGradientOverlay` to control the default bottom gradient overlay on image poll answers.\n- Added support for Cards with `aspectRatio = \"3:4\"`.\n- Added raw-resource Lottie overrides for Clips like transitions with `theme.player.icons.like.animation.liked` and `theme.player.icons.like.animation.unliked`.\n- Added `Storyteller.useCustomShareHandling` and `StorytellerDelegate.onShareButtonTapped(text, title, url)` for host-managed Story and Clip share handling.\n- Added `theme.behavior.player.clips.enableProfileScreen` Settings support for the newer Clips profile screen, while keeping the legacy Followable Category screen as the default.\n- Added `Storyteller.user.getFollowableCategories()` to fetch backend-backed followable category metadata and the current user's followed state.\n- Added `clipId` support for Embedded Clips so host apps can open a specific clip inside an embedded player.\n- Replaced web link handling in Stories, Clips, and Cards with the Compose `LinkModal`, preserving playback and sheet state while supporting internal and external navigation.\n\n### Improvements\n\n- Adjusted Embedded Clips data-load callbacks so Following feed loads no longer trigger embedded data-load events, while `StorytellerClipsFragment.Listener.onDataLoadComplete(success, error, dataCount)` remains unchanged.\n- Improved Cards audio behavior so runtime device sound/silent changes continue to update Cards audio after manual mute toggles.\n- Improved Compose row sizing and empty-row handling so round rows better match iOS and empty Storyteller rows are hidden.\n- Improved accessibility labels, roles, and hidden-state handling for Home Stories and Moments controls.\n- Aligned first-party ad request key-value pairs with GAM targeting semantics.\n- Hardened SDK activity launches against malformed direct intents.\n\n### Bug Fixes\n\n- Fixed Clips navigation and state issues, including the missing root back button, infinite loader after clip collection links, Following empty-state fallback, app-resume pause preservation, and stale\n real-time updates while the player is open.\n- Fixed Clip captions so API-disabled captions cannot remain visible from a persisted captions preference.\n- Fixed Story rendering and navigation issues, including scaled-down active stories, story ad tap-forward failures, and pager transform state after view reuse.\n- Fixed GAM and AdMob native ad behavior across video controls, foreground resume, CTA re-entry, video looping, AdChoices reparenting, blank template requests, NextGen mute visibility, and bottom-banner\n click analytics.\n- Fixed ad analytics payloads for `adSessionSummary`, `adUnitId`, `clipIndex`, `clipActionUrl`, `collectionClipCount`, and followable icon `ActionButtonTapped` reporting.\n- Fixed UI regressions around Clips mute button sizing, like animation rendering, light-mode WebView/link modal bounds, search suggestion text overlap, full-height sheet loading resize, and legacy\n parcelable cast warnings.\n\n## **11.3.5** - 07/05/26\n\n### Bug Fixes\n\n- Fixed `NoSuchMethodError` crash in GAM v24 ads module\n\n## **11.3.4** - 04/05/26\n\n### Bug Fixes\n\n- Fixed Cobra share links so Storyteller content opens correctly from external links when the app is closed or backgrounded.\n- Fixed shared clip deep links so clips outside page 0 open the requested clip reliably, including repeat opens after viewed-state changes.\n- Fixed GAM clip native ad CTA handling so AdChoices views are not mistaken for CTA views.\n\n### Notes\n\n- **GAM v24 compatibility**: When using the `ads24` module (Google Ad Manager SDK 24.x), upgrade to SDK **11.3.5 or later**. SDK 11.3.4 is not compatible with `ads24` and will throw\n `NoSuchMethodError` at runtime when ads load.\n\n## **11.3.3** - 01/05/26\n\n### New Features\n\n- Added settings-theme Cards audio behavior for video Cards, including session-scoped mute/unmute behavior, no-audio Card handling, and `cardAudioToggled` analytics for explicit user mute/unmute\n actions.\n- Added `theme.cards.audio.mutedIcon` and `theme.cards.audio.unmutedIcon` for Cards audio button icon overrides. The compatibility `theme.cards.audio.unavailableIcon` field is not rendered because\n no-audio Cards hide the audio control.\n\n### Improvements\n\n- Updated the default Cards audio button treatment and removed temporary Dev Zone Cards audio overrides so production behavior is driven by CMS/API settings.\n- Kept Cards audio state controlled by the Cards audio button after session initialization, independent of hardware volume or silent/ringer changes.\n\n### Bug Fixes\n\n- Fixed Cards manual mute state being lost after scrolling or app restart when persistence is enabled.\n- Fixed unmuted Cards returning muted after dismissing an internal player and Cards continuing audio behind Sheets.\n- Fixed Cards analytics mute reporting for video-background Card Viewed/Tapped events.\n\n### Notes\n\n- **GAM v24 compatibility**: When using the `ads24` module (Google Ad Manager SDK 24.x), upgrade to SDK **11.3.5 or later**. SDK 11.3.3 is not compatible with `ads24` and will throw\n `NoSuchMethodError` at runtime when ads load.\n\n## **11.3.2** - 06/04/26\n\n### Bug Fixes\n\n- Fixed Stories onboarding/instruction screens repeating on every player open when `enableRemoteViewingStore=false`.\n\n## **11.3.1** - 01/04/26\n\n### Bug Fixes\n\n- Reverted the default `lists.title` theme sizing change, restoring `textSize` to `22` and `lineHeight` to `28`.\n\n## **11.3.0** - 26/03/26\n\n### Breaking Changes\n\n- Removed `offset` from `StorytellerStoriesDataModel`, `StorytellerClipsDataModel`, and the View `ListConfiguration` APIs.\n\n### New Features\n\n- Added support for AdMob native ads in Stories.\n- Added `theme.player.clips.title` to customize the Clips player title with `font`, `textSize`, `lineHeight`, and `textColor` properties.\n- Added `theme.player.clips.actionIconSize` to control the size (in dp) of clip player action icons.\n- Added `theme.player.icons.mute` and `theme.player.icons.captions` for stateful mute/captions icon overrides in the player.\n\n### Improvements\n\n- Improved row accessibility by making list rows scale with system font size when using automatic rows mode.\n- Added `googleAdSource` support for custom `StorytellerModule` implementations.\n- Migrated SDK annotation processing from kapt to KSP while keeping Kotlin on `1.9.0`, which removes the old Java 17-only kapt workaround and restores JDK 21 build compatibility.\n- Updated `StorytellerAnalyticsContext` documentation to reflect the current public type alias shape: `Map<String, String>`.\n- Extended Cards theme support to allow light/dark text color overrides and text panel backgrounds in Cards with text bellow the content.\n- Added `cardVideoStarted`, `cardVideoHeartbeat`, and `cardVideoCompleted` analytics events for video cards. `cardVideoHeartbeat` and `cardVideoCompleted` reuse `durationViewed` to report active\n playback duration.\n- Added Stories support for the new Google ad analytics events: `adOpportunity`, `adRequested`, `adLoaded`, `adFailedToLoad`, `adPaid`, and `adSessionSummary`.\n- Added support for `externalApp` actions in Custom Native Ads.\n- Added `enableFollowableCategorySwipeFromRightEdge` player theme property to allow disabling the right-edge swipe gesture to open Followable Categories.\n\n### Bug Fixes\n\n- Fixed Clips feed refresh and pagination issues across For You, Following, and fresh-feed loading.\n- Fixed duplicate deeplink navigation after dismissing stacked search flows.\n- Fixed card video playback when a reordered collection starts with a video card.\n- Fixed Clips followable icons with `ActionType.NONE` so the icon stays visible but does not open the followable screen or fire followable-category tap analytics.\n- Fixed clip player chip alignment and tablet story previous-tap hit zones.\n- Fixed banner story pages layout after tablet rotation.\n\n## **11.2.3** - 05/03/26\n\n### Bug Fixes\n\n- Fixed Card playback video issue.\n\n## **11.2.2** - 16/02/26\n\n### New Features\n\n- Added `theme.player.enableFollowableCategorySwipeFromRightEdge` to control opening Followable Category with a right-edge swipe in Clips (default `true`).\n\n### Bug Fixes\n\n- Fixed Echo Show support for FireTV SDK.\n\n## **11.2.1** - 13/02/26\n\n### New Features\n\n- Added support for AdMob banner ads in Clips bottom banner placements.\n- Added support for AdMob native ads in Clips full-screen placements.\n- Added new Clips ad analytics events: `adOpportunity`, `adRequested`, `adLoaded`, `adFailedToLoad`, `adPaid`, and `adSessionSummary`.\n- Added `adSource` and mediation metadata fields to ad analytics payloads for Google ad lifecycle events.\n\n### Bug Fixes\n\n- Fixed AdChip overlap in Ads in Clips.\n- Fixed blank empty-state action button in Following tab.\n- Fixed duplicate ad analytics events triggered by a single user action.\n\n## **11.2.0** - 26/01/26\n\n### New Features\n\n- Added support for `readOrderingMode` (`Basic`, `StartedAware`) from the backend Stories responses. When `StartedAware` is set, rows order stories as NeverOpened \u2192 InProgress \u2192 Completed while\n retaining pinned/live/sort ordering. Default remains `Basic` for backward compatibility when the field is absent.\n- Added clip preloading APIs for first open to reduce initial load time for Clips collections.\n\n### Bug Fixes\n\n- Fixed native video ads in legacy GAM starting paused with a black screen.\n- Fixed native image ads rendering incorrectly with landscape creatives.\n- Fixed Like/Mute buttons becoming unresponsive after repeated taps.\n- Fixed followable icon tap responsiveness on Samsung S25 devices.\n- Fixed followable category screen theme flicker on first open in dark mode.\n\n## **11.1.0** - 07/01/26\n\n### Breaking Changes\n\n- Updated `StorytellerTileType` in `onTileTapped` callback:\n + `StorytellerTileType.Story.categories` changed from `List<String>` to `List<StorytellerCategory>` for richer category details\n + `StorytellerTileType.Clip` now includes a `categories: List<StorytellerCategory>` property\n\n### New Features\n\n- Added support for showing Banner Ads at the bottom of the Clips Player. See [Ads](Ads.md#bottom-banner-ads) for more information.\n- Added support for Non-Skippable Ads in both Stories and Clips Players. See [Ads](Ads.md#non-skippable-ads) for more information.\n- Added ability to hide Share/Like numbers via Settings Theme configuration\n- Added support for custom 'Live' chip text across Clips and Stories\n\n### Improvements\n\n- Improved gesture zones for the Clip Progress Bar scrubbing experience\n- Improved Story Action Button widths to follow industry standards\n- Improved native video Ads duration reporting accuracy\n- Improved volume handling - device volume 0 is now treated as muted state\n- Improved theme usage for Clips buttons (primary button, For You/Following empty state button)\n\n### Bug Fixes\n\n- Fixed tablet UI misalignment and overlapping issues\n- Fixed sharing a Clip from Following or navigated category opening black screen with infinite loading\n- Fixed `excludeFromAnalytics` returning false when `enableStorytellerTracking` and `enableRemoteViewingStore` are set to false\n- Fixed incorrect Clip displaying when swiping from viewed Clip to not viewed Clip during paging\n- Fixed captions state becoming inconsistent when changed on Search screen\n- Fixed Story Ads progress bar remaining in Ad state when navigating back from image Ad\n- Fixed Ad chip showing incorrectly after navigating back from Ad to Story page\n- Fixed `shareButtonTapped` events being incorrectly sent for Stories when `enableStorytellerTracking` is set to `false`\n- Fixed backgrounding the app breaking the reloading functionality for Stories and Clips\n- Fixed Following category reporting as NULL in analytics\n- Fixed Clip video Ads continuing to play audio when app is backgrounded\n- Fixed tablet Story Ads displaying Live Story chip on banner and image Ads\n- Fixed sound not behaving correctly in mute/vibration mode\n- Fixed video Ad audio continuing and mute button appearing briefly on image Story page\n- Fixed dynamic rows not displaying placeholders fully when wrong category/collection IDs are used\n- Fixed progress bar failing to scrub after network reconnection\n- Fixed device mute settings not updating mute state after manual toggle\n- Fixed deeplinks to Sheets opening with error\n- Fixed quiz questions being skippable without answering when opened from action or open method\n- Fixed mute state not updating properly when video Story opened via Search\n- Fixed closing animation missing when Story/Clip Player is opened from Story Action Button\n- Fixed Player being dismissed when bottom Sheets action is tapped\n- Fixed Story image Ads breaking page navigation\n- Fixed progress bar staying at enlarged state if recents opened during scrubbing\n- Fixed device volume buttons incorrectly muting standard video Ads\n- Fixed Instructions Screen showing incorrectly on sign out/in\n- Fixed most answered polls resetting after navigating between pages\n- Fixed video poll pages not having mute toggle\n- Fixed mute button briefly appearing and disappearing when skipping pages with standard Ad\n- Fixed bounce animation missing on single Clip scroll opened from a Card\n- Fixed Card with invalid collection opening a black Clip Player\n- Fixed share module for secondary actions not working\n- Fixed Following Tab empty state Action Button having no text\n- Fixed deep linking to Clips beyond the first 50 in a collection via URL scheme\n- Fixed Sheets opened from Ad actions not considering viewport property\n\n## **11.0.6** - 17/12/25\n\n### Bug Fixes\n\n- Fixed setting the device in silence mode and voluming up doesn't sound Stories\n\n## **11.0.5** - 15/12/25\n\n### New Features\n\n- Added full support for FireTV and AndroidTV\n\n## **11.0.4** - 26/11/25\n\n### Bug Fixes\n\n- Fixed Embedded Clips backgrounding the app when reload button is double-tapped in navigated category\n- Fixed memory leaks\n- Fixed action buttons not opening Clip Player properly\n- Fixed tile animations not working after Story and Clip Player is closed in More Screen\n- Fixed Cards not sorting by taps correctly\n- Fixed clickable area for image Ads in Native Ad Clips where tapping the title area incorrectly triggered the action button\n\n## **11.0.3** - 21/11/25\n\n### Bug Fixes\n\n- Fixed action buttons on custom native ads not responding to taps or swipe-up gestures\n- Fixed external links intermittently failing to open in Android WebView\n- Prevented the screen from dimming or turning off while watching For You/Following content\n\n## **11.0.2** - 13/11/25\n\n### Bug Fixes\n\n- Fixed issue where standard video ads would freeze after navigating between custom image ads on Story pages\n\n### Improvements\n\n- Moved mute button to right-hand rail in Clips player for improved UI consistency\n- Updated action button widths to follow industry standards - buttons no longer span full width. Button width type is now configurable via CMS and received from backend, allowing per-action\n customization\n\n## **11.0.1** - 29/10/25\n\n### Bug Fixes\n\n- Fix potential crash which could occur when presenting Native Ads\n\n## **11.0.0** - 22/10/25\n\n### Breaking Changes\n\n- **Standardized public API with `Storyteller` prefix**: All public classes now include the `Storyteller` prefix for consistency. Key renamings include:\n + `UserInput` \u2192 `StorytellerUserInput`\n + `UserActivity` \u2192 `StorytellerUserActivity`\n + `Category` \u2192 `StorytellerCategory`\n + `Error` \u2192 `StorytellerError`\n + `Environment` \u2192 `StorytellerEnvironment`\n + `DisabledFunctionalFeature` \u2192 `StorytellerDisabledFunctionalFeature`\n + `UserAttributes` \u2192 `StorytellerUserAttributes`\n + `CustomNativeTemplateIds` \u2192 `StorytellerCustomNativeTemplateIds`\n + `TileType` \u2192 `StorytellerTileType`\n + `FollowableCategoryCustomScreen` \u2192 `StorytellerFollowableCategoryCustomScreen`\n- `eventTrackingOptions` can now only be set during SDK initialization by passing a `StorytellerEventTrackingOptions` object to the `initialize` method. Runtime modifications are no longer supported.\n The property remains publicly readable via `Storyteller.eventTrackingOptions`. To change tracking options, you must reinitialize the SDK. See [Privacy and Tracking](PrivacyAndTracking.md) for more\n information\n- Removed deprecated `Storyteller.currentUserId` method for VPPA compliance\n- Removed `showVoteCount` property from `EngagementTheme` for Polls\n- Removed `show` property from `TitleTheme`\n- Removed default `isScrollable` parameter from `StorytellerClipsGrid` and `StorytellerStoriesGrid`\n- Removed all VPPA-related deprecated methods\n\n### New Features\n\n- Added support for custom `context` data in analytics events. Context allows integrators to provide additional analytics attribution data for Storyteller rows, grids, cards, home screens, and\n embedded clips. For details, see [Context](Analytics.md#context).\n- Added **Progress Bar for Clips Player** with scrubbing/seeking functionality and analytics events (`scrubbedClip`, completion type tracking)\n- Added **Stories Captions** support with CC button, enabling/disabling events, and global state persistence\n- Added **Configurable Default Mute State** with persistent mute preferences\n- Added **Buttons for Cards** with display, theming, and analytics support\n- Added **Long Engagement Unit Answers** supporting multi-line text display in Polls and Quizzes\n- Enhanced **Following** behavior with new public API methods and conditional logic based on `followingFrom` setting\n- Added automatic user attribute management for followed categories where Storyteller is handling all following logic, without the need for storing and syncing followed categories app-side.\n See [Following Model](Users.md#storyteller-managed-following) for more information\n- Added **Card Viewed/Tapped Ordering** for improved card content organization\n- Added `actionLinkId` property to analytics events with page/clip actions\n- Added story/clip context properties to ad analytics events\n- Added `adFormat` support for First-Party ads in Stories\n- Added `completionType` property to `finishedClip` and `completedLoop` events\n- Added `captionsEnabled` property to all Story analytics events\n- Added `hasButton` property to all Card analytics events\n- Added native back button support for webview navigation\n\n### Bug Fixes\n\n- Fixed analytics event issues including missing properties and incorrect triggers\n- Fixed `openedCategory` event not recorded when navigating back from another category\n- Fixed `finishedClip` event not sent when switching between For You and Following tabs\n- Fixed Story page eyebrow and timestamp overlap\n- Fixed action buttons not being interactable on tablets\n- Fixed captions not displaying correctly for long text\n- Fixed Story player dismissing automatically when opened from More screen on Compose\n- Fixed embedded clips top-level back button not working\n- Fixed follow state not syncing between Clips page and Followable Category page\n- Fixed `canGoBack` always returning false when navigating subcategories on Following tab\n- Fixed theme not applying to rows/grids on bottom sheet\n- Fixed numerous For You/Following tab navigation and reload issues\n- Fixed clip ads sometimes switching shortly after appearing\n- Fixed various UI issues with Stories, Clips, and Ads players\n\n### Improvements\n\n- Improved accessibility support for large font sizes\n- Enhanced ad preloading for Clips\n- Improved theme handling and persistence\n- Updated public interface standardization across iOS and Android platforms\n\n## **10.13.10** - 02/10/25\n\n### Breaking Changes\n\n- Added new parameter `offset` to `StorytellerClipsDataModel`, `StorytellerStoriesDataModel`, `ListConfiguration` see [StorytellerListViews.md](StorytellerListViews.md)\n and [StorytellerLists.md](StorytellerLists.md)\n\n### Bug Fixes\n\n- Fixed tiles reload behavior\n- Fixed Clips duplications\n- Disabled custom params when ad tracking is disabled\n\n## **10.13.9** - 24/09/25\n\n### Bug Fixes\n\n- Fixed tiles not auto-reloading properly\n- Fixed audio focus not being requested when unmuting\n- Fixed incorrect grid display limitations\n- Fixed text font styling issues in Clip player\n\n## **10.13.8** - 09/09/25\n\n### Bug Fixes\n\n- Fixed double calling of `onDataLoadCompleted` callback\n- Fixed placeholders not hiding when item count is 0\n- Fixed `inApp` action not opening properly\n- Fixed webView opening issues\n\n## **10.13.7** - 27/08/25\n\n### Bug Fixes\n\n- Fixed an issue with `onDataLoadCompleted` returning incorrect data count\n\n## **10.13.6** - 25/08/25\n\n### Bug Fixes\n\n- Fixed crashes when theme is null in Embedded Clips\n\n## **10.13.5** - 18/08/25\n\n### Improvements\n\n- Improved support for privacy flags\n\n### Bug Fixes\n\n- Fixed crashes when swiping through stories\n\n## **10.13.3** - 14/08/25\n\n### Improvements\n\n- Improved support for privacy flags\n\n## **10.13.2** - 11/08/25\n\n### Bug Fixes\n\n- Fixed black screen appearing randomly when scrolling fast between Clips\n- Fixed order of navigation elements for category navigation inside Clips\n- Fixed Clip looping issue when swiping to next clip during PTR animation\n- Fixed `OpenedClip` event issues\n- Fixed `DismissedClip` event issues\n- Fixed `OpenedCategory` event not being recorded when opening Clips Player via category methods\n- Fixed `DismissedCategory` event missing properties when returning using back button\n- Fixed `FinishedClip` event issues\n- Fixed Banner/Native Ad action triggering when fast skipping pages\n- Fixed mute state issues with device volume changes after muting from category navigation\n- Fixed `collectionClipCount` always being 0 for Muted/unmuted events in FY/F collections\n- Fixed Title and Eyebrow alignment when Mute toggle enabled\n- Fixed like status/share number not resetting after PTR or Reload if staying on same clip\n- Fixed duplicate Clip Ad requests for the initial index\n- Fixed missing `adIndex` property on ad events\n- Fixed followable category screen when opening it on tablet landscape\n- Fixed share/like issues when respective features disabled\n- Fixed crashes when swiping through stories\n- Fixed `skippedAd` and `finishedAd` events triggered without ad display when skipping clips quickly\n- Fixed followable category screen appearing on Clip Ads\n- Fixed Share and Action Buttons shifting downwards when swiping through Stories\n- Fixed Eyebrow text positioning with different theme settings\n- Fixed category title ellipsis display on Clip player\n- Fixed `DismissPlayer` event timing issues\n- Fixed crashes when opening `StorytellerEmbeddedClipsFragment` (XML)\n\n### New Features\n\n- Added `adIndex` KVP support for Stories and Clips when requesting Ads\n\n### Improvements\n\n- Updated FollowableCategory Status request with per-category granularity\n\n## **10.13.1** - 07/08/25\n\n### Bug Fixes\n\n- Fixed if search is remotely disabled in the CMS, the search button still appears on Clips\n\n## **10.13.0** - 30/07/25\n\n### Breaking Changes\n\n- Added `onTileTapped` callback to `StorytellerListViewDelegate` for enhanced tile interaction tracking, see [StorytellerDelegates](StorytellerDelegates.md)\n- Relaxed public `openDeepLink` method activity requirement from `AppCompatActivity` to `Activity` for better compatibility\n\n### New Features\n\n- **Clips Player is now rewritten fully in Compose for better performance and user experience**\n- **Added support for For You/Following tabs for Clip Rows and Grids**\n- Added Mute Toggle functionality for Stories and Clips with comprehensive analytics see [Analytics](Analytics.md):\n + Added muted/unmuted events for Stories, Clips, and Ads\n + Added `isMuted` property to all Story, Clip, and Ad analytics events\n- Added Followable Category Limits feature with analytics events, see [Analytics](Analytics.md):\n + Added Followable Category Limit Shown event\n + Added Followable Category Limit Action Tapped event\n + Added Followable Category Limit Dismissed event\n- Added Story Eyebrow and Clip Eyebrow support\n- Added Independent Configuration of Analytics Features, see [PrivacyAndTracking](PrivacyAndTracking.md)\n- Enhanced Ad Placement Algorithms for Stories and Clips\n- Added `metadata` filed to analytic events\n\n### Bug Fixes\n\n- Fixed multiple issues related to previous Clip Player implementation based on Android Views\n- Fixed multiple issues related to For You/Following Tabs navigation and behaviour\n- Fixed multiple issues related to the Clips playback\n- Fixed Story/Clips player action buttons to properly listen to `theme.buttons.textCase` configuration\n\n## **10.12.1** - 10/07/25\n\n### Breaking Changes\n\n- Updated Kotlin version from `1.7.20` to `1.9.0`\n\n## **10.12.0** - 30/06/25\n\n### New Features\n\n- Added new option to Event Tracking Options called `enableRemoteViewingStore` for VPPA compliance. See [PrivacyAndTracking](PrivacyAndTracking.md) for details.\n\n### Improvements\n\n- Cards are now using `Activity` instead of `AppCompatActivity`\n\n### Bug Fixes\n\n- Fixed Cards video background freezing when backgrounding and foregrounding\n- Fixed issue with Storyteller Lists height\n- Fixed Sheets being dismissed automatically when rotating the device on tablet\n- Fixed handling of `intent://` redirects inside the internal WebView\n- Fixed crash when opening Clips with Secondary Actions\n- Fixed CardViewed events not triggering for Cards with image backgrounds\n- Fixed rare crash in GAM module for Custom Native Ads\n\n## **10.11.0** - 16/06/25\n\n### Breaking Changes\n\n- Implemented VPPA compliance measures including SHA256 hashing for User IDs for requests and removal of Content Id from ad requests. See [PrivacyAndTracking](PrivacyAndTracking.md) for details.\n- Deprecated `Storyteller.currentUserId` method as part of privacy enhancements. See [Users](Users.md) for updated user management methods.\n- Added `enableFullVideoAnalytics` flag to `eventTrackingOptions` for granular video analytics control. See [Analytics](Analytics.md) for details.\n\n### New Features\n\n- Introduced **Cards** feature - a new content type that can be displayed alongside Stories and Clips with full theming support, personalization, targeting, and analytics. See [Cards](Cards.md) for\n event details.\n- Added **Secondary Actions** support for both Stories and Clips, allowing multiple action buttons per content item. See [Analytics](Analytics.md) for additional fields added.\n- Cards support video playback based on visibility and include comprehensive analytics events (`Card Tapped`, `Card Viewed`). See [Analytics](Analytics.md) for event details.\n- Enhanced analytics with new properties for Secondary Actions and Cards integration. See [Analytics](Analytics.md) for complete event documentation.\n\n### Improvements\n\n- Added methods to retrieve count of clips in a collection and number of Stories in categories. See [AdditionalMethods](AdditionalMethods.md) for details.\n- Enhanced Embedded Clips to support their own custom themes. See [StorytellerClipsFragment](StorytellerClipsFragment.md) and [Themes](Themes.md) for details.\n- Added analytics event for 'Story Instructions Screen Viewed'. See [Analytics](Analytics.md) for details.\n- Improved poll vote count display with per-poll configuration support\n- Added support for custom tab titles in For You/Following tabs. Configurable via CMS\n- Improved VPPA compliance by removing direct user identifiers from various API requests. See [PrivacyAndTracking](PrivacyAndTracking.md) for details.\n\n### Bug Fixes\n\n- Fixed live story progress bar jumping issues on single-page stories\n- Resolved clip playback getting stuck when navigating between categories\n- Fixed search functionality issues including keyboard behavior and story navigation. See [Search](Search.md) for details.\n- Corrected chip positioning for live clips and ads\n- Fixed deep linking issues for clips and stories. See [DeepLinking](DeepLinking.md) for details.\n- Improved pull-to-refresh behavior across different screens\n- Fixed tablet-specific layout issues including timestamp positioning\n- Resolved various analytics event property issues. See [Analytics](Analytics.md) for updated event documentation.\n\n## **10.9.5** - 29/05/25\n\n### Bug Fixes\n\n- Fixed an issue where external app links were not opened correctly with ST internal WebView\n- Fixed an issue where edge to edge layouts were not correctly supported on Android 15+\n\n## **10.9.4** - 24/04/25\n\n### Bug Fixes\n\n- Fixed an issue with `onDataLoadCompleted` returning incorrect data count\n- Fixed an issue where disabling `theme.tiles.title.show` property could cause Round Storyteller Lists to disappear\n\n## **10.9.3** - 18/04/25\n\n### Bug Fixes\n\n- Fixed an additional issue with opening a deeplink using externalId\n\n## **10.9.2** - 15/04/25\n\n### Bug Fixes\n\n- fixed open a deeplink with externalId\n\n## **10.9.1** - 10/04/25\n\n### Improvements\n\n- added `collectionClipCount` property to Clip Ad analytics events to reflect the total number of Clips in the Collection, see [Analytics](Analytics.md) for more details\n\n### Bug Fixes\n\n- updated the Constraint Layout dependencies to avoid NoMethodFoundError crashes\n\n## **10.9.0** - 6/04/25\n\n### Breaking Changes\n\n- Compose BoM dependency updated to `2024.12.01`\n- The `openDeepLink` method now requires an `AppCompatActivity` instead of an `Activity`. Please update your calls accordingly. See [DeepLinking](DeepLinking.md) for more details.\n\n### New Features\n\n- Introduced **Sheets**, a new way to display web content within the SDK experience. Sheets can be triggered via action buttons or opened directly.\n See [AdditionalMethods](AdditionalMethods.md#opensheet) and [DeepLinking](DeepLinking.md#sheet) for details.\n- Added analytics events for `OpenedSheet` and `DismissedSheet`. See [Analytics](Analytics.md).\n\n### Improvements\n\n- Added support for respecting Ad Tracking Preferences in the Storyteller SDK and GAM Module. See [PrivacyAndTracking](PrivacyAndTracking.md) for details.\n- Ensured the `clipIndex` property on Clip analytics events correctly reflects the index within the overall Collection when using Paging.\n- Corrected the calculation and reporting of the `durationViewed` property in analytics events.\n- Addressed memory leaks related to Sheets and the Story Pager.\n\n### Bug Fixes\n\n- Fixed an issue where the progress bar could disappear on native page ads when tapped quickly.\n- Fixed a bug preventing muting a story via the volume button if it was previously unmuted.\n- Resolved an issue where old content briefly flashed after unfollowing a team/category from the clip player and refreshing.\n- Fixed search results not updating to an empty state when modifying a valid search term to an invalid one.\n- Corrected behavior where unfollowing items in the \"For You\" tab did not update the \"Following\" tab.\n- Fixed video playback resuming from the stopped point instead of restarting when navigating between video and image pages.\n- Resolved an issue where the clip player could continue playing audio in the background after pressing the device back button.\n- Fixed deep links with a correct page ID but incorrect story ID failing to open the player.\n- Fixed story page elements being removed after viewing native image ads.\n- Addressed an issue where the first clip ad might appear later than the configured frequency.\n- Made captions enablement a user-specific setting rather than device-wide.\n- Fixed crashes related to ConstraintLayout dependencies.\n- Fixed a crash that could occur on the \"More\" screen within a clip collection.\n- Resolved a clip mismatch issue after viewing a \"Not Viewed\" clip via search.\n- Fixed users being unable to close Sheets with a swipe gesture over the WebView area.\n- Corrected status bar icon visibility when Sheets are opened in light mode.\n- Addressed issues with video page requests not completing in specific environments.\n- Fixed an issue where tapping the first clip thumbnail opened the wrong clip player if all clips on the initial page were already read (Paging).\n- Fixed the story player freezing when opening a story while a specific video type (Game Recap) was playing.\n\n## **10.8.0** - 11/03/25\n\n### Breaking changes\n\n- Adding `bottomSheetScreen` functionality. [StorytellerDelegates](StorytellerDelegates.md) section\n\nNote that if you are not using this functionality then simply return the default value for this method in your Delegate implementation.\n\n### New Features\n\n- Added Clips Paging functionality to Clips Player to improve performance and user experience\n- Adding support for deep-links via external ID URLs\n\n### Improvements\n\n- Updated `collectionClipCount` property on Clip analytics events to be the total number of Clips in the Collection\n- Added `clipIndex` property to all Ad analytics events and `captionsEnabled` to all Clips analytics events\n- Improved ad loading performance and preloading logic\n- Improved loading behavior for embedded Clips.\n- Updated behavior for deep links with Clips Paging functionality\n\n### Bug Fixes\n\n- Fixed a crash occurring when fast-swiping between Clips.\n- Fixed an issue where Clip progress was not saved when the app was backgrounded.\n- Fixed incorrect event logging for deep-linked Clips.\n- Fixed an issue where multiple search filter menus appeared when tapping quickly.\n- Fixed an issue with inconsistent font rendering on certain devices.\n- Fixed an issue where users could not tap to go to the next page if it was a page ad.\n- Fixed an issue where the first tap after reopening a paused native ad was not responsive.\n- Fixed playback getting stuck when navigating and skipping too fast.\n- Fixed a lifecycle bug where sound plays when the app is swiped to the background.\n- Fixed an issue where a shared quiz link navigates the user to the end of the quiz results instead of the beginning.\n- Fixed an issue where Stories tiles could not be set to round on Compose screen.\n- Fixed incorrect event property for `clipsViewed` event on Clip Close events.\n- Fixed an issue where dismissing a story with a CTA button does not auto-reload that story.\n- Fixed an issue where PTR stops working on clips after multiple fast PTR attempts.\n- Fixed an issue where followable category screens send two identical paging requests.\n- Fixed an issue where tapping on a clip while swiping to the followable category screen was possible.\n- Fixed an issue where auto-scroll occurred while the player was open and the app was backgrounded.\n- Fixed an issue where the store action button was not opening the Play Store.\n- Fixed playback issues after category navigation.\n- Fixed issues with search displaying incorrect or incomplete results.\n- Fixed an issue where playback was stuck when opening a page ad.\n- Fixed an issue where category navigation opens a black screen with the sound of the previous clip.\n- Fixed an issue where opening a clip from the followable category screen freezes the page.\n- Fixed an issue where a grey line appeared on image poll answers.\n- Fixed an issue where swiping to other embedded clips got stuck with a reload button.\n- Fixed an issue where sound continued playing after dismissing a clip on the search/category screen.\n\n## **10.7.6** - 27/02/25\n\n### Bug Fixes\n\n- fixed an issue with crash when rotating Embedded Clips on Samsung tablets\n\n## **10.7.5** - 31/01/25\n\n- fixed an issue with a wrong position for Clip captions\n- fixed some issues with Ads which resulted in content being cut on some devices\n- fixed issue with insets handling on Android 15 for internal WebView\n\n### Bug Fixes\n\n- fixed insets for both normal clips and embedded clips for both xml and compose implementations\n- fixed issue where Link to open Story without Page Id fails\n\n## **10.7.4** - 16/01/25\n\n### Bug Fixes\n\n- fixed insets for both normal clips and embedded clips for both xml and compose implementations\n- fixed issue where Link to open Story without Page Id fails\n\n### Improvements\n\n- `reloadData()` method on `StorytellerEmbeddedClips` has no effect when embedded clips is on the custom followable category screen\n- added missing theme handling for gradient when using `from` infix methods for circular tiles\n\n## **10.7.3** - 24/12/24\n\n### Bug Fixes\n\n- fixed a bug with SHARE_SUCCESS event not being sent when sharing a Clip\n\n## **10.7.2** - 20/12/24\n\n### Improvements\n\n- `dismissPlayer` method now has an optional `onCompletion` callback that is called when the player is dismissed. Please, see the [Additional Methods](AdditionalMethods.md) for more details\n\n## **10.7.1** - 19/12/24\n\n### New Features\n\n- Enabled displaying the exact number of tiles per row on various screens. Please, see the `visibleTiles` property in the \"Setting categories and collections, applying themes and styles\" section of\n the [StorytellerCompose](./StorytellerListViews.md) for more details.\n- Enabled changing the text casing for \"Navigating Stories\" header on the Instruction screen. Please, see `theme.instructions.headingTextCase` [Themes](./Themes.md#instructions) for more details.\n- Implemented custom fonts for the Instructions screens headers. Please, see `theme.instructions.headingFont` [Themes](./Themes.md#instructions) for more details.\n- Added support for chip borders. Please, see the updated section [Themes](./Themes.md#story-and-clip-tiles) for more details.\n\n### Bug Fixes\n\n- Fixed some issues related to working with themes for Row.\n- Fixed the `shareSuccess` event not being sent on Android 10.\n- Fixed a crash on Storyteller rows.\n- Corrected search visibility in Clips when disabled.\n- Fixed missing key-value pairs in the request for GAM Ads.\n- Ensured Clip events are sent correctly when opened from a category or search screen.\n\n## **10.7.0** - 10/12/24\n\n### Breaking Changes\n\n- Added `customScreenForCategory()` to `StorytellerDelegate` for handling custom followable category actions. [StorytellerDelegates.md](StorytellerDelegates.md)\n- Added `useCustomScreenForCategory()` to `Storyteller` for allowing the developer to conditionally show the custom screen for a specific category or\n default. [StorytellerDelegates.md](StorytellerDelegates.md)\n\nNote that if you are not using this feature you can simply return the default return values for these delegate methods.\n\n### Bug Fixes\n\n- Fixed issue where pausing required multiple clicks.\n- Resolved a bug preventing tablet ads from rendering correctly.\n- Fixed crash occurring in stories.\n- Addressed issue where old content briefly displayed after following/unfollowing a team.\n- Fixed bug where the \"Following\" tab showed user content after logout.\n- Resolved issue with custom native and client ads not resetting progress correctly.\n- Fixed incorrect calculation of Poll & Quiz results.\n- Analytics events:\n + Fixed `nextClip` and `previousClip` event issues.\n + `finishedClip` event now includes correct clip information when dismissing a category.\n- Fixed issue where tapping the left side of the first story closed it.\n- Resolved crash when clicking on two clips simultaneously.\n- Removed live chip from the search page.\n- Fixed \"Not found\" message incorrectly appearing on the search page.\n- Actions for followable categories now work correctly.\n- Fixed top-level back button functionality.\n- Addressed issue where the refresh button briefly appeared for a loading clip.\n- Disabled the search button when the search field is empty.\n- Collection name inputs are now trimmed correctly.\n- Resolved issue where banner ads occasionally missed the Google \"i\" icon.\n- Fixed clip grid on the search page not scrolling to a dismissed clip.\n- Fixed GAM analytics inside the Storyteller Ads Module.\n- Fixed KVPs for Banner Ads inside the Storyteller Ads Module.\n\n### New Features\n\n- Added `resumePlayer()` to `Storyteller` for resuming the player after pausing. [AdditionalMethods.md](AdditionalMethods.md)\n\n### Improvements\n\n- Live clips now resume from their current live position when viewed again.\n- Story rows behavior aligned with disabled Read/Unread ordering.\n- Added fallback to Story ID when a page cannot be found.\n- Updated captions to include a CC logo with a toggle option.\n- Set default font sizes for Stories, Clips, and Singletons in the Storyteller Home theme.\n- Clips now pause automatically on the clip player when an action is triggered.\n- Improved caching logic for Stories and Clips.\n\n## **10.6.6** - 8/01/25\n\n### Bug Fixes\n\n- fixed Clips analytics to use the feed title as `containerTitle`\n\n## **10.6.5** - 22/11/24\n\n### Bug Fixes\n\n- fix deprecated `Modifier.animateItemPlacement` and replaced with `Modifier.animateItem`\n\n## **10.6.4** - 1/11/24\n\n### Bug Fixes\n\n- fix for sound playing on double back click on followable categories\n\n## **10.6.3** - 25/10/24\n\n### New Features\n\n- add `isLive` and `collectionClipCount` fields to analytic events, see [Analytics](Analytics.md) for more details\n\n### Bug Fixes\n\n- fixed an issue with Native Ad impressions not being reported in StorytellerGamModule\n- fixed a crash which could potentially happen when using hardware keyboard in Search screen\n\n## **10.6.2** - 22/10/24\n\n### New Features\n\n- new signature for `StorytellerGamModule.init` method, which allows using different Ad Units, see [Ads](Ads.md) for more details\n\n### Bug Fixes\n\n- fixed issue with potential crash when resuming CLips player\n- fixed issue which could cause ANR when launching the App using cold start\n\n## **10.6.1** - 10/10/24\n\n### Bug Fixes\n\n- fixed multiple issues with playback stuck on For You / Following\n- fixed an action button not working for the empty Following screen\n\n## **10.6.0** - 8/10/24\n\n### Breaking Changes\n\n- Compose Bom dependency updated to `2024.09.03`\n\n### New Features\n\n- Added For You / Following feature to our embedded clips\n- Added auto reloading support to our lists\n\n### Improvements\n\n- Some of our theme parameters can be configured from CMS\n- Updated our theme parameters documentation\n- Fixed standard banner ads not displaying on Tablets\n- Fixed a crash due to reorder animation issues\n- Video playback improvements\n- Video and Image preloading and caching improvements\n- Added Swipe gesture to dismiss Category screen\n\n### Bug Fixes\n\n- fixed a crash which could occur when doing PTR on Embedded Clips\n- fixed a UI glitch for Native ads\n- fixed a bug where the Search screen was reloaded after closing the Player\n- fixed UI glitches on Category screen\n- fixed `dismissedAd` being sent for Stories on the Search/Category screen\n\n## **10.5.1** - 10/09/24\n\n### Improvements\n\n- Ads will restart the video if the last action was `play` or `idle`\n- Introduced new tracking of ads when they are looped/repeated or Action buttons are tapped.\n- All add type events now include advertiser name\n\n### Bug Fixes\n\n- fixed wrong use of googleAdsResponseId in ad tracking\n- fixed an issue where the incorrect cursor color was used in the search bar\n- fixed an issue where page ad events are also triggered when swiping down\n- `pageActionType` is now included for all types of ads and their analytic events\n- story ads analytics are correctly referred to as `video` instead of `image`\n- fix incorrectly laid out banner ads\n\n## **10.5.0** - 3/09/24\n\n### New Features\n\n- added support for Standard ads GAM `Google Ads Manager`\n- introduced Storyteller Gam module `StorytellerGamModule`. It can be used to facilitate the integration of native ads into the Storyteller SDK so that the adverts are injected between the stories and\n clips. see [Ads](Ads.md) for more details\n- added `Storyteller.module` list during initialization to enable the native ads feature. see [StorytellerModule](StorytellerModule.md) for more details\n\n### Improvements\n\n- added support for keyboard navigation for categories in the Clips player\n- buttons have been added to expand and shrink both the title and category lists\n- improved the animation of closing the player so it's less noticeable\n- improved keyboard focus handling within Search\n- aligned the embedded Clips play button to match the normal Clips play button\n- improved text input and keyboard responsiveness in search for Samsung devices\n- improved accessibility descriptions for the Clips player\n\n### Bug Fixes\n\n- fixed a bug where it was possible to trigger requests to the API before the SDK was initialized\n- fixed a bug where navigation was possible to the same category in the category list\n- fixed a crash that could occur when opening stories from a story list\n- fixed a stack overflow crash for tablets when changing orientation\n- fixed broken layout for large titles and category lists on tablets and phones\n- fixed a bug where the live chip would be shown as read before it's clicked\n- fixed a bug where `No results found` would not show when tapping on the search button\n- fixed an issue where the gradient on an asset had a delay on reload\n\n## **10.4.1** - 9/08/24\n\n### Bug fixes\n\n- fixed a crash that could occur when rendering a Row or Grid with animations enabled\n\n## **10.4.0** - 8/08/24\n\n### New Features\n\n- added support for Accessibility adherence according to [WCAG 2.1](https://www.w3.org/TR/WCAG21/) standards\n- added support for keyboard navigation in the Stories and Clips player\n\n### Improvements\n\n- added talkback announcements when navigating between Stories and Pages\n- improved all accessibility elements for all elements in Stories\n- upgraded the `HTTP/1` protocol to `HTTP/2` for better performance and security\n- enabled the re-order animations by default in themes please see `theme.lists.animateTilesOnReorder` [Themes](Themes.md) for more details\n- improved the alignment for labels and headings between ios and android\n- improved accessibility bypass/skip blocks for the Stories and Clips player\n- added error state when search fails to load\n- reduced load of dependency graph by deferring some dependencies initialization\n- improved animations for Stories and Clips\n- improved preloading of category thumbnails inside Clips\n\n### Bug fixes\n\n- fixed analytic discrepancy issues (double clicks being ignored or filtered out)\n- fixed various mislabeled accessibility elements (action buttons, titles, images, Polls and Quizzes)\n- fixed preloading of poll videos not cancelling\n- fixed android back button not interacting correctly\n- fixed infinite loading or no loading at all in search\n- fixed a bug for followable categories where you cannot follow or unfollow\n- fixed a bug where sound is playing in the background\n- fixed a bug where sound is not playing when you return to the app\n- fixed a bug where images would not load or preload in wrong order\n- fixed a crash related to android 8.0.0+ devices\n- fixed a bug where poll videos would not play after coming back to the app\n- fixed a bug where Dismissed Reason was missing in Story Closed event\n- fixed a bug where previous search results were shown after multiple queries\n- fixed a bug with excessive space between title and categories in the Clips player\n- fixed a bug where \"New\" chip on Clip tiles would appear and disappear when opening the Clips player\n- fixed a bug where Story player would freeze after putting app into background\n- fixed a bug where sound would not stop playing when going between image and video pages in Stories\n- fixed a bug where pull-to-refresh on embedded Clips could stop playback\n- fixed a bug where there would be a flash on search screen during orientation change\n- fixed a bug where Story row inside search screen would appear after a delay\n- fixed a bug where search input in dark mode still had light mode style\n- fixed a bug where followable category screen would miss a \"star\" icon\n\n## **10.3.0** - 15/07/24\n\n### New Features\n\n- lists can now reload in an animated fashion, controlled by the [animateTilesOnReorder](Themes.md) flag in the Theme.\n- [Storyteller Home](StorytellerHome.md) can now have a fixed UI Style set\n\n### Improvements\n\n- standardizing Clips and Stories Player present/dismiss transitions\n- improved loading sequence when the tiles are appearing on the screen to feel smoother\n- improving the Accessibility experience of the Player\n- made clarifications around how the [User ID](Users.md) is used within the SDK\n- organized the docs for the [Open Player](OpenPlayer.md) methods\n- improved loading time of the lists in Compose\n- improved Search and Categories screens in Compose\n\n### Bug fixes\n\n- fixed issue with the Theme not applied when opening Search\n- fixed issue with Story Playback mode in Analytics\n- fixed issue with the title gradient not appearing in square tiles\n- fixed crashes related to opening Quizzes and Polls\n- fixed View Model crash when accessing from a detached fragment\n\n## **10.2.3** - 5/07/24\n\n### Bugfixes\n\n- fixed a crash which could occur when try to open story from deep link, but story is not available\n\n## **10.2.2** - 3/07/24\n\n### Bugfixes\n\n- fixed a crash which could occur when reloading the row with Quizzes\n\n## **10.2.1** - 27/06/24\n\n### Improvements\n\n- when an empty String is passed for `UserInput` in `Storyteller.initialize(...)` the default user will be used\n\n## **10.2.0** - 24/06/24\n\n### New Features\n\n- added new liveChip properties to `rectangularTile` the theme, see [Themes](Themes.md) for more details\n- added new fade loading effect for images in rows and grids when transitioning from placeholder to the actual image\n- added support for linking to a specific clip within the moments tab including correct analytic events surrounding this\n- exposed the property `canGoBack` from embedded clips to allow querying about the possibility of going back in the embedded clip collection,\n see [StorytellerClipsFragment](StorytellerClipsFragment.md) for more details\n- added support for initial Category within the `openCollection` method, see [Additional Methods](AdditionalMethods.md) for more details\n- added support for initial category for the deep links. Via the query param `categoryId` you can specify the initial category to open, see [DeepLinking](DeepLinking.md) for more details\n- added support for initial category for embedded clips. see [StorytellerClipsFragment](StorytellerClipsFragment.md) for more details\n\n### Breaking Changes\n\n- renamed `theme.player.liveChipImage` to `theme.player.liveChip.*` that contains `textColor`, `image`, `backgroundGradient`, and `backgroundColor` properties for better customization,\n see [Themes](Themes.md) for more details\n- removed `theme.tiles.rectangularTile/circularTile.liveChip.textColor` in favor of `theme.tiles.rectangularTile/circularTile.liveChip.readTextColor` and\n `theme.tiles.rectangularTile/circularTile.liveChip.unreadTextColor`, see [Themes](Themes.md) for more details\n\n### Bugfixes\n\n- fixed an issue where backButton was not visible when navigating from a category to home then back to Moments\n- fixed an issue with multiple filter menus appearing when fast tapping on search filter button\n- fixed an issue where where action buttons shift incorrectly on Moments screen/tab\n- fixed various alignment issues & animations & theming issues across the SDK (Followable categories, Moments, etc.)\n- fixed a bug where the after killing the app and reopening, the theme resets\n- fixed playback issues while navigating\n- fixed analytics issues where nextCategory and previousCategory is sent instead of openedCategory and dismissedCategory\n- fixed bug where stories would close when navigating and trying to show an advert\n- fixed playback gets stuck when navigating & skipping too fast\n- fixed a lifecycle bug where sound plays when app is swiped to background\n- fixed a crash when swiping fast between moments and pressing home immediately afterwards\n- fixed an issue with search filters on tablets, filters sheet was half visible\n- fixed an issue with first party ads deep-links were not working\n- fixed a potential crash with first party ads\n- fixed stuck playback when opening a page ad\n- fixed a glitch with embedded clips header shifting on tablet layouts (samsung devices) when opening the share dialog\n- fixed an issue with square tiles that made title gradient flash when navigating between screens\n\n## **10.1.5** - 10/06/24\n\n### Bugfixes\n\n- fixed an issue where the round tile title can be cut off in Compose\n\n## **10.1.4** - 5/06/24\n\n### Bugfixes\n\n- fixed an issue with NPE crash which could happen when dismissing a Clip before video loads in `StorytellerClipsFragment`\n\n## **10.1.3** - 5/06/24\n\n### Bugfixes\n\n- fixed an issue with NPE crash which could happen when opening the Stories Player\n- fixed an issue with ANR which could happen when initializing the SDK\n- fixed an issue with Stories crashing due to `ConcurrentModificationException`\n\n## **10.1.2** - 23/05/24\n\n### Bugfixes\n\n- fixed an issue with Stories crashing due to `ConcurrentModificationException`\n\n## **10.1.1** - 17/05/24\n\n### Bugfixes\n\n- fixed an issue with playback not starting for StorytellerClipsFragment\n- fixed an issue with the StorytellerClipsFragment playback not starting after reloading the container screen\n\n## **10.1.0** - 16/05/24\n\n### New Features\n\n- added support for First Party Ads\n- added support for gradients for Circular Tiles, see [Themes](Themes.md) for more details\n\n### Improvements\n\n- improved content preloading for faster playback\n\n## **10.0.4** - 5/06/24\n\n### Hotfixes\n\n- hotfix for `ConcurrentModificationException` in the NBA app\n\n### Bugfixes\n\n- fixed an issue with the Row blinking on Tablets\n- fixed an issue with `PreviousClip` analytics event\n- fixed an issue where `CompletedStory` analytics event was not sent for single Paged Stories\n- fixing an issue with the filters on Search screen\n- fixing an issue with wrong theme applied when navigating between categories in `StorytellerClipsFragment`\n- fixing an issue where the long version of the title was used instead of the short one for the Circular tiles\n- fixing an issue where multiple Page Ads could be added in the same slot\n- fixing an issue where sometimes No Results Screen was not shown correctly in Search\n- fixing an issue where Clips could sent an error to delegate while reloading the content\n\n## **10.0.3** - 27/05/24\n\n### Bugfixes\n\n- fixed an issue with Stories crashing due to `ConcurrentModificationException` (backport from **10.1.2**)\n\n## **10.0.2** - 09/05/24\n\n### New Features\n\n- added compose implementation for embedded clips the `StorytellerEmbeddedClips` composable, see [StorytellerClipsFragment](StorytellerClipsFragment.md) for more details\n\n### Bugfixes\n\n- fix an issue for stories where the player is dismissed when the user navigates to search from stories\n- fix an issue where grid columns could be mixed when recycled\n\n## **10.0.1** - 03/05/24\n\n### Breaking Changes\n\n- `reloadData()` for embedded clips will take you back one level if not on the top level of the collection. se [Reload Data](StorytellerClipsFragment.md#reload-data)\n in [StorytellerClipsFragment](StorytellerClipsFragment.md) for more details\n- fixed an issue with `tileSpacing` where it was applied twice, so make sure to adjust your theme if you were using 2x `tileSpacing` value\n\n### New Features\n\n- introduced `setLocale` method to the `Storyteller.user` object to set the user's locale, see [User Customization](Users.md) for more details\n\n### Bugfixes\n\n- fixing an issue with clips subtitles can disappear when tapping the share button\n- fixing the missing search-specific analytics parameters for Stories\n- fixing an issue with the tile shrinking animation when the player is closed\n- fixing an issue where action buttons were not working on subsequent screens\n- fixing an issue with action button could crash the app when tapped after opening category details screen\n- fixing an issue where clips playback could be stuck after opening a story from category details screen\n- fixing an issue with embedded clips where swiping left to open category details might not work while on the first clip\n- fixing an issue with embedded clips reloading, back arrow can be still visible when it should not\n\n## **10.0.0** - 18/04/24\n\n### Breaking Changes\n\n- deprecated xml view params removed in favour of `StorytellerListConfiguration`, see [StorytellerStoriesView](StorytellerListViews.md) or [StorytellerClipsView](StorytellerListViews.md) for more\n details\n- added an additional method `categoryFollowActionTaken` to `StorytellerDelegate`, see [StorytellerDelegate](StorytellerDelegates.md) for more details\n- `isRefreshing` parameter for Composable Lists has been replaced with `state.reloadData()` method, see [StorytellerCompose](StorytellerListViews.md) for more details\n\n### New Features\n\n- introduced **Followable Categories**, enhancing user interaction and engagement by allowing users to follow/unfollow categories. For more details, please see [User Customization](Users.md)\n- `StorytellerListViews` now make use of ComposableViews which improve performance, see [StorytellerStoriesView](StorytellerListViews.md) or [StorytellerClipsView](StorytellerListViews.md) for more\n details\n- introduced Captions support for Clips\n- various Performance improvements for Lists scrolling and Tile loading\n\n### Bugfixes\n\n- fixing some UI issues when navigating categories inside Clips\n- fixing issue with scrolling to the top of the list after reloading data\n- increased rounded corners default Theme value to 8\n- fixing data reloading and scrolling for Composable Lists\n- added missing empty state for Search\n- fixed sound playing before navigation screen opens\n- fixed issue with previous play card visible when doing PTR on Clips\n- fixing analytic events and data for Clips, Search, Ads and Stories\n\n## **9.13.4** - 10/04/24\n\n### Bugfixes\n\n- fixing a bug where `Storyteller.dismissPlayer` was ignoring `animate` parameter\n\n## **9.13.3** - 8/04/24\n\n### Bugfixes\n\n- removed unused flag from manifest\n\n## **9.13.2** - 2/04/24\n\n### Bugfixes\n\n- added R8 rule for `StorytellerHomeFragment` to prevent obfuscation\n\n## **9.13.1** - 2/04/24\n\n### Bugfixes\n\n- aligned the `cornerRadius` theme property for the Stories action buttons and Onboarding\n\n## **9.13.0** - 29/03/24\n\n### New Features\n\n- added `StorytellerHome` support, see [StorytellerHome](StorytellerHome.md) for more details\n- added better support for configuring privacy and analytics events, see [Additional Methods](AdditionalMethods.md) for more details\n\n### Bugfixes\n\n- fixed an issue where Clips were started with a small delay\n- fixed an issue where Stories action buttons were not respecting `cornerRadius` theme property\n- fixed an issue in Compose where background was not properly resized for Live/Read/Unread chips\n\n## **9.12.1** - 27/03/24\n\n### Bugfixes\n\n- fixed an issue where `openedReason` could be wrong when opening Clips/Stories player via a deep link\n- fixed an issue where the `shareSuccess` analytics event was not sent when sharing a Clip\n- fixing an issue where `Storyteller.openStory` was not emitting `openedStory`\n- fixing a black screen issue when opening not existing Clip collection\n\n## **9.12.0** - 18/03/24\n\n### Improvements\n\n- added `itemTitle` and `actionText` to action analytic events, see [Analytics](Analytics.md) for more details\n- changed `Storyteller.currentUser` to be `Storyteller.currentUserId`\n- gradient mask increased on the tiles for better readability\n\n### Bugfixes\n\n- fixed a bug where the wrong link was used for email sharing\n- fixed a bug where it was not possible to correctly alignment for Compose tiles\n- fixed handling of custom live chip in Compose\n- fixed an issue where it was possible to get `onFailure` callback when `onSuccess` was already triggered for `Storyteller.initialize`\n- fixed handling of the custom theme images in Compose\n\n## **9.11.0** - 8/03/24\n\n### Improvements\n\n- added support for handling share on action buttons\n\n## **9.10.0** - 28/02/24\n\n### Improvements\n\n- analytics improvements: added missing fields, fixed some events\n\n### Bugfixes\n\n- fixed a bug with the `placement` field was set incorrectly for `AdRequestInfo`\n- fixed a bug where the search icon was visible when CLip Player loading failed\n- fixed and improved multiple areas of Analytics\n- fixed a bug where the image title was visible in Clips player on Ads\n- fixed a bug where filtering by content type was not working in Search\n- fixed a bug where the Search button was not working when using keyboard\n- fixed Compose list views where it was possible to see viewed/not viewed badges on Clips even when they were turned off in the CMS\n\n## **9.9.2** - 21/02/24\n\n### Bugfixes\n\n- fixed a bug with the SHARE_SUCCESS event not having correct data and sometimes not being sent\n\n## **9.9.1** - 02/02/24\n\n### Improvements\n\n- improved accessibility support for the player so that it announces player content without saying page 3x times\n\n### Bugfixes\n\n- fixed a bug where Clips player was opening slowly after a delay and sometimes not opening at all\n- fixed a crash which could occur when opening the Clips player at a very edge case scenario\n\n## **9.9.0** - 31/01/24\n\n### New Features\n\n- added 'Viewed/Not Viewed' status indicators for Clips, improving content tracking for users\n- removed support for round tiles in xml `StorytellerClipListViews`, streamlining the design\n- implemented sortOrder handling for Clips, offering better content organization\n- if `enableReadUnreadOrdering` is set to `false` for stories, New chips are now hidden for both read/unread statuses, ensuring a cleaner UI\n\n### Bugfixes\n\n- fixed the order inconsistency between list and embedded Clips, enhancing the user experience\n- resolved the issue where Clips ordering was incorrect and ensured that Pull-to-Refresh (PTR) maintains the correct order\n- addressed the issue where the new chip did not disappear if the clip was watched on Search, ensuring consistent UI behavior\n- fixed the issue where like and share options were removed after reloading on embedded clips, maintaining feature availability\n- resolved the issue where, after a second PTR, read clips would become unread again, ensuring consistent read status\n- fixed the issue where the gray background remained static for a few frames for clips, polishing the visual experience\n\n## **9.8.4** - 11/01/24\n\n### New Features\n\n- Embedded Clips has a new property `bottomInset` which can be used to set the bottom padding for the Clips Player, please see `Inset Management` section\n in [StorytellerClipsFragment](StorytellerClipsFragment.md) for more details\n- Storyteller has a new property `isSearchEnabled` which can be used to check if the search is enabled for the current tenant, please see [Additional Methods](AdditionalMethods.md) for more details\n- added accessibility support for Embedded Clips, Search, Instructions and Compose\n\n### Bugfixes\n\n- fixed an issue with round tiles layout in Compose\n- fixed an issue with `StorytellerListViewDelegate` methods are sometimes not triggered\n- fixed an issue to remember start clip id even if reload reorders clip data in embedded clip\n\n### Breaking Changes\n\n- Storyteller Themes are accepting now resource ids for Fonts and Drawables using helper functions, see [Themes](Themes.md) for more details\n\n## **9.8.3** - 13/12/23\n\n### New Features\n\n- added support for `StorytellerClipsViewControllerDelegate` inside `StorytellerClipsFragment`, please see [StorytellerClipsFragment](StorytellerClipsFragment.md)\n\n### Improvements\n\n- improved Round tiles in Compose\n- improved PTR support for `StorytellerClipsFragment`\n\n### Bugfixes\n\n- fixing an issue with not working `StorytellerDelegate` when the hosting activity is closed\n- fixing an issue with `CompletedStory` not being sent when the user is on the last page\n\n## **9.8.2** - 1/12/23\n\n### Bugfixes\n\n- fixing an issue with Compose round tile titles\n\n## **9.8.1** - 24/11/23\n\n### Bugfixes\n\n- fixing read/unread Stories order in Player\n- the top bar in Clip Player is now fixed\n- fixing default height constraints for Compose rows\n- fixing deep link handling for Stores/Clips when ids that are passed are wrong\n\n### Breaking Changes\n\n- Storyteller Themes are accepting now resource ids for Fonts and Drawables only, see [Themes](Themes.md) for more details\n\n## **9.8.0** - 9/11/23\n\n### New Features\n\n- rewritten `StorytellerListViews` fully in Jetpack Compose, please see [StorytellerCompose](StorytellerListViews.md) for more details\n- Clip collections are not looping on `StorytellerClipsFragment` anymore (user cannot advance from last to first Clip), please see [StorytellerClipsFragment](StorytellerClipsFragment.md)\n\n### Breaking Changes\n\n- Compose versions of `StorytellerListViews` do not use controllers anymore, please see [StorytellerCompose](StorytellerListViews.md) for more details\n- updated Compose BoM dependencies to `2023.10.01`\n\n## **9.7.7** - 29/11/23\n\n### Bugfixes\n\n- fixing a crash which could occur when dismissing Clips player\n\n## **9.7.6** - 14/11/23\n\n### Bugfixes\n\n- fixing a crash which could occur when opening Clips or Stories player\n\n## **9.7.5** - 9/11/23\n\n### Bugfixes\n\n- fixing a crash which could occur when using PTR on the Embedded Clips\n\n## **9.7.4** - 8/11/23\n\n### Bugfixes\n\n- fixing an issue with `displayLimit` when same category is used in multiple places\n- fixing an issue with wrong count format of Clip Likes inside the player\n- fixing an issue with Stories/Clips Player close animation\n\n### New Features\n\n- added support for `reloadData()` and PTR for `StorytellerClipsFragment`, please see [StorytellerClipsFragment](StorytellerClipsFragment.md) for more details\n\n## **9.7.3** - 18/10/23\n\n### Bugfixes\n\n- fixing a crash which could occur when navigating to the Embedded Clips via a deep link\n\n## **9.7.2** - 16/10/23\n\n### New Features\n\n- Storyteller now supports Android 14\n- upgraded Android Gradle Plugin from `8.0.2` to `8.1.1`\n\n## **9.7.1** - 9/10/23\n\n### Bugfixes\n\n- fixing an action button issue for Clips\n\n### New Features\n\n- added top level back button handling for Embedded Clips, please see [StorytellerClipsFragment](StorytellerClipsFragment.md) for more details\n\n## **9.7.0** - 29/09/23\n\n### Bugfixes\n\n- fixing an issue with the Clip Player header image\n- fixing an issue where th instructions screen was not shown when changing the orientation\n- fixing memory leaks in Story Player\n\n### New Features\n\n- added `openCategory` method, please see [Additional Methods](AdditionalMethods.md) for more details\n- added `openStoryByExternalId` and `openClipByExternalId` methods, please see [Additional Methods](AdditionalMethods.md) for more details\n- added `pageTitle` parameter to analytic events, please see [Analytics](Analytics.md) for more details\n- added fixed order rows mode for Stories which can be set up via the CMS\n- added pinned stories support for Stories which can be set up via the CMS\n\n## **9.6.0** - 18/09/23\n\n### Improvements\n\n- updated top and bottom shade gradient for Clips\n- more/less button displayed below the categories list for Clips\n- improved sorting of Stories lists\n\n### Bugfixes\n\n- fixing a bug where the Story close animation had a low quality\n- fixing memory leaks in the Clips/Stories player\n\n## **9.5.1** - 18/10/23\n\n### Improvements\n\n- added support for Android 14\n\n## **9.5.0** - 30/08/23\n\n### New Features\n\n- added support for Page Ads which appear between Pages\n\n### Breaking Changes\n\n- changed signature of ad delegate from `getAdsForList` to `getAd`, please see [Ads](Ads.md) for more details\n- changed classes inside `StorytellerAdRequestInfo`, `StoryInfo` and `ClipInfo` are now single class `IntemInfo`, please see [Ads](Ads.md) for more details\n\n### Improvements\n\n- added `adPlacement` to analytics, please see [Analytics](Analytics.md) for more details\n\n## **Important**\n\n- **Please note that the Storyteller SDK is now distributed via CloudRepo. Please see [GettingStarted](GettingStarted.md) for more details. MyGet repository is not working anymore**\n- The only change required is to add the following maven repository to your project's `build.gradle` file and MyGet can be removed:\n\n```groovy\n maven { url 'https://storyteller.mycloudrepo.io/public/repositories/storyteller-sdk' }\n```\n\n## **9.4.0** - 15/08/23\n\n### New Features\n\n- added support for Clips Category Navigation to the Clips Player\n\n## **9.3.1** - 1/08/23\n\n### Improvements\n\n- improved performance of loading Story tile images\n\n## **9.3.0** - 24/07/23\n\n### Breaking Changes\n\n- Composable views are part of the main SDK. Please refer to the [StorytellerCompose](StorytellerListViews.md) documentation for more details.\n- instead of setting params on Android views (which are now marked as deprecated), `StorytellerListViewConfiguration` object was introduced. Please see [StorytellerClipsView](StorytellerListViews.md)\n and [StorytellerStoriesView](StorytellerListViews.md) for more details.\n- Composable views are now also using `StorytellerListViewConfiguration` object. Please refer to the [StorytellerCompose](StorytellerListViews.md) documentation for more details.\n- some class names related to Ads were changed:\n\n | Old class | New class |\n | ---------------------------------------------------- | ------------------------------------------------------------- |\n | `ClientAd` | `StorytellerAd` |\n | `TrackingPixelClientAd` | `StorytellerAdTrackingPixel` |\n | `ClientAction` | `StorytellerAdAction` |\n\n### Improvements\n\n- better scroll position handling for the Row views\n- improvements for Composable view performance\n\n## **9.2.2** - 4/07/23\n\n### Improvements\n\n- added better support for Video and Image pages between Quiz pages\n\n## **9.2.1** - 19/06/23\n\n### Bug fixes\n\n- fixed an issue with sharing Clips\n\n## **9.2.0** - 13/06/23\n\n### New Features\n\n- added support for embedding the Clips Player as a fragment, see [StorytellerClipsFragment](StorytellerClipsFragment.md)\n\n### Improvements\n\n- changed underlying image loading library to Coil to improve image loading performance\n- improved open/close transition animations\n- removed `StoryCategory` and `ClipCategory` classes in favour of `Category` class\n\n### Bug fixes\n\n- fixed a problem with init spikes in the storyteller initialisation process\n- fixed a problem with a previous story thumbnail being visible when navigating stories quickly\n- fixed a problem with updating the read status of stories\n- fixed a problem with closing the instructions screen by tapping anywhere on the screen\n\n## **9.1.7** - 6/06/23\n\n### Bugfixes\n\n- fixed a crash which could appear when inflating the views\n- fixed a return animation issue from the tiles\n\n## **9.1.6** - 23/05/23\n\n### Bugfixes\n\n- fixed a bug where ads are not cleared when the Player is dismissed\n\n## **9.1.5** - 18/05/23\n\n### New Features\n\n- `Storyteller.user.setCustomAttribute` now accepts only `String` values, see [User Customization](Users.md)\n\n### Bugfixes\n\n- fixed a bug where the Page action could be triggered by a swipe up even if it had no action set\n\n## **9.1.4** - 16/05/23\n\n### New Features\n\n- Ad indicator added to the Clips player\n\n## **9.1.3** - 11/05/23\n\n### New Features\n\n- `adType` param added to `UserActivity`, see [Analytics](Analytics.md)\n- changed definition of `ClipsAdRequestInfo`, see [Ads](Ads.md)\n\n## **9.1.2** - 04/05/23\n\n### Bugfixes\n\n- fixed a bug with dependency injection that might affect unit tests\n\n## **9.1.1** - 02/05/23\n\n### Bugfixes\n\n- fixed a bug with proguard rules for AGP 8.0\n\n## **9.1.0** - 01/05/23\n\n### New Features\n\n- live clips are here.\n- added Live indicator to the Clips tile and the Clips player\n- implemented during live stream behaviour\n- implemented before/after live stream behaviour\n\n### Bugfixes\n\n- fixed pager scrolling glitch on clips when having two clips\n- fixed gray button appearing on Quiz summary when share button is turned off in theme\n- fixed a potential crash which could occur when sending Storyteller to the background\n\n## **9.0.1** - 17/04/23\n\nImprovements:\n\n- added support for Stories ordering by category\n\nBugfixes:\n\n- fixing an issue with unit tests\n- fixing an issue with the Clips title image not appearing\n- fixing a crash which could occur when navigating the Stories inside a grid\n- fixing a a crash which could occur when navigating to a previous story\n\n## **9.0.0** - 6/04/23\n\nImprovements:\n\n- added support for Ads between Clips\n- performance improvements for Clips Player\n- added support for setting custom attributes for Storyteller requests\n- improved image preloading performance for Story and Clip tiles\n- removed deprecated `tileBecameVisible`, `getAdsForList` methods\n\nBugfixes:\n\n- fixing a bug where the Story tiles were not loaded immediately when scrolling `StorytellerListView`\n- fixing a bug where `StorytellerListView` was not scrolled to the beginning after reloading the data\n\nBreaking Changes:\n\n- removed support for `category` on Clips and `collection` for Stories\n- changed `getAdsForList` callback to better support Clips and Story Ads, see [Ads](Ads.md)\n- introduced a better class hierarchy for the StorytellerListView classes:\n\n```text\nStorytellerListView\n\u251c\u2500\u2500 StorytellerStoriesView\n\u2502 \u251c\u2500\u2500 StorytellerStoriesRowView\n\u2502 \u2514\u2500\u2500 StorytellerStoriesGridView\n\u2514\u2500\u2500 StorytellerClipsView\n \u251c\u2500\u2500 StorytellerClipsRowView\n \u2514\u2500\u2500 StorytellerClipsGridView\n```\n\nfor more information please check the [StorytellerListView](StorytellerListViews.md) documentation.\n\n## **8.5.11** - 12/12/23\n\nBug Fixes:\n\n- fixing an issue with not working `StorytellerDelegate` when the hosting activity is closed\n\n## **8.5.10** - 18/10/23\n\nImprovements:\n\n- fixed Android 14 compatibility issues\n\n## **8.5.9** - 3/04/23\n\nBug Fixes:\n\n- fixing a rare crash which could occur when the player is recreated\n\n## **8.5.8** - 27/03/23\n\nImprovements:\n\n- introduced different thumbnail sizes for better story and clip previews\n\n## **8.5.7** - 14/03/23\n\nBug Fixes:\n\n- fixed a bug where a Video analytic event was not sent on time\n\n## **8.5.6** - 2/03/23\n\nBug Fixes:\n\n- fixed a bug with gestures which could appear when moving the app to the background and pressing on a Story.\n- fixed a bug where the video would not start after opening a Story from a deep link\n- fixed a crash that could occur when there is a large number of tiles in the `StorytellerListView`\n\n## **8.5.5** - 20/02/23\n\nBug Fixes:\n\n- fixed a bug that was causing the onboarding process to appear every time the application was initialized\n- fixed a bug where the ads created by the GAM were not properly animating upon closing\n\n## **8.5.4** - 15/02/23\n\nBug Fixes:\n\n- fixed a bug where category parameters were not being set for Story, Clip and Ad analytics events\n- fixed a bug that was causing the ad chip to not be displayed for Client ads\n\n## **8.5.3** - 10/02/23\n\nBug Fixes:\n\n- fixed a bug with setting an empty user id (`null`) during Storyteller initialization\n- fixed a bug with a video playing under the instructions screen\n- fixed a bug with the Stories player layout\n- fixed a bug with the opening transition\n\n## **8.5.2** - 2/02/23\n\nBug Fixes:\n\n- fixed a bug with wrong `openedReason` set for Clips analytics\n\n## **8.5.1** - 30/01/23\n\nBug Fixes:\n\n- fixed a crash which could occur on Android versions lower than 10\n\nImprovements:\n\n- improvements to the close transition handling\n\n## **8.5.0** - 19/01/23\n\nBreaking changes:\n\nSDK Repackaging was done to organise the code better. Please update Storyteller imports.\n\n| Old class | New class |\n|------------------------------------------------------|---------------------------------------------------------------|\n| `com.storyteller.domain.StorytellerListViewCellType` | `com.storyteller.domain.entities.StorytellerListViewCellType` |\n| `com.storyteller.services.Error` | `com.storyteller.domain.entities.Error` |\n| `com.storyteller.domain.AdResponse` | `com.storyteller.domain.entities.ads.AdResponse` |\n| `com.storyteller.domain.ClientStory` | `com.storyteller.domain.entities.ads.ClientStory` |\n| `com.storyteller.domain.ListDescriptor` | `com.storyteller.domain.entities.ads.ListDescriptor` |\n| `com.storyteller.domain.UserActivity` | `com.storyteller.domain.entities.UserActivity` |\n| `com.storyteller.domain.UserActivityData` | `com.storyteller.domain.entities.UserActivityData` |\n| `com.storyteller.domain.UserInput` | `com.storyteller.domain.entities.UserInput` |\n| `com.storyteller.domain.ClientAd` | `com.storyteller.domain.entity.ads.ClientAd` |\n\nBug Fixes:\n\n- fixed a bug with `onPlayerDismissed` callback\n- fixed a bug with `onDataLoadComplete` callback\n- fixed a bug with Video from previous story playing in background\n- fixed bugs with some parameters not set for the analytic events\n\nImprovements:\n\n- added `topInset` and `bottomInset` to grids - - please see [Themes](Themes.md) for more details\n- added better support for open/close transitions using `activityReentered` method\n\n## **8.4.0** - 16/12/22\n\nBug Fixes:\n\n- fixed a bug with the loading spinner on Clips\n- fixed rare bug with Story transitions\n- fixed a bug that causes Quiz Pages to be answered when tapping back\n- fixed an animation bug with Story tiles\n\nImprovements:\n\n- improvements to the prefetching of Clips' playcard image\n- implemented a more efficient UserActivity reporting system\n- corrected the use case of thumbnails and playcards\n- implemented single ExoPlayer to improve video playback\n\n## **8.3.4** - 21/12/22\n\nBug Fixes:\n\n- fixed a bug with `dismissPlayer` on Clips\n\n## **8.3.3** - 21/12/22\n\nBug Fixes:\n\n- added Clip Collection and Clip Categories event data for all Clip analytic events\n\n## **8.3.2** - 21/12/22\n\nBug Fixes:\n\n- Skipped Ad events are now recorded when tapping on an ad and swiping left on an ad\n\nImprovements:\n\n- added Current Category to the event data for Story and Ad analytic events\n\n## **8.3.1** - 15/12/22\n\nImprovements:\n\n- added support for multiple font weights\n- replaced SHARE_TAPPED event with SHARE_BUTTON_TAPPED for event consistency between Stories and Clips\n\n## **8.3.0** - 06/12/22\n\nBug Fixes:\n\n- fixed bug when a user taps outside a Story border on Quizzes\n- fixed default value for `answeredMessageTextColor`\n- fixed bug with presenting rounded corners on Stories\n- fixed bug with tracking pixels\n\nImprovements:\n\n- added additional properties to ad events to help identify individual ads\n- improvements to the positioning of Action buttons\n- modified the `getAdsForList` callback to provide more ad information\n- adjusted the timestamp property so timescales are updated for each new Page\n\n## **8.2.9** - 29/11/22\n\nBug Fixes:\n\n- implemented a solution for a shared animation bug on Android 5 to Android 9 when targeting `singleInstance` activity\n\nImprovements:\n\n- stability improvements\n\n## **8.2.8** - 25/11/22\n\nBug Fixes:\n\n- fixed bug with Live Chip properties\n- fixed bug with `onCurrentVideoPlayerChanged` event\n- fixed bug that could cause a `NullPointerException`\n- fixed bug that could cause a Story to not be marked as read when quickly switching Pages\n\n## **8.2.7** - 22/11/22\n\nBug Fixes:\n\n- fixed bug with Stories not opening in Single Story mode when using deep links\n- fixed bug with user activity reports with Stories launched via deep link\n- fixed bug that causes delegates to be disconnected in certain instances\n- fixed bug with opening Clips whilst reloading data\n\n## **8.2.6** - 15/11/22\n\nBug Fixes:\n\n- fixed rare crash when opening player\n\n## **8.2.5** - 11/11/22\n\nBug Fixes:\n\n- fixed bug with Story playback when tapping quickly through Stories\n- fixed bug that could cause rare adapter crash\n- fixed bug with video playback when changing user\n\nDeprecations and Changes:\n\n- ads are now requested after every Story to align ad call logic with iOS SDK\n\n## **8.2.4** - 04/11/22\n\nBug Fixes:\n\n- fixed bug that could cause the same Story to play after ad insertion\n- fixed bug that could cause rare crash after opening webpage links\n- exposed classes needed to support React Native\n\n## **8.2.3** - 01/11/22\n\nBug Fixes:\n\n- fixed bug that could cause crash when changing Page whilst the player is being closed\n- fixed bug that could cause tracking events to be started incorrectly\n\nImprovements:\n\n- reduced memory footprint to improve playback\n- stopped empty or failed items appearing in StorytellerHomeView on rare occasions\n- implemented improved retry policy\n\nDeprecations and Changes:\n\n- removed all open methods from StorytellerListViews to just leave static methods\n\n## **8.2.2** - 25/10/22\n\nBug Fixes:\n\n- fixed rare crash when opening player\n\nImprovements:\n\n- improved logging\n\n## **8.2.1** - 21/10/22\n\nNew Features:\n\n- implemented preloading for Stories and Clips\n- added support for selective Story caching for Story rows\n\nBug Fixes:\n\n- fixed bug with the opening animations of Trivia Quizzes\n- fixed bug with fetching ads after using airplane mode\n- fixed bug with video playback getting stuck\n- fixed bug with view model that could cause Story crashes\n\nImprovements:\n\n- improved analytics handling\n- improvements in handling of DeepLinkManager\n- improvements in data use cases\n\n## **8.2.0** - 11/10/22\n\nNew Features:\n\n- added support for Clips and Collections\n\nBug Fixes:\n\n- fixed bug that delays dismissing of an opened Story\n- fixed inconsistencies with `theme.engagementUnits.poll.answeredMessageTextColor`\n- fixed bug with `theme.player.liveChipImage` and `theme.primitives.cornerRadius` on Poll answers and Story Action buttons\n- fixed bug that could cause Story to freeze when tapping fast\n- fixed bugs with fresh tenants swiping up on an ad and closing ads\n- fixed swipe down animation bug\n- fixed bug with preview transitions on tablets\n- fixed bug that could cause user to move to a Story row instead of a Story when closing web\n\nImprovements:\n\n- added refresh button to Story videos\n- new and improved mechanism for batch ad handing, audio manager focus handling, events and callbacks\n- improved handling of media sharing\n- new and improved mechanisms for analytics and opening Story/Page IDs\n- performance improvements for Stories and Clips loading times\n- adding theme `theme.tiles.rectangularTile.unreadIndicator.textSize`\n- making all tile themes respect UiStyle for all tile types\n- open/close shared transition handling improvements\n\n## **8.1.15** - 26/10/22\n\nBug Fixes:\n\n- fixed a bug where it wasn't possible to select files inside the Action Web View\n\nNew Features:\n\n- added support for External Action Links\n\n## **8.1.14** - 17/10/22\n\nNew Features:\n\n- added the ability to open a clip or collection directly using the `openCollection` method\n\n## **8.1.13** - 21/09/22\n\nBug Fixes:\n\n- fixed option to save Story assets from a Story not displaying correctly\n\n## **8.1.12** - 01/09/22\n\nBug Fixes:\n\n- fixed Story sharing issue between iOS and Android\n- fixed Quiz sharing issues\n\n## **8.1.11** - 24/08/22\n\nBug Fixes:\n\n- fixed occasional crash when closing player\n- fixed reload button visibility not working\n\nImprovements:\n\n- renamed `Storyteller.isPresentingStory` to `Storyteller.isPlayerVisible`\n\nUI Changes:\n\n- improving the Story Player UI on tablet\n\n## **8.1.10** - 19/08/22\n\nBug Fixes:\n\n- fixed issue of duplicate apps when share sheet opens\n- fixed issue where a Page with a Poll plays audio from the previous Page after sharing\n- fixed issue of Poll sharing only working if the Poll has been answered and shared from another Android device\n- fixed issue of video playback not playing on Video Poll after watching a Video Page\n- fixed issue where the `SHARE_SUCCESS` event was not sent\n\nImprovements:\n\n- improving the Story Player UI\n- improving the share sheet\n\nUI Changes:\n\n- navigation buttons added back into Stories\n- status bar visible in Stories\n\n## **8.1.9** - 12/08/22\n\nBug Fixes:\n\n- fixed an issue where the share button could be cropped on smaller devices\n- fixed issue of grid being cropped on navigation to more Stories\n- fixed an issue where a placeholder could be briefly visible after close animation is finished\n\nImprovements:\n\n- improved audio focus handling on Android API < 26 (Oreo)\n\nNew Features:\n\n- added `contentLength` parameter for analytics events - please see [Analytics](Analytics.md) for more details\n\nUI Changes:\n\n- general UI refinements for Story Tiles and Story Player\n- ensured all grid tiles have corner radii\n\n## **8.1.8** - 11/08/22\n\nBug Fixes:\n\n- fixing some minor issues with the tile layouts\n\nImprovements:\n\n- improving the audio focus handling when the Story Player is open\n\n## **8.1.7** - 05/08/22\n\nImprovements:\n\n- update client ads `getAdsForList` public api\n- improve polls UI\n\n## **8.1.6** - 02/08/22\n\nNew Features:\n\n- add support for circular tile border theming\n- add support for circular tile custom live chip theming\n\n## **8.1.5** - 02/08/22\n\nBug Fixes:\n\n- fix a crash caused by triggering web action button\n- improve story player UI\n- fix row/grid `displayLimit` not working for placeholders\n\n## **8.1.4** - 27/07/22\n\nBug Fixes:\n\n- fix row/grid placeholders styling for light/dark modes\n\nImprovements:\n\n- improve light/dark mode theme compatibility\n\n## **8.1.3** - 25/07/22\n\nNew Features:\n\n- add support for multiple row/grids with the same categories\n\n## **8.1.2** - 25/07/22\n\nBug Fixes:\n\n- fix bug where sometimes no Stories could be shown when categories are set\n\nImprovements:\n\n- improve performance or rows/grids inside recycler views\n\n## **8.1.1** - 22/07/22\n\nBug Fixes:\n\n- fixing a rare crash which could occur when tapping on a web action button\n- fixing an issue where the share button for Polls was misaligned\n\nUI Changes:\n\n- improving the layout of the round Story tile items\n\nDeprecations and Changes:\n\n- removing `topInset` and `bottomInset` from grids\n\n## **8.1.0** - 13/07/22\n\nImprovements:\n\n- improving the video playback experience\n\n## **8.0.3** - 11/07/22\n\nBug Fixes:\n\n- fix bug where live chip was incorrect for read/unread story tiles\n- fix inconsistent round tile sizes for varying lines of title text\n- fix title text alignment in round tiles\n\n## **8.0.2** - 28/06/22\n\nBug Fixes:\n\n- fixing an issue where it was possible for a progress indicator to stay on a Poll page\n- fixing an issue where the live chip was not aligned correctly on a tile\n- fixing an issue with `lists.grid.columns` in theme\n\n## **8.0.1** - 24/06/22\n\nBug Fixes:\n\n- fixing an issue with R8 and the SDK package name\n- fixing an issue where it was possible for video playback to not start when viewing a video Page\n- fixing an issue where it was possible for Stories not not be marked as Read\n- fixing an issue where it was possible for video playback to start in the background\n- fixing an issue where it was possible for video playback to freeze unexpectedly\n- fixing an issue where it was possible for the instructions screen to layout incorrectly\n- fixing an issue where it was possible for the share button to not be clickable in certain scenarios\n\nImprovements:\n\n- improving the performance of the Story Player\n\nNew Features:\n\n- adding the ability to enable/disable Storyteller event tracking via the SDK method `enableEventTracking()` and `disableEventTracking` - please see [Additional Methods](AdditionalMethods.md) for more\n information\n- adding action buttons instead of swipe ups for Stories\n- adding `displayLimit` parameter to `StorytellerListView` - please see [Configuring a StorytellerListView](StorytellerListViews.md)\n\nUI Changes:\n\n- improving the UI for Polls and Quizzes\n\nDeprecations and Changes:\n\n- renamed callbacks in `StorytellerListViewDelegate` - please see [Implementing StorytellerListViewDelegate Callbacks](StorytellerDelegates.md)\n\n## **7.1.0** - 29/04/22\n\nBug Fixes:\n\n- fixing an issue with the instructions screen UI\n\nNew Features:\n\n- adding support for Live Stories\n- adding additional attributes to support Live Stories theming - please see [Custom Themes](Themes.md) for details\n\nUI Changes:\n\n- improving UI/UX experience in Story Player\n\n## **7.0.3** - 12/04/22\n\nBug Fixes:\n\n- fixing a dependency clash with Koin library\n\n## **7.0.2** - 0/04/22\n\nBug Fixes:\n\n- fixing an issue with ReactNative\n\n## **7.0.1** - 04/04/22\n\nBug Fixes:\n\n- fixing an issues with quizzes and theme colors\n- fixing an issue where the `UiTheme` had obfuscated name\n\n## **7.0.0** - 01/04/22\n\nBug Fixes:\n\n- fixing an issue where is was possible foe the new indicators to appear on placeholders\n- improving the category caching for faster load times\n- fixing a crash which could occur on initialization\n- fixing an issue where it was possible for the global delegate not to register\n- fixing an issue where it was possible for the share button to disappear after swiping up on a Story\n\nImprovements:\n\n- making it easier to define a custom theme - please see [Themes](Themes.md) for details\n\nNew Features:\n\n- adding support for Trivia Quizzes\n\n## **6.2.0** - 25/02/22\n\nImprovements:\n\n- improved support for multiple `StoryListViews` inside a RecyclerView\n\n## **6.1.4** - 14/03/22\n\nBug Fixes:\n\n- fixing an issue with the navigation for the video pages on Android 12\n\n## **6.1.3** - 08/03/22\n\nBug Fixes:\n\n- fixing a crash which could occur on the open/close story animation\n- fixing an issue with the `primaryTextColor`\n- fixing a crash which could occur when opening the web link\n\n## **6.1.2** - 23/02/22\n\nBug Fixes:\n\n- fixing obfuscation issues\n\n## **6.1.1** - 23/02/22\n\nBug Fixes:\n\n- fixing an issue with the reloading of the stories list\n- fixing an issue with the story tiles flickering when reloading\n\nImprovements:\n\n- improving the story tile resizing\n\nDeprecations and Changes:\n\n- `pagesViewedCount` is public again\n\n## **6.1.0** - 16/02/22\n\nBug Fixes:\n\n- fixing an issue with navigation which could occur when ads are enabled\n\n- fixing an issue with poll vote calculations\n- fixing a bug where the story list tiles were not updated properly on older Android versions\n- fixing an issue with the colors from the theme not being applied properly for `StorytellerListViews`\n\nDeprecations and Changes:\n\n- `uiStyle` parameter moved to `StorytellerListView` (see here for more details [Configuring a StorytellerListView](StorytellerListViews.md)\n\n## **6.0.2** - 07/02/22\n\nBug Fixes:\n\n- fixing obfuscation issues\n\n## **6.0.1** - 03/03/22\n\nBug Fixes:\n\n- fixing an issue which could occur when opening a story when in the landscape orientation\n- fixing a crash which could occur on the open/close story animation\n\nImprovements:\n\n- improving the poll UI\n- improving the UI on the devices with notch\n\n## **6.0.0** - 17/01/22\n\nImprovements:\n\n- Improving the scaling behavior of story tiles\n- Improvements and bugfixes in how themes are handled\n\nNew Features:\n\n- Added `StorytellerGridView`\n- Adding the ability to override the theme on a per list basis\n\nDeprecations and Changes:\n\n- Public API breaking changes:\n + package `com.storyteller.ui.row` renamed to `com.storyteller.ui.list`\n + `StorytellerRowViewDelegate` renamed to `StorytellerListViewDelegate`\n + `StorytellerDelegate`'s `getAdsForRow` renamed to `getAdsForList`\n + `StorytellerRowView`'s `insetRight` and `insetLeft` renamed correspondingly to `insetStart` and `insetEnd`\n + `Theme` class' property `row` renamed to `list`\n + `RowViewTheme` class renamed to `ListViewTheme`\n + `StorytellerRowViewCellType` renamed to `StorytellerListViewCellType`\n + `StorytellerRowViewStyle` renamed to `StorytellerListViewStyle`\n + `OpenedReason`'s enum value `STORY_ROW_TAPPED` renamed to `STORY_LIST_TAP`, tracking string `story_row_tapped` renamed to `story_list_tapped`\n + `StoryPlaybackMode`'s enum value `ROW` renamed to `LIST`, tracking string: `row` renamed to `list`\n\n## **5.0.8** - 08/02/22\n\nBug Fixes:\n\n- fix for race conditions in case of rapid onPause/onResume scenarios\n\n## **5.0.7** - 31/01/22\n\nBug Fixes:\n\n- fixing a potential issue which could occur when running unit tests with Storyteller\n\n## **5.0.6** - 25/01/22\n\nBug Fixes:\n\n- fixing dependency issues\n\n## **5.0.5** - 03/01/22\n\nBug Fixes:\n\n- fixing a concurrency issue\n\n## **5.0.4** - 15/12/21\n\nBug Fixes:\n\n- fixing a crash which could occur when skipping through the pages fast\n\n## **5.0.3** - 14/12/22\n\nBug Fixes:\n\n- fixing a crash which could occur when invoking `Storyteller.initialize` multiple times\n\n## **5.0.2** - 02/12/21\n\nBug Fixes:\n\n- fixing a bug with the user activity data parsing\n\nDeprecations and Changes:\n\n- removing all `jcenter()` dependencies\n\n## **5.0.1** - 24/11/21\n\nBug Fixes:\n\n- fixing a UI glitch where the initial story page could be shown when switching between the pages\n- fixing a crash which could happen when using delegates, `configureSwipeUpWebView(...)` is now mandatory to override\n- fixing a bug which could occur when using Storyteller ads\n\n## **5.0.0** - 18/11/21\n\nImprovements:\n\n- improving sending of analytics events\n\nNew Features:\n\n- adding support for categories\n- adding support for opening the story player in single story mode without the `StorytellerRowView` - please see [AdditionalMethods](AdditionalMethods.md) for details\n- adding additional param `storyPlaybackMode` to analytics events - please see [Analytics](Analytics.md) for details\n\nDeprecations and Changes:\n\n- splitting `StorytellerListViewDelegate` into two separate delegates - please see [StorytellerDelegate](StorytellerDelegates.md) and [StorytellerListViewDelegate](StorytellerDelegates.md) for details\n- removing the `cellScale` parameter from the `StorytellerRowView` in favour of auto adapting to the parent's view height\n- removing callbacks from the `reloadData()` method\n\n## **4.5.11** - 03/11/21\n\nBug Fixes:\n\n- fixing a crash which could occur when sharing the story on Android 12\n\n## **4.5.10** - 02/11/21\n\nNew Features:\n\n- adding additional method `configureSwipeUpWebView(webview: Webview, url : String?, favicon: Bitmap?)` to allow additional configuration of the WebView - please\n see [StorytellerListViewDelegate](StorytellerDelegates.md)\n\n## **4.5.9** - 20/10/21\n\nBug Fixes:\n\n- fixing a crash which could occur when opening the story and scrolling the row in a container\n\n## **4.5.8** - 13/10/21\n\nBug Fixes:\n\n- fixing a problem with ads and navigation\n- fixing a UI issue with the rounded corners on tablets\n\n## **4.5.7** - 30/09/21\n\nBug Fixes:\n\n- fixing a potential clash with resource names\n- fixing a crash which could occur when using a malformed swipe up url\n\n## **4.5.6** - 24/09/21\n\nBug Fixes:\n\n- fixing Windows build issue originating in the kotlinModule compilation artifact containing characters disallowed in windows filesystem\n\n## **4.5.5** - 13/09/21\n\nBug Fixes:\n\n- fixing a bug where the swipe up to `in_app` links was not working\n\nNew Features:\n\n- adding additional method `openDeepLink(String,Boolean,(Error) -> Unit)` to make Storyteller SDK integration easier - please see [AdditionalMethods](AdditionalMethods.md)\n and [Deep Linking](DeepLinking.md)\n- adding `secondaryColor` property to themes - please see [Themes](Themes.md) for details\n\n## **4.5.4** - 31/08/21\n\nBug Fixes:\n\n- fixing a bug where the story could not be closed if the delegate was not set\n- fixing a bug where the poll percentages could show invalid values when the orientation is changed\n- fixing a rare crash which could occur when opening poll stories\n\nImprovements:\n\n- deep linking documentation update - please see [Deep Linking](DeepLinking.md)\n\n## **4.5.3** - 11/08/21\n\nBug Fixes:\n\n- fixing a packaging issue\n\n## **4.5.2** - 11/08/21\n\nBug Fixes:\n\n- fixing a bug where the poll answers could be cut on some devices\n\nNew Features:\n\n- adding additional method `isStorytellerDeepLink(String)` to make Storyteller SDK integration easier - please see [AdditionalMethods](AdditionalMethods.md)\n\n## **4.5.1** - 06/08/21\n\nBug Fixes:\n\n- fixing a tablet bug where the story player could be frozen when changing orientation\n\n## **4.5.0** - 05/08/21\n\nImprovements:\n\n- minor performance improvements\n\n## **4.4.2** - 03/08/21\n\nBug Fixes:\n\n- fixing a bug where the `COMPLETED_STORY` event could be triggered too early\n\nImprovements:\n\n- improving the story tile loading states\n\n## **4.4.1** - 28/07/21\n\nImprovements:\n\n- improve in app swipe up handling\n\nNew Features:\n\n- add `animated` parameter for `openPage` and `openStory` public methods\n\n## **4.4.0** - 21/07/21\n\nBug Fixes:\n\n- fixing a bug which could occur when updating the story with new pages\n- fixing a UI issue with the instructions screen which could appear on some smaller tablets\n- fixing a bug where the story could be opened multiple times\n\nImprovements:\n\n- resources can be used to set the theme properties - please see [Themes](Themes.md) for details\n\n## **4.3.3** - 06/07/21\n\nBug Fixes:\n\n- fixing a crash which could occur during the preload of images\n\n## **4.3.2** - 02/07/21\n\nBug Fixes:\n\n- added another fix for crash caused by connection timeouts\n- fixing a bug where the swipe ups were sometimes not working\n\n## **4.3.1** - 02/07/1\n\nBug Fixes:\n\n- added a fix for crash caused by connection timeouts\n\n## **4.3.0** - 01/07/21\n\nBug Fixes:\n\n- fixing a crash which could occur when using custom ads\n- fixing a bug where the poll answers could start flickering\n\nImprovements:\n\n- improving the page loading states\n\n## **4.2.0** - 10/06/21\n\nImprovements:\n\n- internalizing the Exoplayer `2.14.0` to remove any version conflicts with the client applications\n\nNew Features:\n\n- adding support for themes - please see [Themes](Themes.md) for details\n- adding additional methods to make Storyteller SDK integration easier - please see [AdditionalMethods](AdditionalMethods.md)\n\n## **4.1.3** - 14/04/21\n\nBug Fixes:\n\n- fixed a bug where the poll video could be played after changing the page\n- fixed a crash which could occur when changing the orientation on tablets\n\nImprovements:\n\n- improved poll UI and animations\n\n## **4.1.2** - 02/04/21\n\nBug Fixes:\n\n- fixed an issue with tile animation being clipped\n\nUI Changes:\n\n- extended the page duration when a user selects poll answer\n- improved poll UI and animations\n\n## **4.1.1** - 24/03/21\n\nBug Fixes:\n\n- fixing a bug where the navigation on poll pages could stop working\n\nImprovements:\n\n- improving the network request format\n\n## **4.1.0** - 19/03/21\n\nBug Fixes:\n\n- fixing a crash which could occur when sending analytics\n- fixing a bug where the instructions modal button could appear too low on tablets\n- fixing a bug where the story player could be closed when navigating through the stories which were read\n\nImprovements:\n\n- improving the poll UI\n\n## **4.0.5** - 01/03/21\n\nBug Fixes:\n\n- fixing a crash which could occur when opening a story\n\nImprovements:\n\n- improving the animation when swiping between stories for Android 11 devices\n\n## **4.0.4** - 15/02/21\n\nBug Fixes:\n\n- fixing a crash which could occur when opening a story from a deep link\n\n## **4.0.3** - 11/02/21\n\nImprovements:\n\n- improving the preloading of videos on poll pages\n- improving sharing to different apps\n\n## **4.0.2** - 04/02/21\n\nBug Fixes:\n\n- fixing a crash which could occur when closing the story view\n- fixing a bug where changing the `rowScale` property on the Storyteller Row had no effect\n\n## **4.0.1** - 01/12/21\n\nBug Fixes:\n\n- fixing some visual bugs which could occur on the poll pages\n- fixing a crash which could occur when closing the story view\n\nNew Features:\n\n- adding support for video backgrounds on poll pages\n\n## **4.0.0** - 25/01/21\n\nBug Fixes:\n\n- fixing a bug where it was possible for swipe ups to stop working\n- fixing a crash which could occur when saving analytics data\n\nImprovements:\n\n- performance improvements for video and image pages\n\nNew Features:\n\n- adding support for poll pages\n- adding support for multiple instances of the Story Row in a single app\n\nDeprecations and Changes:\n\n- changing the method signatures of `openStory`, `openPage` and `reloadData`\n\n## **3.17.5** - 15/12/20\n\nBug Fixes:\n\n- fixing a bug where the in-app browser address bar could be white in night mode\n\n## **3.17.4** - 10/12/20\n\nBug Fixes:\n\n- fixing a bug where the read stories could be shown when tapping on unread story\n- fixing a bug where the profile image was not shown for ads\n- fixing a bug where the swipe up UI could be shown even if it was disabled\n- fixing a bug with the onboarding screen margins\n\n## **3.17.2** - 10/12/20\n\nBug Fixes:\n\n- fixed a bug where an incorrect border color is applied to a story row item after it became read upon closing the story viewer\n\n## **3.17.1** - 30/11/20\n\nBug Fixes:\n\n- fixing a crash which could occur when preloading videos for stories\n\n## **3.17.0** - 27/11/20\n\nBug Fixes:\n\n- fixing a bug which could cause video playback to resume when a user was swiping to change stories\n- fixing a crash which could occur when preloading videos for ads\n- fixing a crash for some customers which could occur during swiping on Android 11\n\n## **3.16.4** - 18/11/20\n\nBug Fixes:\n\n- fixing a bug where the blank page was opened instead of a story\n\n## **3.16.3** - 18/11/20\n\nBug Fixes:\n\n- fixing potential null pointer exceptions\n- fixing a bug where the Play Store was not opened, when swiping up on a page with redirect\n- fixing a bug where the `resumedAdPage` event was triggered too often\n- fixing a bug where the read status of a story was not saved\n\n## **3.16.2** - 06/11/20\n\nBug Fixes:\n\n- fixing a bug introduced in 3.16.0 where it was possible for incorrect tracking pixels to be called for integrating app ads\n\nImprovements:\n\n- improving video preloading with the new version of Exoplayer\n\nDeprecations and Changes:\n\n- not sending extra parameters to tracking pixels supplied via integrating app ads\n\n## **3.16.1** - 02/11/20\n\nBug Fixes:\n\n- fixing a crash which could occur when swiping to interact with the Story View\n\n## **3.16.0** - 30/10/20\n\nBug Fixes:\n\n- fixing a crash which could occur when watching stories and changing from an image page to a video page\n- fixing the alignment of the dismiss icon within the story view relative to the story title\n- fixing a bug where if the system dark mode was changed when the story view was opened, the current story would persist behind other stories\n- fixing a bug where the new tag could not be removed from the story row tiles in certain circumstances\n\nImprovements:\n\n- improving the performance of the story view when quickly transitioning between pages\n\nNew Features:\n\n- adding video playback events - please see [Analytics](Analytics.md) for details\n\n## **3.15.5** - 06/11/20\n\nBug Fixes:\n\n- fixing a bug introduced in 3.15.3 where it was possible for incorrect tracking pixels to be called for integrating app ads\n\n## **3.15.4** - 04/11/20\n\nBug Fixes:\n\n- fixing a crash which could occur when swiping to interact with the Story View\n\n## **3.15.3** - 02/11/20\n\nBug Fixes:\n\n- fixing a crash which could occur when swiping to interact with the Story View\n\n## **3.15.2** - 29/10/20\n\nBug Fixes:\n\n- fixing a crash which could occur when swiping to interact with the Story View\n- upgrading Exoplayer dependency to version 2.11.3\n\n## **3.15.1** - 22/10/20\n\nImprovements:\n\n- improving the smartphone onboarding layout\n- improving the animation when story is opened\n- improving the preloading of videos\n\nDeprecations and Changes:\n\n- adjusting the initialize method errors - see [Getting Started](GettingStarted.md) for more details\n\n## **3.15.0** - 16/10/20\n\nBug Fixes:\n\n- fixing a bug where rounded corners were not displayed correctly in the story view\n- fixing a bug on Android 8 where it was possible to see the story image as a background in the story view\n\nImprovements:\n\n- improving the preloading of stories in the story view\n- improving the video cache\n- improving the animation when a story is dismissed and returned to the row view\n- improving the sensitivity of the swipe up gesture\n\n## **3.14.1** - 09/10/20\n\nBug Fixes:\n\n- fixing a bug where the instructions modal could be dismissed if the app was sent to the background when it was visible\n- fixing a bug where it was possible for tiles in the row to render incorrectly in certain situations\n\nImprovements:\n\n- improving the error handling around the `initialize` flow to reduce the likelihood of any errors when this method is called\n\n## **3.14.0** - 02/10/20\n\nBug Fixes:\n\n- fixing a bug where it was possible for a user to be presented with a black screen with no loading indicator when opening the story view and on a slow connection\n- fixing a bug where it was possible for a loading indicator not to be presented when viewing an image page in certain circumstances over a slow/unreliable network\n\nImprovements:\n\n- improving the handling of retries when assets in the story view fail to load\n\nDeprecations and Changes:\n\n- adjusting the behavior of the instructions modal on tablets so that it appears over the story view rather than over the place in the app where it was presented from\n- cancelling requests to preload content for the story view if the user is on a slow network connection in order to maximize the chance they are able to view the content they have on screen\n\n## **3.13.1** - 29/09/20\n\nBug Fixes:\n\n- fixing a bug where it was possible for tiles to appear blank in the story carousel\n- removing a memory leak from within the SDK\n- fixing a bug where if the `rowScale` for a row was changed while the row was being rendered, the story tiles could appear at the wrong size\n- fixing a bug which could cause the SDK to crash in certain circumstances\n- fixing a bug where it was possible to get stuck in the story view when skipping through a large number of stories and pages\n- fixing a bug where it was possible for the story view to get stuck whilst dismissing\n\nImprovements:\n\n- improving the behavior of the SDK with respect to transitions when a non-translucent status bar is used for the activity where the row view is displayed\n- improving the animation when a story is dismissed and returned to the row view\n\n## **3.13.0** - 18/09/20\n\nBug Fixes:\n\n- fixing a memory leak within the SDK\n\nImprovements:\n\n- further improvements to the transitions between tiles in the story row and the story view\n\nNew Features:\n\n- adding full and intentional tablet support to the SDK\n\n## **3.12.0** - 04/09/20\n\nImprovements:\n\n- improving email sharing by including the story title in any email sharing copy\n- improving the reliability of directing users to the Play Store from a swipe up action\n\nDeprecations and Changes:\n\n- exposing Story Categories on the `getAdsForRow` callback - please see the [Ads](Ads.md) documentation for more details\n\n## **3.11.0** - 24/08/20\n\nBug Fixes:\n\n- fixing a bug where it was possible for an incorrect value to be passed for `openedReason` when a page completed\n- fixing a bug where it was possible for `completedStory` events not to fire when a user completed a story\n- fixing a bug where it was possible for an incorrect value to be passed to `dismissedReason` when a user completed the final page of the final story\n\nImprovements:\n\n- improving the open animation when a user taps a tile in the Story View\n\nNew Features:\n\n- adding support for swiping up to a location within the integrating app or to the App Store from within Client Supplied Ads - see [Ads](Ads.md) for more details\n\nDeprecations and Changes:\n\n- adjusting the initialization flow of the SDK - see [Getting Started](GettingStarted.md) for more details\n\n## **3.10.1** - 07/08/20\n\nBug Fixes:\n\n- fixing a bug where stories were not marked as read until `reloadData` was called\n- fixing a bug where it was possible for a story to be marked as unread when a page was removed from the story\n- fixing a crash which could occur when retrieving or persisting encrypted data\n- fixing a bug where it was possible for the Story View to open in landscape mode\n\nNew Features:\n\n- adding a method to the [StorytellerListViewDelegate](StorytellerDelegates.md) called `tileBecameVisible` to allow the integrating app to be notified when a tile is visible on screen\n\n## **3.9.0** - 31/07/20\n\nBug Fixes:\n\n- fixing a bug where text was misaligned when using square tiles\n- fixing a bug where it was possible to swipe twice on the final story and end up on a blank screen\n\nImprovements:\n\n- UI improvements to the Instructions Screen\n- improving the reliability of the activity tracking\n\nDeprecations and Changes:\n\n- adjusting the [StorytellerListViewDelegate](StorytellerDelegates.md) `getAdsForRow` callback to allow it to accept `null` values for `StorytellerAd`\n\n## **3.8.3** - 27/07/20\n\nNew Features:\n\n- adding `dismissStoryView` method to `StorytellerRowView` to allow dismissing of any currently open Story View\n\n## **3.8.0** - 15/07/20\n\nImprovements:\n\n- ensuring the user's device doesn't sleep when watching stories\n- improving the experience when sharing via email\n\nUI Changes:\n\n- increasing the size of the tap target for the Swipe Up UI\n\n## **3.7.4** - 14/07/20\n\nBug Fixes:\n\n- fixing a bug where it was possible for a blank screen to be displayed when pushing the device back button on the instructions screen\n- fixing a bug where it was possible for the story view to render at the size of a story tile\n- fixing a bug where it was possible for `userSwipedUpToApp` to be triggered when navigating back to the Story View from the deeplink destination\n\n## **3.7.3** - 10/07/20\n\nImprovements:\n\n- improving the performance of `getAdsForRow` so that it doesn't wait for the ads to be ready before opening the Story View\n\n## **3.7.2** - 08/07/20\n\nBug Fixes:\n\n- fixing a crash when opening the Story View on Android 8\n- fixing a bug where it was challenging to swipe up on stories\n- fixing a bug where the dismiss animation from the stories row did not happen in some situations\n- fixing a bug where it was possible for tracking pixels to be called multiple times in certain scenarios\n\n## **3.7.1** - 07/07/20\n\nBug Fixes:\n\n- fixing a bug where if the `StorytellerRowView` was within a `RecyclerView` it was possible for there to be unexpected behavior when the view was recycled\n\nImprovements:\n\n- improving the performance of `setUserDetails`\n\n## **3.7.0** - 06/07/20\n\nBug Fixes:\n\n- fixing a bug where the `adId` parameter was not present in certain scenarios for ad analytics events\n\nImprovements:\n\n- ensuring that `FinishedAd` also fires at the same time as `PreviousAd`\n- UI improvements and bug fixes\n\nNew Features:\n\n- adding the `advertiserName` parameter to ad analytics events\n\nDeprecations and Changes:\n\n- rewriting the transition from the Story Row to the Story View\n\n## **3.6.0** - 01/07/20\n\nBug Fixes:\n\n- fixing a bug where it was possible for Story events to fire for Ads\n- fixing a bug where it was possible for the SDK to crash when rendering certain client supplied ads\n- fixing a bug where it was possible for the SDK to crash when adding or removing pages to already published stories\n\nImprovements:\n\n- improving fault tolerance around network timeouts\n- identifying and fixing 2 memory leaks within the SDK\n\nDeprecations and Changes:\n\n- exposing a new `FinishedAd` event which rolls up the `DismissedAd`, `SkippedAd` and `ViewedAdPageComplete` events so it's easier to tell when an ad is not being presented to the user\n\n## **3.5.2** - 20/06/20\n\n- adding the ability to supply custom tracking pixels as part of the `getAdsForRow` request\n- improving the interaction between the SDK and the status bar\n- fixing a UI bug where the gradients in the loading tiles would not render correctly\n- fixing a crash on Android 8\n\n## **3.5.0** - 24/06/20\n\nBug Fixes:\n\n- fixing a bug where it was possible for the close button and native back button to work if the Story View was triggered from landscape mode\n- fixing a crash which could occur when swiping to particular stories\n- fixing a bug where the Story View did not exit when a user finished watching all of their unread stories\n- fixing a bug where single page stories were not being marked as read correctly\n- fixing a crash which could occur when closing the Story View\n\nImprovements:\n\n- improved the loading performance of ads\n\nUI Changes:\n\n- UI improvements and bugfixes\n\n## **3.4.0** - 17/06/20\n\nBug Fixes:\n\n- fixing a crash which occurred when opening the Story View on Android 8\n\nNew Features:\n\n- UI improvements and bugfixes\n\nUI Changes:\n\n- adding support for swiping up to the App Store or to a location within the integrating app from a page or an ad - see [StorytellerRowViewDelegate](StorytellerDelegates.md) for more details\n\n## **3.3.0** - 11/06/20\n\nBug Fixes:\n\n- fixing some bugs in the page navigation behavior around which pages are opened when stories are read/unread\n- fixing a bug where it was possible for `durationViewed` to be `0.0` in situations where the user had viewed content\n\nImprovements:\n\n- improving the transitions when tapping a tile in the story row to open the Story View and when pulling down to dismiss the Story View\n- improvements to preloading of stories to make swiping and tapping through the Story View feel much smoother\n- encrypting user access tokens for the Storyteller API at rest\n- ensuring `openedReason` is included on `OpenedAd` events\n- ensuring `openedReason` is included on `OpenedPage` events\n- ensuring that `DismissedAd` events report the `durationViewed` and `pagesViewedCount` properties\n\nNew Features:\n\n- adding a `ShareSuccess` event to the SDK\n- adding the ability to supply ads to the SDK via the `getAdsForRow` callback on the [StorytellerRowViewDelegate](StorytellerDelegates.md)\n- adding new events for tracking user progress through ads - see [Analytics](Analytics.md) for specifics\n\nDeprecations and Changes:\n\n- when calling `openPage` or `openStory`, the `onFailure` callback will be called if the ID passed to `openPage` or `openStory` doesn't match a valid story or page\n- removing the `onSuccess` callback from `openPage` and `openStory`. If you would like to handle this case then please implement the `onUserActivityOccurred` callback and listen for `openedStory` or\n `openedPage` events with an `openedReason` of `deeplink`\n\n## **3.2.0** - 03/06/20\n\nBug Fixes:\n\n- fixing a bug where the `openedReason` analytics property could have an incorrect value when the user swiped between stories\n\nImprovements:\n\n- improving the rendering performance of the StoryRowView when using the square layout\n\n## **3.1.0** - 28/05/20\n\nBug Fixes:\n\n- fixing issue where `UserActivityData` class did not have publicly visible members\n\nNew Features:\n\n- adding support for first-party ads loaded from the Storyteller CMS\n- emitting events related to ads playback via the `onUserActivityOccurred` callback\n- adding the ability to disable the story icon in the story view on a per-tenant basis\n- adding the ability to include a timestamp in the story view on a per-tenant basis\n- adding the ability to share a link configured in the CMS for each page (rather than the page's media) and the ability to configure this on a per-tenant basis\n\n## **3.0.0** - 20/05/20\n\nNew Features:\n\n- (beta) adding `onUserActivityOccurred` callback to `StorytellerRowViewDelegate` so the containing app can receive notifications when users take actions within the SDK\n\nDeprecations and Changes:\n\n- removing `onChannelsDataLoadStarted`, `onChannelsDataLoadComplete` and `onChannelDismissed` callbacks from `StorytellerRowViewDelegate`\n- adding `onStoriesDataLoadStarted`, `onStoriesDataLoadComplete`, and `onStoryDismissed` callbacks to `StorytellerRowViewDelegate`\n- renaming public method `openChannel` to `openStory`\n- moving the store of read/unread pages from the server to the client\n", "copy_markdown_include_header": false, "base_path": "android", "ai_dir": "ai", "missing_payload_behavior": "empty"}