Newer touch-first devices - Vivoactive 6, Venu 4 and Venu X1 - no longer have a dedicated menu button/touchscreen shortcut which triggers the onMenu behavior. In the past, *every* CIQ watch supported onMenu, whether by button short/long-press or a long-press of the touchscreen (Vivoactive 3). As such, devs have become accustomed to using onMenu() to implement context-sensitive/universal menus for their apps.
This has come up more than once, and in fact it has been assumed to be a bug more than once, rather than an intentional design decision. Given that (I assume) every new touch-first device (Venu/Vivoactive) watch will lack onMenu, I'm not sure why there's no push to have this new pattern documented for CIQ devs. There have already been 3 releases of watches without onMenu(), and devs have been asking "where's onMenu???" for months.
The only reference I've seen in the CIQ docs is an announcement for Vivoactive 6, which states that the "action view pattern" has changed from Vivoactive 5: here's how you can display the action menu indicator in your CIQ app and how you can take action when the user swipes left on it, by pushing an action menu. Crucially, it does not explicitly state that onMenu is gone from VA6. It does not even mention onMenu at all.
I noticed that the Input Handling core topic makes no mention of View.setActionMenuIndicator or BehaviorDelegate.onActionMenu(), even though it covers BehaviorDelegate.onMenu():
https://developer.garmin.com/connect-iq/core-topics/input-handling/
There's nothing on that page about action menus at all.
Not to state the obvious, but if a significant change is made for newer devices where more than one dev believes there's a bug or something is missing from the device/docs, and they invariably report it as a bug or create a topic in the forums asking for help, there's a good chance that the change was not communicated properly.
Suggestion:
- make it clear in the device reference (somehow) that these devices don't support onMenu, but they do require apps to display an action menu indicator if the app needs to offer a context-sensitive / universally accessible menu
- add a note to the onMenu CIQ API docs that some newer devices don't support this functionality anymore, since it has been a staple of Garmin CIQ devices since the beginning
- update the Input Handling core topic with information about View.setActionMenuIndicator() and BehaviorDelegate.onActionMenu(), especially how some new devices no longer support onMenu() and require the use of View.setActionMenuIndicator() to implement the equivalent functionality
References:
https://forums.garmin.com/developer/connect-iq/i/bug-reports/vivoactive-6-simulator-problems
Notes:
I think this bug is compounded by the fact that there's no supported devices section for onMenu in the Connect IQ API docs, whereas there is a supported device section for onActionMenu.
Even if these new devices technically support onMenu (meaning the symbol is defined), it will never be called for those devices, but the dev wouldn't know that by looking at the docs.
Maybe there needs to be a Supported Devices section with an asterisk for onMenu: e.g. "all devices have the onMenu symbol, but only the following devices actually support the onMenu behavior, meaning that onMenu will never be called for other devices". Or: "onMenu will never be called for the following devices. Use View.setActionMenuIndicator and onActionMenu instead"