I recently started porting PowerNap from the iPhone to the Oculus Go. The Oculus Go form factor impresses me and I find the lack of cords great for sleeping. When I started re-learning VR development, I thought PowerNap would make a good first-app candidate. I was wrong.
PowerNap started on the iPhone so long ago, in 2008. Although there are several apps like it in the App Store today, it was pretty innovative at the time. A power nap, for those that haven’t heard of the term, is just a short, intense nap in the middle of the day. When I was a cadet at the Air Force Academy, we were always dog-tired, and if we could find a free 15 minutes, you bet we would close our eyes and rejuvenate. The risk was in oversleeping, or in needlessly bothering people around you. In your dorm, you could set an alarm, but on-the-go, you would need to set your watch, which was actually error-prone and would definitely annoy people around you. The PowerNap app was created to address the risk of a badly set alarm clock, or sleeping on the go in a library, or in a car.
And before you ask, this came out before the iPhone had a reliable timer function. The risk of setting an alarm for PM, when you meant AM, or reusing an alarm that was meant for certain days of the week, was a real threat. PowerNap was like a fancy count-down timer. It also had awareness that you might be napping, in say, a library, so the alarm would start with mere visuals and haptic feedback, before transitioning to progressively louder audible cues.
PowerNap for the Oculus Go became my first-ever Unity app. I made a bunch of design mistakes, but it basically came together pretty nicely. I really like how I used a gorgeous sun-rise to transition from a darkened VR environment to a brightly lit scene that gently wakes the user. And instead of a boring alarm, birds start to gently chirp after sunrise before an eventual cacophony of birds, alarms, and music, that would be impossible to sleep through. You would annoy your neighbors if it ever reached this point, but by then, it is basically a personal emergency.
Everything worked out pretty well, until final testing. Despite my app telling the Oculus to never power down, at least while the headset was mounted, the device would always turn off during a deep sleep. The OS detected the lack of movement and cut power to the device This, of course, is a pretty big problem.
Oh well. I ended up making instructions that described how to keep the device awake. This was far from ideal, and I knew it would hurt ratings, but it was the best we could do. I had also learned from my iPhone days, sometime it is smart to create a solution with a work-around, so that when the OS finally improves, you are fully ready to take advantage of the change.
By the time I finally got everything ready, and got approved by Oculus, they changed the OS, again! The setting was completely gone! Hmm, maybe it simply honored the mount vs. unmounted sensor? Sadly, no, and I got this confirmed from Oculus support. It simply not possible to keep the device awake if the user is super immobile.
So, without even a workaround to avoid powering down, PowerNap for the Oculus Go is on hold. I’m eager to test this on Pico and the Vive Wave platform. Let’s hope their purer Android implementations are more flexible. In the meantime, people will just have to sleep in the real world.
Update (June 2019): I’ve been working with some great people in Oculus support about this. At their encouragement, I created a bug-report and they’re now investigating to see if this can be fixed in a future OS release. Fingers crossed.