I am using a guide on creating contextual voice commands from within my Glassware (basically a custom 'okay glass' menu inside your own app), listed below. I have been patterning part of my Glassware off this example very closely, and have even triple-checked that I followed the steps correctly, but have been experiencing unexpected behavior.
https://developers.google.com/glass/develop/gdk/voice#contextual_voice_commands
When I say "ok glass", the menu items are displayed as white text with transparent backgrounds overlaid onto my content view (which is a GLSurfaceView subclass, not that it should be relevant). When I speak a command that is a regular menu item, it works as intended. However, when I speak a command which contains a submenu, the submeu items appear in a popup list with text on an opaque background. This popup list does not respond to voice, unlike its parent menu. The list only responds to a single tap which only allows you to choose the first item; there is no way to scroll the selection to any other item.
UPDATE: This statement:
Google's sample is a multi-level menu which is assumed to work, but they don't provide a downloadable sample source code for it so I can't confirm their example works as claimed. Has anybody else been unlucky with multi-level contextual voice menus?
Is no longer true. I started from scratch with a brand-new empty Android project targeted on Glass and this time I have copy/pasted Google's sample code by verbatim, and added the string resource values (which they didn't provide) so it will compile. I found that Google's sample code had the exact same bug!
Well it looks like the bug is due to a careless, but hard to detect oversight on my part. I was running this project on a different type of wearable Android device previously and was using this in my AndroidManifest.xml under the application element:
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
For some reason I put this in my skeleton project too, probably getting this confused with the "No Theme" setting that GDK docs suggest. This was visibly working fine on Glass up until I started going into multi-level contextual voice menus.
Removing this altogether from the manifest fixed the issue.