App misbehaving on ForeRunner 935. Fine on simulator

Hi,

I have a watch app which works fine on a couple of watches, but on a 935 it misbehaves.  It's mean to draw lines on the screen, which are downloaded as a json file. This constitutes a map.

It works in the simulator, but on the watch the screen is blank and having got some debug logs off the watch itself, I get a strange output and hoped someone might be able to shed some light.

Each json file has an ID which is a string. This string is number/number/number (eg. 32754/25849/17) respresenting a map tile location

I print the current tiles which are being displayed. The code to populate the tile ids is:

var tiles = new [totalTilesX * totalTilesY];

var x = topLeftTileX;
var i = 0;
while(x <= bottomRightTileX){
var y = topLeftTileY;
while(y <= bottomRightTileY){
tiles[i]= x + "/" + y + "/" + z;
i++;
y++;
}
x++;
}

return tiles;

Then, later on, the code to print the ids

System.println(tiles);

On the 935 Simulator, and on my watch (vivoactive) and a fenix it prints the strings when I print the array.

[32739/25972/17, 32739/25973/17, 32739/25974/17, 32740/25972/17, 32740/25973/17, 32740/25974/17]

On the watch where it doesn't work, when I print the array of values, it prints

[f.a.q.b.l@92a741b2, f.a.q.b.l@92a7b611, f.a.q.b.l@92b1b63b, f.a.q.b.l@86f0b2d1, f.a.q.b.l@86f12730, f.a.q.b.l@86fb275a, f.a.q.b.l@7b3a23f0, f.a.q.b.l@7b3a984f, 
  • Up/down is zoom in/out. Left/right changes the screens. You're right that this is different to the native app. I hadn't actually noticed that, but up/down seemed intiutive for zoom and I've limited options

  • Unfortunately, the native interface teaches the user that swipe down/up is for scrolling and swipe right is to go back, so anything else will be confusing imo.

    The way Garmin handles this on the native course/map screen is that the user has to switch to "Pan/Zoom" mode with a settings menu selection.

    At that point:
    - the START button selects the mode (in your case it could be the button or a screen tap) (selectable modes are either pan left/right, pan up/down or zoom in/out)

    - the UP and DOWN buttons actually perform the pan/zoom actions

    It's all very clunky, but I noticed a popular CIQ app (RouteCourse, from the author of dwMap), seems to do the same thing.

    Unfortunately you don't have access to pinch gestures or arbitrary swipes, but even if you did, you'd still have to solve for button based watches.

    You could have hotspots/buttons on the screen to make the process more intuitive for touchscreen watches at least.

    To see a pic of this, search for "You can move around the map using the upper right button" in this article (https://www.dcrainmaker.com/2019/04/garmin-forerunner-945-multisport-watch-in-depth-review.html). (I don't want to either hotlink or "steal" the author's image.)

    https://www8.garmin.com/manuals/webhelp/forerunner935/EN-US/GUID-C404537E-A4F1-419D-84FB-995BAF3C9591.html

    Panning and Zooming the Map

    1. While navigating, select UP or DOWN to view the map.
    2. Hold .
    3. Select Pan/Zoom.
    4. Select an option:
      • To toggle between panning up and down, panning left and right, or zooming, select START.

      • To pan or zoom the map, select UP and DOWN.

      • To quit, select BACK.

  • If you've the patience, I've removed this header entirely in the hope that's the problem

    https://www.dropbox.com/s/e1gibneqtakgur5/CFMap.prg?dl=0

    Totally understand if you've not. It occurs to me that my simulator will always contain a value in storage for that key, but a fresh device will not, so it's possible I have a state problem when the key is missing from storage entirely.

    It's also clear that the simulator and a device differ when it comes to web requests 

  • It occurs to me that my simulator will always contain a value in storage for that key, but a fresh device will not, so it's possible I have a state problem when the key is missing from storage entirely.

    What if you click "Reset all app data" in the simulator?

  • You can zoom via the menu (when it's not blank!) on your watch and in that case the up/down buttons zoom in and out.

    I've run with it as-is a lot and it's pretty convenient having instant zoom. I'll think about the trade-off.

  • Yeah, Garmin's method is clunky.

    You could have the user tap to enter zoom mode. Or you could use left and right swipes to zoom.

    Nobody said that swipe right *always* has to exit things (it just usually does.) For example, during a non-paused activity, swipe right (and the back button) are usually reserved for taking laps (and you can't instantly exit a native activity while it's active.)

    I mean, since you've already repurposed swipe left and right to switch screens, nobody says you can't invert your scheme to swap the roles of swipe left/right and swipe up/down.

    I guess it would just be rather confusing and arbitrary to assign swipe left and right to zooming in and out.

  • can't quite work out how to quote your info on pan/zoom, but that's super useful and I really appreciate all the help

  • No worries. Yeah these forums aren't great.

    To quote something you have to highlight it, and click on the "Quote" popup that appears.

    Ofc this means that you can't quote external text the same way....

    So the way it works is:

    - The three dots on the right (next to the START button) represent the mode (zoom in/out, pan up/down, pan left/right). START cycles through them

    - For each mode, the appropriate action icon appears beside the UP and DOWN buttons (+/-, up/down arrows, left/right arrows)

    I'm sure for a touchscreen watch, the UI would be different. (I don't think any Garmin touchscreen watches support navigation, although the touchscreen Edge bike computers sure do.)

  • There are difference in the sim on what you may see, and it's often how you specify the URL, parameters and options  A phone with iOS can be a bit more picky.  Sometimes it was adding params as part of the URL instead of in params.

  • haha - I spent a while working out how to reliably stop myself from accidentally swiping myself out of the activities in my app while they were recording. I found menu2 on the button based watches strangely didn't cancel the exit even if you returned false from the method, so I had to use the DMenu component that someone else kindly posted here.  I digress...