Menu2 title string placement too high on Vivoactive 3?

Hey guys,

I'm quite new to Connect IQ and just published my first widget. I tried to keep the project as small as possible by only targeting devices, that have the same screen type and resolution as my Fenix 5, which seems to work well except for the Vivoactive 3 series of devices. 

The Menu2 title seems to be placed too high, which leads to strings being very short or cut off. 

Here's a comparision between the Fenix 5 and the Vivoactive 3 for example:

    

As you can see there is almost an entire line of free space below the cut off text on the Vivoactive 3 and pulling the menu down reveals that the text is indeed cut off, not only "hidden" behind the curvature, so I tried to hack something together and force a new line with '\n'. This has the expected result on the Fenix 5, but doesn't work on the Vivoactive 3 as you can see on the pictures below.

  

Is there a way to make Menu2 titles behave consistently across devices? I don't think that 11 characters, including the space, is an unreasonable length for a menu title and it makes me worry about localization, because some languages seem to have absurdly long words for "cancel". 

Thanks in advance for any help!

Have a great day Slight smile

Robert

  • Just a little update: One of my Vivoactive 3 users was kind enough to provide me a video of my app running on the actual device and it appears to work fine (e.g. the title string isn't cut off and looks similar to the Fenix 5). 

    There seem to be a few discrepancies between the simulator and the real device, as the single button on the right side also didn't behave like in the simulator (pressing it on the real device returned the user to the watch face, not ideal if pressing it should be the single point of interaction with your widget). I've implemented touch controls to circumvent the strange behavior of the button and the title appearance seems to be a simulator problem that is not affecting the real thing. 

  • Sounds like you might have an issue in your input delegate.  Returning to the WF can be the result of not having a return statement in something like onKey() or onSelect().  The va3 is really picky about that.

  • Thanks for the answer, Jim!

    I extend BehaviorDelegate and don't overwrite onKey() as I'm working with the long press solution posted by Travis, I think? 

    function onKeyPressed(evt) {
    	var key = evt.getKey();
    	
    	if (keys[key] == null) {
    		keys[key] = new KeyHeldDelegate(me, key);
    	}
    	
    	timer.stop();
    	timer.start(keys[key].method(:invoke), resource_manager.longpress_threshold, false);
    	
    	return true; 
    }
    
    function onKeyReleased(evt) {
    	var key = evt.getKey();
    	
    	if (keys[key] == null) {
    		return true;
    	}
    	
    	keys[key] = null;
    	
    	timer.stop();
    	
    	fast_manager.nextPage();
    	
    	return true;
    }

    If I read the API docs correctly, returning true should tell the watch, that I want to handle this key event.  Should I overwrite onKey() and onSelect() anyways just to make sure they don't conflict with me trying to handle long presses? E.g.:

    function onKey(evt) { return true;}
    function onSelect(evt) { return true;}

  • Trying to detect your own long presses isn't a great thing to do, as what buttons do what really vary by device, including differences with hot keys and things like onboard music.

    What are you trying to accomplish?  With a widget, in the main view you are limited to what you can do - things like prev/next aren't available, but if you push a second view, they are.

  • The alternative of having the user guess, if held the button long enough to count as a long press or not, because the action only happens after he lets go of the button is not ideal, so I figured that would be the best solution for the scenario. 

    Here's a quick video showing the user interactions on my simulator. https://streamable.com/ta70ef

    Basically I use long presses (with a user configurable delay) to open menus for setting goals or ending / cancelling fasts and regular presses to advance the view to the next page (the widget only has one view that is simply redrawn with the data of the next page, excluding the Menu2 views I'm pushing on long presses).

  • But for example, on a va3, and actual long press of the button takes you to the controls. On things like a va3m, a longer press then takes you "assistance". 

    On a va4/venu, long press of the lower button is "back", while the upper button is controls then assistance.

    It's best to stick with things as stated in the UX Guide in the SDK.

    For the menu, it's probably best to use onMenu() for example.  (that's a long press of the screen on a va3), and then use onSelect() which on a va3 is a screen tap, while on a f5, it's a simple press of the upper right button.

  • Gotcha. Thanks for the detailed answers and your time, Jim! 

    It looks like I will need to rewrite portions of the widget so it doesn't interfere with firmware functions. 

    The way I programmed it I was under the impression, that my widget would have full control over the enter key as long as it is running, which works fine on my Fenix 5 and a friend's D2 Charlie. I never thought about interference with hot keys or other shortcuts to be honest. 

    Thank you for the heads up and I guess I better grab some coffee, because it's gonna be a long night Slight smile

  • There are a whole bunch of threads here about about trying to add things like your own long press.  I on the f5/f5+, long press of the upper right button is a configurable hot key, long press of the lower button is another user configurable hot key, long press of down defaults to the music player of the f5+, etc.  And long press of up is "menu" (which you'll see in onMenu().