Skip to content

2025-10-23

Latest

Choose a tag to compare

@github-actions github-actions released this 23 Oct 18:50
· 1 commit to main since this release

Activity: v1.12.0-beta01

October 22, 2025

androidx.activity:activity:1.12.0-beta01, androidx.activity:activity-compose:1.12.0-beta01, and androidx.activity:activity-ktx:1.12.0-beta01 are released. Version 1.12.0-beta01 contains these commits.

API Changes

  • Introduce the experimental ActivityFlags API for managing runtime behavior changes and migrations. The first flag enables stable ordering for OnBackPressedCallback, making back navigation more predictable across lifecycle changes. Developers can opt out by setting ActivityFlags.isOnBackPressedLifecycleOrderMaintained = false. (I06bdf, Id08bb, I439aa, b/422730945, b/450533622)

Dependency Update

  • Update lifecycle dependencies to 2.9.4 (Ic9fb2)

Annotation-Experimental: v1.6.0-alpha01

October 22, 2025

androidx.annotation:annotation-experimental:1.6.0-alpha01 is released. Version 1.6.0-alpha01 contains these commits.

API Changes

  • The OptIn annotation now supports the ElementType.PARAMETER target.

Camera: v1.6.0-alpha01

October 22, 2025

androidx.camera:camera-*:1.6.0-alpha01 is released. Version 1.6.0-alpha01 contains these commits.

New Features

  • CameraX has migrated to a unified, high-performance camera stack, which is also used by the Pixel camera app. Known as CameraPipe, this new stack is a collaboration between the CameraX and Pixel Camera teams. It ensures that all improvements are shared, benefiting both CameraX users and the Pixel camera app.

API Changes

  • Added new APIs for dynamic camera add/removal detection. See the CameraPresenceListener API for more details. (I41ead, b/427182232, b/419441394)

Bug Fixes

  • The feature group API now provides consistent results when PREVIEW_STABILIZATION is used with VideoCapture. This corrects a bug that caused inconsistent results when a Preview use case was not also active. (Ifed82, b/449913903)
  • Fixed an issue where unsupported preferred features were incorrectly made available. Features are now correctly filtered when their required use cases are not met. (I38db8, b/449532342)
  • Fixed glitchy video result on Samsung Galaxy S6. (I612d9, b/235127608)
  • Fixed an issue where CameraInfo#isFeatureGroupSupported could incorrectly return true for PREVIEW_STABILIZATION if the SessionConfig in the query was already configured with other features. (I2c355c, b/437816469)

Camera Feature Combination Query: v1.6.0-alpha01

October 22, 2025

androidx.camera.featurecombinationquery:featurecombinationquery:1.6.0-alpha01 and androidx.camera.featurecombinationquery:featurecombinationquery-play-services:1.6.0-alpha01 are released. Version 1.6.0-alpha01 contains these commits.

camera viewfinder: v1.6.0-alpha01

October 22, 2025

androidx.camera.viewfinder:viewfinder-compose:1.6.0-alpha01, androidx.camera.viewfinder:viewfinder-core:1.6.0-alpha01, and androidx.camera.viewfinder:viewfinder-view:1.6.0-alpha01 are released. Version 1.6.0-alpha01 contains these commits.

API Changes

  • Exposed the default viewfinder ImplementationMode via the new ViewfinderDefaults.implementationMode public API. This is now used as the default for both ViewfinderView and the Viewfinder composable. (Ic3f52)

Compose Animation: v1.9.4

October 22, 2025

androidx.compose.animation:animation-*:1.9.4 is released. Version 1.9.4 contains these commits.

Compose Animation: v1.10.0-beta01

October 22, 2025

androidx.compose.animation:animation-*:1.10.0-beta01 is released. Version 1.10.0-beta01 contains these commits.

API Changes

  • The SharedContentConfig factory method that takes a lambda indicating whether the shared element should be enabled has been removed. lookheadScopeCoordinates API has been updated with a LookaheadScope being the receiver scope, with source coordinates being the parameter. (Id1fc2, b/452416806)
  • BoundsTransform interface has been updated to be consistent with SizeTransform. (Ia46f2, b/343696350)
  • Deprecated ScaleToBounds API has been removed. Please use scaleToBounds instead. (I17296)

Compose Foundation: v1.9.4

October 22, 2025

androidx.compose.foundation:foundation-*:1.9.4 is released. Version 1.9.4 contains these commits.

Compose Foundation: v1.10.0-beta01

October 22, 2025

androidx.compose.foundation:foundation-*:1.10.0-beta01 is released. Version 1.10.0-beta01 contains these commits.

API Changes

  • Updates all indirect touch APIs to use the name indirect pointer APIs to match pointer input APIs. (I238ce, b/451607214)
  • Annotated PagerState.currentPageOffsetFraction with @FrequentlyChangingValue. (Idfaab)

Bug Fixes

  • Fixes marquee behavior for RTL layout directions. (Ib8be3)

Compose Material: v1.9.4

October 22, 2025

androidx.compose.material:material-*:1.9.4 is released. Version 1.9.4 contains these commits.

Compose Material: v1.10.0-beta01

October 22, 2025

androidx.compose.material:material-*:1.10.0-beta01 is released. Version 1.10.0-beta01 contains these commits.

Compose Material3: v1.5.0-alpha07

October 22, 2025

androidx.compose.material3:material3-*:1.5.0-alpha07 is released. Version 1.5.0-alpha07 contains these commits.

API Changes

  • Enhanced SearchBar.InputField with a keyboardOptions parameter, allowing for optimized text input by specifying keyboard options and lineLimits parameter allowing to specify text wrapping scrolling (Id08a4, b/416991049)

Bug Fixes

  • Fixed a bug in Slider where press interactions were not emitted on touch down. This change ensures that a PressInteraction.Press is emitted immediately on awaitFirstDown, providing instant visual feedback. (If9e25, b/308501482)
  • Fixed an issue with the Tooltip caret not changing directions when scrolling. The TooltipBox now triggers a recomposition whenever the tooltip popup switches sides, ensuring the caret's direction is updated correctly. (I5ad1e, b/438875827)

Compose Material3 Adaptive: v1.2.0

October 22, 2025

androidx.compose.material3.adaptive:adaptive-*:1.2.0 is released. Version 1.2.0 contains these commits.

Important changes since 1.1.0:

  • Introduce PaneScaffoldScope.preferredHeight modifier for devs to provide pane preferred heights that will be applied with new adapt strategies we are going to introduce. (I957dd)
  • Add saveable state holder to PaneScaffoldScope (Id9299)
  • Introduce reflow strategy for adaptation (I75c6a)
  • Introduce levitate strategy for adaptation (I1ba7c)
  • Make currentWindowAdaptiveInfo() function support large and extra-large window width size classes (I92e97)
  • Support custom dragging behavior with pane expansion state (If5c61)

Compose Material3 Adaptive: v1.3.0-alpha02

October 22, 2025

androidx.compose.material3.adaptive:adaptive-*:1.3.0-alpha02 is released. Version 1.3.0-alpha02 contains these commits.

API Changes

  • Material adaptive scene strategies now allow passing custom pane adapt strategies (Iae61d, b/437981298)
  • Graduate pane scaffold horizontal order APIs to stable (I23ab3)
  • Introduce DragToResizeState to Levitate strategy (I717bd)
  • Deprecate window size APIs (I6749e, b/424442112)

Compose Runtime: v1.9.4

October 22, 2025

androidx.compose.runtime:runtime-*:1.9.4 is released. Version 1.9.4 contains these commits.

Compose Runtime: v1.10.0-beta01

October 22, 2025

androidx.compose.runtime:runtime-*:1.10.0-beta01 is released. Version 1.10.0-beta01 contains these commits.

API Changes

  • RetainedValuesStore.getExitedValueOrDefault is renamed to RetainedValuesStore.getExitedValueOrElse (If9653, b/452340613)
  • isKeepingExitedValues has been renamed to isRetainingExitedValues (I660bf, b/437095756)
  • RetainScope has been renamed to RetainedValuesStore. RetainScopeHolder has been renamed to RetainedValuesStoreRegistry. RetainScopeHolder.RetainScopeProvider has been renamed to RetainedValuesStoreRegistry.ProvideChildRetainedValuesStore. (Idf23a, b/437095756)

Bug Fixes

  • Delayed initialization of SavedState in SaveableStateRegistry until the first usage. (Ic0a93)

Compose UI: v1.9.4

October 22, 2025

androidx.compose.ui:ui-*:1.9.4 is released. Version 1.9.4 contains these commits.

Bug Fixes

  • Fixed an issue where inline text content was disappearing if it was on the last line of a multi-line ellipsized text even though the inline content wasn’t in the ellipsized region. (I76aaf, b/441829208)
  • Fixed an issue where onLayoutRectChanged modifier callbacks were not always being called when debounceMillis is not zero. (72aba47, b/445324854)

Compose UI: v1.10.0-beta01

October 22, 2025

androidx.compose.ui:ui-*:1.10.0-beta01 is released. Version 1.10.0-beta01 contains these commits.

API Changes

  • Adds an optimization for focus change dispatching. This can be disabled with isOptimizedFocusEventDispatchEnabled = false (I919fb, b/449228515)
  • Updates all indirect touch APIs to use the name indirect pointer APIs to match pointer input APIs. (I238ce, b/451607214)
  • TextDirection, TextAlign, Hyphens, FontSynthesis valueOf functions now throw IllegalArgumentException when they receive an unknown value. (I07c67)
  • Update CompositionDataTree.makeTree to pass default values instead of wrapper function. (Id64a6, b/445229688)
  • The test rule APIs createComposeRule, createAndroidComposeRule and createEmptyComposeRule which accept the effectContext parameter are stable and the parameter defaults to EmptyCoroutineContext. (If400c, b/450540702)
  • UnplacedStateAwareModifierNode was renamed to UnplacedAwareModifierNode (I6a551, b/449719932)
  • Undo the Content Capture Optimization (Ic000b, b/442364065)
  • Added ComposeUiFlags.isRectManagerOffsetUsageFromLayoutCoordinatesEnabled feature flag. It enabled performance optimization where coordinates requests like LayoutCoordinates.positionInRoot() are using the cached offsets we already have in RectManager, instead of traversing the whole tree on each call. (Ieaadc)

Bug Fixes

  • PlaceholderSpan now correctly uses non-linear font scaling for sizing (Id2ead, b/324462728)
  • Use ViewCompat to perform haptic feedback constants supported at the platform level, relying on its fallback support for newer constants. (Ib5a00)

credentials: v1.6.0-beta03

October 22, 2025

androidx.credentials:credentials:1.6.0-beta03 and androidx.credentials:credentials-play-services-auth:1.6.0-beta03 are released. Version 1.6.0-beta03 contains these commits.

New Features

  • Minor internal data serialization changes

DataStore: v1.2.0-beta01

October 22, 2025

androidx.datastore:datastore-*:1.2.0-beta01 is released. Version 1.2.0-beta01 contains these commits.

API Changes

Bug Fixes

  • Fix java.lang.UnsatisfiedLinkError when using DataStore in an app which is optimized with R8, but which is not using getDefaultProguardFile('android-proguard-optimize.txt'). (I27d0d, b/434696293)
  • Fix issue where GuavaDataStore operations could incorrectly run on the calling thread (e.g., the main thread) instead of the specified IO dispatcher. (Ic91ea,b/441801112)

Games-Activity: v4.4.0-alpha01

October 22, 2025

androidx.games:games-activity:4.4.0-alpha01 is released. Version 4.4.0-alpha01 contains these commits.

Bug Fixes

  • Improved ANR protection in native_app_glue.
  • Migrated from deprecated ALooper_pollAll to ALooper_pollOnce.

Graphics: v1.1.0

October 22, 2025

androidx.graphics:graphics-*:1.1.0 is released. Version 1.1.0 contains these commits.

Heifwriter: v1.2.0-alpha01

October 22, 2025

androidx.heifwriter:heifwriter:1.2.0-alpha01 is released. Version 1.2.0-alpha01 contains these commits.

New Features

  • A new EncoderPreference class has been implemented. This enhancement enables HeifWriter to consider encoder preferences, such as hardware or software encoding and enforcement of Constant Quantization (CQ), during the encoder selection process. If a suitable encoder cannot be found based on the specified preferences, an exception will be raised.

API Changes

  • Added EncoderPreference class. I81efd

ink: v1.0.0-beta01

October 22, 2025

androidx.ink:ink-*:1.0.0-beta01 is released. Version 1.0.0-beta01 contains these commits.

Bug Fixes

  • Bug fixes in preparation for beta01 release (I9900e)
  • Reduce rendering artifacts in strokes due to too many modeled inputs too close to each other.
  • Fix a rare crash in input modeling.

Lifecycle: v2.10.0-beta01

October 22, 2025

androidx.lifecycle:lifecycle-*:2.10.0-beta01 is released. Version 2.10.0-beta01 contains these commits.

API Changes

  • ViewModelStoreNavEntryDecoratorDefault has been renamed to ViewModelStoreNavEntryDecoratorDefaults, with an 's'. (I6d27b, b/444447434)

Bug Fixes

  • rememberLifecycleOwner no longer crashes if the owner receives an Lifecycle.Event.ON_DESTROY event before moving to Lifeycle.State.CREATED. (I6f98e, b/444594991)

Media3: v1.9.0-alpha01

October 22, 2025

androidx.media3:media3-*:1.9.0-alpha01 is released. Version 1.9.0-alpha01 contains these commits.

  • Common Library:
    • Update minSdk to 23 in line with other AndroidX libraries.
    • Add PlayerTransferState, which facilitates transferring the playback state across Player instances.
    • Add void mute() and void unmute() methods to Player that preserve and consequently restore Player's volume before and after setting it to zero.
    • Publish utility classes WakeLockManager, WifiLockManager, AudioFocusManager, AudioBecomingNoisyManager and StuckPlayerDetector previously used by ExoPlayer internally to allow reuse for other players (#1893).
    • Fix ForwardingPlayer listener handling when the underlying delegate player uses reference equality for comparing listener instances (#2675).
    • Add a Player.listenTo suspending extension function in the media3-common-ktx library that specifies the particular Player.Events that should be acted upon.
    • Fix a crash in BasePlayer.getBufferedPercentage resulting from integer overflow when the reported buffered position is implausibly much larger than the reported duration (#2750).
  • ExoPlayer:
    • Add a stuck player detection that triggers a StuckPlayerException player error if the player seems stuck. This happens in the following cases, where each default timeout can be configured in ExoPlayer.Builder if required:
      • After 10 minutes of STATE_BUFFERING while trying to play and no buffering progress.
      • After 10 seconds of STATE_READY while trying to play and no playback progress.
      • After 1 minute of STATE_READY beyond the declared duration without reaching the end of the item.
      • After 10 minutes with a playback suppression reason while trying to play.
    • Enable wake lock handling by default to fix issues with buffering during background playback. This is equivalent to setting ExoPlayer.Builder.setWakeMode to C.WAKE_MODE_LOCAL.
    • Add listening logic to automatically update the virtual device ID when a change is reported to the Context originally passed to ExoPlayer.Builder.
    • Add ExoPlayer.setVirtualDeviceId to manually update the virtual device ID obtained from the Context passed to ExoPlayer.Builder.
    • Ensure renderers don't consume data from the next playlist item more than 10 seconds before the end of the current item.
    • Add setSeekBackIncrementMs, setSeekForwardIncrementMs and setMaxSeekToPreviousPositionMs to ExoPlayer to update these settings after construction (#2736).
    • Add pre-caching functionality in DefaultPreloadManager. Apps now can return DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs) or DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs) via TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData) to indicate that a media item needs to be pre-cached.
    • Use pre-caching functionality of DefaultPreloadManager in shortform demo app.
    • Add DefaultLoadControl.Builder setters for local playback and adjust default values of DefaultLoadControl to work well with a wide range of local files.
    • Fix bug where setting an empty playlist can leave the player in STATE_READY or STATE_BUFFERING.
    • Enhance the preload manager APIs:
      • Add addMediaItems(List<MediaItem>, List<T>) and addMediaSources(List<MediaSource>, List<T>) that add the media items or media sources in batch, and automatically call invalidate() afterwards.
      • Add removeMediaItems((List<MediaItem>) and removeMediaSources(List<MediaSource>) that remove the media items or media sources in batch, and make sure that preload manager does not start to preload or continue preloading any of them after removal.
      • Allow DefaultPreloadManager.setCurrentPlayingIndex(int) to invalidate itself automatically. Apps don't need to call invalidate() explicitly anymore after updating the current playing index.
    • Add capability to skip keyframe reset for forward seeks within the same group of pictures while in scrubbing mode.
    • Add DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) for apps to set a value of target buffer bytes for a player with the specified playerName. The DefaultLoadControl can now make decisions of each player separately based on its own allocated bytes and target buffer bytes.
    • Add SkipInfo to the AdPlaybackState.AdGroup to carry skip information for each ad in the ad group.
    • Fix bug where calling removeMediaItems(List) during playing a post-roll created a crash (#2746).
    • Fix some stuttering in playlist playback where frames were mistakenly always set as the last sample and rendered.
    • Enable retry path if player fails to generate audio session ID (#2382, #2678).
    • Add support to control the total buffer bytes for the sources in DefaultPreloadManager to avoid total buffer bytes for preloading from growing arbitrarily. To use the default control logic, Apps can set the target buffer bytes for preloading via DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) for a playerName of PlayerId.Preload.name ("preload"), and inject the created DefaultLoadControl via DefaultPreloadManager.Builder.setLoadControl(LoadControl).
  • CompositionPlayer:
    • Publish CompositionPlayer under a new @ExperimentalApi annotation to indicate it is available for experimentation, but is still under development. Some APIs are likely to change significantly in future releases, and there are known issues and limitations with some use-cases (some undocumented).
    • Add support for COMMAND_SET_AUDIO_ATTRIBUTES and audio focus handling in CompositionPlayer.
    • Add support for speed changing in secondary sequences in CompositionPlayer.
  • Transformer:
    • Use InAppMp4Muxer as default muxer.
    • Add EditedMediaItem.Builder#setSpeed() and deprecate Effects#createExperimentalSpeedChangingEffects().
    • Replace forceAudioTrack and forceVideoTrack with trackTypes in EditedMediaItemSequence.
  • Track Selection:
    • Add TrackSelectionParameters.selectTextByDefault to prefer the selection of any text track without specifying other more specific preferences.
    • Add preferredVideoLabels, preferredAudioLabels and preferredTextLabels in TrackSelectionParameters to specify a preference for tracks with a specific label, for example those read from HLS NAME tags (#1666).
  • Extractors:
    • FLAC: Tighten header detection to reduce the chance of finding spurious headers in the encoded FLAC data, resulting in decoding errors (#558).
    • MP3: Allow gaps between (and before) ID3 tags at the beginning of MP3 files (#811, #5718).
    • MP4: Disambiguate between audio/mpeg (MP3), audio/mpeg-L1 and audio/mpeg-L2 MIME types by peeking the layer value of the first sample before emitting a track format from the extractor (#2683).
    • MP4: Improve sniffing efficiency of very large files by assuming a stbl box larger than 1MB implies the file must be non-fragmented (#2650).
    • Matroska: Add support for DTS-HD detection (#6225).
    • Fix an issue in MatroskaExtractor where seeking could be inaccurate for files with multiple tracks. Cue points are now correctly associated with their respective tracks, leading to more precise seeking.
    • MP4: Add support for ©mvn (movement name) and ©mvi (movement index) metadata, these are now emitted as TextInformationFrame objects in Format.metadata with IDs of MVNM and MVIN respectively (#2754).
    • MPEG-TS: Fix IllegalArgumentException from ReorderingBufferQueue caused by PES packets with no timestamp (#2764).
    • MP4: Ignore tracks with missing stsd box (instead of failing to parse the whole file).
    • Add support for extracting HEIC Motion Photos. The HeifExtractor can now parse HEIC files containing embedded video and audio tracks.
    • MP3: Change FLAG_ENABLE_INDEX_SEEKING to prefer seeking information from metadata headers (like Xing and VBRI) when available, falling back to index-based seeking if no other seeking information is present. This improves performance for files with seeking metadata (#2839).
  • Inspector:
    • Introduced a new :media3-inspector module to serve as the dedicated home for media inspection utilities. This module now houses a new androidx.media3.inspector.MetadataRetriever, which will provide a unified API for both metadata and frame extraction. The existing androidx.media3.exoplayer.MetadataRetriever is now deprecated in favor of this new version.
    • Introduced androidx.media3.inspector.FrameExtractor, a new public API for frame extraction. This AutoCloseable class provides a way to extract frames with support for HDR video, video effects, and custom decoder selection. It should be created via its Builder for a specific MediaItem.
    • FrameExtractor: Add getThumbnail() to extract a representative thumbnail frame from a media file without requiring a specific timestamp.
  • Audio:
    • Make AudioProcessor instances aware of seeking.
    • Allow injecting the new AudioOutputProvider interface into DefaultAudioSink.Builder to support custom audio output paths. The default is AudioTrackAudioOutputProvider.
    • Handle seeks in GainProcessor.
    • Utilize AC-4 decoder profile and level capabilities in track format support assessment (#2580).
    • Avoid potential delays caused by handling routing change callbacks at the beginning of playback (#2646).
    • Allow codec reuse for EAC3, EAC3-JOC and AC-4 formats (#1346).
    • Add support for float PCM samples in Sonic.
    • Add support for 16 bit PCM samples in ToFloatPcmAudioProcessor.
  • Video:
    • Disable codec reuse for Dolby-Vision content with different profiles.
  • Text:
    • Fix parsing of CEA-6/708 subtitles in Dolby Vision content (#2775).
  • Image:
    • Fix ScrubbingMode issue where player gets stuck while scrubbing a DASH thumbnail track (#2815).
  • DRM:
    • Change the return type of MediaDrmCallback methods from byte[] to a new MediaDrmCallback.Response type, to allow returning extra optional information. This is a source breaking change, but breakages can be easily resolved by wrapping the previous byte[] return value with new Response before returning.
    • Add key request info like URL and latency to AnalyticsListener.onDrmKeysLoaded (#1001).
    • Move provisioning request data from a URL parameter to the POST body.
  • Muxers:
    • Add MediaMuxerCompat, a drop-in replacement for framework MediaMuxer.
    • Add MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo() to allow Motion Photo creation.
    • Add WebmMuxer to allow muxing of OPUS, VORBIS, VP8 and VP9 media streams into a webm file format.
  • IMA extension:
    • Removal of custom proguard rules, so that apps can use those released in IMA android archive instead.
    • Add ImaServerSideAdInsertionUriBuilder.setNetworkCode, a new API for setting the Google Ad Manager network code for the IMA SDK to handle ads identifiers as specified in Google Ad Manager settings. Network codes are optional but recommended for Full service stream requests. To find the network code, see this article.
    • Bump IMA dependency to 3.37.0 which requires enabling core library desugaring. This must also be enabled by dependent apps too. See IMA's config notes.
    • Support IMA DAI custom UI options in SSAI URI builder. Custom UI options for server side ad insertion include "Skippable" and "About This Ad" rendering support. The feature is currently available for selected publishers behind an allow list. This change also upgrades the IMA SDK version to 3.38.0 (release notes) to access the custom UI options API.
  • Session:
    • Add new parameter to MediaSession.Callback.onPlaybackResumption to indicate if the call happens to gather information only or to start playback (#1764).
    • Update MediaSession.ControllerInfo.isTrusted to also declare controllers from the own app as trusted (#2542).
    • Add MediaSessionService.triggerNotificationUpdate to manually trigger a notification update (#1833).
    • Add ProgressListener to custom command methods.
    • Change the default value for MediaLibrarySession.Builder.setLibraryErrorReplicationMode to non fatal.
    • Add a Context parameter to MediaButtonReceiver.onForegroundServiceStartNotAllowedException (#2625).
    • Read the volume control ID from the platform PlaybackInfo instead of fetching it via binder. This ensures that playback type and volume control ID are read atomically and do match to each other.
    • Fix bug where ACTION_UP key events were filtered out before passing them to the callback for custom handling. This brings parity with what media1 did and the platform does (#2637).
    • Fix bug where getCurrentTimeline() was called by PlayerWrapper even when the command isn't available (#2665).
    • Fix bug where a message was left in the message queue of the main looper which caused a memory leak after the service terminated (#2692).
    • When connected to a legacy session app with a MediaBrowser, custom commands are sent to the session only if the custom action is advertised as a custom action in PlaybackStateCompat of the legacy session. All other custom actions are sent to the service.
    • Implemented onAudioSessionIdChanged to notify media controllers when an audio session ID is set by the session (#244).
    • Fix bug where KEYCODE_HEADSETHOOK did not start the player upon and media key event Intent arriving in onStartCommand(). This is fixed by handling 'KEYCODE_HEADSETHOOK' just like KEYCODE_MEDIA_PLAY_PAUSE (#2816).
    • Fix a bug where Surface size was not communicated between the session and the controller, resulting in the failure to apply video effects in demo-session. If you are using a controller, this might be a breaking change if your player cannot handle a setVideoSurfaceHolder call.
    • Fix propagation of non-String CharSequence metadata values like span-styled strings (#2853).
  • UI:
    • Add ProgressStateWithTickInterval class and the corresponding rememberProgressStateWithTickInterval Composable to media3-ui-compose module. This state holder is used in demo-compose to display the current position and duration in text form.
    • Add MuteButtonState to ui-compose that handles muting of the Player volume. This state holder is used in demo-compose to display mute/unmute toggle button.
    • Add ProgressStateWithTickCount classes and the corresponding rememberProgressStateWithTickCount Composable to media3-ui-compose module. This state holder is used in demo-compose to display progress as a horizontal read-only progress bar.
    • Add ContentFrame Composable to media3-ui-compose which combines PlayerSurface management with aspect ratio resizing and covering with a shutter.
    • Work around a known API 34 platform bug causing stretched/cropped videos when using SurfaceView inside a Compose AndroidView and hence affecting ContentFrame and PlayerSurface Composables with SURFACE_TYPE_SURFACE_VIEW (#1237, #2811).
    • Create a new media3-ui-compose-material3 module and add Material3-themed Composables (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) to it.
    • Add support for placing a media route button in the PlayerView.
  • HLS extension:
    • Parse HLS interstitial skip attributes.
    • Map skip control attributes from the HLS playlist and the asset list document into the AdPlaybackState for public access.
    • Fix bug where the start time of the playlist was dropped when the EXT-X-PROGRAM-START-DATE tag defining the start time was removed from a playlist (#2760).
    • Use binary search to find the segment index of a given position in the playlist (#2826.
  • DASH extension:
    • Fix UnsupportedOperationException when playing DASH streams with a non-hierarchical data: URI manifest (#2688).
    • Reset LiveConfiguration to the value provided by the MediaItem of the DashMediaSource when released and when the media item is updated by the user (#2606).
    • Avoid crashes caused by invalid manifest updates that were not reported as player errors (#2805).
  • RTSP extension:
    • Handle error of missing RTP packets when processing fragmented NAL units for H264 and H265 (#2613).
  • Decoder extensions (FFmpeg, VP9, AV1, etc.):
    • AV1 Extension: The AV1 software decoder now uses the high-performance dav1d library, replacing the previous libgav1 implementation for improved decoding speed.
  • Cast extension:
    • Add CastPlayer.Builder, which enables CastPlayer to do both local and Cast playback. To keep the old CastPlayer behavior of supporting only Cast playback, you can use RemoteCastPlayer. The pre-existing CastPlayer constructors keep their old behavior, but are deprecated in favour of using the CastPlayer or RemoteCastPlayer builders instead.
    • Stop enforcing a non-null mime type in DefaultMediaItemConverter.
    • Use MediaItem.mediaMetadata.mediaType to infer the Cast MEDIA_TYPE to use in DefaultCastOptionsProvider#toMediaQueueItem, when available.
    • Enable remote to local transfers in DefaultCastOptionsProvider.
    • Add support for Cast in the Session demo.
    • Add support for displaying a media route button on a Composable UI.
    • Add support for displaying a media route button on an action bar menu.
    • Add support for displaying a media route button as a View UI.
  • Test Utilities:
    • Add maximum time diff for the auto-advancing behavior of FakeClock. It defaults to 1 second, but is configurable via FakeClock.Builder.
    • Add maximum time diff between messages for RobolectricUtil.runMainLooperUntil (and runLooperUntil). It defaults to 1 second, but is configurable via new overloads of these methods.
    • Move CapturingRenderersFactory from test-utils to test-utils-robolectric.
  • Remove deprecated symbols:
    • Remove deprecated DefaultPreloadManager constructor. Use DefaultPreloadManager.Builder instead.
    • Removed deprecated EditedMediaItemSequence constructors. Use EditedMediaItemSequence.Builder instead.

navigation3: v1.0.0-beta01

October 22, 2025

androidx.navigation3:navigation3-*:1.0.0-beta01 is released. Version 1.0.0-beta01 contains these commits.

API Changes

  • SceneStrategyScope now only has a no argument public constructor, suitable for testing your SceneStrategy and the returned Scene in isolation. For more complex use cases, please use rememberSceneState(). (I8440c, b/451679047)

Bug Fixes

  • Fixed infinite loop when chaining SceneStrategy with then. (Iba3f0, b/450323470)
  • Fixed screen flicker when swapping the backStack passed to NavDisplay and using animations. (Ief7b5, b/450967248)

pdf: v1.0.0-alpha11

October 22, 2025

androidx.pdf:pdf-*:1.0.0-alpha11 is released. Version 1.0.0-alpha11 contains these commits.

New Features

  • Enabling Smart Menu Items on pdf content selection.
  • Enabling hyperlink selection and GoTo link selection in pdf.
  • Exposing selection menu api fromPdfView and PdfViewer Composable, which allows developers to add selection menu items.
  • Adding page alignment api in PdfView and PdfViewer Composable which allows developers to choose the page alignment when the content height < viewport height.

API Changes

  • Made contentDesc nullable and removed default value. (I86f8c, b/441973880)
  • Expose PdfSelectionMenuKeys for Link Selection Menu Items (Ic9b05, b/447079082)
  • Add PageAlignment API to PdfView and PdfViewer into androidx-main
  • Change angle-related API to use degrees and include unit in names, be clear about units in Angle conversion utilities and support both degrees and radians, change StockBrushes API to take stock brush version as a factory function parameter and expose self-overlap behavior control for highlighter brushes, rename MutableAffineTransform.populateFromTranslate to populateFromTranslation, remove InProgressStrokesView.setRenderFactory/getRenderFactory. (Id9eab, b/436656418)
  • Add PageAlignment API to PdfView and PdfViewer (I9c9a5, b/438065228)
  • Expose Selection Menu API from PdfViewer Composable (Id9b0f, b/407663999)
  • Make PdfView a ViewGroup. No support for arbitrary children. (Ib51d8, b/410008792)
  • Expose HyperLinkSelection and GoToLinkSelection from PdfView (I378c4, b/441280002)
  • Refactor PdfPageContent to support generic selections (I28f16, b/437845185)
  • Expose Selection Menu API from PdfView (Idd547, b/407663737)
  • Move selection-related classes to a dedicated package (I953cb, b/436157691)
  • Introduce experimental onPdfViewCreated for PdfView access in PdfViewerFragment. (I86715, b/422620454)
  • Adds FileDescriptor API to PdfLoader (I60b8d)

Bug Fixes

  • Improve input modeling to make strokes more accurately reflect input (I93097)

External Contribution

  • Expose PdfSelectionMenuKeys for Link Selection Menu Items
  • Expose Selection Menu API from PdfViewer Composable
  • Expose Selection Menu API from PdfView

Room: v2.8.3

October 22, 2025

androidx.room:room-*:2.8.3 is released. Version 2.8.3 contains these commits.

Bug Fixes

  • Fix a performance issue with the Room SQLite Wrapper that was causing excessive JNI calls and significant performance degradation when iterating over a Cursor.

Savedstate: v1.4.0-rc01

October 22, 2025

androidx.savedstate:savedstate-*:1.4.0-rc01 is released with no changes since 1.4.0-beta01. Version 1.4.0-rc01 contains these commits.

Wear Compose: v1.6.0-alpha04

October 22, 2025

androidx.wear.compose:compose-*:1.6.0-alpha04 is released. Version 1.6.0-alpha04 contains these commits.

API Changes

  • Implement reverseLayout for TransformingLazyColumn (I19f9e, b/352513793)
  • Added ConfirmationDialogDefaults.VariantFailureIcon for use in FailureConfirmationDialog. This new generic error icon may be preferred in some cases, compared to ConfirmationDialogDefaults.FailureIcon which shows a broken connection to the phone. (Ifc851, b/443115305)

Bug Fixes

  • Improved performance of Picker by refactoring the use of LaunchedEffect. (I94519, b/418192973)
  • Fixed a bug in SwipeDismissableNavHost on API36+, where pressing the back button during predictive back animation interrupted and restarted the animation. The implementation now uses SeakableTransitionState.animateTo instead of Animatable, which has a slight performance benefit. (I2241f, b/428156670)
  • Fixed a bug for accessibility announcement ordering in AlertDialog, where the confirm button was announced as 'Button. Confirm' rather than the standard 'Confirm. Button'. (Ic2381, b/429378202)
  • Improve TimePicker number visibility on small screens. (I68386, b/447625365)
  • Removed Lazy Layout fork from Wear Compose Foundation - this means that TransformingLazyColumn now uses the Compose Foundation Lazy Layout implementation, including prefetching, and benefits from a performance improvement on frame timings in most cases. (Idd743, b/445911630)

Wear Compose: v1.5.4

October 22, 2025

androidx.wear.compose:compose-*:1.5.4 is released. Version 1.5.4 contains these commits.

Bug Fixes

  • Improved performance of Picker by refactoring the use of LaunchedEffect. (I94519, b/418192973)
  • Fixed a bug in SwipeDismissableNavHost on API36+, where pressing the back button during predictive back animation interrupted and restarted the animation. The implementation now uses SeakableTransitionState.animateTo instead of Animatable, which has a slight performance benefit. (I2241f, b/428156670)
  • Fixed a bug for accessibility announcement ordering in AlertDialog, where the confirm button was announced as 'Button. Confirm' rather than the standard 'Confirm. Button'. (Ic2381, b/429378202)

wear protolayout: v1.4.0-alpha02

October 22, 2025

androidx.wear.protolayout:protolayout-*:1.4.0-alpha02 is released. Version 1.4.0-alpha02 contains these commits.

New Features

  • Added new Platform event source (isInAmbientMode) describing whether the device is in ambient mode or not (Ief832)

API Changes

  • The PendingIntent clickable now accepts a fallback action (LoadAction/LaunchAction) to be used when PendingIntent is not supported by the ProtoLayout Renderer. Fallback action will automatically be picked up and placed in the layout when the version of the Renderer is lower than the one supporting PendingIntent. (I6eee2, b/450259727)
  • protoLayoutScope field within MaterialScope is now made NonNull for easier usage when MaterialScope is created via materialScopeWithResources. In addition, there is a hasProtoLayoutScope function to check for the presence of it. (I1858f, b/450067019)

Wear Tiles: v1.6.0-alpha02

October 22, 2025

androidx.wear.tiles:tiles-*:1.6.0-alpha02 is released. Version 1.6.0-alpha02 contains these commits.

New Features

  • Tile Previews is now updated to support automatic resource handling via ProtoLayoutScope. If using image resources directly in the layout via materialScopeWithScope or ProtoLayoutScope directly, there is no longer need to specify onTileResourcesRequest and resources specifically in the TilePreviewData, they will be collected automatically. (I58516)

Bug Fixes

  • ProtoLayoutScope created internally by the TileService now includes the ProtoLayout Renderer’s VersionInfo. (I6eee2, b/450259727)

WorkManager: v2.11.0

October 22, 2025

androidx.work:work-*:2.11.0 is released. Version 2.11.0 contains these commits.

Important changes since 2.10.0:

  • The minSdk has been updated from API 21 to API 23.
  • The API setRemoteSessionTimeoutMillis in WorkManager’s Configuration builder has been added to enable configuring the amount of time a RemoteWorkManager session is alive from its last usage.

ARCore for Jetpack XR: v1.0.0-alpha07

October 22, 2025

androidx.xr.arcore:arcore-*:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.

Bug Fixes

  • :xr:arcore:arcore-openxr added as an implementation dependency to :xr:arcore:arcore (I47315, b/446999229)

Jetpack Compose for XR: v1.0.0-alpha08

October 22, 2025

androidx.xr.compose:compose:1.0.0-alpha08 and androidx.xr.compose:compose-testing:1.0.0-alpha08 are released. Version 1.0.0-alpha08 contains these commits.

API Changes

  • Changed ResizePolicy to accept onResizeStart, onResizeUpdate, and onResizeEnd. (I7e21f)

Bug Fixes

  • Prevent crash when destroying an Activity with a Subspace. (I595a1)

Material Design for XR: v1.0.0-alpha12

October 22, 2025

androidx.xr.compose.material3:material3:1.0.0-alpha12 is released. Version 1.0.0-alpha12 contains these commits.

New Features

  • Added SpaceModeToggleButton for switching between HomeSpace and FullSpace (Ic6865)

Bug Fixes

  • Improve XR Toolbars (Ied1f5)

xr projected: v1.0.0-alpha01

October 22, 2025

androidx.xr.projected:projected:1.0.0-alpha01 is released. Version 1.0.0-alpha01 contains these commits.

New Features

  • Adds Projected XR library (Ieedea7)

XR Runtime: v1.0.0-alpha07

October 22, 2025

androidx.xr.runtime:runtime-*:1.0.0-alpha07 is released. Version 1.0.0-alpha07 contains these commits.

API Changes

  • Remove SessionConfigureConfigureNotSupported and replace it with UnsupportedOperationException. (I7680f)

Jetpack SceneCore: v1.0.0-alpha08

October 22, 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha08 is released. Version 1.0.0-alpha08 contains these commits.

API Changes

Bug Fixes

  • :xr:scenecore:scenecore-spatial-rendering and :xr:scenecore:scenecore-spatial-core added as implementation dependency of :xr:scenecore:scenecore (I6ab65, b/447000520)
  • Exception is thrown if session.scene is accessed after session destruction. (I77e6f)