nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
https://www.nvaccess.org/
Other
2.12k stars 637 forks source link

Redesign profile handling in NVDA so users can lock / unlock them #17409

Open Adriani90 opened 3 hours ago

Adriani90 commented 3 hours ago

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

Currently, changing settings in NVDA when more than one profile is created becomes complex, especially when more than 30 profiles are used. Settings have to be changed regularly on many profiles and this cannot happen at the same time so it's very inefficient. In case of audio settings, e.g. the other apps volume adjuster does not work as expected, because the setting is profile dependent and so there is no way to change volume of all other apps except NVDA at once, because this has to be done on every profile for every application. This problem is widely described in #17124 and the solution is currently not fully solving#16052, leading to wrong explanations in the user guide. Other settings that are problematic with the current profile approach are e.g. the speech rate which often needs to be changed only temporarily, but sometimes also on a global scale and not on a profile scale. Also ther are valid use cases when screen curtain should remian global and there are use cases when it should be profile based (see #10476 for more details).

Describe the solution you'd like

In #10156 the community came to the conclusion that introducing a lock/unlock feature to every profile is the best solution and easiest to implement. Locking a profile means the parameter written to the profileName.ini cannot be changed anymore and there is nothing else written to the profileName.ini, but to the global configuration instead. User story:

  1. A user created 10 profiles
  2. A user wants to change the speech rate globally
  3. The user wants to change reporting of elements in document formating settings globally
  4. The user wants to change table related reportings in document formating settings for a profile only.
  5. The user want to use the applications volume adjuster and the sound split feature globally as this is the best user experience and coresponds to the descriptions in the user guide.
  6. The user wants to change punctuation level on a profile only
  7. The user want to change the synthesizer voice on 2 of the 10 profiles
  8. The user wants to enable screen curtain globally accross all profiles
  9. The user opens the profile manager after 10 profiles are created
  10. In addition to the current list of profiles status, an additional checkable list is displayed (e.g. lock / unlock profiles list) in which every profile item name is preceeded by the string "lock" and can be enabled via its checkbox. E.G. the profile items in this checkable list would look like:
    • Lock firefox profile checkbox checked
    • Lock WinWord profile checkbox checked
    • Lock Outlook profile checkbox checked By default all profiles are locked / all checkboxes in the checkable list are enabled, meaning that settings changes are always global) The parameter of the settings are not written to the profileName.ini file.
  11. The user unlocks some profiles by disabling the coresponding profile check boxes.
  12. From now on, every setting that the user changes is only applied for the unlocked profiles and the parameter is written to the profileName.ini files of the unlocked profiles.
  13. The user can lock the profiles again as soon as the changes have been done, and the coresponding profileName.ini files become protected.

Conclusion: on locked profiles, NVDA would use a combiation of settings parameters written to the profileName.ini file before, and the remaining global settings parameters which are not written to the profileName.ini file.

Problem: What happens when users focused e.g. Firefox and changed a setting (e.g. speech rate) on its profile which was unlocked before, and change that setting again after the profile was locked? In that case we would have two speech rate settings parameters, one on the global configuration and one in the Firefox profile. Does NVDA prefer the global setting? Or does the parameter which was written to the profileName.ini prevail?

My suggestion to the problem above is:

Describe alternatives you've considered

None

Additional context

This feature would introduce the risk that users get confused because some of their settings are changed after an NVDA update since the profiles get locked (e.g. if they changed the speech rate both on a profile and in the global configuration). However, this is not a big problem, users would just have to unlock their profiles in the profile manager dialog manually, or via keystroke, and the previous behavior is restored.

Adriani90 commented 2 hours ago

cc: @CyrilleB79, @XLTechie, @mltony, @Simon818, @rperez030, @pitermach, @TechHorseG, @Neurrone among people who would like this flexibility of deciding when global parameters and profileName.ini parameters are used.