NVDAObjects.UIA: do not cancel say all when handling high priority UIA notification (#18218)
Closes #17986
Summary of the issue:
While say all is in progress, NVDA interrupts speech while handling a
high priority UIA notification. This was observed in Microsoft Edge
where say all is active while notifications such as "loading complete"
is announced.
Description of user facing changes:
In Microsoft Edge, NVDA will no longer cancel say all when announcing
notifications such as "loading complete".
Description of developer facing changes:
Changes to NVDAObjects.UIA's notification event handler:
* Speech priority flag is prepared as it will become either None or NOW
(speak immediately) depending on the condition below.
* Set speech priority to NOW if say all is in progress, otherwise cancel
speech.
* UIA notification display string will be reported immediately during
say all (and thus not interrupting say all).
Description of development approach:
First tested as part of Windows App Essentials add-on/global plugin
portion, then ported to NVDA Core and tested manually (below).
Testing strategy:
Manual testing:
1. Run Microsoft Edge.
2. Visit a website known to take a long time to load.
3. NVDA should start say all if "automatic say all on page load" is
enabled, otherwise do a manual say all (NVDA+down arrow (desktop)/NVDA+A
(laptop)).
4. Observe that:
Before: NVDA interrupts speech when notifications such as "loading
page/still loading/loading complete" are announced.
With the PR: NVDA will continue performing say all after announcing UIA
notification display string.
Known issues with pull request:
When a page is refreshed and say all is initiated and notifications are
reported, NVDA may play error tones (due to null pointer being passed
into code injection routine). This does not impact say all.