AsteroidOS / asteroid-settings

Default settings app for AsteroidOS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Implement "night stand mode"

beroset opened this issue · comments

It's common for people to put the watch on a charger over night. What would be convenient, especially for travelers, would be to have the watch change to a "night stand mode" which displays just the time and state of charge. So this might have an additional setting in the settings mode which has the following settings:

  1. watchface (select an alternate to be used in this mode)
  2. brightness
  3. delay in returning to "daytime" mode
  4. enable/disable this feature

It would be triggered by being connected to a charger at which point it would change to the selected alternative watchface and brightness. If the watch is then removed from the charger, it would wait for the delay period to expire before reverting to "daytime" watchface and brightness.

Would it make sense to somehow mark the "night stand" watchfaces as such? Maybe even make them hidden in the watchface selection menu? I would imagine a "night stand" watchface would have less or different features, maybe it would avoid confusion.

To 1.
We discussed to have a separate simple Watchface in style of the "moto chargin indicator / Nightstand" on black background. Which is selected by default for this new night stand mode. But can be configured into any watchface the user would like.

Would it make sense to somehow mark the "night stand" watchfaces as such? Maybe even make them hidden in the watchface selection menu? I would imagine a "night stand" watchface would have less or different features, maybe it would avoid confusion.

Agreed, this special dedicated watchface should be hidden from the general watchface selection.
and just appear as "default" in the night stand mode watchface selection.

Here are the things I think need to be done to complete a first version of this:

  • create suitable watchfaces for nightstand mode
  • create a settings page for this mode
  • create a means of selecting the nightstand watchface
  • modify asteroid-launcher to handle the timer, brightness and watchface transitions

Would it make sense to somehow mark the "night stand" watchfaces as such? Maybe even make them hidden in the watchface selection menu? I would imagine a "night stand" watchface would have less or different features, maybe it would avoid confusion.

Agreed, this special dedicated watchface should be hidden from the general watchface selection. and just appear as "default" in the night stand mode watchface selection.

I've actually been using the digital-charge-state watchface the last few days. Admittedly that's just because I didn't remember to manually change it back to a more preferred one, but I noticed that because it's such a simple watchface, I get much, much longer battery life. So I'm thinking that perhaps nightstand-mode candidate watchfaces don't necessarily need to be separated from the rest of the collection.

Would it make sense to somehow mark the "night stand" watchfaces as such? Maybe even make them hidden in the watchface selection menu? I would imagine a "night stand" watchface would have less or different features, maybe it would avoid confusion.

Agreed, this special dedicated watchface should be hidden from the general watchface selection. and just appear as "default" in the night stand mode watchface selection.

I've actually been using the digital-charge-state watchface the last few days. Admittedly that's just because I didn't remember to manually change it back to a more preferred one, but I noticed that because it's such a simple watchface, I get much, much longer battery life. So I'm thinking that perhaps nightstand-mode candidate watchfaces don't necessarily need to be separated from the rest of the collection.

Yes, same for digital-night-stand-outfit. But i think they should still get "advertised" in some way when selecting the night-stand-mode WF. Maybe have them sorted to top in a selection?

Maybe, but sorted by what? Right now we don't store any related meta-data about capabilities or features of the watchfaces. I think I'd be inclined to keep it simple to get something completed and then tinker with it as we see a need and have the time.

One quick idea is a simple flag in the watchface?
But how about dodoradios idea to define the night stand WF within the regular WF.
Could we do sth like this:

  • nightStand = non/fallback, showing the WF itself as Nightstand, possibly shrunk and surrounded by a charging circle?
  • nightStand = <watchface-name>, WF maker supplies a custom nightstand in the watchface folder and names it accordingly.
  • nightStand = system, use whatever night-stand the user selected in night-stand -settings.

@beroset pardon my ignorance about the current state of implementation in the last commits.

But during the attempt to design a stock night stand, it became apparent to me that, design wise, it would work for all stock watchfaces to

  • Act like in displayAmbient and dim the defiend Items.
  • Add a charging circle like in both our nightstand watchfaces, over the current watchface.
  • Possibly have displayNightStand so i can hide Items that would crash with the charging circle overlay or add things like battery percentage according to the watchface design.

That way, we would respect the users watchface choice more and not add another slightly different design only for the night stand mode. It would essentially look like the watchfaces extend to the nightstand mode.
The option to select a dedicated night stand watchface like the two examples we have could still be optional. But the stock standard setting would not alter the users watchface choice in Night Stand Mode?

Sorry if i come around late with this realization.

@beroset pardon my ignorance about the current state of implementation in the last commits.

But during the attempt to design a stock night stand, it became apparent to me that, design wise, it would work for all stock watchfaces to

  • Act like in displayAmbient and dim the defiend Items.
  • Add a charging circle like in both our nightstand watchfaces, over the current watchface.
  • Possibly have displayNightStand so i can hide Items that would crash with the charging circle overlay or add things like battery percentage according to the watchface design.

I like this better too. I would most likely want the same "watchface" for both my day and night use, except for the charging circle but I would prefer if the charging circle were an overlay over my favorite watchfaces rather than yet another watchface specifically for this

That would probably work for people good vision. For those of us who wear glasses (and don't sleep with them on) what I want on my wrist during the day with my glasses on is a lot different from what I want at 3AM without my glasses in the dark. I use a pretty busy watchface during the day but want a simple, high-contrast one with big numbers at night. How do we resolve this?

Afaics, altering the stock watchfaces would be an addition to the current implementation with all features kept.
From your first post, settings items:

  1. watchface (select an alternate to be used in this mode)
  2. brightness
  3. enable/disable this feature

Stock would be to not set a dedicated nightstand watchface in 1) and call that setting watchface: stock behaviour or watchface: keep stock or watchface: no override or watchface: charging overlay but still offer to change it. Then it is a user choice to override stock behaviour to cater for more special needs.

"For those of us who wear glasses (and don't sleep with them on) what I want on my wrist during the day with my glasses on is a lot different from what I want at 3AM without my glasses in the dark."
Very good point. Optimising a given watchface for nightstand mode would be the job of the watchface creator as it is now for displayAmbient. Imo, with above sentence you already specified the good practice for a nightstand mode watchface. Certainly, distracting elements in a watchface need to be hidden, Information of importance like the time enlarged. Depending on displayNightStand = true/false.

Tasks i can see:

  1. Implement displayNightStand analog to displayAmbient
  2. Create a charging-circle-only overlay "watchface"
  3. Optimise all stock WF for displayNightStand mode so they mix nicely with the charging-circle-overly and narrow in to above specified good-practice.. Same, with less time pressure for the unofficials.
  4. Implement the function to overlay the charging-circle-only, over exisitng WF. Additional to swapping the current watchface for a dedicated nightstand-face like it is done now. Depending on user choice in settings.

I can do 2) and 3) easily.

I've clarified how I see this working here: AsteroidOS/asteroid#151 (comment)

Just my humble input to consider: I'm thinking that a way to present this in asteroid-settings which would be easier to discover than the current state of the asteroid-settings PR could be to stuff everything under the "night stand" subpage of asteroid-settings and under sub-subpages. For example, these toggles:

  • Show watchface [on/off] (on by default)

(only if the above is on, grayed out otherwise:)

  • Show charging circles [on/off] (on by default)
  • Use a custom watchface [on/off] (off by default, switching to on would push a new WatchfacePage on the app that lets the user select the night watchface)
  • Set custom brightness [on/off] (off by default, swtching to on would push a new BrightnessPage on the app that lets the user select the night brightness and the brightness would adapt as they test it and revert back to day mode when exiting this sub-subpage]
  • Keep active for [0 to 30 seconds selector] (0 by default)

Then we don't have to introduce hard to discover logic in asteroid-settings (it's not obvious that a long press changes the night watchface) and we take full advantage of our pages stacks :)

The default behavior would be the same as right now (with charging circles in addition) but the path to discover how to keep the watch dark or how to set custom watchfaces is clearer.

Additional food for thoughts: we could use the same trick if we decide to have charging circles be orthogonal to watchfaces: ie, we could have the "Show charging circle" switch open a charging circle overlays selector similar to the watchface selector when switched on. (this may not work well, I'm just throwing ideas to the debate here)

Another thought: we keep calling it nightstand mode but technically this is more like a "dock mode". I usually charge my watches during the day and it's a bit confusing that having them turn off during that time would be under the "night stand mode". Maybe we should consider renaming this to something like "dock mode" ? other name suggestions welcome ofc.

Additional food for thoughts: we could use the same trick if we decide to have charging circles be orthogonal to watchfaces: ie, we could have the "Show charging circle" switch open a charging circle overlays selector similar to the watchface selector when switched on. (this may not work well, I'm just throwing ideas to the debate here)

The idea of charging circle overlays has been canceled, so to say.
Every stock watchface needed customization in a way that would need to make an overlay highly customizable.
Which i figure would be overkill. So i started to implement the charging circles into each individual watchface according to the design for now.

Dock mode sounds good. We had charging mode as intermediate. Nightmode sounds cool and was the first application. But both are a subset of dock mode. Agreed.

Good idea for the menu structure.

I believe this is complete now. I've kept the name "nightstand mode" because that suggests what this is for per the requirements and the crescent moon icon matches nicely. There is one addition made to the main settings page:
0
If you click on that, it takes you to the Nightstand mode settings page:

1
Per request, everything else is grayed out if the enable button is off. Here's the bottom of the settings page:
2
Clicking on the "Select nightstand watchface" takes you to a screen that is largely identical with the main watchface selection page, but it shows the crescent moon icon on the selected watchface:

3
Internally, the mode implements this state machine:
transitions
It switches to the selected nightstand-mode watchface (which can be the same or different from the regular watchface) and also makes a bool property named nightstand available to watchfaces. This allows a watchface to change its appearance when the nightstand mode is in the active state. This has been experimentally tested with @eLtMosen 's analog-weather-glow watchface and works perfectly on the two watches I tried (sturgeon and dory). If other "charging ring" watchfaces are created, they can be used this way also.

I believe this is 100% complete and all issues from code reviews resolved.

All implemented and merged.