Skip to content
CAI
Software that uses CAICheck a score

material-components/material-components-android

49.1

Weak · 25 September 2026

151.2k

lines of production code

Java

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the Material Components for Android library, a comprehensive UI toolkit that provides a wide range of customizable widgets and components for building Material Design interfaces. It includes core elements such as buttons, cards, navigation bars, and dialogs, alongside advanced features like adaptive layouts, dynamic color harmonization, and complex motion transitions. The repository also houses the Material Catalog, an interactive demonstration application that showcases these components and their various configurations for developers.

How it got here

2016–2018 — AndroidX migration and Material 3 adoption

67 changes.

The project underwent a foundational migration to AndroidX and Gradle, establishing a modern build infrastructure and updating core components to support API 23+. This period focused on implementing Material Design 3 specifications, introducing new widgets like BottomAppBar and MaterialSwitch, and enhancing existing components with dynamic color, shape theming, and accessibility features.

2019–2021 — Material 3 component expansion and motion

42 changes.

This period focused on introducing a wide array of new Material 3 components, including the Slider, Date Picker, Time Picker, Navigation Rail, and Progress Indicators, alongside foundational utilities for elevation, color harmonization, and shaped images. The work also established a comprehensive motion infrastructure with predictive back support and various transition effects, while significantly expanding the Catalog app to demonstrate these new features and adaptive layout patterns.

2022–2026 — Material 3 component expansion

25 changes.

This period focused on introducing a wide array of new Material 3 components, including Side Sheets, Search Bars, Carousels, Loading Indicators, and various toolbar layouts. The work also involved updating existing catalog demos to showcase these new features and enhancing the underlying color utilities and accessibility support for the library.

Features

Add All Components demo to Material Catalog

The Material Catalog app now includes a new 'All Components' demo that displays and tests cross-cutting library features in a single view. This demo showcases a comprehensive set of Material components, including a SearchBar, TabLayout, various input controls (Checkbox, RadioButton, Switch, TextFields), Button groups and ToggleGroups, Chips, and a SplitButton. It also demonstrates dialog and sheet interactions via Alert Dialog, Date/Time Pickers, Bottom Sheets, and Side Sheets, along with a BottomNavigationView featuring a badge and a navigation drawer.

catalog/java/io/material/catalog/allcomponents · high confidence

Add CanvasCompat utility for cross-version canvas operations

A new CanvasCompat class has been added to the material canvas library to provide compatibility helpers for canvas operations across different Android API levels. Specifically, it introduces saveLayerAlpha methods that abstract away the differences in Canvas API behavior between pre-Lollipop and Lollipop+ devices, ensuring consistent alpha-based layer saving for users of the library.

lib/java/com/google/android/material/canvas · high confidence

Add Chip and ChipGroup catalog demos

The Material Components for Android catalog now includes dedicated demo screens for the Chip and ChipGroup components. Users can explore the main Chip demo to see individual chip behaviors, including close icon interactions and text truncation toggles. The ChipGroup demo demonstrates group selection modes (single vs. multiple), the ability to remove and restore chips via close icons and a refresh button, and integration with popup menus. Additionally, a new RecyclerView demo shows how to integrate checkable chips within a scrolling list.

catalog/java/io/material/catalog/chip · high confidence

Add Dialog demo catalog with Material Design examples

The Catalog app now includes a dedicated Dialog section featuring a landing page and a main demo fragment. This addition provides users with interactive examples of Material Design dialogs, including standard alerts, dialogs with icons, centered title styles, and input handling via EditText. The demos showcase the new MaterialAlertDialogBuilder alongside AppCompat dialogs, illustrating various configurations such as single and multi-select lists, checkbox selections, and action button layouts.

catalog/java/io/material/catalog/dialog · high confidence

Add ExtendableSavedState for composite widget state persistence

The Material library introduces a new \ExtendableSavedState\ class within the \com.google.android.material.stateful\ package to support widgets that manage state composed of multiple delegated components. This class extends \AbsSavedState\ and utilizes a \SimpleArrayMap\ to store and restore arbitrary key-value state bundles via \Parcel\, allowing complex widgets to persist their internal state across configuration changes more flexibly than the standard \SavedState\ mechanism.

lib/java/com/google/android/material/stateful · high confidence

Add FocusRingDrawable for customizable focus indicators

Introduces the FocusRingDrawable class, which wraps or layers onto existing drawables to provide animated focus rings. This feature is disabled by default (controlled by the theme attribute focusRingsEnabled) and requires API 24+. It supports customization of outer/inner stroke colors, widths, radius, and shape appearance via theme attributes and XML, and automatically hides the ring when the window loses focus.

lib/java/com/google/android/material/focus · high confidence

Add Font typography catalog demo

The Material Catalog app now includes a new Font section that demonstrates various typographic styles. This change introduces the FontFragment landing page and the FontMainDemoFragment, which displays a list of text appearance styles (such as Body Large) using a RecyclerView. The demo allows users to preview how different font families and styles render within the Material Design system.

catalog/java/io/material/catalog/font · high confidence

Add Navigation Rail catalog demos

The Material Catalog app now includes a dedicated section for the Navigation Rail component, featuring a landing page and multiple demo fragments. These demos showcase core capabilities such as animated icons, header views (including an extended FAB), badge management with configurable gravity, label visibility modes, menu gravity, and icon sizing controls. The entry also covers the compact-screen behavior, where the demo forces portrait orientation and displays a guidance message, as well as the expand/collapse state management with accessibility tooltips.

catalog/java/io/material/catalog/navigationrail · high confidence

Add Radio Button demo to the Material Components Catalog

The Catalog app now includes a dedicated Radio Button demo section. This addition provides users with a visual example of enabled and disabled radio buttons within a group, demonstrating the component's interaction states and styling guidelines as defined in the new layout and string resources.

catalog/java/io/material/catalog/radiobutton · high confidence

Add Search component demos to the Material Catalog

The Material Catalog now includes a new Search section featuring three demo activities: a main Open Search Bar demo, a RecyclerView-integrated demo with contextual selection toolbars, and a demo showing a SearchBar with outside icons and an optional menu. These demos are accessible via the new Search landing fragment and utilize shared utility methods for setup, suggestions, and back-press handling.

catalog/java/io/material/catalog/search · high confidence

Add ShapeableImageView catalog demo

The Material Catalog app now includes a dedicated demo for ShapeableImageView, allowing users to interactively preview how the component renders images with different shape appearances. The demo features a toggle group that lets users switch between diamond, circle, and square shapes, and includes a randomization feature that toggles a 'winking' state on the displayed image to demonstrate dynamic updates.

catalog/java/io/material/catalog/imageview · high confidence

Added Divider demo to the Material Components catalog

The catalog now includes a dedicated demo section for the Divider component. This addition features a landing page linking to two sub-demos: one showcasing the MaterialDivider view with various styles (full-bleed, inset, middle, and heavy), and another demonstrating the MaterialDividerItemDecoration for RecyclerViews in both horizontal and vertical orientations.

catalog/java/io/material/catalog/divider · high confidence

Added Loading Indicator catalog demo

The Material Catalog app now includes a new section for the Loading Indicator component. This update adds a landing fragment and a main demo fragment that showcase the LoadingIndicator widget in various states: default, contained, with multiple custom colors, and used as an icon within a button.

catalog/java/io/material/catalog/loadingindicator · high confidence

Added Material Design list item layouts and ViewHolders

This change introduces the foundational UI components for Material Design list items within the Material library. It adds Java ViewHolders for single, two, and three-line list items (\SingleLineItemViewHolder\, \TwoLineItemViewHolder\, \ThreeLineItemViewHolder\) along with their corresponding XML layout resources. These components provide selectable list rows with optional icons and up to three lines of text, styled using the new \mtrl\_list\_item\_tint\ color selector to ensure consistent appearance with the Material theme.

lib/java/com/google/android/material/lists · high confidence

Added MathUtils utility class with floorMod support

A new MathUtils class has been added to the com.google.android.material.math package, providing utility methods for numerical operations. This includes standard functions like distance calculation, linear interpolation (lerp), and fuzzy comparison, as well as new floorMod implementations for both float and int types that ensure back-compatibility with API levels below 24.

lib/java/com/google/android/material/math · high confidence

Added internal debug menu and logging infrastructure to the Primes catalog

The Primes catalog now includes an internal development menu with a 'Debug' option, accessible via the new \InternalOptionsMenuPresenter\ interface and the \menu\_primes.xml\ resource. This change supports the collection of performance metrics and internal logging. Additionally, ProGuard rules have been added to preserve the Dagger-generated application component class for the Primes catalog, ensuring the internal dependency injection graph remains intact during obfuscation.

catalog/java/io/material/catalog/internal, catalog/java/io/material/catalog/primes · high confidence

Automatic inflation of Material Components widgets

The library now includes a custom view inflater that automatically replaces standard Android framework widgets with their Material Components equivalents (Button, CheckBox, RadioButton, TextView, and AutoCompleteTextView) when a Material Components theme is applied. This allows developers to use standard XML tags like \<Button\> or \<TextView\> and have them render with Material styling and behavior without needing to explicitly reference the full Material class names in their layouts.

lib/java/com/google/android/material/theme · high confidence

The Material Catalog app now features dedicated demos for the Hero, Fullscreen, and Uncontained carousel strategies, in addition to the existing Multi-Browse and main carousel examples. These new entries allow users to explore different carousel layouts, including vertical full-screen modes with bottom sheet controls and hero-style alignments, providing a more comprehensive view of the component's capabilities.

catalog/java/io/material/catalog/carousel · high confidence

Catalog adds new List demos for segmented, multi-section, expandable, and swipeable interactions

The Material Catalog now includes dedicated demo fragments for advanced list behaviors: SegmentedListDemoFragment demonstrates exclusive item selection within a group, MultiSectionListDemoFragment shows lists with subheaders and grouped items, ExpandableListDemoFragment illustrates items that can be expanded to reveal more content, and SwipeableListDemoFragment showcases swipeable list items with start/end actions. These demos are registered in the ListsFragment landing page and utilize the updated CustomListItemData model to support state tracking for selection, expansion, and swipe gestures.

catalog/java/io/material/catalog/listitem · high confidence

Catalog app adds Floating Toolbar demo with vertical orientation and accessibility tooltips

The Material Catalog app now includes a dedicated Floating Toolbar demo section. This update introduces a new landing fragment and main demo fragment that showcase the FloatingToolbarLayout component, including support for vertical floating toolbar configurations. The demo provides interactive controls for text formatting (bold, italic, underline, color, alignment) and includes accessibility improvements by adding tooltips to the format buttons.

catalog/java/io/material/catalog/floatingtoolbar · high confidence

Catalog app adds new tabs demos and migrates to ViewPager2

The Tabs section of the Material Components for Android catalog app has been expanded with new interactive demos, including a new 'Auto' mode that automatically switches between fixed and scrollable layouts, and a new 'ViewPager2' demo that demonstrates the integration of TabLayout with the modern ViewPager2 widget. The existing 'Controllable' demo has been updated to support badge gravity configuration and label visibility toggles, while the underlying implementation has been migrated from the legacy ViewPager to ViewPager2 for better lifecycle management and performance.

catalog/java/io/material/catalog/tabs · high confidence

Circular reveal support for CoordinatorLayout

The library now includes a new \CircularRevealCoordinatorLayout\ class that extends \CoordinatorLayout\ to support circular reveal animations. This component wraps the existing \CircularRevealHelper\ to allow developers to apply circular reveal effects to \CoordinatorLayout\ instances, exposing methods to control reveal info, scrim color, and overlay drawables.

lib/java/com/google/android/material/circularreveal/coordinatorlayout · high confidence

DatePicker catalog demo adds day view decorators and configuration options

The date picker catalog demo now includes examples of DayViewDecorator usage, featuring BackgroundHighlightDecorator to highlight specific days with background and text colors, and CircleIndicatorDecorator to display circular indicators on specific dates. The main demo fragment has been expanded to allow users to configure these decorators via a new UI option, alongside existing controls for selection mode, theme, bounds, validation, title, input mode, and button text/content descriptions.

catalog/java/io/material/catalog/datepicker · high confidence

Edge-to-edge mode toggle added to Catalog app

The Catalog app now includes a new helper class, WindowPreferencesManager, which allows users to toggle edge-to-edge behavior on and off. This feature persists the user's preference via SharedPreferences and applies the setting to the window, adjusting padding based on system bar insets to ensure content is displayed correctly in both modes.

catalog/java/io/material/catalog/windowpreferences · high confidence

Expanded Button Catalog with Group, Toggle, and Split Button Demos

The Buttons demo section in the Material Catalog app has been significantly expanded to showcase the full range of button components. In addition to the standard button variants, the catalog now includes dedicated demos for MaterialButtonGroup (covering icon-only, label-only, mixed layouts, distribution options, and runtime add/remove capabilities), MaterialButtonToggleGroup (with controls for selection requirements, orientation, inner corner size, spacing, and enabled states), and MaterialSplitButton (featuring a synchronized popup menu). These new fragments are registered in the Buttons landing page, providing users with interactive examples for grouping, toggling, and splitting button interactions.

catalog/java/io/material/catalog/button · high confidence

Expanded Card catalog demos with selection, drag-and-drop, and swipe dismissal

The Card section of the Material Components catalog now includes several new interactive demos. Users can explore card selection modes via a new activity that demonstrates checkable cards and selection tracking. A new list demo showcases drag-and-drop reordering of cards, including keyboard accessibility for moving items up and down. Additional demos illustrate rich media layouts, various card states (hovered, pressed, checked), and swipe-to-dismiss behavior with undo support.

catalog/java/io/material/catalog/card · high confidence

Expanded Slider catalog with new demo fragments and configuration options

The Material Catalog app now includes a comprehensive set of new demo fragments for the Slider widget, showcasing capabilities such as centered layout, continuous mode with dynamic tick counts, discrete mode with label formatters, customizable track corner sizes, vertical orientation, and touch event handling within scroll containers. The catalog landing page has been updated to list these new demos, including specific entries for label behavior, track icons, and vertical scroll interactions, allowing users to explore the full range of Slider configurations and behaviors.

catalog/java/io/material/catalog/slider · high confidence

Expanded Top App Bar catalog demos with new interaction patterns and layouts

The Top App Bar catalog now includes a broader range of demonstration scenarios, adding specific demos for Action Bar integration, Compress effects, and various Collapsing Toolbar configurations (Medium, Large, Multiline, and with subtitles). New interactive features allow users to toggle lift-on-scroll and lifted states, increment badge numbers, and toggle action buttons in the main demo. The collection also introduces Preferences screen demos, including a new card-items variant with shaped focus rings, and provides a base activity for Action Bar demos that supports action mode toggling.

catalog/java/io/material/catalog/topappbar · high confidence

Initial table of contents screen for the catalog app

The catalog app now features a new table of contents screen that displays available demos in a grid layout. This screen includes search functionality to filter demos by name, supports a dark theme toggle, and allows users to set a default demo to launch on start. The implementation uses a RecyclerView with a custom GridDividerDecoration for visual separation between items and integrates with the app's preference system to remember user settings.

catalog/java/io/material/catalog/tableofcontents · high confidence

Introduce BottomAppBar component with FAB cradle and cutout support

Adds the BottomAppBar widget, an extension of Toolbar that features a shaped background with a cutout to cradle an attached FloatingActionButton. This component supports configurable FAB alignment (center or end), anchor modes (cradled or embedded), and scroll-based hiding. It includes specific edge treatments to render the semi-circular cutout around the FAB, handling vertical offsets and rounded corners, and integrates with CoordinatorLayout for proper anchoring and animation coordination.

lib/java/com/google/android/material/bottomappbar · high confidence

The Carousel component is now available, providing a customizable RecyclerView-based layout for browsing items with varying sizes. It includes a new CarouselLayoutManager and CarouselSnapHelper to handle masking, offsetting, and snapping to focal keylines. The component supports several built-in strategies—MultiBrowse, Hero, FullScreen, and various uncontained alignments (left, center)—allowing developers to choose between contained or uncontained layouts with start or center alignment. The system uses an Arrangement class to calculate optimal item sizes and counts based on available space, and supports both horizontal and vertical orientations.

lib/java/com/google/android/material/carousel · high confidence

Introduce Material Date Picker with validation, styling, and customization APIs

The Material Date Picker component is now available in the \com.google.android.material.datepicker\ package, providing a new way to select dates with calendar and text-input modes. Users can restrict selectable dates using \CalendarConstraints\ with \DateValidator\ implementations (including \DateValidatorPointBackward\, \DateValidatorPointForward\, and \CompositeDateValidator\ for combining rules). The calendar's appearance is fully customizable via \CalendarStyle\ and \CalendarItemStyle\, allowing control over colors, shapes, and insets for days and years. Additionally, \DayViewDecorator\ allows developers to apply custom drawables, background/text colors, and content descriptions to specific day views, while \DateSelector\ interfaces enable custom selection logic and text input formatting.

lib/java/com/google/android/material/datepicker · high confidence

Introduce Material Slider and RangeSlider components

Adds the new \Slider\ and \RangeSlider\ widgets to the Material Components library, providing a modern alternative to \SeekBar\ with support for continuous and discrete value selection, custom thumb drawables, track icons, and vertical orientation. The update includes comprehensive accessibility features (keyboard navigation, TalkBack support, and minimum touch targets), visual enhancements like animated labels and focus rings, and configuration options for tick marks, track corners, and label formatting.

lib/java/com/google/android/material/slider · high confidence

Introduce MaterialRadioButton with theme-aware styling

Adds a new MaterialRadioButton component that extends AppCompatRadioButton to apply Material Design colors. The component supports programmatic control via setUseMaterialThemeColors to toggle between Material theme colors (derived from colorControlActivated, colorSurface, and colorOnSurface) and default system tints, and allows customization of the ripple effect color through the rippleColor attribute.

lib/java/com/google/android/material/radiobutton · high confidence

Introduce NavigationRailView component with expandable rail and item spacing controls

Adds the NavigationRailView component to the Material library, providing a side-aligned navigation rail for tablets and large screens. The view supports an expandable state that reveals labels and allows scrolling when the item count exceeds seven, while remaining collapsed with icons only when fewer items are present. Developers can control the spacing between menu items and set a minimum height for items in the collapsed state via new XML attributes. The component also handles system window insets for proper padding and includes internal layout classes to manage header and menu positioning without vertical overlap.

lib/java/com/google/android/material/navigationrail · high confidence

Introduce ShapeableImageView for shaped images with borders and content padding

The new ShapeableImageView component allows images to be drawn with custom shapes, including support for stroke borders (with configurable color and width) and content padding that does not affect the background. It integrates with the Material Shape system, supports hardware acceleration, and handles dynamic shape updates and outline invalidation.

lib/java/com/google/android/material/imageview · high confidence

Introduce Side Sheet component with left/right support and coplanar sibling handling

The Material Components library now includes a new Side Sheet component, providing a new \SideSheetBehavior\ for \CoordinatorLayout\ and a \SideSheetDialog\ for modal presentations. This change introduces support for sheets anchored to both the left and right screen edges via new \LeftSheetDelegate\ and \RightSheetDelegate\ classes, which handle positioning, swipe detection, and margin updates. It also adds support for coplanar sibling views, allowing the side sheet to push adjacent content while maintaining correct margins across layout passes. The component includes a \SideSheetCallback\ for tracking state changes (expanded, hidden, dragging, settling) and integrates predictive back support for standard and coplanar sheets.

lib/java/com/google/android/material/sidesheet · high confidence

Introduce SwitchMaterial component with Material Theming support

Adds a new SwitchMaterial widget that extends SwitchCompat to provide automatic styling based on the current Material Theme. The component supports programmatic control via setUseMaterialThemeColors to apply theme-derived colors for the thumb and track, utilizing colorControlActivated, colorSurface, and colorOnSurface attributes, and integrates with elevation overlays for proper visual layering.

lib/java/com/google/android/material/switchmaterial · high confidence

Introduce experimental BadgeDrawable for anchoring badges to views

This change introduces the new \BadgeDrawable\ class and its supporting utilities (\BadgeUtils\, \BadgeState\) within the Material Components library, enabling developers to attach dynamic badges (such as notification counts) to anchor views like \BottomNavigationView\ items or Toolbar menu items. The implementation supports positioning via gravity (top/bottom, start/end) and offsets, handles state saving and restoration for configuration changes, and adapts to API levels by using ViewOverlays on API 18+ and FrameLayout foregrounds on older versions. The API is marked as experimental, indicating that the implementation and attributes are subject to change.

lib/java/com/google/android/material/badge · high confidence

Introduce new Material 3 LoadingIndicator component

Adds a new \LoadingIndicator\ view and its supporting classes (\LoadingIndicatorDrawable\, \LoadingIndicatorSpec\, \LoadingIndicatorAnimatorDelegate\, \LoadingIndicatorDrawingDelegate\) to the Material library. This component renders an animated, morphing shape indicator that can be configured via XML attributes such as \showDelay\, \minHideDelay\, \indicatorSize\, and \containerColor\. It includes a static fallback drawable for when system animations are disabled and handles visibility changes with controlled animation delays.

lib/java/com/google/android/material/loadingindicator · high confidence

Introduce new Material TimePicker component with clock and text input modes

Adds a new Material TimePicker component to the library, providing users with a clock-based interface for selecting time via a rotating hand and a text input mode for direct keyboard entry. The implementation includes a \MaterialTimePicker\ dialog, a \ClockFaceView\ for the visual clock, and \ChipTextInputComboView\ for the text input fields, supporting both 12-hour and 24-hour formats with corresponding accessibility announcements and haptic feedback.

lib/java/com/google/android/material/timepicker · high confidence

Introduces new catalog demo infrastructure and memory monitoring widget

The Material Catalog app now uses a new, structured demo framework defined in the \io.material.catalog.feature\ package. This includes base classes (\Demo\, \DemoActivity\, \DemoFragment\, \DemoLandingFragment\) that standardize how demos are presented, supporting features like edge-to-edge display, shared element transitions (MaterialContainerTransform), and configurable action bars. Additionally, a new \MemoryView\ widget has been added to the catalog to visualize the app's memory usage in real-time, and utility classes (\DemoUtils\, \FeatureDemoUtils\) provide helpers for managing demo navigation, window insets, and default demo preferences.

catalog/java/io/material/catalog/feature · high confidence

Introduction of Material 3 Bottom Sheet with drag handle and edge-to-edge support

The Bottom Sheet component has been updated to Material 3, introducing a dedicated drag handle view that allows users to cycle through collapsed, half-expanded, and expanded states via single taps or double-tap to hide. The behavior now supports edge-to-edge layouts with automatic padding adjustments for system bars and keyboard insets, ensuring the sheet integrates seamlessly with modern Android window insets. Accessibility has been enhanced with specific actions for the drag handle and improved state announcements, while the dialog and fragment implementations have been refined to handle dismiss animations and state preservation more robustly.

lib/java/com/google/android/material/bottomsheet · high confidence

Introduction of Material Components Chip, ChipDrawable, and ChipGroup widgets

This release introduces the new Material Components Chip family, providing the \Chip\ view, \ChipDrawable\ for standalone usage, and \ChipGroup\ for managing multiple chips. The \Chip\ widget acts as a wrapper around \ChipDrawable\, handling touch, keyboard, and accessibility interactions while supporting features like icons, close buttons, and text styling. \ChipGroup\ extends \FlowLayout\ to manage chip layout and selection states, offering single and multi-selection modes with accessibility support via \CollectionInfo\. These components replace previous implementations and integrate with the broader Material Components theming and shape system.

lib/java/com/google/android/material/chip · high confidence

Introduction of TooltipDrawable for themed tooltips

The library introduces a new \TooltipDrawable\ class within the Material Components library. This drawable handles the rendering of tooltip bubbles, including support for shape theming, custom text appearance, and a directional pointer (arrow) at the bottom. It is marked as internal (\@RestrictTo(LIBRARY\_GROUP)\) and is designed to be used by other components, such as the Slider, to display contextual information with consistent Material styling.

lib/java/com/google/android/material/tooltip · high confidence

Introduction of new MaterialSwitch component

A new MaterialSwitch class has been added to replace the obsolete SwitchMaterial component, providing a fresh Material 3 design. This component introduces support for a customizable thumb icon (including size and tinting), track decoration, and dynamic tinting of the thumb and track based on the thumb's position. It also integrates focus ring support and overrides default switch width settings to respect the drawable width.

lib/java/com/google/android/material/materialswitch · high confidence

Legacy Multidex support for older Android devices

The Material Catalog now includes a specialized application class for development builds on older Android devices that require the multidex support library to handle multiple dex files. This change ensures the catalog can run correctly on legacy devices by extending the standard CatalogApplication with legacy multidex capabilities.

catalog/java/io/material/catalog/application/legacymultidex · high confidence

MaterialCardView now supports checkable state with custom icon and stroke styling

The MaterialCardView component has been updated to implement the Checkable interface, allowing cards to display a checked state with a customizable icon, tint, size, margin, and gravity. Additionally, the card now supports configurable stroke color and width, enabling visual borders that respect the card's shape and padding. These changes enhance the card's interactivity and visual customization options for selected or focused states.

lib/java/com/google/android/material/card · high confidence

MaterialCheckBox now supports indeterminate and error states

The MaterialCheckBox component has been updated to support two new visual states: an indeterminate state (for partial selection) and an error state (to indicate validation issues). These states are exposed via new public APIs (setCheckedState, getCheckedState, setErrorEnabled, setErrorText) and allow developers to programmatically control the checkbox's appearance and behavior beyond simple checked/unchecked toggles. The component also now uses Material Theme colors for its button and icon drawables by default, ensuring consistent styling with the Material Design 3 specification.

lib/java/com/google/android/material/checkbox · high confidence

New APIs for dynamic color harmonization and system contrast support

Material for Components introduces a new color system in the \com.google.android.material.color\ package, enabling developers to harmonize app colors with a primary seed and support system contrast settings. The \DynamicColors\ class allows applying dynamic colors to activities with a new \DynamicColorsOptions\ builder that supports content-based seed colors (from images or colors) and custom preconditions. The \HarmonizedColors\ class and \HarmonizedColorsOptions\ allow runtime harmonization of specific color resources and theme attributes (such as error colors) to match a primary color, using a \ResourcesLoader\ to override resources on Android R+. Additionally, the new \ColorContrast\ class and \ColorContrastOptions\ allow applying medium and high contrast theme overlays to activities or contexts, automatically updating when the system contrast level changes on Android U+ (Upside Down Cake).

lib/java/com/google/android/material/color · high confidence

New Bottom App Bar catalog demo with cut-corners edge and predictive back support

The Bottom App Bar catalog section now includes a new demo showcasing a custom top-edge treatment that creates cut corners to accommodate a diamond-shaped Floating Action Button, alongside updated navigation handling that integrates AndroidX predictive back callbacks for smoother back gestures.

catalog/java/io/material/catalog/bottomappbar · high confidence

New Color and Color Harmonization demos added to the Material Catalog

The Color section of the Catalog app now includes new interactive demos. A main Color demo displays Material 3 color roles (such as primary, surface, and utility colors) organized by surfaces, content, and utility categories. A new Color Harmonization demo allows users to toggle app-wide color harmonization on and off to see how custom seed colors affect the UI, including side-by-side comparisons of harmonized versus non-harmonized states. Additionally, a Dynamic Color Palette demo is available to showcase dynamic color generation.

catalog/java/io/material/catalog/color · high confidence

New Docked Toolbar catalog demos

The Material Catalog app now includes dedicated demo pages for the Docked Toolbar component. This change adds a landing fragment and three specific demo fragments: a main demo showcasing various toolbar buttons with tooltips and snackbar interactions, a demo demonstrating the toolbar with only three items, and a demo illustrating the use of text buttons within the toolbar layout.

catalog/java/io/material/catalog/dockedtoolbar · high confidence

New DockedToolbarLayout component with configurable inset padding

A new \DockedToolbarLayout\ view has been introduced to the Material library, providing a container for docked toolbars that can be pinned to the top or bottom of the screen. This component automatically handles system window insets (including IME, system bars, and display cutouts) by applying configurable padding to its content. Users can control this behavior via new XML attributes (\paddingTopSystemWindowInsets\ and \paddingBottomSystemWindowInsets\) or by relying on gravity and \fitsSystemWindows\ settings, ensuring the toolbar content remains visible and properly spaced around system UI elements.

lib/java/com/google/android/material/dockedtoolbar · high confidence

New DraggableCoordinatorLayout component for the Material Catalog

The Material Catalog now includes a new \DraggableCoordinatorLayout\ component, which extends \CoordinatorLayout\ to allow its child views to be dragged. This custom layout integrates \ViewDragHelper\ to manage touch interception and event processing, enabling developers to add or remove draggable children dynamically and listen for capture and release events via a \ViewDragListener\ interface.

catalog/java/io/material/catalog/draggable · high confidence

New Elevation and Shadows demos added to the Material Catalog

The Catalog app now includes a dedicated Elevation and Shadows section featuring a main demo for adjusting card elevation levels, an animation demo showcasing translationZ effects on MaterialShapeDrawable, and an overlay demo that visualizes elevation overlay colors and alpha percentages across various dp values.

catalog/java/io/material/catalog/elevation · high confidence

New FloatingToolbarLayout component with system inset handling

A new FloatingToolbarLayout component has been added to the Material library, providing a FrameLayout-based container for floating toolbars that automatically adjusts its margins to account for system window insets (such as navigation bars, display cutouts, and the IME). The layout respects custom attributes to control which sides apply these insets, ensuring the toolbar floats correctly above UI elements without being obscured by system UI.

lib/java/com/google/android/material/floatingtoolbar · high confidence

New Material 3 ProgressIndicator components with advanced animation and customization

This release introduces a new family of progress indicators (LinearProgressIndicator and CircularProgressIndicator) that replace the legacy ProgressBar styling with a spec-driven architecture. Users gain access to new visual styles, including configurable track thickness, rounded corners (with fraction support), and customizable indicator sizes. The components feature improved indeterminate animations, such as 'advance' and 'retreat' modes for circular indicators, and support for wavy active indicators with adjustable wavelength and amplitude. Additionally, the new indicators respect system animator duration scales, offer smoother transitions between indeterminate and determinate modes, and include performance optimizations for inflation and drawing.

lib/java/com/google/android/material/progressindicator · high confidence

New Material 3 SearchBar and SearchView components

This release introduces the new Material 3 SearchBar and SearchView components, providing a floating search field and a full-screen search interface that work together via an anchor relationship. The SearchBar supports customizable center views, lift-on-scroll color changes when used with AppBarLayout, and adaptive maximum width constraints. The SearchView features expand and collapse animations (including contained styles with text and icon transitions), predictive back gesture support with proper accessibility state management, and stylus handwriting input. The components also include improved accessibility features such as keyboard navigation, TalkBack focus handling, and modal state restoration.

lib/java/com/google/android/material/search · high confidence

New Material Button components: Group, ToggleGroup, and SplitButton

This release introduces three new container components for managing groups of Material buttons. MaterialButtonGroup acts as a LinearLayout that coordinates the visual appearance of its child buttons, including handling overflow modes (menu, wrap, or none) and applying shared shape appearances. MaterialButtonToggleGroup extends this group to manage toggleable button states, supporting single-selection mode, selection requirements, and custom inner corner sizes for adjacent buttons. MaterialSplitButton provides a specialized two-button container for split-button patterns, managing the interaction between a primary action button and a secondary overflow button with appropriate accessibility descriptions.

lib/java/com/google/android/material/button · high confidence

New Material Divider and DividerItemDecoration components

Added the MaterialDivider view and MaterialDividerItemDecoration class to the library, providing a new way to display dividers in layouts and RecyclerViews. These components support configurable thickness, color, and start/end insets, and include built-in support for RTL layouts and both horizontal and vertical orientations.

lib/java/com/google/android/material/divider · high confidence

New Material Motion transition classes and providers

The Material transition library now includes a comprehensive set of new classes to support Material Design motion. This adds \MaterialContainerTransform\ for shared element transitions between containers, along with \MaterialFade\, \MaterialFadeThrough\, \MaterialSharedAxis\, and \MaterialElevationScale\ for visibility changes. The implementation introduces a provider-based architecture (\FadeProvider\, \FadeThroughProvider\, \ScaleProvider\, etc.) to configure animations, and includes supporting utilities like \FadeModeEvaluator\, \FitModeEvaluator\, and \MaskEvaluator\ to handle complex morphing, scaling, and masking logic during transitions.

lib/java/com/google/android/material/transition · high confidence

New Material Shape-aware AlertDialog builder and touch handling

The dialog package now includes a new MaterialAlertDialogBuilder that applies Material Shape theming (corners, elevation, background tint) to alert dialogs, ensuring they respect the dialogCornerRadius attribute and configurable background insets. To support this new inset-based background drawable, a new InsetDialogOnTouchListener is introduced to correctly process touch events in the transparent inset regions as outside touches, fixing dismissal behavior on pre-Pie Android versions where the system did not natively respect ACTION\_OUTSIDE.

lib/java/com/google/android/material/dialog · high confidence

New MaterialTextView component with TextAppearance line-height support

A new MaterialTextView component has been added, extending AppCompatTextView to automatically apply line-height values defined in TextAppearance styles. This behavior is controlled by the theme attribute textAppearanceLineHeightEnabled (defaulting to true) and can be disabled if needed. The component also supports the materialThemeOverlay mechanism for theming and includes a deprecated 4-argument constructor.

lib/java/com/google/android/material/textview · high confidence

New MaterialThemeOverlay utility for scoped theme application

A new \MaterialThemeOverlay\ utility class has been added to the Material library, allowing custom views to apply a specific theme overlay to their local context. This enables developers to override theme attributes (such as colors or shapes) for individual components without affecting the rest of the application, supporting more flexible and reusable component variants.

lib/java/com/google/android/material/theme/overlay · high confidence

New Menu catalog demo with accessibility and styling improvements

The Catalog app now includes a dedicated Menu demo section (MenuFragment and MenuMainDemoFragment) showcasing popup menus, context menus, and list popup windows. This demo highlights specific styling behaviors, such as using theme attributes for menu styles and applying icon padding via InsetDrawable to prevent icon squeezing on older Android versions (API \<= 21). It also improves accessibility by supporting keyboard navigation for context menus (Ctrl + Enter) and fixes potential crashes related to state restoration of the popup item layout.

catalog/java/io/material/catalog/menu · high confidence

New Music Player demo with album browsing and transitions

The catalog now includes a Music Player demo that showcases a complete music app flow. Users can browse a library of albums in either a list or grid view, toggle sorting, and navigate to an album details screen using Material Container Transform and shared element transitions. The demo also features a floating action button that expands into a music player interface with its own transition animations.

catalog/java/io/material/catalog/musicplayer · high confidence

New OverflowLinearLayout component for adaptive toolbar layouts

Added a new OverflowLinearLayout view that automatically manages child visibility based on available space, moving excess items into an overflow menu with a dedicated button. This component is designed to support the adaptive behavior of floating and docked toolbars, ensuring that UI elements are displayed efficiently across different screen sizes.

lib/java/com/google/android/material/overflow · high confidence

New Progress Indicator catalog demos for wave effects, visibility, and standalone usage

The Material Components catalog now includes dedicated demo screens for the Progress Indicator component. Users can explore wave effect customization (amplitude, wavelength, speed) and indeterminate animation modes (advance/retreat) in the Wave demo, control show/hide animation behaviors (none, outward, inward, escape) in the Visibility demo, and see how to use progress indicators as standalone drawables within other components like Chips and Buttons in the Standalone demo. These additions complement the existing main demo which covers basic linear and circular indicators, multi-color support, and core property adjustments like thickness and corner radius.

catalog/java/io/material/catalog/progressindicator · high confidence

New Side Sheet catalog demo with predictive back and left-sheet support

The Material Catalog app now includes a dedicated Side Sheet demo section. This new landing page and main demo fragment showcase standard, modal, coplanar, and detached side sheet variants. The demo has been updated to support predictive back gestures using BackEventCompat, allows users to toggle sheet gravity (left, right, start, end), and includes accessibility improvements such as tooltips on close buttons and improved keyboard navigation.

catalog/java/io/material/catalog/sidesheet · high confidence

New TabIndicatorInterpolator API and TabLayoutMediator for ViewPager2

The TabLayout component now exposes a new extensibility API for tab indicator animations via the TabIndicatorInterpolator class, allowing developers to customize how the selection indicator moves between tabs. Two built-in implementations are provided: ElasticTabIndicatorInterpolator, which independently scales the indicator's left and right edges for a stretching effect, and FadeTabIndicatorInterpolator, which fades the indicator out and in during transitions. Additionally, the library introduces TabLayoutMediator, a new class designed to synchronize a TabLayout with a ViewPager2, handling tab population, selection updates, and scroll synchronization automatically.

lib/java/com/google/android/material/tabs · high confidence

New adaptive layout demos added to the Material Catalog

The Adaptive section of the Material Catalog now includes several new demo activities and fragments that showcase adaptive UI patterns. These include an Adaptive Feed demo that adjusts layout based on fold position, an Adaptive Hero demo with small/medium/large screen configurations, an Adaptive List View demo featuring email list/detail interactions with shared element transitions, an Adaptive Hero demo, and an Adaptive Music Player demo. The AdaptiveFragment landing page has been updated to link to these new demos, and the AdaptiveListViewDemoActivity now includes fold position handling for supporting panels.

catalog/java/io/material/catalog/adaptive · high confidence

New animation primitives and coordination utilities in Material Animation

The animation package introduces several new internal components to support complex view animations. AnimationCoordinator allows managing and synchronizing multiple time-based and physics-based animations with start/end callbacks. AnimatableView provides a standard interface for views to expose animation start/stop capabilities with listener support. MotionSpec and MotionTiming enable declarative animation definitions via XML resources, allowing developers to specify timing, interpolators, and property values. Additional utilities include AnimationUtils with Material-specific interpolators and lerp functions, AnimatorSetCompat for handling pre-M animator bugs, ArgbEvaluatorCompat for proper color interpolation, and Property wrappers (ChildrenAlphaProperty, DrawableAlphaProperty, ImageMatrixProperty) for animating view properties. TransformationCallback replaces the previous TransformationListener interface for receiving view transformation events.

lib/java/com/google/android/material/animation · high confidence

New app-wide preferences screen for theme, shape, and color settings

The Material Catalog now includes a unified preferences screen (accessible via a bottom sheet) that allows users to change app-wide settings. This new mechanism replaces the previous theme switcher and lets users toggle night mode, adjust shape corner families and sizes, enable edge-to-edge mode, and turn dynamic color harmonization on or off. These preferences are persisted in SharedPreferences and applied immediately, with the activity recreating when necessary to reflect the changes.

catalog/java/io/material/catalog/preferences · high confidence

New compat ripple implementation for pre-Lollipop devices

A new \RippleDrawableCompat\ class has been introduced to provide ripple feedback for pressed, focused, and hovered states on devices running Android versions prior to Lollipop (API 21). This compat drawable is built on top of \MaterialShapeDrawable\, allowing it to inherit shape properties and match the background of Material components. It only renders when the view is enabled and in an interactive state, ensuring consistent visual feedback across older Android versions without relying on the framework's native \RippleDrawable\.

lib/java/com/google/android/material/ripple · high confidence

New elevation overlay and surface color utilities in Material Components

This change introduces the ElevationOverlayProvider utility class and the SurfaceColors enum to the Material library. ElevationOverlayProvider now supports a new elevationOverlayAccentColor attribute, allowing for more nuanced elevation overlays, and includes methods to composite overlay colors with the theme's surface color while preserving background alpha. The SurfaceColors enum provides a convenient way to retrieve tonal variations of the surface color based on elevation levels (SURFACE\_0 through SURFACE\_5), which is particularly useful for implementing dark theme elevation effects.

lib/java/com/google/android/material/elevation · high confidence

New expandable widget interfaces and helper for custom expandable components

The Material library introduces a new expandable component architecture in the \com.google.android.material.expandable\ package, providing the \ExpandableWidget\ and \ExpandableTransformationWidget\ interfaces along with the \ExpandableWidgetHelper\ utility class. This allows developers to create custom expandable UI elements that integrate with \CoordinatorLayout\ behaviors, automatically dispatching state-change events when expanded or collapsed, and supporting state persistence across configuration changes.

lib/java/com/google/android/material/expandable · high confidence

New motion infrastructure for predictive back animations

The motion package now includes a dedicated back-handling infrastructure that enables predictive back animations across Material components. This introduces a new \MaterialBackOrchestrator\ to manage system back callbacks on API 33+, a \MaterialBackHandler\ interface for views, and specific helper classes (\MaterialBackAnimationHelper\, \MaterialBottomContainerBackHelper\, \MaterialMainContainerBackHelper\, \MaterialSideContainerBackHelper\) that apply scale, translation, and corner-radius animations during the back gesture. Additionally, \MotionUtils\ has been updated to resolve both new and legacy easing attributes and to support spring motion configurations.

lib/java/com/google/android/material/motion · high confidence

New platform transition classes for Material Motion

The \lib/java/com/google/android/material/transition/platform\ package now includes a suite of new transition classes (\MaterialContainerTransform\, \MaterialFade\, \MaterialFadeThrough\, \MaterialElevationScale\, \MaterialArcMotion\, \Hold\) and their supporting providers (\FadeProvider\, \FadeThroughProvider\, \ScaleProvider\) and evaluators (\FadeModeEvaluators\, \FitModeEvaluators\, \MaskEvaluator\). These classes provide the core implementation for Material Design motion, including container transforms, fade effects, and elevation-based scaling, and are generated from the parent transition package to support Android API 21 (Lollipop) and above.

lib/java/com/google/android/material/transition/platform · high confidence

New shape appearance and corner size abstractions

The shape package introduces a new \CornerSize\ interface and several implementations (\AbsoluteCornerSize\, \RelativeCornerSize\, \ClampedCornerSize\, \AdjustedCornerSize\) to decouple corner sizing from \CornerTreatment\. It also adds \CornerFamily\ and \ShapeAppearance\ interfaces to standardize how shapes are represented and applied in \MaterialShapeDrawable\.

lib/java/com/google/android/material/shape · high confidence

New swipe-to-reveal component for list items

The Material Components library introduces a new swipe-to-reveal capability for list items. This change adds a new \ListItemLayout\ container that manages a swipable content view (\SwipeableListItem\, implemented by \ListItemCardView\) and up to two revealable action views (\RevealableListItem\, implemented by \ListItemRevealLayout\). Users can now swipe list items to reveal hidden actions, with support for RTL layouts, overshoot physics, and callbacks to track swipe states (dragging, settling, closed, open, and primary action). A \ListItemViewHolder\ is also provided to simplify binding these layouts in RecyclerViews.

lib/java/com/google/android/material/listitem · high confidence

Repository initialization with Gradle build system and documentation

The repository has been initialized with a standard Gradle build structure, including the Gradle wrapper scripts (gradlew, gradlew.bat) and configuration files (.editorconfig, .gitignore) to support building the Material Components for Android library. This change also introduces the project's foundational documentation, including a README detailing the library's maintenance mode status and migration to Compose, a pull request template, and configuration for the external documentation site (.mdc-docsite.yml).

(repo-wide) · high confidence

Shape Theming catalog demo now includes Bottom Sheets and Dialogs

The Shape Theming demo in the Material Catalog app has been expanded to showcase how shape appearance settings apply to Bottom Sheets and Dialogs. The demo now includes a Bottom Sheet and a Material Dialog in its main view, allowing users to see these components styled according to the selected theme (Baseline, Crane, Fortnightly, or Shrine).

catalog/java/io/material/catalog/shapetheming · high confidence

Snackbar catalog demo added

The Material Catalog app now includes a dedicated Snackbar demo section. This update adds a landing fragment and a main demo fragment that showcase various Snackbar configurations, including default, single-line, multi-line, and action-enabled snackbars. It also demonstrates advanced features such as custom background shapes (pill shape) and the new optional close icon, which can be customized with specific resources and tints.

catalog/java/io/material/catalog/snackbar, catalog/java/io/material/catalog/switchmaterial · high confidence

Time Picker catalog demo now supports input mode selection and framework timepicker toggle

The Time Picker demo in the Material Catalog app has been updated to allow users to switch between clock and keyboard input modes via a new toggle group, and includes a framework switch that enables testing the native Android TimePickerDialog alongside the Material TimePicker. The demo also respects system time format settings and allows toggling between 12-hour and 24-hour formats.

catalog/java/io/material/catalog/timepicker · high confidence

Behavioural changes

Added shadow rendering compatibility layer for pre-Lollipop devices

The Material library now includes a new shadow rendering subsystem in the \com.google.android.material.shadow\ package to provide consistent shadow visuals on older Android versions. This change introduces \ShadowDrawableWrapper\ and \ShadowRenderer\ to draw gradient-based edge and corner shadows, along with a \ShadowViewDelegate\ interface to bridge shadow properties to views. The implementation includes specific color resources (\design\_fab\shadow\\*\) and logic to handle shadow padding and rotation, ensuring that components like the FAB and BottomAppBar display proper elevation effects even when native hardware shadows are unavailable.

lib/java/com/google/android/material/shadow · high confidence

Bottom Navigation catalog demos updated with badge controls and edge-to-edge support

The Bottom Navigation section of the Material Components catalog app has been refreshed to demonstrate modern badge capabilities and improved layout handling. The main demo now includes interactive controls for configuring badge gravity (allowing badges to be positioned at the top-start or top-end) and managing badge numbers, with badges hiding and resetting rather than being removed to preserve state. Additionally, the animated vector drawable demo and other fragments have been updated to support edge-to-edge display, ensuring the bottom navigation bar renders correctly without overlapping UI controls on smaller devices.

catalog/java/io/material/catalog/bottomnav · high confidence

Bottom Sheet catalog demos now use BottomSheetDialogFragment and support predictive back

The Bottom Sheet demo fragments in the catalog app have been refactored to use BottomSheetDialogFragment instead of manually managing BottomSheetDialog instances, providing a more standard lifecycle integration. The main demo now supports predictive back gestures via BackEventCompat, allowing the bottom sheet to animate back progress when the user initiates a back gesture. Additionally, the demos demonstrate edge-to-edge handling with proper window inset padding and include interactive controls like switches to toggle full-screen mode and restrict expansion.

catalog/java/io/material/catalog/bottomsheet · high confidence

BottomNavigationView refactored to use NavigationBarView base class

The BottomNavigationView component has been restructured to extend the new NavigationBarView base class, consolidating common navigation bar logic. This change introduces a new internal BottomNavigationItemView for item rendering and updates the menu view to handle item sizing and layout via the shared base. Users will see the component now respects system window insets (dodging the navigation bar) and consumes all touch events to prevent interaction with views underneath. Additionally, the legacy LabelVisibilityMode enum is deprecated in favor of the mode available on the base NavigationBarView.

lib/java/com/google/android/material/bottomnavigation · high confidence

Catalog app initializes with Dagger injection and vector compatibility

The Catalog application now uses Dagger for dependency injection, implementing HasAndroidInjector to manage object graphs for the app, activities, and fragments. This change enables the application to apply user preferences via BaseCatalogPreferences and ensures compatibility with older Android versions by enabling AppCompat vector resource support at startup.

catalog/java/io/material/catalog/application · high confidence

Checkbox catalog demo now includes error and indeterminate states

The Checkbox section of the Material Catalog app has been updated to demonstrate additional MaterialCheckBox states. Users can now see and interact with the error state via a dedicated toggle, and the indeterminate state is demonstrated through a parent-child checkbox hierarchy where the parent automatically reflects the mixed selection state of its children.

catalog/java/io/material/catalog/checkbox · high confidence

Circular reveal support migrated to androidx and updated package

The circular reveal library has been migrated to the androidx namespace (com.google.android.material.circularreveal) and updated with modern Java annotations (@NonNull, @Nullable). The implementation now relies on the native ViewAnimationUtils for Lollipop+ devices while providing a backwards-compatible ObjectAnimator-based fallback for pre-Lollipop APIs, ensuring consistent circular reveal animations across supported Android versions.

lib/java/com/google/android/material/circularreveal · high confidence

CircularRevealCardView now extends MaterialCardView

The CircularRevealCardView component has been updated to extend MaterialCardView instead of the legacy AndroidX CardView. This change allows developers to use circular reveal animations on Material Design cards, leveraging the visual styling and behavior of MaterialCardView while maintaining the circular reveal capabilities provided by the CircularRevealHelper.

lib/java/com/google/android/material/circularreveal/cardview · high confidence

Deprecation of the transformation package in favor of MaterialContainerTransform

The classes in the \com.google.android.material.transformation\ package—including \ExpandableBehavior\, \FabTransformationBehavior\, \FabTransformationScrimBehavior\, and \FabTransformationSheetBehavior\—are now deprecated. Users should migrate to \MaterialContainerTransform\ for handling transitions involving Floating Action Buttons and expandable sheets. The diff also includes an accessibility improvement in \FabTransformationSheetBehavior\ that hides descendant views from accessibility services when the sheet is expanded, ensuring the scrim remains interactive for screen reader users.

lib/java/com/google/android/material/transformation · high confidence

ExtendedFloatingActionButton animations and sizing behavior updated

The ExtendedFloatingActionButton now uses a new MotionSpec-based animation system (via MotionStrategy and AnimatorTracker) to handle show, hide, shrink, and extend transitions, allowing for more flexible and customizable motion. Additionally, developers can now configure a specific collapsed size for the button and control how it extends back to its original width versus wrapping its content, providing finer control over the button's layout behavior during state changes.

lib/java/com/google/android/material/floatingactionbutton · high confidence

Improved font loading and resource resolution utilities

The library introduces new internal resource utilities and refactors font handling to improve performance and reliability. A new CancelableFontCallback allows pending asynchronous font fetches to be cancelled, preventing flickering when fonts are swapped. Font loading in TextAppearance now attempts synchronous resolution for cached or system fonts to avoid delays, while still falling back to asynchronous loading to prevent ANRs. Additionally, new helper classes (MaterialAttributes, MaterialResources) provide safer methods for resolving theme attributes and color state lists, and TypefaceUtils adds support for adjusting font weight based on system configuration.

lib/java/com/google/android/material/resources · high confidence

Internal refactoring of Material components

This release introduces a suite of internal utility classes and refactors existing logic to improve code organization and maintainability. New additions include BaselineLayout for baseline-aligned view groups, CheckableGroup for managing checkable item states, CheckableImageButton for accessible checkable buttons, ClippableRoundedCornerLayout for rounded corner clipping, and EdgeToEdgeUtils for simplified edge-to-edge window management. The CollapsingTextHelper has been significantly updated to use StaticLayout for text rendering, enhancing multiline and RTL support. Other internal changes include the deprecation of the @Experimental annotation, the addition of ContextUtils and DescendantOffsetUtils, and the introduction of ExpandCollapseAnimationHelper and FadeThroughDrawable for animation support.

lib/java/com/google/android/material/internal · high confidence

Introduce edge-to-edge display support in the Catalog app

The Catalog app now supports an edge-to-edge layout mode. This is implemented in the main activity by applying window preferences that extend content behind system bars, and a new UI control allows users to toggle this mode on and off directly within the app.

catalog/java/io/material/catalog/main · high confidence

Material Color Utilities library updated with new color science classes

The internal Material Color Utilities library has been updated to include new classes for advanced color science and dynamic theming. This update adds support for the CAM16 color appearance model (Cam16.java) and the HCT color system (Hct.java, HctSolver.java), enabling more perceptually accurate color measurements. It also introduces utilities for color blending (Blend.java), contrast calculation (Contrast.java, ContrastCurve.java), and dynamic color generation based on UI state (DynamicColor.java, DynamicScheme.java). Additionally, new classes for core palette generation (CorePalette.java) and color preference analysis (DislikeAnalyzer.java) are included to support Material 3 dynamic color features.

lib/java/com/google/android/material/color/utilities · high confidence

Material Components Android appbar library migration to androidx

The appbar components (AppBarLayout, CollapsingToolbarLayout, MaterialToolbar, and related behaviors) have been migrated from the legacy support libraries to the AndroidX namespace. This change updates internal dependencies to use androidx.core and androidx.coordinatorlayout classes, ensuring compatibility with modern Android development practices and resolving legacy framework conflicts.

lib/java/com/google/android/material/appbar · high confidence

Material Components library initialization with AndroidX migration and minSdkVersion 23

This change introduces the core library structure for the Material Components Android library, migrating the codebase to AndroidX and setting the minimum SDK version to 23. It includes the AndroidManifest.xml defining the library package and SDK constraints, along with ProGuard rules to preserve critical runtime behaviors: keeping CoordinatorLayout Behavior subclasses and their annotations, ensuring MaterialComponentsViewInflater is retained for theme-based view inflation, and preserving FocusRingDrawable for focus ring support.

lib · high confidence

The Navigation Drawer demo activities in the Catalog app have been updated to handle the Android 14 (Upside Down Cake) predictive back gesture, providing smooth, animated drawer closing when the user swipes back. For older Android versions, the back button behavior remains consistent with closing the drawer. Additionally, pressing the Escape key now reliably closes the drawer in the demo activities, improving keyboard accessibility and consistency with standard navigation patterns.

catalog/java/io/material/catalog/navigationdrawer · high confidence

Refactored TextInputLayout end icons into a modular delegate architecture

The implementation of end icons in TextInputLayout has been restructured to use a dedicated delegate pattern, introducing specific classes for ClearText, Custom, DropdownMenu, and PasswordToggle modes. This change centralizes icon rendering, state management, and accessibility logic within the EndCompoundLayout, ensuring that each icon type handles its own visibility animations, click behaviors, and TalkBack announcements independently. Users benefit from more consistent icon interactions, improved accessibility support (such as proper focus handling and content descriptions), and a cleaner internal API that separates icon-specific logic from the main layout class.

lib/java/com/google/android/material/textfield · high confidence

Refactored navigation components to use a shared internal menu system

The navigation library now uses a new internal menu infrastructure to support submenus and dividers in Bottom Navigation, Navigation Rail, and Navigation View. This change introduces new internal classes (NavigationBarMenu, NavigationBarMenuBuilder, NavigationBarSubMenu, DividerMenuItem) and view types (NavigationBarDividerView, NavigationBarSubheaderView) to handle menu structure and rendering, replacing previous ad-hoc implementations.

lib/java/com/google/android/material/navigation · medium confidence

Refactored scroll and swipe behaviors with new accessibility and edge support

The hide-on-scroll and swipe-dismiss behaviors have been refactored to improve accessibility and support multiple screen edges. HideBottomViewOnScrollBehavior is now deprecated in favor of HideViewOnScrollBehavior, which supports sliding views off the bottom, left, or right edges and automatically disables the hide-on-scroll effect when TalkBack (Touch Exploration) is enabled to prevent content obscuration. SwipeDismissBehavior now includes accessibility actions for screen readers and fixes a bug where the drag view's alpha did not update correctly when swiping from end to start.

lib/java/com/google/android/material/behavior · high confidence

Refactored transition demos to use configurable helpers and Dagger injection

The transition catalog demos have been refactored to support runtime configuration of animation properties. A new \ContainerTransformConfigurationHelper\ class manages a bottom-sheet UI that allows users to adjust duration, interpolators, arc motion, and fade modes for \MaterialContainerTransform\ demos. This helper is now injected into the various demo fragments and activities (such as \TransitionContainerTransformDemoFragment\ and \TransitionContainerTransformStartDemoActivity\) via a new \TransitionDemoModule\ using Dagger, replacing previous static or hardcoded configurations. Additionally, helper classes like \SharedAxisHelper\ and \SwitchRowView\ were introduced to manage shared axis controls and UI components, centralizing the logic for these interactive demonstrations.

catalog/java/io/material/catalog/transition · high confidence

Restructured text field catalog demos with interactive controls

The text field catalog has been reorganized into a base fragment structure with specific demo fragments for filled, outlined, icons, prefix/suffix, and exposed dropdown menus. A new controllable demo base class adds interactive controls to the catalog, allowing users to toggle error visibility, update label, error, helper, and placeholder text, adjust counter maximums, and enable or disable text fields via a switch. The exposed dropdown menu demo now includes a toggle to show or hide the leading icon.

catalog/java/io/material/catalog/textfield · high confidence

Snackbar component restructured with new theming, anchoring, and accessibility features

The Snackbar component has been significantly updated to support anchoring to specific views (allowing placement above FABs or navigation elements), improved accessibility behavior (such as preventing auto-dismissal when TalkBack is enabled and adding an 'Alert' pane title), and new theming capabilities including shape appearance, background tinting, and customizable text styles. The implementation now respects system window insets for gesture handling, supports a close icon, and introduces new animation modes (slide and fade). These changes are delivered through the refactored \BaseTransientBottomBar\ base class and the updated \Snackbar\ and \SnackbarContentLayout\ classes in the \com.google.android.material.snackbar\ package.

lib/java/com/google/android/material/snackbar · high confidence

Switch catalog demo updated to showcase Material 3 MaterialSwitch

The Switch demo in the Material Catalog has been migrated to use the new Material 3 \MaterialSwitch\ component, replacing the previous \SwitchMaterial\ implementation. The updated demo now illustrates key Material 3 features, including the ability to display icons within the switch thumb (using \app:thumbIcon\) and customize their size (e.g., \app:thumbIconSize\). The layout also includes a dedicated section for the deprecated \SwitchMaterial\ component to highlight the design shift, along with new visual separators and updated string resources to guide users through the new enabled, disabled, and icon-enabled states.

catalog/java/io/material/catalog/materialswitch · high confidence

Updated Floating Action Button (FAB) catalog demos with new behaviors and Compose interop

The FAB section of the Material Components catalog has been refreshed to showcase updated demo behaviors and integration patterns. The main FAB demo now includes a button to rotate icons and uses the M3 FAB layout resources. Extended FAB demos have been split into a general demo and a specific behavior demo for scroll interactions, with the latter consolidating Small, Regular, and Large styles. Additionally, a new FAB Menu demo has been added that demonstrates how to use the Compose FloatingActionButtonMenu within a Views-based activity, including accessibility features like focus trapping and state description updates.

catalog/java/io/material/catalog/fab · high confidence

Fixes

Fixes NPE crashes in drawables on Android API 23 and below

The drawable utilities and wrapper classes have been updated to properly handle constant states and mutability on older Android versions. Specifically, ScaledDrawableWrapper now correctly manages its constant state to prevent NullPointerException crashes when used in LayerDrawables on API levels below 23. Additionally, DrawableUtils includes fixes for class verification issues and ensures that tintable drawables are mutated appropriately to avoid state conflicts on legacy platforms.

lib/java/com/google/android/material/drawable · high confidence

Test coverage

Added Material Components test app and fixtures; Added UI tests for the Color catalog demos; Added UI tests for the ShapeableImageView catalog demo; Added instrumentation tests for AppBarLayout and CollapsingToolbarLayout; Added instrumentation tests for ButtonToggleGroup selection behavior; Added instrumentation tests for Card swipe-to-dismiss behavior; Added instrumentation tests for the TimePicker demo fragment; Added keyboard navigation tests for MaterialCalendarGridView; Added tests for MaterialAttributes resource resolution; Added tests for MemoryView and ViewScheduler in the catalog feature; Added tests for NavigationRailView state restoration; Added unit tests for BadgeDrawable state management and BadgeUtils offset handling; Added unit tests for BottomNavigationView selection and badge handling; Added unit tests for CarouselLayoutManager; Added unit tests for Material 3 color utilities and dynamic schemes; Added unit tests for Material Components; Added unit tests for MaterialColors color harmonization and role mapping; Added unit tests for MotionSpec animation loading and configuration; Added unit tests for NavigationBarItemView tooltip behavior; Added unit tests for RippleUtils color sanitization; Added unit tests for internal Material components.

Dependencies

Initial Gradle build system and dependency configuration

The project now uses a Gradle build system with a version catalog (libs.versions.toml) to manage dependencies. This introduces the Android Gradle Plugin 8.11.1, Kotlin 2.2.20, and Compose 2.2.0, alongside key library dependencies such as Dagger 2.51.1, Guava 33.3.1-android, Glide 4.16.0, and AppCompat 1.7.0. The build is configured for a minimum SDK of 23 and a target SDK of 33, with the main library version set to 1.14.0.

(dependencies) · high confidence

Initial Gradle wrapper configuration

The project now includes a Gradle wrapper configuration that ensures consistent builds by downloading and using Gradle version 8.13. This change introduces the necessary wrapper properties file to manage the build tool version automatically.

gradle · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 48 → 49 (+1.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 86 (new)
  • Architecture 99 → 99 (+0.4)
  • Maturity 62 → 62 (+0.2)
  • Readiness 26 → 26 (+0.0)
  • Security 67 → 67 (+0.0)

Resolved (39)

  • Change coupling: CornerTreatment.java ↔ MaterialShapeDrawable.java (lib/java/com/google/android/material/shape/CornerTreatment.java)
  • Change coupling: CutCornerTreatment.java ↔ MaterialShapeDrawable.java (lib/java/com/google/android/material/shape/CutCornerTreatment.java)
  • Change coupling: MaterialShapeDrawable.java ↔ RoundedCornerTreatment.java (lib/java/com/google/android/material/shape/MaterialShapeDrawable.java)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Further orphaned files (smaller)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • Medium: security finding (details withheld)
  • …and 19 more

New (542)

  • 1.calculateTargetSwipeStateForRevealLayout (cognitive 17) (lib/java/com/google/android/material/listitem/ListItemLayout.java)
  • 1.onViewReleased (cognitive 70) (lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java)
  • 1.onViewReleased (cyclomatic 25) (lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java)
  • 2.performAccessibilityAction (cognitive 16) (lib/java/com/google/android/material/appbar/AppBarLayout.java)
  • 5.onApplyWindowInsets (cognitive 17) (lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java)
  • 5.onApplyWindowInsets (cyclomatic 16) (lib/java/com/google/android/material/bottomsheet/BottomSheetBehavior.java)
  • 6.onDraw (cognitive 19) (lib/java/com/google/android/material/datepicker/MaterialCalendar.java)
  • AccessibilityDelegate.onInitializeAccessibilityNodeInfo (cognitive 28) (lib/java/com/google/android/material/textfield/TextInputLayout.java)
  • AccessibilityDelegate.onInitializeAccessibilityNodeInfo (cyclomatic 20) (lib/java/com/google/android/material/textfield/TextInputLayout.java)
  • AppBarLayout.getDownNestedPreScrollRange (cognitive 16) (lib/java/com/google/android/material/appbar/AppBarLayout.java)
  • AppBarLayout.setLiftedState (cognitive 26) (lib/java/com/google/android/material/appbar/AppBarLayout.java)
  • Arrangement.findLowestCostArrangement (cognitive 16) (lib/java/com/google/android/material/carousel/Arrangement.java)
  • BadgeDrawable.calculateCenterAndBounds (cognitive 28) (lib/java/com/google/android/material/badge/BadgeDrawable.java)
  • BadgeDrawable.calculateCenterAndBounds (cyclomatic 21) (lib/java/com/google/android/material/badge/BadgeDrawable.java)
  • BadgeState.<init> (cognitive 38) (lib/java/com/google/android/material/badge/BadgeState.java)
  • BadgeState.<init> (cyclomatic 35) (lib/java/com/google/android/material/badge/BadgeState.java)
  • BaseBehavior.interpolateOffset (cognitive 24) (lib/java/com/google/android/material/appbar/AppBarLayout.java)
  • BaseBehavior.onLayoutChild (cognitive 27) (lib/java/com/google/android/material/appbar/AppBarLayout.java)
  • BaseBehavior.setHeaderTopBottomOffset (cognitive 28) (lib/java/com/google/android/material/appbar/AppBarLayout.java)
  • BaseBehavior.snapToChildIfNeeded (cognitive 20) (lib/java/com/google/android/material/appbar/AppBarLayout.java)
  • …and 522 more

Changes since last survey

  • 13 commits — 9 feature/other, 4 fixes

By area

  • lib/java — 6 commits
  • catalog/java — 3 commits
  • gradle/wrapper — 2 commits
  • lib/javatests — 2 commits

Notable commits

  • fix: Fix broken links to material-color-utilities
  • fix: [A11y][TextInputLayout] Fixed: Talkback not reading "hint text" if an input has text entered
  • fix: [MaterialCheckBox] Fix insecure deserialization in SavedState
  • fix: [Slider] Fix accessibility content description handling in Sliders
  • change: Bump Gradle to 9.6.1.
  • change: Bump Gradle to 9.7.1
  • change: [Carousel] Save and restore CarouselLayoutManager scroll state
  • change: [Catalog] Add support for extra text on demo landing pages
  • change: [Catalog] Update TocFragment Boolean.compare
  • change: [Focus Rings] Update FocusRingDrawable default empty wrapped drawable to be created per instance instead of shared statically
  • change: [NavigationRail] Save and restore expanded state across configuration changes
  • change: [SideSheet] Maintain coplanar sibling margin across layout passes
  • change: [Testing] Remove TextLayoutMode from ChipTest

Architecture

  • Containers 0 added · 0 removed · contexts 4 added · 0 removed · edges 2 added · 0 removed

Added bounded contexts (4)

  • animation
  • catalog
  • lib
  • tests

Added dependency edges (2)

  • catalog → lib
  • tests → lib

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

material-components/material-components-android was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 60ff09436d5d477a4b9d02940f31eb01e1250620 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-f917f263222d.