If this was a 1.3+ blocker that had to be fixed by tomorrow, I'd accept a setTimeout-based solution.

But in this case it won't be good enough.  If the user accidentally switches from camera to video, they have to wait a second before they can switch back.  If the user accidentally starts recording a video, they can't stop it for a second.

I don't think we can handle this generically. Each button has to have its own criterion for when the ui gets enabled again. If it is the record button being pressed, then we probably want to wait until we've received the 'recording started' event (whatever that is) from the camera.

Also, note that just each button individually is not enough because QA will just start hammering one button right after the other.  So I suspect that often, we'll need to disable the entire UI during the camera's fragile state transition periods.

If the user has just tapped the button to switch from photo to video and the zoom event handlers detect a two finger gesture, it seems very plausible to me that something bad could happen.  How do we prevent stuff like that?

Is it enough to have a simple enableUI/disableUI switch, or do we actually have to keep a reference count so that the UI isn't re-enabled until enable is called as many times as disable has been called.  Do we want to add a failsafe timeout to reenable the UI after 5 seconds just in case something goes wrong?  I'm not sure what the right approach is here, but if you can solve this disable/enable issue more globally, that will be helpful down the road.