I suggest you look at
Vaadin-cdi source particularly the CDIUIProvider , However , I would think it is easier to make use of different Views depending on the User-Agent rather than an entirely different UI.
Perhaps the simplest way would be to annotate your views with a viewname+, and re-implement
CDIViewProvider to search for a viewname+ instead of just viewname . with a fallback to just the viewname if you dont have a specific implementation for the user-agent…