-
-
Notifications
You must be signed in to change notification settings - Fork 650
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
Sleep mode part of profile configuration request #3721
Comments
Comment 1 by briang1 on 2013-12-15 10:18 You can of course manually turn on sleep, but doing it this way its automatic. There are already some built in to nvda. Cicero comes to mind, and I've seen an add on for Guide. |
Comment 3 by bdorer (in reply to comment 2) on 2013-12-15 12:27 Replying to isaacporat: Anyway, this is not a major issue and as you say can be turned off manually but as I and some others use this feature a lot it would be very useful. |
Comment 4 by briang1 on 2013-12-15 19:33 One would need to save the setting, and i am sure it is not that easy to write an add on to do this, though its probably beyond me. |
Actually sleep mode can already be turned on only for current application with NVDA+Shift+z in laptop layout or nvda+shift+s in desktop keyboard layout. See input gestures dialog. |
The keystrokes you reference @Adriani90 is correct. The request here is to have sleep mode be saved with a configuration profile.
|
Just bumping this since it's still being requested. |
Definitely agree that this needs to be implemented, and soon. The topic comes up often enough on the user list (people wanting to save the sleep state for an application, and by far the easiest way to do that would be configuration profiles). |
While I agree that it is needed before anyone would code this the UX needs to be discussed. What about the following:
The current command for enabling sleep mode would remain available and would like it does now enable sleep mode until NVDA restart. |
Instead of creating a new "sleep mode" profile, why not simply save the sleep mode state as part of the config profile? That way all you would need to do is start that program, create a configuration profile for it, then turn on sleep mode. I wonder if it would be worth having some kind of earcon or verbal notification the first time NVDA goes into sleep mode any time it's run. That way if you start NVDA while you have such a program running, (or the first time you start or change to that program), you will hear NVDA start then advise you that it is in sleep mode. Just to avoid confusion about why NVDA stops speaking (in case you forget you created the profile). |
Instead of creating a new "sleep mode" profile, why not simply save the sleep mode state as part of the config profile? That way all you would need to do is start that program, create a configuration profile for it, then turn on sleep mode.
Having tried this, I wonder how exactly one would save such a profile? Unless
the save config command was exempted from sleep mode, which could be done,
although that might defeat the purpose.
To imagine: you create a profile that triggers on an app, load that profile,
enter sleep mode, and then what? NVDA is now sleeping, and ignoring your
commands.
|
I can see this "sleep profile" solution as workable, but only if it works also
when the user has multiple apps that require sleep.
I can't check an NVDA system right now, but will triggers let you apply more
than one trigger to a single profile?
If so, that might be the best answer going at the moment.
|
Yes, it is possible to create a profile, and trigger it in more than one program. |
Good point. In my defence, I never claimed it was a well thought through idea! |
Perhaps having "NVDA control+c" still active when in sleep mode would work - that way a profile using sleep mode could be saved - and if you have "save configuration on exit" set, you shouldn't need to do anything, it would simply be saved. It's unlikely that either INSERT+CONTROL+C or CAPS LOCK+CONTROL+C would be used by another program. |
To summarize after reading this ticket and others marked as a duplicate of this one it seems there are three possible solutions: Separate profile for a sleep mode.
Pros: Associating given program for the GUI is quite explicit action which probably cannot be done by mistake. It can also be very easily reverted as triggers can be changed from anywhere. Cons: It would require support for stacking of profiles that is being able to associate more that one profile with one program. All settings other than sleep mode would need to be loaded from the second profile assuming that there is one associated. It should also be decided what happens when switching sleep mode off using a keyboard command. Additional checkbox for sleep mode as part of settingsThis would require additional checkbox either in one of the existing settings panels (which one?) or additional settings panel named Profile specific settings or similar. This checkbox or entire panel if it is going to be separated should be shown only when profile other than the default is active.
Cons:
Save sleep mode when the gesture is used inside an active profileWhen pressing the keyboard shortcut for enabling sleep mode and configuration different than default is active the fact that sleep mode has been enabled/disabled is saved inside active profile. This would require NVDA+Ctrl+C to be active even in sleep mode to facilitate people who don't have saving of config on exit enabled.
Cons:
@feerrenrut While I don't plan to work on this until #11006 is open would you be able to share your thoughts about the implementations outlined above and let me know which one would you prefer? |
Another possible option would be to place an option in the profile configuration
dialog.
A checkbox to the effect of:
Start this profile in sleepmode.
The user would probably only be able to select it when creating the profile, or
when otherwise not actually running the profile, but it would serve the purpose
with minimum impact.
|
@feerrenrut Have you seen my above comment listing possible implementations? Would you be able to tell which one would you prefer and/or propose different UX. This is being asked for on various mailing lists pretty often so there is clear demand for this feature. Also cc @michaelDCurran or @seanbudd if you'd like to provide your thoughts about implementation. |
As someone not incredibly familiar with this issue, I think the first option "Separate profile for a sleep mode." makes the most sense.
To answer the above, I would propose changing the input gesture to activate/deactivate the entire sleep mode profile (if other settings are included), rather than "sleep mode" specifically. |
Thanks for the summary @lukaszgo1, it makes it much easier to get up to speed on the issue. My preference would be either on the Profile config or on the Trigger. I think there are too many edge cases in the "Save sleep mode when the gesture is used inside an active profile" case. Mixing a temporary setting with a saved one. This is an ongoing difficulty with screen curtain. The "Separate profile for a sleep mode." is quite a technical solution, I think it is more difficult for users to understand than it needs to be. |
Thanks for your comments @feerrenrut It looks like the following does what we need:
Would something like this be an UX you can accept a PR for? |
This is a little confusing. I think the profiles concept isn't very clear in NVDA settings at the moment. But currently the majority of settings are tied to the active profile already. Rather than think of this as a setting, it could be thought of as an action. A profile trigger could also be thought of as an action eg "swap to this profile". I think an option such as "enter sleep mode on activation" belongs on the trigger dialog. I now think it doesn't belong in the profile dialog (but does belong in the trigger):
|
My only problem with adding additional checkbox on the trigger dialog which, when checked, would activate sleep mode for a given trigger is the fact that it is horribly not discoverable. I certainly would not even imagine to look for such option there and I believe most users would not either. All other AT's simply adds additional checkbox to the application specific settings though it is probably because NVDA is an only screen reader where triggers are separated from the configuration. |
I'm not so sure, wouldn't they have had to visit that dialog when creating the profile / trigger in the first place. Granted, for existing profiles this is a concern. |
@feerrenrut Imagine that as a user you want to enable sleep mode for an application and hunting for an appropriate option. Would you look in the triggers dialog for it? I certainly would not. In addition if we would ever add a search option to the settings dialog the "enable sleep mode for the trigger" would not be included in the search results. |
My concern with a checkbox for sleep mode on the profile page is that it is inconsistent - to set any other option for a profile, you trigger the profile, then change the option. Perhaps a solution could be to save the sleep mode state as with any other option, but also add a cue so that when you trigger a profile set to sleep mode, NVDA reports something like "entering sleep mode". An argument could be made for simply doing that whenever sleep mode is activated (eg when you press NVDA+shift+s / NVDA+shift+z). Or an earcon like screen curtain uses. |
I am not a programmer and this may be an instance of a simple solution that has problems, but why not just do this in the most simple and direct way? No profile would be needed, and it should be in the core. When you evoke the sleep mode command, a dialog comes up. Enter sleep mode automatically when in this application with a yes or no button. If you want to turn automatic sleep mode off for an application, have a command that opens a list of items that go into automatic sleep mode. Each item would be a check box. Uncheck the check box, activate the ok button and the behavior is removed for that application. It could be a command and also found in NVDA settings, as so many settings are. I would think there are many applications users have no need to create a profile for and I don't think it should be necessary to create one just for this purpose. |
That would actually be more trouble than it’s worth. In theory you would have to have a loop scanning the system for apps every time that command is invoked. It’s better to create a profile for more user flexibility, even if it is a temp profile.
|
@Gene703122, I think that you may have interpreted some of my listed steps, as user steps. Most of what I wrote was a technical implementation proposal. From a user prospective, what I suggested would work mostly as you have requested, because of the automatic generation of sleep mode only profiles as I described. That said, I had an alternative proposal which was completely divorced from profiles, which I will present below. Edit (2024): I forgot about coming up with this, and proposed something similar but different (I think better), in #16305.
This doesn't include the "Always start in sleep mode" feature I added into my initial proposal above. We would either need a second list for that (like @josephsl has for whether to use development versions of add-ons), or would need to drop that feature. @feerrenrut I am happy to implement either proposal, as NV Access prefers for this feature. |
Ho, I think a simpler approach might be a checkbox or two in Advanced settings panel that will be shown if and only if an app-specific profile is active. This simulates what JAWS does. Thanks.
|
@josephsl can you elaborate on this somewhat? I am unclear how this would work. Also, I am re-thinking both of my proposals above. When I loaded this issue earlier today, GitHub was only showing me about six of the comments; none of those from @feerrenrut or @seanbudd or @lukaszgo1. I have no idea why that happened, but upon opening it again to post my last comment, it brought up the full history. |
Hi, in theory Advanced settings panel is supposed to be profile neutral – that is, it is supposed to apply everywhere, but it is not. Therefore we can take advantage of this fact and say that sleep setting (flag) will be tied to profile triggers – that is, whenever NVDA loads a new app module, it will check for sleep mode flag in addition to determining if an app-specific profile is defined for this particular app. In other words, I’m suggesting that we look at the actual internals of configuration profiles, as a preliminary UI design will come to our minds if we think carefully about the config profile trigger structure and internals (after all, profile triggers is a key component of what makes profiles profiles). Thanks.
|
@josephsl if I understand you correctly, the user workflow would be:
After which, any time that profile triggers, it starts in sleep mode. To stop starting in sleep mode, the user either deletes the profile, or turns sleep mode off, goes back to advanced, and unchecks the box? Personally, that seems overly off-putting as compared to, for example, my last proposal above. On the other hand, from a development point of view, it would be rather easy to do. |
I don't think I can recommend an approach at this stage. This issue contains a lot of focus on solutions, without much focus on the underlying problems / user stories, the remaining questions on this issue are essentially due to the UX problem. Rather than suggesting solutions and hoping others here infer the same benefits to the approach, let's try to be explicit about the reasoning. Background on sleep modeThe docs for the sleep mode command:
Primary user storyThe following user story is the one I imagine:
Notes/questions on "noisy application":
Some UX properties that are important (in my opinion):
Design constraintsThere are some unusual restrictions compared to other NVDA settings.
Some ideas
|
I actually do apply sleep mode to a game profile mainly because even though it’s voiced by nvda, at least nvda’s voice, nvda’s keys can interrupt the game, so I turn on sleep mode in its profile, but often forget I’ve enabled sleep mode somehow in default so I get speech sort of but not really. I can run the programs like outlook but get no output when I launch the run dialogue or alt tab. So there really does need to be an alert when you alt tab into a profile where you did enable sleep mode. Something like “sleep mode enabled.”
|
Re the original use cases and questions, re noisy applications. I recommend we focus on the self-voicing application scenario. This is the only one I have heard this feature requested for, and the one I anticipate it would be most used for. If there are constraints around sleep mode being tied to an application, then if we could only allow it to be set in a profile which is triggered by the current application, that would again fit in with the primary use case anyway. |
This is my understanding. I'm not aware of a more general sleep mode concept. If anyone has a contrary understanding it would be good to know about it so we are basing decisions on the same understandings of the constraints.
I've tried to highlight that the UI for this isn't obvious. We don't have options in settings that disappear based on the current profile. Additionally, any profile can be manually triggered. Current application no longer makes sense when the Settings dialog is open, because it is now NVDA. |
Hi, I understand that it might be off-putting to users. But we should also emphasize the fact that advanced settings are meant to be changed by people who know what they are doing (especially under guidance from NV Access and other developers). Which begs a follow-up question: should we separate some advanced settings into a panel dedicated to devleopers? I think that might be something to have as a separate discussion (not this issue). Thanks.
|
Agreed on your point. Can someone start an issue on this extra panel? 👍
|
To be honnest, after reading through all the conversation at least in my opinion many UX proposals are quite an overkill for what the solution should look like. Problems:
New proposal:
Advantages:
|
The NVDA specific profile is covered in #15165. |
Hi, A few housekeeping task suggestions:
Thanks. |
I can see one disadvantage. Let’s say the end user restarts nvda and they happen to be in a config with sleep on. They might forget and nvda would not default to the non-sleep state when restarted. I do not have a solution to propose to fix this yet, it is something to consider. Was this already brought up somewhere? Keep in mind I do not code. This would be a huge issue in my book and something to think about before implementing.
|
I think this #3721 (comment) |
I do not understand this part at all.
There are several issues with this making it IMHO not worth debating further:
This is not a concern at all since when sleep mode is enabled for a current application you cannot (and should not as one of the reasons for enabling sleep mode is being able to pass through all keyboard shortcuts to the application) access NVDA's GUI.
This has to have a GUI because we don't have any permanent option which can be enabled via a keyboard command only and making that change changes the established behavior of
This is not easier than what has been proposed in #16305 - trying to establish difficulty level of a coding task as a non programmer seems just trying to add unverifiable arguments in favor of your proposal. |
I think this was not fully related, I was thinking of @marrie's problem of NVDA keys interupting the game. So if that's why sleep mode was enabled for the game, the user could go afterwards into the NVDA menu and create a profile for the game, disable the nvda input gestures that cause the game to be interupted, and if that works, then sleep mode can be disabled again. With the current situation you can do taht only when leaving the game window and focusing another application or the desktop but you still don't have a profile for the game application.
Well, if the base only configuration support helps in remembering the sleep mode states for the applications, even better. We could go that way which is more efficient ofcourse.
IN case of app modules I don't know any example that enforces sleep mode by itself.
Not if you are in a game, want to create a profile for that game and try to solve some NVDA/game key conflicts before disabling sleep mode again.
Actually just some examples, the native selection command or the input help command cannot be enabled via the GUI either. So if this is your argument, then there should be a separate request discussing all permanent settings should be handled both via GUI and key commands. |
iN the end it might be the best either to let now the decision at NV Access whether they want to reopen #16305 while closing this one or let both open or what ever. I think there is enough material in place now to shape a pull request considering all the input here. Then the discussion can go deper into the technical things on a concrete pull request. |
That is indeed not related at all, since to make this work input gestures would have to be profile aware, which they currently aren't. This should have its own issue if further discussion is needed.
There are several in NVDA's core i.e.
From most of the discussion above it is clear that just saving last result of the sleep mode gesture introduces more difficulties than it solves. Therefore leaving the gesture alone i.e. keeping its behavior as a temporary override and adding GUI to manage permanent sleep mode state for applications seems to be favored by most people who have participated so far.
Again gestures are not profile aware so this cannot be done whatever we do with sleep mode. It is also unclear how one should open NVDA's GUI when in sleep mode.
No separate request necessary since until now all permanent settings can be changed via GUI. Examples you provided aren't permanent and survive either until NVDA is restarted, the browse mode document is alive or input help is turned off. In general when users may rely on the current behavior of the keyboard command and we can easily preserve it adding GUI for permanent change I see no reason not to. Looking at this from the different angle, why you are so reluctant to have a GUI and keep the current behavior of |
Ah that's very interesting to know, thanks for this catch. Nevertheless, any kind of remembering sleep mode, whether by a GUI or a key command, this question of overriding app module enforced sleep mode will come up anyway. I think if an app module enforces sleep mode, then we should look in how this is done. Is that enforced state saved anywhere?
I think we need more clarity on the difficulties expected in this regard. If the state is indicated by a sound or speech when switching a window to an application with sleep mode on or off, similar to what we do with focus mode or browse mode states when using alt+tab between browser and Microsoft word for example, where is the drawback there?
I am not totally reluctant to the GUI aspect, but let me explain my perspective on this:
In this case though we still struggle to find a propper GUI solution because sleep mode is not profile based, so the development process is stuck on this level. |
Well it is saved inside app module, i.e. by default when the application having such an module starts NVDA goes to sleep and user can override this with a keyboard command. In my opinion we should preserve the intent, that is user choice, no matter if done via GUI or from the keyboard, should override the value provided by the app module.
Some people may rely on the fact that the change was not permanent - see below for some user stories.
I'm not following this example. Without using a GUI user can enable / disable browse mode only temporarily - if they want to ensure that browse mode would be disabled they have to open the browse mode settings panel and uncheck "Enable browse mode on page load".
Once again I have trouble following this - if you need to quickly disable / enable sleep mode current gesture does what we need. On the contrary if you do not need to change the setting very often performing this via GUI is not very difficult.
Note that we can easily have a GUI which is not profile aware - most of the discussion was
I haven't been using sleep mode very often, but when I did that was mostly when accessing virtual machines with NVDA / another screen reader using numpad / CapsLock intensively. Enabling sleep mode ensured that all keyboard commands were passed to the guest VM. Two use cases in particular:
While these user stories are niche, they hopefully demonstrate point I wanted to make i.e. we don't know to what extend users rely on the current behavior of the sleep mode keyboard command. Keeping it as is and adding ability to set sleep mode to be permanent via GUI ,yet overridable temporarily from the keyboard gives us the best of both words: user can make it permanent when they need to and it behaves as it used to for people satisfied with the current state. |
I agree.
That's correct for browsers, but not for things like MS Office or apps that use Chromium engines as far as I tested.
Yes, but we have to do it to often, every time when NVDA restarts. And imo that does not corespond to the reality of most users. Most people want to disable / enable it on demand without having to do it every time when opening the application or restart NVDA.
From an implementation perspective is more difficult, because a sleep mode management GUI solution is far more complex than a background storage solution of the gesture and preserving the sleep mode state in a file, whether it is the base config file or a separate ini file. I think we would come faster to a solution that would make happy most people by doing this first.
I agree on this, but still there were some limitation regarding to the GUI pointed out by Reef in comments above, and following are also my thoughts:
In conclusion, as long as we can solve problems without GUI while preserving as much consistency as possible with other behaviors in NVDA, is in my view probably the easiest way of implementation.
Thanks this use case ilustrates quite well the need for this temporary change. I also think making sleep mode tied to the process names instead of entire application doesn't really make sense. But then the permanent behavior of nvda+shift+s could be optional, there could be a checkbox in the general settings category called "save sleep mode state" which makes nvda+shift+s permanent. |
That is not true. NVDA enables browse mode by default for all Outlook messages, unless they are currently edited. You can try this by ensuring browse mode works, disable it from the keyboard, restart NVDA and verify it is still enabled. For Chromium based applications this works similarly - make sure not to test with something like VSCode or Skype which have their own app modules enforcing that browse mode is disabled. In short it is currently a standard in NVDA that keyboard commands perform temporary changes and if you want to make them permanent then it has to be done from the settings dialog.
Note that I am not arguing current behavior is okay - merely that as long as there is alternative way of making sleep mode permanent the behavior of the gesture can remain unchanged.
This is only marginally simpler.
Please point them out explicitly - for me all of them were caused by trying to use profiles for sleep mode.
Unless something changed we don't really hae to limit additions to translatable strings nor to the user guide.
This is true for any new feature, where we are not sure about it being sufficient for users.
This is trivial - listing all applications from the config is obviously simple, and NVDA stores name of the app which had focus before its GUI is shown anyway.
It looks like you are either against the GUI no matter what, or massively overestimating implementation difficulties. We can of course introduce additional settings in general and then try to ad GUI, but we can also add GUI which should be done anyway and have a complete feature in a single PR. |
@lukaszgo1 thanks for pointing out the browse mode behavior more in detail. It made more clear to me the temporary effects of key commands in NVDA, this is not that clearly stated in the user guide. However, it is now strange that when you disable the checkbox in browse mode settings to use browse mode on page load, browse mode is still preserved in Outlook. So the GUI element does not have any effect in this case. I think section 6 in the user guide needs a slight rewording, including
But that's a different issue which I think I can take up to solve.
I tend to agree here now after reading this whole discussion. I think though introducing the complete GUI from the start will take more time and for a user friendly and easily maintainable solution it probably will need more UX discussion than the check box to optionally make it permanent. |
Reported by isaacporat on 2013-12-15 09:04
I use and develop self voicing applications (SpeakOn). Now that NVDA supports profile configuration it would be wonderful if sleep mode can be part of the profile configuration in particular with triggered profile related to applications.
Thank you
Isaac Porat
Blocking #4858
The text was updated successfully, but these errors were encountered: