Skip to content

Add edge-to-edge to WebView, onboarding and misc activity groups#9081

Open
aibrahim- wants to merge 7 commits into
developfrom
feature/aibrahim/edge-to-edge-activities
Open

Add edge-to-edge to WebView, onboarding and misc activity groups#9081
aibrahim- wants to merge 7 commits into
developfrom
feature/aibrahim/edge-to-edge-activities

Conversation

@aibrahim-

@aibrahim- aibrahim- commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Task/Issue URL: https://app.asana.com/1/137249556945/project/1212608036467427/task/1214047527401583?focus=true
Tech Design URL (if applicable): https://app.asana.com/1/137249556945/project/1212608036467427/task/1213993229311556?focus=true

Description

Roll out Android 15 edge-to-edge handling to web/onboarding/misc buckets, each gated behind a new sub-toggle of the existing edgeToEdge remote feature (default INTERNAL):

  • webview: WebView, SettingsWebView, Subscriptions/Pir dashboards, EmailProtection in-context signup, GPM/Takeout import flows, PrivacyDashboard, Survey
  • onboarding: SystemSearch, WidgetThemeConfiguration, AddWidgetInstructions
  • misc: About, ChangeIcon, Bookmarks, BookmarkFolders, Downloads, GetDesktopBrowser, Windows, MacOs, Feedback, SubscriptionFeedback, RestoreSubscription, ChangePlan, Pir, EmailProtectionUnsupported

Each activity enables a transparent edge-to-edge window when its bucket is enabled and applies status-bar / navigation-bar / display-cutout / IME insets via EdgeToEdgeHandler.

Steps to test this PR

  • Navigate to any of the Activities mentioned above.
  • Make sure the edge-to-edge is enabled in gesture/3-button nav, and check the colors in light/dark themes.
  • Gesture nav should be transparent.
  • Cutout should always be dark in landscape regardless of light/dark themes.
  • Try on different devices/API levels.
  • This PR concluded all user facing activities, so should feel free to test any activity.

UI changes

Screenshots selection: https://app.asana.com/1/137249556945/project/1212608036467427/task/1216217807064104?focus=true


Note

Medium Risk
Wide UI-only rollout behind remote toggles, but touches many entry points (system search, browser scrims, nested scroll/inset edge cases) where regressions would be visible rather than silent.

Overview
Extends the gated edge-to-edge rollout with four new remote sub-toggles (webview, onboarding, misc, bottomSheets) and wires many activities, VPN/autofill flows, and bottom sheets to respect them.

Infrastructure: EdgeToEdgeHandler gains scrollable nav-bar insets (applyScrollableNavigationBarInsets), combined horizontal + nav margin insets, full applySystemBarInsets, optional status-bar scrims (installScrim = false on browser/custom tab), and View.applyBottomSystemBarInsetPadding() for Material bottom-sheet windows. Shared .EdgeToEdge bottom-sheet themes disable Material bottom auto-padding to avoid double padding. Splash uses Theme.DuckDuckGo.SplashScreen.EdgeToEdge (landscape API 27+ sets cutout mode never for letterboxing).

Activities: When a bucket is on, screens call enableTransparentEdgeToEdge() and apply tailored insets—e.g. SystemSearch (top vs bottom omnibar), WebView hosts wrapped in containers, fixed bottom CTAs padded above the nav bar (drawBehindGestureNav = false), lists/recyclers using scrollable nav insets. VPN activity feed only insets when not nested in a parent scroller.

Bottom sheets: Fragments pick plain vs .EdgeToEdge themes via EdgeToEdgeBucket.BOTTOM_SHEETS and pad dialog roots with applyBottomSystemBarInsetPadding().

Reviewed by Cursor Bugbot for commit b09e894. Bugbot is set up for automated code reviews on this repo. Configure here.

@aibrahim- aibrahim- force-pushed the feature/aibrahim/edge-to-edge-activities branch from aa85f2d to e6b5cea Compare July 2, 2026 08:00
@aibrahim- aibrahim- force-pushed the feature/aibrahim/edge-to-edge-activities branch from e6b5cea to 4e7a2c3 Compare July 2, 2026 08:14
@aibrahim- aibrahim- force-pushed the feature/aibrahim/edge-to-edge-activities branch 2 times, most recently from 4f7618d to 90b6f8b Compare July 2, 2026 08:46
@mikescamell mikescamell self-assigned this Jul 2, 2026
@mikescamell

mikescamell commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

@aibrahim- I'm seeing differences between the status bar for the settings screen in dark mode. Light mode seems fine. Edit: Also seems to apply to most sub-settings screens.

Prod Branch
image image

@mikescamell

mikescamell commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

@aibrahim- We're also a little tight with padding at the bottom of the PrivacyDashboardHybridActivity in gesture mode compared to prod. Same applies when this is in landscape.

Prod Branch
image image

@mikescamell

Copy link
Copy Markdown
Contributor

@aibrahim- Did we do anything for bottom sheets already? For instance I noticed the Import passwords from Google bottomsheet has a scrim for the gesture navigation bar, where I would have expected it to be transparent like the Passwords & Autofill screen

image

@mikescamell

Copy link
Copy Markdown
Contributor

@aibrahim- In phone landscape, on the Passwords & Autofill screen, there's not enough content padding between the last item in the list and the gesture bar

Prod Branch
image image

@aibrahim-

aibrahim- commented Jul 3, 2026

Copy link
Copy Markdown
Contributor Author

re modals/bottom-sheets, they were originally planned for next week, but I can do it now to avoid an extra ship-review: https://app.asana.com/1/137249556945/project/1212608036467427/task/1214047527401585?focus=true

@mikescamell

mikescamell commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

@aibrahim- Seems we have a couple of issues with navigation on Bookmarks screen, this was a Pixel 4a, API 33

  1. In gesture mode it bleeds into the bottom bookmark item if it fills the screen
image
  1. In 3 button nav mode there's no scrim, which makes it hard to see the button, and doesn't match our screens elsewhere
image

@mikescamell

mikescamell commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

@aibrahim- Seems we have a couple of issues with navigation on Bookmarks screen, this was a Pixel 4a, API 33

  1. In gesture mode it bleeds into the bottom bookmark item if it fills the screen
image 2. In 3 button nav mode there's no scrim, which makes it hard to see the button, and doesn't match our screens elsewhere image

The solution for this would probably solve the same problem in the BookmarkFoldersActivity where the gesture bar bleeds into the last item Edit: And it also has the 3 button nav issue as well where it has no scrim

image

@mikescamell

Copy link
Copy Markdown
Contributor

@aibrahim- Downloads screen also has the last item being overlayed by the gesture bar

image

aibrahim- and others added 4 commits July 6, 2026 13:03
Roll out Android 15 edge-to-edge handling to three screen groups, each
gated behind a new sub-toggle of the existing `edgeToEdge` remote feature
(default INTERNAL) so the rollout is remotely controllable per group:

- webview: WebView, SettingsWebView, Subscriptions/Pir dashboards,
  EmailProtection in-context signup, GPM/Takeout import flows,
  PrivacyDashboard, Survey
- onboarding: SystemSearch, WidgetThemeConfiguration, AddWidgetInstructions
- misc: About, ChangeIcon, Bookmarks, BookmarkFolders, Downloads,
  GetDesktopBrowser, Windows, MacOs, Feedback, SubscriptionFeedback,
  RestoreSubscription, ChangePlan, Pir, EmailProtectionUnsupported

Each activity enables a transparent edge-to-edge window when its bucket is
enabled and applies status-bar / navigation-bar / display-cutout / IME
insets via EdgeToEdgeHandler. Adds a Theme.DuckDuckGo.SplashScreen.EdgeToEdge
theme (with a values-land override that reserves the display cutout as a
letterbox in landscape) for splash-themed screens, plus the common-utils
MISC bucket, misc() toggle, provider wiring and unit tests.
Adds EdgeToEdgeBucket.BOTTOM_SHEETS so the edge-to-edge changes applied to
bottom sheets can be remotely toggled independently, instead of the
unconditional enableEdgeToEdge flag that was previously baked into the
app's default bottom sheet theme. Each affected theme gets a plain/EdgeToEdge
sibling pair, and each dialog picks between them via EdgeToEdgeProvider.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@aibrahim- aibrahim- force-pushed the feature/aibrahim/edge-to-edge-activities branch from 90b6f8b to a0dcee7 Compare July 6, 2026 15:29
Comment thread app/src/main/java/com/duckduckgo/app/systemsearch/SystemSearchActivity.kt Outdated
Comment thread app/src/main/java/com/duckduckgo/app/systemsearch/SystemSearchActivity.kt Outdated
Comment thread app/src/main/java/com/duckduckgo/app/systemsearch/SystemSearchActivity.kt Outdated
@aibrahim- aibrahim- force-pushed the feature/aibrahim/edge-to-edge-activities branch from d13f764 to 78553cf Compare July 6, 2026 17:55

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 78553cf. Configure here.

Comment thread android-design-system/design-system/src/main/res/values/widgets.xml
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