|
|
|
@@ -8,14 +8,14 @@
|
|
|
|
|
|
|
|
|
|
## PR Stack
|
|
|
|
|
|
|
|
|
|
| PR | Branch | Review status |
|
|
|
|
|
|---|---|---|
|
|
|
|
|
| [#4544](https://github.com/duckduckgo/apple-browsers/pull/4544) | `demo-tracker-blocking-onboarding` | Open — review required (Alessandro + Rachel left comments) |
|
|
|
|
|
| [#4584](https://github.com/duckduckgo/apple-browsers/pull/4584) | `demo-tracker-blocking-onboarding-eoj-dax-animation` | **Merged** ✅ 2026-05-18 |
|
|
|
|
|
| [#4591](https://github.com/duckduckgo/apple-browsers/pull/4591) | `demo-tracker-blocking-onboarding-ui-polish` | **Merged** ✅ 2026-05-15 |
|
|
|
|
|
| [#4664](https://github.com/duckduckgo/apple-browsers/pull/4664) | `demo-tracker-blocking-onboarding-chat-path-dialog-polish` | **Merged** ✅ 2026-05-15 |
|
|
|
|
|
| [#4855](https://github.com/duckduckgo/apple-browsers/pull/4855) | `demo-tracker-blocking-onboarding-sr-feedback` | Open — no review yet |
|
|
|
|
|
| [#4668](https://github.com/duckduckgo/apple-browsers/pull/4668) | `demo-tracker-blocking-onboarding-uti-flow` | **Open — fixes applied (2026-05-21)** — bottom-bar blocker fixed; B1/B2/B3 cleanups done; merged main |
|
|
|
|
|
| PR | Branch | Review status |
|
|
|
|
|
| --------------------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
|
|
|
| [#4544](https://github.com/duckduckgo/apple-browsers/pull/4544) | `demo-tracker-blocking-onboarding` | Open — review required (Alessandro + Rachel left comments) |
|
|
|
|
|
| [#4584](https://github.com/duckduckgo/apple-browsers/pull/4584) | `demo-tracker-blocking-onboarding-eoj-dax-animation` | **Merged** ✅ 2026-05-18 |
|
|
|
|
|
| [#4591](https://github.com/duckduckgo/apple-browsers/pull/4591) | `demo-tracker-blocking-onboarding-ui-polish` | **Merged** ✅ 2026-05-15 |
|
|
|
|
|
| [#4664](https://github.com/duckduckgo/apple-browsers/pull/4664) | `demo-tracker-blocking-onboarding-chat-path-dialog-polish` | **Merged** ✅ 2026-05-15 |
|
|
|
|
|
| [#4855](https://github.com/duckduckgo/apple-browsers/pull/4855) | `demo-tracker-blocking-onboarding-sr-feedback` | **Merged** ✅ 2026-05-15 |
|
|
|
|
|
| [#4668](https://github.com/duckduckgo/apple-browsers/pull/4668) | `demo-tracker-blocking-onboarding-uti-flow` | **Open — fixes applied (2026-05-21)** — bottom-bar blocker fixed; B1/B2/B3 cleanups done; merged main |
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
@@ -23,6 +23,39 @@
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### C1 — Intro onboarding background lingers during UTI duck.ai transition *(2026-05-21)*
|
|
|
|
|
**Status:** ✅ Fixed *(2026-05-21)*
|
|
|
|
|
**Repro:** New install, UTI + experiment flags enabled → complete intro onboarding choosing duck.ai mode → the gradient/decorative background from the intro onboarding is still visible during the hand-off to the UTI duck.ai first-request state.
|
|
|
|
|
**Root cause:** In UTI mode `onboardingCompletedWithExperimentTransition` called `setBarsVisibility(0, animated: true)` which tears down the UTI session mid-animation. The snapshot fade was not enough because the keyboard / UTI input bar dismissal raced with the transition.
|
|
|
|
|
**Fix:** In `MainViewController+DuckAIExperiment.swift`, detect UTI active mode and skip the `setBarsVisibility` call entirely; instead let the UTI session handle its own dismissal cleanly. The intro background snapshot fades out independently without fighting the bar-visibility animation.
|
|
|
|
|
**Files:** `MainViewController+DuckAIExperiment.swift`
|
|
|
|
|
|
|
|
|
|
### C2 — Chats + Tabs buttons not disabled during AI onboarding *(2026-05-21)*
|
|
|
|
|
**Status:** ✅ Fixed *(2026-05-21)*
|
|
|
|
|
**Repro:** UTI + experiment flags enabled → advance to duck.ai first-request step → the Chat-list button and Tab-switcher button in the AI chat header remain tappable and visually undimmed.
|
|
|
|
|
**Root cause:** `setOnboardingLocked(_ locked:)` in `AIChatTabChatHeaderView.swift` only disabled `appMenuButton`, `newChatButton`, and `titleContainer`. `chatListButton` and `tabSwitcherButton` were not included. `TabSwitcherStaticButton` also does not auto-dim on `isEnabled = false` (unlike standard `UIButton`), so explicit alpha was needed.
|
|
|
|
|
**Fix:** Added `chatListButton.isEnabled`, `chatListButton.alpha`, `tabSwitcherButton.isEnabled`, and `tabSwitcherButton.alpha = locked ? 0.5 : 1` to `setOnboardingLocked`.
|
|
|
|
|
**Files:** `AIChatTabChatHeaderView.swift`
|
|
|
|
|
|
|
|
|
|
### C3 — Fire button invisible + no blinking circle during duck.ai fire dialog *(2026-05-21)*
|
|
|
|
|
**Status:** ✅ Fixed *(2026-05-21)*
|
|
|
|
|
**Repro:** UTI + experiment flags enabled → complete duck.ai first request → fire dialog appears but fire button is disabled/faded and has no `ViewHighlighter` pulse circle (or pulse appears in wrong position, below screen).
|
|
|
|
|
**Root cause (multi-part):**
|
|
|
|
|
1. In UTI AI-tab mode the fire button is `UnifiedToggleInputView.aiTabCollapsedFireButton` (the flanking pill button to the left of the input bar), NOT the traditional toolbar fire button. The toolbar is hidden by `reconcileToolbarVisibilityForCurrentTab()`.
|
|
|
|
|
2. `showFireButtonPulse()` only checked `toolbar.isHidden` for the iPad path; on iPhone with UTI it returned `nil` (no `tabsBarController`) and exited without highlighting.
|
|
|
|
|
3. `setOnboardingControlsLocked(true)` set `viewController.view.isUserInteractionEnabled = false`, which disabled the entire view tree including the fire button — child `isUserInteractionEnabled = true` cannot override a parent's `false` in UIKit.
|
|
|
|
|
4. `viewController.view.alpha = 0.5` multiplied down the tree, dimming the fire button even after attempting `fireButton.alpha = 1`.
|
|
|
|
|
5. The text entry (`SwitchBarTextEntryView`) directly becomes first responder on tap, bypassing all `isOnboardingLocked` guards.
|
|
|
|
|
|
|
|
|
|
**Fix:**
|
|
|
|
|
- Exposed `aiTabCollapsedFireButton` through the chain: `UnifiedToggleInputView.aiTabFireButton` → `UnifiedToggleInputViewController.aiTabFireButton` → `UnifiedToggleInputCoordinator.aiTabFireButton`.
|
|
|
|
|
- `showFireButtonPulse()` in `MainViewController`: if UTI coordinator is active and `aiTabFireButton.isHidden == false`, use that button for `ViewHighlighter.showIn`.
|
|
|
|
|
- Replaced view-level `isUserInteractionEnabled = false` + `alpha` in `setOnboardingControlsLocked` with a new `setOnboardingDimmed(_ dimmed:)` method on `UnifiedToggleInputView` that: (a) sets `alpha = 0.5` on every direct subview *except* `aiTabCollapsedFireButton` (siblings, so no multiplicative alpha issue), and (b) sets `textEntryView.isUserInteractionEnabled = false` to block direct first-responder activation.
|
|
|
|
|
- Added `guard !isOnboardingLocked else { return }` to `unifiedToggleInputVCDidTapVoice` (previously missing) so the voice button is also blocked.
|
|
|
|
|
- Rolled back the earlier wrong fix (`viewCoordinator.toolbar.isHidden = false` in `applyExperimentDuckAIFireChromeState`).
|
|
|
|
|
|
|
|
|
|
**Files:** `UnifiedToggleInputView.swift`, `UnifiedToggleInputViewController.swift`, `UnifiedToggleInputCoordinator.swift`, `MainViewController.swift`, `MainViewController+DuckAIExperiment.swift`
|
|
|
|
|
|
|
|
|
|
### ✅ SR — GJ2/ Remove X button from chat-path dialogs
|
|
|
|
|
|
|
|
|
|
**Source:** [Gary Apr 29](https://app.asana.com/1/137249556945/task/1214147157456478/comment/1214409112744728)
|
|
|
|
|