[Brand design updates - Core App Components] Move brand update pictograms/icon into production resources - #9732
Open
mikescamell wants to merge 21 commits into
Conversation
mikescamell
force-pushed
the
feature/mikescamell/move-brand-update-pictograms-and-icons-to-prod
branch
3 times, most recently
from
September 8, 2026 10:02
04b7d01 to
a531e11
Compare
Promote rebrand overrides from the app internal source set into each owning module main resources. Keep module-local copies where modules intentionally share artwork, preserving explicit ownership and resource isolation. Preserve legacy ic_duck_ai while applying the new artwork only to ic_duckai, with size-tier corrections regenerated as needed. Artwork in this import is regenerated from the current Icons-Main Color/24px sources with vd-tool; Video Player remains intentionally duplicated in the app and design-system owners.
Retain same-module alias cleanup while restoring intentional cross-module copies and module-local resource references. Preserve the theme-tinted AppTP warning in app and vpn-impl, keep distinct legacy and new Duck.ai resources, and replace older VPN artwork in network-protection and subscriptions. Identity remains in both owner modules; app onboarding resolves the design-system copy through CommonR for F-Droid while subscriptions stays local. Both Identity Blocked PIR owner copies use the source-generated mapped artwork; subscriptions canonical bytes are sourced from its deleted alias.
Rename each retained module-local pictogram independently to its Icons repository name and update Kotlin, XML, tests, and lint baselines. Keep intentional cross-module duplication explicit, including the VPN artwork replacement in network-protection and subscriptions. Preserve cookie_color_24_1, the Duck.ai legacy/new split, and the YouTube 96/128 consumer split. Identity Blocked PIR remains intentionally duplicated in design-system and subscriptions; C3 renames only the design-system alias and updates the app CommonR reference. Also cut over the ungated Duck.ai settings icon and subscription VPN onboarding header to their canonical production resources, and retain the Cookie-Blocked artwork under its canonical cookie_blocked_color_24 name. � Conflicts: � app/src/main/res/drawable/image_get_desktop_browser.xml � app/src/main/res/drawable/laptop_ddginstall_96.xml � autofill/autofill-impl/src/main/res/layout/activity_get_desktop_app.xml � desktop-app-promotion/desktop-app-promotion-impl/src/main/res/drawable/image_get_desktop_browser.xml � desktop-app-promotion/desktop-app-promotion-impl/src/main/res/layout/activity_desktop_app_promotion.xml
Pin personal_information_remover_128 (base 320x240, new 128x96) at 320dp x 240dp, and ic_autofill_keychain (base 220x170, new 128x96) at 220dp x 170dp. These pins preserve current rendering pending design review.
Not ALL unused pictograms, just based on what we've added and changed. The rest will get removed in a follow-up project.
Hiding this was missed from the pictograms work
Was missed in previous Pictograms work
Igor's export ships light and dark variants but only the light one was imported, so dark mode rendered the light artwork. Adds fire_window_dark_phone_96 and a dedicated daxDrawableFireWindowPhone attr. daxDrawableTabPlaceholderPreview could not be reused: outside fire mode it resolves to the Dax icon for the tab-switcher placeholder.
The illustration slot was a fixed 64dp box with scaleType="center", which centres at intrinsic size without scaling, so every 96dp pictogram lost its outer 16dp band and the 256x144 assets showed only their middle quarter. Placeholder.drawable() is shared by all message shapes, so desktop_promo_artwork and ic_visual_design_update_artwork_* can reach this slot as well as the promo layout. Capping height only keeps their aspect: 114x64 and 101x64. layout_constrainedWidth guards against a server-supplied asset overflowing the card. The 64dp dimen is unchanged and read by this view alone.
SearchWidgetProviderInfoUpdater already selects between the default provider metadata and legacy_provider_info on the addressBar toggle, but the 2026 previews were internal-flavour only and search_widget_preview_aliases.xml redirected each 2026 name back to the legacy drawable, so both branches of the switch rendered the same pre-rebrand preview on play and fdroid. The four provider-info pairs differ only in previewImage, so promoting the six drawables and dropping the alias file is enough to make the toggle work. The *_legacy_* drawables and *_widget_info_legacy*.xml are the flag-off route and are retained.
The 2026 shield is a 24dp glyph, so the 48dp trailing slot oversized it. Puts it before the header text and moves the hardcoded margins onto keylines.
mikescamell
force-pushed
the
feature/mikescamell/move-brand-update-pictograms-and-icons-to-prod
branch
from
September 8, 2026 10:28
a531e11 to
f14332e
Compare
We still have long paths but they have been reduced at least.
mikescamell
force-pushed
the
feature/mikescamell/move-brand-update-pictograms-and-icons-to-prod
branch
from
September 9, 2026 13:55
75957bd to
2afd8f2
Compare
mikescamell
commented
Sep 9, 2026
| title = context.getString(R.string.syncGetAppsOnOtherPlatformsTitle), | ||
| body = context.getString(R.string.syncGetAppsOnOtherPlatformInstruction), | ||
| illustration = CommonR.drawable.ddg_app_download_128, | ||
| illustration = CommonR.drawable.ddg_app_download_96, |
Contributor
Author
There was a problem hiding this comment.
@catalinradoiu I updated the artwork here to 96 as we discussed 👍
Contributor
Author
|
@LukasPaczos this is ready for review 👍 |
LukasPaczos
reviewed
Sep 10, 2026
|
|
||
| private fun showBadge(): AdBlockingAnimation.Show = | ||
| AdBlockingAnimation.Show( | ||
| // TODO update to new video_player_color_24.xml resource when AppBrandDesignUpdateToggles.addressBar() is removed |
Contributor
There was a problem hiding this comment.
Do we have a task for this? Might be good linking here.
Comment on lines
-1
to
-2
| <!-- | ||
| ~ Copyright (c) 2026 DuckDuckGo |
Contributor
There was a problem hiding this comment.
Seems unintentional. Same missing copyright headers in other files.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Task/Issue URL: https://app.asana.com/1/137249556945/project/488551667048375/task/1216795442294569?focus=true
Tech Design URL (if applicable):
API Proposals URL(s) (if applicable):
Description
Steps to test this PR
Use an internalRelease build (release preferable for subscription testing) build on a physical device. Do not use an emulator for these checks.
Start with a clean installation.
The
appBrandDesignUpdateflags are nowtrueby default; leave them unchanged for new-behaviour checks.Changed behaviour
Settings → Other Settings → Permissions → Site Permissions.Remove Allaction.Settings → Other Settings → Internal Features → Feature Flag Inventory.pictogramschild underappBrandDesignUpdatetofalse.pictogramschild underappBrandDesignUpdatetotruein Feature Flag Inventory.Settings → Other Settings → AI Features.Settings → Protections → App Tracking Protection.Settings → Protections → App Tracking Protection.Close All Tabsand confirmClose.Fire Tabsempty state uses the light Fire window artwork.New Fire Tab.Settings → Other Settings → Appearance → Theme.Close All Tabsand confirmClose.Fire Tabsempty state uses the dark Fire window artwork.New Fire Tab.Widgets and remote-message artwork
Search Onlyprovider entry.Search Onlypreview uses the 2026 artwork.Search and Favoritesprovider entry.Search and Favoritespreview uses the 2026 artwork.Settings → Other Settings → Internal Features → Feature Flag Inventory.addressBarchild underappBrandDesignUpdatetofalse.Search Onlyprovider entry again.Search Onlypreview uses the legacy artwork.Search and Favoritesprovider entry again.Search and Favoritespreview uses the legacy artwork.Settings → Other Settings → Internal Features → Feature Flag Inventory.addressBarchild underappBrandDesignUpdatetotrue.Settings → Other Settings → Internal Features.Android Design System Preview.Messagingtab.Remote Messaging Frameworksection header.Enable Dark Themeis off; tap the switch only if it is on.Medium Messageshows the completecritical_update_96illustration inside its card.Big Single Messageshows the completeannouncement_96illustration inside its card.Big Two Actions Messagecard with the DuckDuckGo illustration shows the completeduckduckgo_96illustration inside its card.Big Two Actions Messagecard whose subtitle mentions the app update shows the completeupdate_96illustration inside its card.DuckDuckGo on desktopcard is present.DuckDuckGo on desktopcard showsdesktop_promo_artworkwithout clipping.A fresh new lookcard is present with the light theme selected.A fresh new lookcard uses the light visual-design artwork.Enable Dark Themeis on; tap the switch only if it is off.Messagingtab again.A fresh new lookcard is present with the dark theme selected.A fresh new lookcard uses the dark visual-design artwork.Smoke test
Switch to playRelease build (just for sanity)
Settings → Other Settings → Appearance.Change app iconis the first setting.Passwords & Autofillis visible, openSettings → Other Settings → Passwords & Autofill.Import Passwords, selectSync Desktop Passwords.Get Desktop Browser.laptop_ddginstall_96artwork.Settings → Scroll to Protections section.Bookmarksat the root level using a clean profile with no bookmarks or folders.No bookmarks added yet) shows the updatedbookmarks_import_128artwork.Settings → Other Settings → Sync & Backup.Get Desktop Browser.ddg_app_download_96download artwork.duckduckgo.com/app.Subscription Settingsfrom the DuckDuckGo Subscription section using an activePLUSsubscription.Upgrade to Prorow is visible withUnlock more powerful AIand the updatedai_chat_advanced_color_24icon.https://invalid.invalid/.ign.comcheck that the trackers animation playsAddendum testing — production app icons
Settings → Other Settings → Appearance → Change app icon, select Pink, and verify that the selected launcher icon changes.Settings → Other Settings → Appearance → Change app iconand verify the previously selected icon/component remains selected and now shows the new pink icon in the picker.Settings → Other Settings → Appearance → Change app icon, apply Red and verify its picker and launcher artwork.Settings → Other Settings → Appearance → Change app icon, apply Pink and verify its picker and launcher artwork.Settings → Other Settings → Appearance → Change app icon, apply Gold and verify its picker and launcher artwork.Settings → Other Settings → Appearance → Change app icon, apply Green and verify its picker and launcher artwork.Settings → Other Settings → Appearance → Change app icon, apply Blue and verify its picker and launcher artwork.Settings → Other Settings → Appearance → Change app icon, apply Purple and verify its picker and launcher artwork.Settings → Other Settings → Appearance → Change app icon, apply Black and verify its picker and launcher artwork.Settings → Other Settings → Appearance → Change app icon, apply Silhouette and verify its picker and launcher artwork.UI changes
See here for screenshots
Note
Low Risk
Mostly drawable renames and layout
@drawableswaps with no logic changes; verify ad-blocking/Duck Player headers and YouTube warning sheets render correctly at the new sizes.Overview
Continues the 2026 brand pictogram rollout in ad-blocking and design-system surfaces by pointing UI at renamed production drawables (e.g.
video_player_color_24,ads_blocked_color_24) and shared header art.Ad-blocking / Duck Player: Settings entry rows use the new common icon names. Ad-blocking and Duck Player settings headers switch from module-specific vectors (
ad_blocking_header_128,clean_tube_128) toyoutube_clean_128. Warning bottom sheets now useyoutube_warning_128(with a new 128dp asset and a rescaledyoutube_warning_96). Legacy module drawables are removed where replaced.Omnibar: The ad-blocking omnibar badge still uses
ic_video_player_blocked_color_24, with a TODO to move tovideo_player_color_24when the address-bar brand flag is removed.Design system: Remote-message gallery, Compose previews, and
DaxPageHeadersamples reference the Icons-repo naming (announcement_96,duckduckgo_96,update_96,subscription_128,laptop_ddginstall_96, etc.). The internal remote-message layout adds preview slots for wide desktop promo and wide top-illustration (visual design update) messages. Lint baseline entries are updated for renamed/moved vector assets.Reviewed by Cursor Bugbot for commit 2ad2835. Bugbot is set up for automated code reviews on this repo. Configure here.