Topic: Expose Modes in Control Panel

Generalize the mode concept (night, snooze, wake, attract) and allow the user to configure and create new modes.

Chumby already has the idea of modes, however they are currently hand coded, and users, at least on these forums, have numerous suggestions on how to tweak them.  Usually these requests get implemented as Easter eggs or integrated in somewhere (like the dark button on night mode, thanks!), but over time this is going to make the control panel code more complicated and much harder to change.


The Mode specification:

Chumby can be in one mode at a time. 

Users can view the current mode and switch to a new mode with a minimum of presses.

A mode specifies:
- What music source to play and at what volume
- The Brightness of the screen
- The channel to view
- How long to stay in the Mode, and what Mode to transition to next
- What to do when the squeeze bar is pressed (show CP, move to next mode)

An alarm is simply a timed mode change.

Widgets should be able to signal the end of a Mode (An "alarm" widget should be able to "turn off" the alarm.  Some thinking is needed here if there is a need to select between two options, for instance, "turn off" vs "snooze")

The user should be able to configure a mode and add a new mode.

An out-of-the-box Chumby should have the following configurable Modes:
- attract, no music, no time out, plays the default channel.
- wake, plays beeping sound, no time out, plays the built-in alarm channel.
- snooze, no music, dim, 5 minute timeout, plays the built-in snooze channel
- night, no music, dim or dark, no time out, plays built-in night channel

Example use cases:

1. User would like to fall asleep to music.  User adds a mode that plays music with a timeout that transitions to night mode.  User selects the new mode before going to sleep.

2. Chumby is in Snooze Mode, but user is now awake and wants to avoid having the alarm go off.  User selects Attract mode from the CP.

3. User would like chumby to be dark at night.   User configures night mode to be Dark instead of Dim.

4. User would like to listen to music.  User adds several modes that each plays a favorite music source.  User selects one of the new modes from the CP.

5. User wants to select and interact with widgets.  User squeezes chumby and interacts with the CP.   Note that this is the typical use case for chumby but usually occurs only during attract mode.  Should the CP be customizable per mode?  Or can users create widgets that can perform the selection functions (that is the non-privileged aspects) of the CP?   

Implementation thoughts:
Currently, the custom Alarms have much of the configuration needed for a mode, it may be possible to refactor the alarm code to decouple the timing aspect from the what to do when the alarm happens aspect.

Re: Expose Modes in Control Panel

Very nice idea. I would definitely put it to use.

Re: Expose Modes in Control Panel

One of our product managers had a similar architecture that was under consideration at one point.  We found that the notion of "modes" was a very comfortable paradigm for technical/engineering types, but less palatable to mainstream users that tend to be a bit mushier and less partitioned about how they want things to work.  For instance, many folks would like to put their devices into Night Mode while continuing to play the current music, just on a timer, instead of having the music switch.  We've also heard that people what to continue playing the alarm music even after having dismissed the alarm and back in widget mode.

You're right that the alarm subsystem very closely follows that idea, but not as elegantly as one would like.

It's an interesting topic.

Re: Expose Modes in Control Panel

Very interesting feedback.  Your examples of the rigidity of modes seem to center around switching the music.  Perhaps this can be addressed by having one of the mode options to be 'don't change the music.'  Could you elaborate on the other less palatable aspects of modes?

Fundamentally, Chumby and any other clock-radio has modes, and users, even grandmas, are adept at understanding them.  Consider the controls for an ordinary clock-radio, there's usually a slider that chooses between the following modes, alarm with buzzer, alarm with music, play music, off.  On more fancy units there are even buttons for preset radio stations.  My guess is that the common clock-radio control scheme is the result of many generations of evolution rather than some technical limitation. or lack of modern design skill.

It would be fantastic to be able to set chumby up such that it shows just the typical clock radio buttons, however the suggestion here is much less ambitious; make the existing modes configurable and easily selectable.

If the modes idea is simply off-the-table due to a prior decision, then the question is how can the same result be achieved with the alarm functionality.  As I see it there are two things missing, a quick and easy way to fire off an alarm right now, and a way to see and cancel the next scheduled alarm (perhaps in night mode, touching the upcoming alarm could cancel it?).

Another course to consider is refactoring the CP code to make modes uniform internally without changing the interface initially.  When a user creates a new alarm, a mode is created as well.

Re: Expose Modes in Control Panel

Well, I used music as one example of something one would want to survive mode transitions - I could have used volume, brightness, channel, etc as well.

When we looked at this, it turns out that many of the device's settings are orthogonal, so it was tough to cleanly package them up as "modes".  The other problem was maintaining the mode state graph in a user-palatable way.

For instance, let's say one mode is playing widgets at a certain volume, per the setting of the mode.  It's a bit too loud, so the user manually changes the volume.  An alarm fires off, which changes the volume.  The user dismisses the alarm - two problems - how do you define a mode transition that means "go back to the last mode" (thus requiring a transition stack of some indeterminate depth) versus the some explicit mode, and if you can, what volume does the device now have?  The one defined by the mode, or the one last set manually by the user?

A similar issue happens with music - how do you define the music associated with the mode?  If I have a mode defined to play SHOUTcast, and the user manually switches the music to Pandora, what happens the next time that mode is entered?  Does it go back to SHOUTcast?

What happens if one has defined an explicit mode transition, ie Night Mode exits to some user-defined mode, and that mode is deleted?  Does it go to a default? How is the user to diagnose a problem with missing modes or make sense of a complicated mode transition graph?

To be clear, I'm not saying it's a bad idea - I'm saying that there's a *lot* to consider, and we, at least, didn't see a clear path that didn't end up with dozens of obscure options with a lot of "allow override"-type selections.  Perhaps further discussion here will help with that.

One interesting point of feedback - I would hazard to say that what this would take is something extending the current Alarm subsystem, however, we've found that the current custom alarms have past the point of complexity that most casual users simply don't use it.  Indeed, that's why the "Quick Alarm" is there.  In some of the other products we're developing for other companies, the alarm subsystem is substantially simpler and less featureful.

Re: Expose Modes in Control Panel

Thank you for elaborating on the less palatable aspects.  Let's see if I can refine the specification to meet the requirements:

For each aspect that a mode specifies, volume, brightness, etc., a flag will accompany it.  The flag may be:
- Apply (A): When the mode is activated the setting is applied
- Apply and Retain (R): When the mode is activated the setting is applied and any changes to the setting are saved
- Not applicable (N): The setting does nothing

If a mode is deleted, any reference to that mode will be deleted.  That is a mode timeout will no longer work. 

An out-of-the-box Chumby should have the following configurable Modes:
- attract: Music R, Volume R, Brightness R, Channel R
- wake: Music A, Volume A, Brightness A, Channel A
- snooze: Music A, Volume A, Brightness A, Channel A, Timeout A
- night: Brightness A, Channel A

(interesting, the Apply/Retain flags seem to be consistent per Mode)

An implementation proposal:  Refactor modes internally, store mode configuration as XML on Chumby, allow technical users to edit the XML.

Re: Expose Modes in Control Panel

I spent some time over the weekend poking around the control panel and, in addition to discovering how to cancel snooze, I noticed that at the top of the CP there's a label that shows the current channel.  This could easily be the name of the mode.  Tapping it would either go to the next mode or bring up a mode selection.

Also, I saw two more possible mode configurations:
- Shuffle widgets
- Stay - the idea is that if a user is interacting with Chumby the widgets shouldn't time out.