Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

List of speech modes which can be switched to with NVDA+S should be made configurable #15806

Closed
lukaszgo1 opened this issue Nov 20, 2023 · 26 comments · Fixed by #15873
Closed
Labels
p5 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority triaged Has been triaged, issue is waiting for implementation.
Milestone

Comments

@lukaszgo1
Copy link
Contributor

Is your feature request related to a problem? Please describe.

NVDA allows to change the currently used speech mode by pressing NVDA+s. By default this gesture cycles between 'talk', 'beeps' and 'no speech'. For many users having ability to switch to beeps is unnecessary, and they have no need for modes different than speech and no speech. For other, myself included, while the beep mode is certainly useful, it is much more important to be able to quickly switch between speech and no speech, so beep mode just makes the goal slower to achieve. With the potential introduction of yet another speech mode in #15804, I believe time has come to make this configurable in core.

Describe the solution you'd like

I suggest to add a new checkable list into the speech panel, labeled something like switch between the following speech modes, where all supported speech modes are placed. When switching using NVDA+S the unchecked modes should not be taken into account, this ensures that when any new speech mode is introduced it can be switched to by default.

Describe alternatives you've considered

  • There is an add-on by @ABuffEr which, when installed, removes ability to switch to beep mode from NVDA+S. While this solution works, it suffers from all the problems caused by having some small but terribly useful thingy in an add-on, i.e. it has to be updated yearly, it cannot be used in more secure environments where add-ons are disallowed. For the reasons given above I do not consider expanding the add-on to make the list of switchable modes configurable a satisfying solution. Basic stuff such as this really belongs into the core!
  • As proposed in Add an "on-demand" speech mode #15804 we can add separate check boxes for disabling beep and speech on demand mode into the speech panel. While this technically works, having a checkable list with ability to enable / disable each and every mode offers much more flexibility. A sample use case being a partially sighted user who has no need for full speech, nor for beeps, so they just switch between speech on demand, and no speech. Note that such configuration is supported by JAWS, although with different shortcuts, so there is definitely a use case here.

Additional context

From the users complaints when .1 releases break compatibility with all of the add-ons, one of the more common ones is the fact that NVDA is the only screen reader where switching between speech and silence is impossible with a single gesture unless add-on is used. I strongly believe integrating small stuff like this into the core improves user experience tremendously, and makes .1 releases less of a pain point. The request not to have beeps when switching speech modes was common enough that the NoBeepsSpeechMode add-on was mentioned in the basic training material for NVDA, which should speak for itself regarding user needs.

@Adriani90
Copy link
Collaborator

I like in general this idea, However, there is a risk with these checkboxes: imagine a new user disables by accident the speech mode speak and presses nvda+s afterwards, NVDA would change to one of the less verbose or no verbose modes. There is no way of enabling the speak mode again unless you know the menu structure by hard and you know how many times you have to tab around to include speech mode speak again into the nvda+s command.
Another better alternative in my view would be to let both speech mode speak and speech mode off as they are, and include also a speech mode category in the synth settings ring which contains all 4 speech modes. Then, in case you enable speech mode on demand, beeps or off from the synth settings ring, pressing nvda+s switches to speech mode speak again. So speech mode speak has always priority when pressing nvda+s.

@sevapopov2
Copy link

I agree that checkboxes for all speech modes are required including an ability to check and uncheck no speech mode since user might want to toggle between speech and speech on demand. By the way, are there any examples when beeps speech mode might be useful? I was always curious about the cases where it could be used. Thank you!

@Adriani90
Copy link
Collaborator

yes they are very useful especially when you work in virtual enviroments where you have two sessions of NVDA running but are not allowed to use the NVDA remote addon. Or when you are in a meeting and you just want to be notified when something pops up without speech.

@lukaszgo1
Copy link
Contributor Author

I like in general this idea, However, there is a risk with these checkboxes: imagine a new user disables by accident the speech mode speak and presses nvda+s afterwards, NVDA would change to one of the less verbose or no verbose modes. There is no way of enabling the speak mode again unless you know the menu structure by hard and you know how many times you have to tab around to include speech mode speak again into the nvda+s command.

The user can just restart NVDA in that case, as when NVDA starts it always defaults to the 'speech' mode.

Another better alternative in my view would be to let both speech mode speak and speech mode off as they are, and include also a speech mode category in the synth settings ring which contains all 4 speech modes. Then, in case you enable speech mode on demand, beeps or off from the synth settings ring, pressing nvda+s switches to speech mode speak again. So speech mode speak has always priority when pressing nvda+s.

What if I do not need the full speech mode as described in the original comment? In its current form synth settings ring is really slow to use, since there are way too many parameters in it to be practical, and therefore I would be very reluctant when considering adding into it.

Another, much simpler alternative would be to enforce that either speech mode full, or speech on demand has to be enabled when configuring enabled modes.

By the way, are there any examples when beeps speech mode might be useful? I was always curious about the cases where it could be used.

When monitoring long console (that is not having a standard beeping progress bar) processes, the beep mode is quite useful to know if something is still happening, or if there is no new text in the console.

@ABuffEr
Copy link
Contributor

ABuffEr commented Nov 20, 2023

I like the list of checkboxes idea. Maybe it could include all modes (on, beeps, on-demand, off), all initially checked, and with "on" not uncheckable; for me, it'd be a compact and clear solution. Sure, with just "on" checked the switching feature loses sense, but I'd not introduce a condition about that.

@Adriani90
Copy link
Collaborator

The user can just restart NVDA in that case, as when NVDA starts it always defaults to the 'speech'.

This however results in loss of current focus position in many cases.

What if I do not need the full speech mode as described in the original comment? In its current form synth settings ring is really slow to use, since there are way too many parameters in it to be practical, and therefore I would be very reluctant when considering adding into it.

I agree to a certain extent, however I think your point can be easily solved. a checkable list which let me include or exclude categories in or from the settings ring would be much more useful than a checkable list of speech modes to be included into a command.

Another, much simpler alternative would be to enforce that either speech mode full, or speech on demand has to be enabled when configuring enabled modes.

Could you explain this in more detail? How would that look like in practice? Let's say I enable speech on demand which in turn allows me to enable other speech modes but I don't enable speech mode speak, then I am still lost as a novice user unless I press everytime a command to report the currently focused element until I find the propper checkbox to enable speech mode speak again.

@CyrilleB79
Copy link
Collaborator

I am still not 100% convinced that this feature needs to be in core and add more options in the default GUI.

Anyway, if this choice is made, I think that the checkable list is a good solution. As for NVDA keys, a validation mechanism should be implemented. In the speech mode case, the mechanism should check that at least two boxes are checked since there is no point in checking only one; also, the full speech box should always be selected because I do not imagine any use case where a user would switch between speech modes without having one being the full (normal) speech mode.

I have also thought to an alternative simpler solution:
If we consider that users always want at least a full speech mode and a mode with no or almost no speech, we can imagine two checkboxes:

  • one to indicate if the user wants a full no speech mode or an "on demand" no speech mode.
  • the other to include the beep speech mode or not in the loop
    This makes the assumption that if the user wants no speech, they either want "on demand" or no speech at all but never both in different situations.

@Adriani90
Copy link
Collaborator

if this choice is made, I think that the checkable list is a good solution. As for NVDA keys, a validation mechanism should be implemented. In the speech mode case, the mechanism should check that at least two boxes are checked since there is no point in checking only one;

Is this at all possible in WX Python 4.1? I didn't see any interfaces with such validation made with this wrapper. Anyway, this is I guess even more complex to implement than only two check boxes which alow to include or exclude on demand mode and beeps mode.
After thinking more about this, i think these two checkboxes make most sense to have for the beginning.

I do not imagine any use case where a user would switch between speech modes without having one being the full (normal) speech mode.

I agree. So in this case we don't need a checkbox for this at all.

one to indicate if the user wants a full no speech mode or an "on demand" no speech mode.

This doesn't sound very intuitive to me. But I also don't have a better idea in mind.

This makes the assumption that if the user wants no speech, they either want "on demand" or no speech at all but never both in different situations.

I think there are lots of users who would prefer to have both on demand and off speech mode included.

@lukaszgo1
Copy link
Contributor Author

I am still not 100% convinced that this feature needs to be in core and add more options in the default GUI.

Are there any particular reasons against this feature, or is it just being careful with what is being added in to the GUI? In general terms do you agree that if something is as commonly used as NoBeepsSpeechMode it should be included into the core?

Anyway, if this choice is made, I think that the checkable list is a good solution. As for NVDA keys, a validation mechanism should be implemented. In the speech mode case, the mechanism should check that at least two boxes are checked since there is no point in checking only one; also, the full speech box should always be selected because I do not imagine any use case where a user would switch between speech modes without having one being the full (normal) speech mode.

Wouldn't it be sufficient to verify that at least one of full speech and speech on demand is included? I still believe that for magnification users (which was the primary motivation for #481 and, closed as a duplicate, #5948) speech on demand can be the primary mode of working, and therefore they may want to switch between it and either no speech or beeps, yet full speech is unnecessary for them.

the other to include the beep speech mode or not in the loop
This makes the assumption that if the user wants no speech, they either want "on demand" or no speech at all but never both in different situations.

I do not think we can safely make that assumption.
Also with regard to the list of check boxes being a risk for less experienced users, they can as easily break their NVDA by setting synthesizer to 'No speech", exit NVDA which saves the config, and get completely lost. While I believe we should protect users where reasonable, introducing validation in the GUI should be sufficient to address this goal.

@CyrilleB79
Copy link
Collaborator

I am still not 100% convinced that this feature needs to be in core and add more options in the default GUI.

Are there any particular reasons against this feature, or is it just being careful with what is being added in to the GUI?

I am actually a bit worried to add more and more controls in the GUI. And especially to add 2 checkboxes or one checkable list only to configure a 3-value (or soon 4-value) toggle command. This seem to add complexity to a single toggle command. On the opposite, there is not (yet) the possibility to customize natively the synth ring setting selector (available parameters and available values for each parameter), where this would probably be more useful.
If we begin to customize a 3/4-value cycling command, will we have to customize other ones? For example, I only use two punctuation levels, why bother with 4? If yes, I fear that the GUI becomes more complex.

In general terms do you agree that if something is as commonly used as NoBeepsSpeechMode it should be included into the core?

I do not know if the add-on is commonly used. But I imagine at least that the majority of people never use the "beep mode" and only switch between speech and no speech.

Anyway, if this choice is made, I think that the checkable list is a good solution. As for NVDA keys, a validation mechanism should be implemented. In the speech mode case, the mechanism should check that at least two boxes are checked since there is no point in checking only one; also, the full speech box should always be selected because I do not imagine any use case where a user would switch between speech modes without having one being the full (normal) speech mode.

Wouldn't it be sufficient to verify that at least one of full speech and speech on demand is included? I still believe that for magnification users (which was the primary motivation for #481 and, closed as a duplicate, #5948) speech on demand can be the primary mode of working, and therefore they may want to switch between it and either no speech or beeps, yet full speech is unnecessary for them.

On the contrary to what I wrote before, it's true that some people may not need the full speech mode. But will these people using magnification ever use no speech mode?

the other to include the beep speech mode or not in the loop
This makes the assumption that if the user wants no speech, they either want "on demand" or no speech at all but never both in different situations.

I do not think we can safely make that assumption. Also with regard to the list of check boxes being a risk for less experienced users, they can as easily break their NVDA by setting synthesizer to 'No speech", exit NVDA which saves the config, and get completely lost. While I believe we should protect users where reasonable, introducing validation in the GUI should be sufficient to address this goal.

I have no issue with using a checkable list control; it was just an alternative proposal.

Note that even if my comments seem quite reluctant for this issue, I am not actually opposed to its resolution in NVDA core. I acknowledge that there is an expectation to improve the NVDA+S UX.
However, my feeling is that it's not easy to find a good solution (both in the GUI and in the User Guide description), so that the majority of people understand the GUI and actually use it for their needs. We should not end up with one or two more controls in the GUI but people still bothered by the beep mode that they do not use.
Hence all my questions.

@lukaszgo1
Copy link
Contributor Author

I am actually a bit worried to add more and more controls in the GUI. And especially to add 2 checkboxes or one checkable list only to configure a 3-value (or soon 4-value) toggle command.

In general screen readers other than NVDA are pretty configurable, and this lack of configurability is often brought up as NVDA's disadvantage. While adding controls to customize a single keyboard command may seem redundant, I'd say a starting point here should be:

  1. Is the current UX acceptable and
  2. Can it be made better without introducing additional GUI options?

Answer for 1 seems to be no, and no one proposed a change here which would improve the situation without GUI changes.

This seem to add complexity to a single toggle command. On the opposite, there is not (yet) the possibility to customize natively the synth ring setting selector (available parameters and available values for each parameter), where this would probably be more useful.

I certainly agree this is much needed.

If we begin to customize a 3/4-value cycling command, will we have to customize other ones? For example, I only use two punctuation levels, why bother with 4? If yes, I fear that the GUI becomes more complex.

I don't think this should be considering customizing all cycling commands - only these for which you need to perform a quick change, and this change cannot be done in other ways (if you for instance need to quickly switch between two particular punctuation levels you can have a profile with the lesser commonly level set, and add a keyboard shortcut assigned into it).

On the contrary to what I wrote before, it's true that some people may not need the full speech mode. But will these people using magnification ever use no speech mode?

I am not a magnification user, so I'm not the best person to judge this. In general I dislike excluding options just because we cannot propose a clear use case for them right now, but may be just me :-)

Note that even if my comments seem quite reluctant for this issue, I am not actually opposed to its resolution in NVDA core. I acknowledge that there is an expectation to improve the NVDA+S UX. However, my feeling is that it's not easy to find a good solution (both in the GUI and in the User Guide description), so that the majority of people understand the GUI and actually use it for their needs. We should not end up with one or two more controls in the GUI but people still bothered by the beep mode that they do not use. Hence all my questions.

To be clear that is how I understood your comments and questions from the beginning. In the retrospect the easiest option would be to assign a different command to the beeps mode, and leave NVDA+s to switch between speech and no speech, but there is way too late for this now.

@seanbudd seanbudd added p5 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority triaged Has been triaged, issue is waiting for implementation. labels Nov 21, 2023
@Adriani90
Copy link
Collaborator

Adriani90 commented Nov 21, 2023

So we have 3 proposals on the table in my view:

  1. Three check boxes for including or excluding on demand speech mode, beep tones mode and speech mode off in the nvda+s command
  • Advantages: not a big effort to implement; the NVDA+s command gets less loaded with too many toggling states
  • Disadvantages: it is an inefficient process when users decide spontaniously that they need one of the less verbose modes because they need to switch back and forth between the inclusion and exclusion of the modes in the nvda+s command.
  1. Providing two separate key strokes for on demand speech mode and beep tones mode
  • Advantages: probably smallest effort to implement; no additional GUI elements; efficient process when toggling to different speech modes; the NVDA+S command gets less loaded with too many toggling states
  • Disadvantages: could introduce breaking changes for addons; there are already alot of key commands users have to think of, not only from screen readers; splitting the speech mode into different key commands seems not logical from an UX perspective.
  1. Enhancing the settings ring, allowing users to add settings from the GUI to the ring or remove them.
  • Advantages: sustainable UX approach which can improve efficiency for users; new settings can be added in case users don't want to mess around with too many key commands; allows for other use cases such as new navigation paterns as stated in Feature: navigation between element atributes such as color, font, style and other document formatting atributes. #7744 and Flexible ring of settings #7747; can restrict key commands with multiple toggling states to what is mostly used while including all toggling states in the settings ring
  • Disadvantages: higher effort to implement given that also GUI adjustments are needed; users need to get used to the fact that settings in the settings ring can provide more options than the assigned key commands in some cases.

I am still in favor of approach 3 because it is a sustainable UX design which we can build different use cases upon. Users can get used to this approach if a good explanation in the user guide and other communication channels is in place (i.e. a list of settings that provide more toggling states in the ring than in their assigned key command).

@Adriani90
Copy link
Collaborator

no one proposed a change here which would improve the situation without GUI changes.

Why should this be a hard requirement for improvements? Changing the GUI in certain ways is not bad per se.

@XLTechie
Copy link
Contributor

XLTechie commented Nov 22, 2023 via email

@XLTechie
Copy link
Contributor

XLTechie commented Nov 22, 2023 via email

@beqabeqa473
Copy link
Contributor

beqabeqa473 commented Nov 22, 2023 via email

@Adriani90
Copy link
Collaborator

  1. Providing a checklist of four options, covering all of the possible speech
    modes.

As discussed above, this will introduce a risk of disabling full speech mode and causing especially novice users to get lost. Especially when a visual impaired person works together with a blind person on the same machine. But I adjusted my proposal 1 to include 3 instead of 2 checkboxes.

If only GUI options are addible,
then we are back to implementing 1, 2, or 4 anyway, and we might as well do
that first.

Thatt's not entirely true. Implementing 3 would mean we have to implement a combo box in which you can choose the speech mode in the GUI, but at the same time it allows you to add this combo box to the settings ring. We don't have to deal with checkboxes which include or exclude things from a key command. What I wanted to say is that the key command contains less options to switch through than the settings ring or the combo box in the gui.

were we to do it, it would essentially
provide a basis for an easy solution to #872.

I don't think this will give a good basis for that, because including settings to the ring or not does not imply the development of a basis for an algorythm for providing most relevant search results. However, this is a completely different issue.

@beqabeqa473
Copy link
Contributor

I, personally don't think adding this to the synth settings ring is a good idea. it will make it complicated even more.

Checked list with validation that one of speech capable mode is selected is the only way to go i think.

@beqabeqa473
Copy link
Contributor

First of all, it won't break a backward compatibility for users.
Introducing checkboxes is not also a good idea, because in the future,m it won't be flexible to add another option if such will be introduces. If person want to disable some mode, they will be able to go to the settings, and uncheck a mode which they don't want to see. Again, validation should be done, that speech mode cannot be unchecked, or even not to be included in the list.

Frankly speaking, I don't understand points @Adriani90 is trying to rise and make things more difficult.

@XLTechie
Copy link
Contributor

XLTechie commented Nov 22, 2023 via email

@XLTechie
Copy link
Contributor

If we try to do this in a list of checkboxes, we have at most three or four of them to represent the possible configurations.

There are 14 possible configurations, if you eliminate duplicates (e.g. "beeps and talk" is the same as "talk and beeps"). Next if you further assume that no single option configuration is acceptable--require the user to have two modes enabled at all times--then there are 10 possible options:

  • Talk and off
  • Talk and beeps
  • Talk, off, and beeps
  • Talk and on-demand
  • Talk, off, and on-demand
  • Talk, beeps, off, and on-demand
  • Beeps and off
  • Beeps and on-demand
  • Beeps, on-demand, and off
  • On-demand and off

Furthermore, I think we can safely eliminate the "Beeps and off" option as worth including.

But still, that leaves us with nine possible states.
That could go into a combo box I suppose, but a list of checkboxes with validation on config apply seems more reasonable to me.

@lukaszgo1
Copy link
Contributor Author

Given most people seems to favor the approach I proposed initially i.e. the checkable list of all the modes, and that we can reasonably simply protect users from disabling modes which should not be disable-able, I propose, and will submit a patch for this when #15804 is merged. If this approach turns out to be unsuitable, or perhaps synth settings ring is significantly improved, we can always move the option there, I feel it is way more important to start somewhere than waiting, possibly indefinitely, for improvements for it. If there is a lot of complaints about users who have disabled speech mode accidentally, we can also reconsider the decision of placing it on the list. My main motivation here is that other screen readers / systems allow such config, so there is apparently value in having it.

@Adriani90
Copy link
Collaborator

But still, that leaves us with nine possible states.
That could go into a combo box I suppose, but a list of checkboxes with validation on config apply seems more reasonable to me.

My point with the combo box is not meant to include or exclude things from a key command, but to choose the desired speech mode as alternative to the ring if someone prefers to do it from the GUI. We only include things into the ring that are also visible in the GUI. This should remain the same even when the ring is enhanced.
So implementing proposal 3 eliminates the need of checkboxes which include or exclude things from key commands because for multiple toggling states we can limit toggling states via key commands to what is mostly needed and let additional options be handled via the ring or the combo box in the gui.

I propose, and will submit a patch for this when #15804 is merged. If this approach turns out to be unsuitable, or perhaps synth settings ring is significantly improved, we can always move the option there, I feel it is way more important to start somewhere than waiting, possibly indefinitely, for improvements for it.

I agree this is a good start over all.

@CyrilleB79
Copy link
Collaborator

Given most people seems to favor the approach I proposed initially i.e. the checkable list of all the modes, and that we can reasonably simply protect users from disabling modes which should not be disable-able, I propose, and will submit a patch for this when #15804 is merged. If this approach turns out to be unsuitable, or perhaps synth settings ring is significantly improved, we can always move the option there, I feel it is way more important to start somewhere than waiting, possibly indefinitely, for improvements for it. If there is a lot of complaints about users who have disabled speech mode accidentally, we can also reconsider the decision of placing it on the list. My main motivation here is that other screen readers / systems allow such config, so there is apparently value in having it.

I agree with this approach which is pragmatic, the most easy to understand from users point of view and allows future improvement if needed.

@seanbudd seanbudd added this to the 2024.1 milestone Nov 27, 2023
@LeonarddeR
Copy link
Collaborator

I must admit that I find the additional item in the speech modes cycle pretty annoying. When I want to toggle speech from talk to off, i have to press twice instead of once. Therefore i wholeheartedly second this proposal.

seanbudd pushed a commit that referenced this issue Dec 8, 2023
…15873)

Closes #15806

Summary of the issue:
NVDA allows to change the currently used speech mode by pressing NVDA+s. By default this gesture cycles between 'talk', 'beeps', 'on-demand' and 'no speech'. For many users having ability to switch to beeps or on demand is unnecessary, and they have no need for modes different than speech and no speech. For other beeps mode is certainly useful, but it is much more important to be able to quickly switch between speech and no speech, so beeps mode just makes the goal slower to achieve. With the introduction of fourth speech mode in #15804 it has been decided that users should be given ability to disable speech modes they do not need to use.

Description of user facing changes
The new checkable list containing all speech modes (all are initially checked)has been added into the Speech settings panel. When switching between modes with NVDA+s only modes which are checked in the list are included. When applying settings selected modes are validated, to make sure at least two modes are checked. When the 'talk' mode is disabled user is warned that they may be left without any speech.

Description of development approach
Configuration spec has been expanded to store list of disabled modes - this ensures that if any new mode is added to NVDA it is enabled by default in the cycling script. Speech settings panel now contains a list of all the speech modes, only enabled one are checked. When introducing validation for the speech settings panel it has been discovered that code responsible for checking panel's validity displays a warning about it being invalid, prevents saving invalid config, yet after dismissing the warning settings dialog gets closed. Since this is not optimal validation for settings dialog has been modified, so that after warning is dismissed settings remain open, and the invalid control is focused. The cycling script has been modified to only cycle between enabled modes. Unit tests verifying its behavior, both when no modes are disabled (the default) and some are disabled, were added. To make them work it has been necessary to perform a small modification to the method which lists configuration profiles in the config module, it assumed that profiles directory always exists, which is not true in unit tests. Now when the directory is missing appropriate warning is logged, and empty list is returned. User guide has been expanded to describe newly added control.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
p5 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority triaged Has been triaged, issue is waiting for implementation.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

10 participants