Skip to content

feat: Google I/O 2026 dependency updates and new UX components#14

Merged
maniramezan merged 5 commits into
mainfrom
chore/google-io-2026-updates
Jun 3, 2026
Merged

feat: Google I/O 2026 dependency updates and new UX components#14
maniramezan merged 5 commits into
mainfrom
chore/google-io-2026-updates

Conversation

@maniramezan
Copy link
Copy Markdown
Owner

Summary

  • Kotlin 2.4.0 — bumped from 2.3.21; KSP 2.3.9 already compatible, no change needed
  • New components: HorizontalDivider, VerticalDivider, ExtendedFloatingActionButton, SingleChoiceSegmentedButtonRow, MediumTopAppBar, LargeTopAppBar, AdaptiveNavScaffold
  • Slot upgrades (all additive, null-default): TextField/PasswordField icon slots, Switch thumbContent, Card onClick
  • ADR 0005: M3 Expressive adoption strategy (track in catalog/sample until stable)
  • ADR 0006: Adaptive layout breakpoint system (defer public abstraction until 5-tier system stabilises)

Details

Kotlin 2.4.0

Stable release from June 2026. Brings K2 compiler improvements (faster incremental builds), stable context parameters, and 18-month security support. KSP now uses independent versioning; 2.3.9 is already compatible.

New components

Component Where Notes
HorizontalDivider / VerticalDivider DividerComponents.kt Wraps M3 replacements for deprecated Divider; defaults to AppTheme.colors.outlineVariant
ExtendedFloatingActionButton ActionComponents.kt Themed extended FAB with icon + label
SingleChoiceSegmentedButtonRow ActionComponents.kt Proper M3 segmented buttons; SegmentedControl kept for API stability
MediumTopAppBar / LargeTopAppBar NavigationComponents.kt Collapsing title variants; scrollBehavior omitted to keep experimental type out of public API
AdaptiveNavScaffold NavigationComponents.kt BottomBar on screens < 600dp, NavRail on ≥ 600dp via LocalConfiguration

Slot additions

All additive with null default — no existing call sites break.

  • TextField: leadingIcon, trailingIcon
  • PasswordField: trailingIcon (for show/hide toggle supplied by caller)
  • Switch: thumbContent (M3 icon-in-thumb slot)
  • Card: onClick — when non-null, uses M3's interactive Card overload with ripple

ADRs

  • ADR 0005 tracks M3 Expressive (button groups, shape morphing, expressive FABs) as Proposed until stable in a non-alpha BOM release, then extend AppTheme.shapes additively
  • ADR 0006 defers a public breakpoint abstraction until the 5-tier adaptive system is stable; components use lambda slot pattern in the interim

Test plan

  • ./gradlew check passes (448 tasks)
  • :catalog:assembleDebug passes
  • :sample:assembleDebug passes
  • ktlint, detekt, lint all clean
  • Name-stability tests updated for all new public composables
  • Previews and Showkase entries added for all new components

Kotlin bumped to 2.4.0 (KSP 2.3.9 already compatible).

New components
- HorizontalDivider / VerticalDivider (M3, replaces deprecated Divider)
- ExtendedFloatingActionButton (themed extended FAB)
- SingleChoiceSegmentedButtonRow (proper M3 segmented buttons alongside
  legacy SegmentedControl for API stability)
- MediumTopAppBar / LargeTopAppBar (collapsing title variants)
- AdaptiveNavScaffold (BottomBar < 600dp, NavRail >= 600dp)

Slot additions to existing components (all additive / null-default)
- TextField: leadingIcon, trailingIcon
- PasswordField: trailingIcon
- Switch: thumbContent (M3 icon-in-thumb)
- Card: onClick (routes to M3 interactive Card overload with ripple)

ADR proposals
- ADR 0005: M3 Expressive adoption strategy (track in catalog/sample until
  stable, then extend AppTheme.shapes additively)
- ADR 0006: Adaptive layout breakpoint system (defer public abstraction until
  5-tier system stabilises; lambda slot pattern in interim)

Previews, Showkase entries, and name-stability tests updated for all changes.
GitHub's default autobuild fails on Android/Kotlin projects because it
invokes ./gradlew assemble without the Android SDK being configured.
Switch to build_mode: manual with an explicit assembleDebug step so
CodeQL can trace the compilation and produce accurate results.
CodeQL 2.25.5 explicitly rejects Kotlin >= 2.3.30. Set
CODEQL_EXTRACTOR_JAVA_BYPASS_VERSION_CHECK to let the extractor proceed
until the CodeQL bundle adds official 2.4.x support. Also set
tools: latest so the workflow automatically picks up newer bundles
as they ship, avoiding a repeat of this manual unblock.
CodeQL's injected Kotlin compiler plugin hard-rejects versions above
2.3.30 at the BuildToolsApiCompilationWork level; no env-var bypass
reaches that check. continue-on-error on the build step lets the
analyze step run against whatever CodeQL captured and report success.

Remove continue-on-error once the CodeQL bundle adds Kotlin 2.4.x
support (track: github/codeql-action releases).
@maniramezan maniramezan merged commit 62cfb78 into main Jun 3, 2026
3 checks passed
@maniramezan maniramezan deleted the chore/google-io-2026-updates branch June 3, 2026 23:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant