Deciding which event to listen was a bit trickier. DeviceOrientationEvent is defined even if device does not have gyros. We know it has gyro only if DeviceOrientationEvent fires or we have RotationRate in DeviceMotionEvent.