1.7.0
Changes since 1.6.11
Highlights
Resources
Navigation
Web
skiko.js
is redundant in case of K/Wasm Compose Multiplatform for web applications and it can be removed from index.html files to not load redundant files.skiko.js
will be removed from the k/wasm distribution in the future releases.skiko.js
is still needed in case of K/JS Compose Multiplatform for web apps
Breaking changes
iOS
UIKitView
andUIKitViewController
inpackage androidx.compose.ui.interop
are deprecated. New API are mentioned in deprecation message. Deprecated invocations should work fine unless customonResize
is used, it is disallowed now and will print a warning.- Actual of expected
InteropView
on iOS isUIResponder
now instead ofUIView
. It's the first common ancestor forUIViewController
andUIView
, both of which can be integrated using iOS interop APIs - The app will crash by default, if
CADisableMinimumFrameDurationOnPhone
is not set to true inInfo.plist
. Use newly addedComposeUIViewControllerConfiguration.enforceStrictPlistSanityCheck
to opt-out of this behavior
Desktop
Android
Resources
Features
Multiple Platforms
- The
clickable
modifier now responds to NumPadEnter and Spacebar, too, in addition to Enter LocalLifecycleOwner
moved from Compose UI tolifecycle-runtime-compose
so that its Compose-based helper APIs can be used outside of Compose UI- Skia is updated to m126
- Commonized
org.jetbrains.compose.material3:material3-window-size-class
module - Commonized
org.jetbrains.compose.material3.adaptive:adaptive*
modules - New multiplatform module "material-navigation" (in beta status)
material3-adaptive-navigation-suite
is multiplatform now- Support Kotlin 1.9.25
iOS
- Initial iOS floating cursor support
- Added
accessibilityEnabled: Boolean = true
argument toUIKitView
andUIKitViewController
preferredStatusBarStyle
,preferredStatysBarAnimation
andprefersStatusBarHidden
are added toComposeUIViewControllerDelegate
to allow status bar appearance modification- Improvements in touches processing to detect if touches were meant to be delivered to interop views, or should be processed by Compose
- New
UIKitView
andUIKitViewController
API inpackage androidx.compose.ui.viewinterop
. Support ofonReset
to reuse the interop composable emitted node and avoid excessive native views reallocations, fine-grain touches strategy control (cooperative with explicit time delay, non-cooperative where no touches are received by Compose, ignoring touches) - Basic support for
BasicTextField(TextFieldState, ...)
on iOS
Desktop
- Add constructor with
RenderSettings
toComposePanel
. Added a classRenderSettings
withval isVsyncEnabled: Boolean?
. When set totrue
gives a hint to renderer implementation of the particularComposePanel
to reduce the latency between the input and visual changes in exchange for possible screen tearing - Add public
moveEnabled
andpositionPercentage
setters inSplitPaneState
- Implemented Drag-and-Drop from AOSP:
Modifier.dragAndDropSource
andModifier.dragAndDropTarget
- Added support for input methods (languages such as Chinese, Korean, Arabic) to BasicTextField(TextFieldState, ...)
- Add dynamic Drag&Drop target indication (🚫 icon under cursor if currently there is no valid drop target under it)
- The thickness of border resizers in undecorated windows and dialogs can now be controlled by passing a new
decoration
argument
Resources
- Speed resources web rendering up by the reading a cached value instantly
- If there is no resource with suitable density, use resource with the most suitable density, otherwise use default (similar to the Android logic)
- Add a customization for resources directories. Now it is possible to use e.g downloaded resources
- Now the gradle plugin generates resources map to find a resource by a string ID
- To avoid constant reading raw font bytes on each Font usage on non-android targets, there was added the font cache. Android has own font cache inside the platform implementation
- Added utility functions to decode
Bitmap ByteArray as ImageVector
andXML ByteArray as ImageVector
in the common code andSVG ByteArray as Painter
in the non-android code - Added support of test resources in Compose Multiplatform projects
- Added support of multi-module resources in JVM-only projects
Gradle Plugin
Fixes
Multiple Platforms
- Fix "ComposePanel. Focus moves to child after focusing/unfocusing the main window"
- Don't show code completion for non-existenst API in
commonMain
that fails on Android withNoSuchMethodException
- Fix order of interop elements in some cases
- Fixed
Popup
jerking during ripple effect animation - Fix applying
ShaderBrush
to part ofAnnotatedString
- Fix text
brush
animation and optimized updating some visual text properties (applying time is reduced up to 40%) - Fix initial cursor position in the empty
TextField
with explicitly setTextAlignment
- Fix focus for editable
TextField
insideExposedDropdownMenuBox
- Fix changing
FontRenderingSettings
is not reflected until composition restarts
iOS
- Pressing directional keys on a physical keyboard connected to iOS device doesn't cause a crash
- Dismissing popup or dialogue within a very short timespan after its creation doesn't cause a crash
- Fix missing invalidations during native view resize
- Fixed a memory spike when continuously resizing the
ComposeUIViewController
(such as when used in modal sheet presentation context with different detents) - visibility of selection handles in single-line textfields with LTR + RTL text in iOS
- Interop views are now correctly clipped when their measured clipped and unclipped bounding boxes don't match
- Touches inside interop views are not exclusive to them and are processed on Compose side as well.
- Fix
material3.ModalBottomSheet
safe area usage - Fix hiding interop element during quick scroll
- Fixed the keyboard appearing when selecting from SelectionContainer
- Fix status bar padding on iPad devices
- VoiceOver doesn't allow to perform a11y actions (scrolling, activate, customActions) when disabled() semantics is present in affected element
- Fix frame drops when dragging scrollable content on iOS
- A new approach to implementation of
platformLayers
. Now extra layers (such as Dialogs and Popups) drawing is merged into a single screen size canvas. No jittering and crashes should happen with those anymore. Dialog
s andPopup
s now have their insets calculated correctly even when the frame ofComposeUIViewController
spawning them doesn't intersect any safe areas- Fix offset issues with keyboard and
TextField
- Fix "Incorrect
imePadding
and high cpu usage when repeatedly opening and closingKeyboard
on iOS" - Fix "Selection handlers in wrong positions in a fullscreen TextField"
- Fix keyboard closing while scrolling content with Text Fields
- Fix "UriHandler.openUri no longer works on iOS 18"
Desktop
- Fix possible
UninitializedPropertyAccessException
indesktopTest
- Fixed
ComposePanel.requestFocus()
, making it correctly assign focus to the first focusable child - When using
ComposePanel
inside a Swing application on macOS, VoiceOver will now correctly go into theComposePanel
when traversing accessible elements - When using
ComposePanel
inside a Swing application on Windows with NVDA turned on, focus will now correctly go into theComposePanel
when traversing with (ctrl)-shift-tab - Correctly save
WindowState
with unspecifiedsize
instead of crashing - Fix
IndexOutOfBoundsException
crash on Windows when traversing a11y elements - Fix scrolling non-same direction nested scrolls with trackpad
- Fix fling velocity for precise wheel scroll
- [macOS] Fix crash when right-clicking an empty
SelectionContainer
or on the padding of aText
inside aSelectionContainer
- Fix bounds of
ComposePanel
in IntelliJ on macOs - Fix UI glitch when resizing a Compose window via its
WindowState
Web
- Process
keydown
andkeyup
keys for identified keys from virtual keyboard - Allow preloading the fallback fonts. This enables the usage of emojis and other unicode characters without manually composing the Text with AnnotatedString
- Make sure the web app distribution doesn't contain a duplicate
skiko.wasm
- Prevent a crash on mobile web when selecting some text in
SelectionContainer
Resources
- Delete
contextClassLoader
usage on JVM targets - Create an empty resource dir with "podspec" task instead "podInstall"
- Fix resource accessors escaping. Now it is possible to use resources with names: "package", "is", "item_$xxx" etc
- Read exactly requested count of bytes from InputStream on jvm platforms
- Now drawables from upper DPIs will be downscalled to the expected size. (the same behavior as on Android)
Gradle Plugin
- Make sure tryGetSkikoRuntimeIfNeeded is executed only during the task execution
- Delete outdated build services
- Support project isolation
- Fix a gradle project misconfiguration when KSP and Room are used
Dependencies
-
Gradle Plugin
org.jetbrains.compose
, version1.7.0
. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.3
. Based on Jetpack Lifecycle 2.8.5 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha10
. Based on Jetpack Navigation 2.8.0 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.0
. Based on Jetpack Material3 Adaptive 1.0.0