Skip to content

[Brand design updates - Core App Components] Update radius for sheets, dialogs, cards, menus and chips - #9881

Open
mikescamell wants to merge 23 commits into
developfrom
feature/mikescamell/rebrand-radius
Open

mikescamell wants to merge 23 commits into
developfrom
feature/mikescamell/rebrand-radius

Conversation

@mikescamell

@mikescamell mikescamell commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Task/Issue URL: https://app.asana.com/1/137249556945/project/488551667048375/task/1216702001698846
Tech Design URL (if applicable):
API Proposals URL(s) (if applicable): None

Description

  • Adds an internal-only radius() sub-toggle to appBrandDesignUpdate. When it's ON, activity themes apply the new brand design radii. When it's OFF, every surface keeps its current radius.
  • With radius() ON, sheets, dialogs, cards, InfoPanel and the What's New cards use 28dp corners. Quick Setup sheets go from 36dp to 28dp.
  • With radius() ON, popup menus use 16dp corners and clip their first and last row ripples. Bookmark and folder overflow menus move to the shared popup menu, and keep their AppCompat menus when OFF.
  • With radius() ON, ADS search bars use 48dp corners, and chips and the beta pill are fully rounded.
  • With radius() ON, native View snackbars use 16dp corners. With it OFF, they keep their existing 4dp corners.
  • Fixes clipped snackbar content and shadows in the Android Design System Preview. Compose radii, colour and typography are unchanged.

Steps to test this PR

Radius ON

  • Install internalDebug
  • Open Settings > Internal Features > Feature Flag Inventory
  • Enable appBrandDesignUpdate.radius
  • Force close the app
  • Relaunch the app

Snackbar preview comparison, radius ON

  • Open Settings > Internal Features > Android Design System Preview
  • Turn on the Brand design update switch
  • Open the Messaging tab
  • Scroll to Snackbar
  • Verify the View-system snackbar has the new 16dp corners
  • Compare it with the unchanged Compose snackbars below, which have 8dp corners
  • Verify the View-system snackbar text is fully visible
  • Verify the View-system snackbar action is fully visible
  • Verify the View and Compose snackbar shadows fade at both side edges without clipping

Fire sheet, radius ON

  • Open https://duckduckgo.com in a new tab
  • Tap the Fire button in the address bar
  • Verify the sheet has 28dp top corners
  • Dismiss the sheet

Duck.ai contextual sheet, radius ON

  • Open https://example.com in a new tab
  • Tap the Duck.ai button in the address bar
  • Tap Ask About Page
  • Verify the sheet has 28dp top corners
  • Dismiss the sheet

Popup menus, radius ON

  • Open the tab switcher
  • Tap the overflow menu
  • Verify the menu has 16dp corners
  • Press and hold the first row
  • Verify the pressed state stays inside the rounded corners
  • Press and hold the last row
  • Verify the pressed state stays inside the rounded corners
  • Open Bookmarks
  • Tap the overflow button on a bookmark row
  • Verify the menu has 16dp corners
  • Verify the first row reads Edit
  • Tap Add to Favorites
  • Tap the overflow button on the same bookmark row
  • Verify the second row reads Remove from Favorites
  • Tap Edit
  • Verify the edit bookmark screen opens
  • Go back
  • Tap the overflow button on a folder row
  • Verify the menu has 16dp corners
  • Tap Edit
  • Verify the edit folder screen opens

Search bar, radius ON

  • Open Downloads from the browser menu
  • Tap the search icon
  • Verify the search field has 48dp corners

Snackbars, light theme, radius ON

  • Open Settings > Appearance > Theme
  • Select Light
  • Open Download a sample PDF (dummy.pdf) in a new tab
  • Tap Save to Downloads
  • Verify the Download complete for dummy.pdf snackbar appears
  • Verify the download snackbar has 16dp corners
  • Verify the download snackbar text is fully visible
  • Open Downloads from the browser menu
  • Tap the overflow button on the dummy.pdf row
  • Tap Delete
  • Verify the Deleted dummy.pdf snackbar appears
  • Verify the deletion snackbar has 16dp corners
  • Verify the Undo action is fully visible
  • Wait for the deletion snackbar to disappear
  • Verify dummy.pdf is no longer listed in Downloads

Snackbars, dark theme, radius ON

  • Open Settings > Appearance > Theme
  • Select Dark
  • Open Download a sample PDF (dummy.pdf) in a new tab
  • Tap Save to Downloads
  • Verify the Download complete for dummy.pdf snackbar appears
  • Verify the download snackbar has 16dp corners
  • Verify the download snackbar text is fully visible
  • Open Downloads from the browser menu
  • Tap the overflow button on the dummy.pdf row
  • Tap Delete
  • Verify the Deleted dummy.pdf snackbar appears
  • Verify the deletion snackbar has 16dp corners
  • Verify the Undo action is fully visible
  • Wait for the deletion snackbar to disappear
  • Verify dummy.pdf is no longer listed in Downloads

Native input popups, radius ON

  • Open Settings > AI Features
  • Select Search & Duck.ai
  • Open a new tab
  • Tap the address bar
  • Select Duck.ai on the Search/Duck.ai toggle
  • Tap the attach icon
  • Verify the menu has 16dp corners
  • Dismiss the menu
  • Tap the options icon
  • Verify the menu has 16dp corners
  • Dismiss the menu
  • Tap the model picker
  • Verify the menu has 16dp corners
  • Select a model that offers Reasoning
  • Tap the reasoning mode picker
  • Verify the menu has 16dp corners
  • Dismiss the menu

Native input popups, light Fire, radius ON

  • Open Settings > Appearance > Theme
  • Select Light
  • Open the tab switcher
  • Switch the toolbar toggle to Fire
  • Tap New Fire Tab
  • Tap the address bar
  • Select Duck.ai on the Search/Duck.ai toggle
  • Tap the attach icon
  • Verify the menu has 16dp corners
  • Dismiss the menu
  • Tap the options icon
  • Verify the menu has 16dp corners
  • Dismiss the menu
  • Tap the model picker
  • Verify the menu has 16dp corners
  • Select a model that offers Reasoning
  • Tap the reasoning mode picker
  • Verify the menu has 16dp corners
  • Dismiss the menu
  • Open the tab switcher
  • Switch the toolbar toggle to Regular

Android Design System Preview, radius ON

  • Open Settings > Internal Features > Android Design System Preview
  • Turn on the Brand design update switch
  • Open the Dialogs tab
  • Verify the text, radio-list and stacked dialogs have 28dp corners
  • Verify the Dax dialogs have 28dp corners
  • Open Messaging > Remote Messaging Framework
  • Verify the View-system message cards have 28dp corners
  • Open Messaging > Info Panel
  • Verify the first two View-system panels have 28dp corners
  • Open List Items > Settings List Item
  • Verify the View-system beta pill is fully rounded

Quick Setup sheets, radius ON

  • Clear the app data
  • Relaunch the app
  • Continue through onboarding to the Quick Setup screen
  • Tap Address bar position
  • Verify the sheet has 28dp top corners
  • Dismiss the sheet
  • Tap Address bar search options
  • Verify the sheet has 28dp top corners

Radius OFF

  • Open Settings > Internal Features > Feature Flag Inventory
  • Disable appBrandDesignUpdate.radius
  • Force close the app
  • Relaunch the app

Fire sheet, radius OFF

  • Open https://duckduckgo.com in a new tab
  • Tap the Fire button in the address bar
  • Verify the sheet has 16dp top corners
  • Dismiss the sheet

Duck.ai contextual sheet, radius OFF

  • Open https://example.com in a new tab
  • Tap the Duck.ai button in the address bar
  • Tap Ask About Page
  • Verify the sheet has 12dp top corners
  • Dismiss the sheet

Popup menus, radius OFF

  • Open the tab switcher
  • Tap the overflow menu
  • Verify the menu has 8dp corners
  • Open Bookmarks
  • Tap the overflow button on a bookmark row
  • Verify the AppCompat menu appears with 8dp corners

Search bar, radius OFF

  • Open Downloads from the browser menu
  • Tap the search icon
  • Verify the search field has 8dp corners

Snackbars, light theme, radius OFF

  • Open Settings > Appearance > Theme
  • Select Light
  • Open Download a sample PDF (dummy.pdf) in a new tab
  • Tap Save to Downloads
  • Verify the Download complete for dummy.pdf snackbar appears
  • Verify the download snackbar has 4dp corners
  • Verify the download snackbar text is fully visible
  • Open Downloads from the browser menu
  • Tap the overflow button on the dummy.pdf row
  • Tap Delete
  • Verify the Deleted dummy.pdf snackbar appears
  • Verify the deletion snackbar has 4dp corners
  • Verify the Undo action is fully visible
  • Wait for the deletion snackbar to disappear
  • Verify dummy.pdf is no longer listed in Downloads

Snackbars, dark theme, radius OFF

  • Open Settings > Appearance > Theme
  • Select Dark
  • Open Download a sample PDF (dummy.pdf) in a new tab
  • Tap Save to Downloads
  • Verify the Download complete for dummy.pdf snackbar appears
  • Verify the download snackbar has 4dp corners
  • Verify the download snackbar text is fully visible
  • Open Downloads from the browser menu
  • Tap the overflow button on the dummy.pdf row
  • Tap Delete
  • Verify the Deleted dummy.pdf snackbar appears
  • Verify the deletion snackbar has 4dp corners
  • Verify the Undo action is fully visible
  • Wait for the deletion snackbar to disappear
  • Verify dummy.pdf is no longer listed in Downloads

Native input popups, radius OFF

  • Open Settings > AI Features
  • Select Search & Duck.ai
  • Open a new tab
  • Tap the address bar
  • Select Duck.ai on the Search/Duck.ai toggle
  • Tap the attach icon
  • Verify the menu has 8dp corners
  • Dismiss the menu
  • Tap the options icon
  • Verify the menu has 8dp corners
  • Dismiss the menu
  • Tap the model picker
  • Verify the menu has 8dp corners
  • Select a model that offers Reasoning
  • Tap the reasoning mode picker
  • Verify the menu has 8dp corners
  • Dismiss the menu

Android Design System Preview, radius OFF

  • Open Settings > Internal Features > Android Design System Preview
  • Turn off the Brand design update switch
  • Open Messaging > Snackbar
  • Verify the View-system snackbar has 4dp corners
  • Verify the View-system snackbar text is fully visible
  • Verify the View-system snackbar action is fully visible
  • Verify the View and Compose snackbar shadows fade at both side edges without clipping
  • Open the Dialogs tab
  • Verify the text, radio-list and stacked dialogs have 12dp corners
  • Verify the Dax dialogs have 12dp corners
  • Open Messaging > Remote Messaging Framework
  • Verify the View-system message cards have 16dp corners
  • Open Messaging > Info Panel
  • Verify the first two View-system panels have 8dp corners
  • Open List Items > Settings List Item
  • Verify the View-system beta pill has 2dp corners

Quick Setup sheets, radius OFF

Not testable on device. Quick Setup is only reachable after clearing app data, which resets radius() to ON on internal builds. QuickSetupSheetRadiusTest covers the 36dp OFF corners.

UI changes

Before After
!(Upload before screenshot) (Upload after screenshot)

Copy link
Copy Markdown
Contributor Author

@mikescamell mikescamell changed the title Add brand design radius theme tokens and overlay [Brand design updates - Core App Components] Update radius for sheets, dialogs, cards, menus and chips Sep 28, 2026
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-radius branch from bb87902 to 5c3499a Compare September 28, 2026 15:44
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-radius branch 2 times, most recently from 8644821 to 5f7a10e Compare September 29, 2026 07:47
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-radius branch from 83cb5d2 to 638ab13 Compare September 29, 2026 16:50
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-radius branch from 638ab13 to ae7b329 Compare September 29, 2026 18:07

@0nko 0nko left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested all the listed test cases and they worked as expected 👍.

However, I did find one issue:

In light Fire mode, the native input card uses ThemeOverlay.DuckDuckGo.InputModeCard.DarkFire (parent Theme.DuckDuckGo.Dark.Fire), which resets daxMenuRadius and daxMenuClipToOutline to the base values. On device with radius() ON, this popup is 16dp in Regular mode but 8dp without clipping in light Fire mode. The same applies to OptionsView, ReasoningModePickerView and AttachmentView. We should re-apply the radius overlay here like onboardingThemedContext does or maybe we could make the DarkFire overlay stop inheriting the full theme. WDYT?

Image

The app module declared its own extraLargeShapeCornerRadius, duplicating the one already defined in the design system module. Removing the duplicate makes the design system value the single source of truth; before, the app copy shadowed it during resource merging, so a change to the design system value would not have reached the app module.
Light Fire themes the native input card with the DarkFire overlay, whose parent is the full Dark Fire theme. That reset daxMenuRadius and daxMenuClipToOutline to the base values, so the options, reasoning picker and attachment popups lost the brand design radius. The radius overlay now swaps the card overlay for a DarkFire variant that keeps the menu radius and clipping.
@mikescamell
mikescamell force-pushed the feature/mikescamell/rebrand-radius branch from ae7b329 to 2d46183 Compare September 30, 2026 08:54
@mikescamell
mikescamell marked this pull request as ready for review September 30, 2026 08:55

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

@0nko 0nko left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything looks good now, nice job! 🏅

# Conflicts:
#	duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/ui/nativeinput/views/AttachmentView.kt
#	duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/ui/nativeinput/views/ModelPickerView.kt
#	duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/ui/nativeinput/views/OptionsView.kt
#	duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/ui/nativeinput/views/ReasoningModePickerView.kt

This branch has not been deployed

No deployments
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.

2 participants