Viewing watch face during activity

Viewing watch face during activity

My issue is not so much with developing the app, but how it relates to other functions on the watch such as watch face, and maybe settings etc.

Tested hardware: VivoActive HR (fw 4.0), Epix (latest fw, but that is very old)

1) app vs activity
I get confused on apps vs activities reading the VivoActive HR manual. Are these terms interchangeable?
Are 'Activities' the garmin provided apps? and App are download from the store?

2) watch face during app/activity
I am having issues related to using a Connect IQ app, and while it is running viewing the watch face.
First of all is this allowed?

On the VivoActive HR, the manual indicates:
"during an activity, hold your finger on the touchscreen to view the watch face and widgets."

- i find this works with some apps/activities - but not others. Why?
- do developers block that function within apps to avoid issues?

I also found this at Garmin in a search online...
vivoactive watch face changes during activities
The vivoactive will default to Garmin's watch face during any activity being recorded.
This will disregard any Connect IQ watch faces until the activity has been saved or discarded.


3) conflict with connect IQ watch face at the same time as a connect IQ app
This was my initial issue, still not solved.
The app was working fine, but if i briefly view the watch face, then return to the still running app, things got messed up.
I am able to do this on the Epix, but not on the VivoActive HR as i cannot get the VVAHR to respond per #2 above.
Is this a forbidden thing to do maybe, but the epix did not prevent it?

4) timer conflicts
My guess is that issue 3 above relates to timer conflicts. Apparently different watch models might have different
number of timers, but not sure which have how many.
If the app is using a timer, and you view a watch face that is also using a timer - does the watch face mess up
the app timer usage, perhaps mess the callback?
How does the garmin firmware/sdk manage timers in this case?



5) UI.popView issue?
I have seen on occasion when exiting my app that it does not return to the watch face but somehow jumps into another activity.
My theory is that if i make too many calls to popView, maybe it returns to the watch face then goes on elsewhere for some reason.
I was calling popView as it seems to be a common way to exit the app, after showing Ui.ProgressBar with a timer. Is there a better way?
is Sys.exit() better - but some dicussions suggest not.
  • Viewing watch face during activity

    My issue is not so much with developing the app, but how it relates to other functions on the watch such as watch face, and maybe settings etc.

    Tested hardware: VivoActive HR (fw 4.0), Epix (latest fw, but that is very old)

    1) app vs activity
    I get confused on apps vs activities reading the VivoActive HR manual. Are these terms interchangeable?
    Are 'Activities' the garmin provided apps? and App are download from the store?

    This can be a bit confusing, as you have CIQ Apps, and they can be watch faces, data fields, widgets or apps! (I try to be consistent can use "watch-apps" instead of just apps, but then there's the bit about how watch-apps can be used on non watches, like an Edge)
    2) watch face during app/activity
    I am having issues related to using a Connect IQ app, and while it is running viewing the watch face.
    First of all is this allowed?

    On the VivoActive HR, the manual indicates:
    "during an activity, hold your finger on the touchscreen to view the watch face and widgets."

    - i find this works with some apps/activities - but not others. Why?
    - do developers block that function within apps to avoid issues?

    What you see in the manual applies to native activities - Run,walk, etc. When running a CIQ watch-app (which may or may not record an activity),you don't have access to the watch face/widget loop
    I also found this at Garmin in a search online...
    vivoactive watch face changes during activities
    The vivoactive will default to Garmin's watch face during any activity being recorded.
    This will disregard any Connect IQ watch faces until the activity has been saved or discarded.


    Ok, I'm not sure of the specifics on the vahr right now, but on some devices, when you are in an activity and go to the widget loop, you'll see a native watch face if you have any CIQ data fields - it's all about the available memory, as on some devices the watch face can be 90k On the vahr, it may not have the memory for a CIQ watch even without CIQ data fields being used.
    3) conflict with connect IQ watch face at the same time as a connect IQ app
    This was my initial issue, still not solved.
    The app was working fine, but if i briefly view the watch face, then return to the still running app, things got messed up.
    I am able to do this on the Epix, but not on the VivoActive HR as i cannot get the VVAHR to respond per #2 above.
    Is this a forbidden thing to do maybe, but the epix did not prevent it?

    Like I said, you can't access a CIQ watchface while running a CIQ watch-app.
    4) timer conflicts
    My guess is that issue 3 above relates to timer conflicts. Apparently different watch models might have different
    number of timers, but not sure which have how many.
    If the app is using a timer, and you view a watch face that is also using a timer - does the watch face mess up
    the app timer usage, perhaps mess the callback?
    How does the garmin firmware/sdk manage timers in this case?
    .

    I'm not really sure what you are saying here. Typically, a watchface doesn't have it's own timer (you can only use them after a gesture for 10 seconds). With a watch-app, they have their own timers that aren't tied to the watch face.

    5) UI.popView issue?
    I have seen on occasion when exiting my app that it does not return to the watch face but somehow jumps into another activity.
    My theory is that if i make too many calls to popView, maybe it returns to the watch face then goes on elsewhere for some reason.
    I was calling popView as it seems to be a common way to exit the app, after showing Ui.ProgressBar with a timer. Is there a better way?
    is Sys.exit() better - but some dicussions suggest not.


    Sys.exit() or returning false in the onBack() call of your main view. Which device are you seeing this on?

    One thing to note here, is between the Epix and vahr, there are some fairly significant difference. The Epix is running CIQ 1.2.x (that was fall of 2015 timeframe, and IIRC, there's only been 1 general firmware to it since), while the va-hr is 2.3.x or maybe even 2.4.x. Other CIQ 1.x device are at 1.4.x right now, and 1.3.x was a whole bunch of changes/fixes.

  • Awesome, thanks for the detailed answers Jim!

    Understood about the limitations of EPIX. I just purchased a 'vivo active hr' to resolve this issue.

    2)
    "When running a CIQ watch-app (which may or may not record an activity),you don't have access to the watch face/widget loop"

    ** Ok, that is the big one, i had not realized that and have spent a LOT of time trying to fix my code to allow this.
    Great to know this. I had not seen this mentioned anywhere, are you aware of this documented somewhere - so i can
    better explain this limitation to others who may see it as a fault in the application?

    Does garmin firmware prevent this, or maybe i need to add code to intercept key events for 'Ui.KEY_CLOCK' and block them?

    With 'vivo active hr', I dont recall what i did, but i believe i managed one time to see a watch face while
    my app was running. I have also heard from other's using my app on more recent devices, it sounded like they
    had also somehow found an interaction to do this, which caused issues.

    The EPIX, with it's old firmware allows you to long press within an watch-app, and see whatever watch face you have.
    With built in watch face it worked ok, but some connect IQ watch faces failed.


    4) Mostly moot point now according to #2
    Ok, i have not been developing watch faces so not as familiar with that. It appears a face can call Timer.Timer().
    What i was finding is varied results, but those that had counting time on the screen, i figured they used the timer, and they seemed to be the ones causing trouble.

    5) popView
    Someone seemed to have this kind of issue on fenix3, and i think i saw it once on th vvaHR.
    I am still getting used to the new device so might be something i did wrong.

    I have been using UI.ProgressBar, with it's own timer and MenuInputDelegate.
    This displays progress during discard/save for a few seconds to the user.
    When the timer expired i was attempting to exit the app completely from within this view.
    If i read you right i should exit the progress view only, then with flags or something indicate to the main view
    that it should exit the app. Since i do not want the the user to need to puch BACK
    again i would use sys.exit() there.
  • I don't know if it's documented anywhere that you can't get to the widget loop with a CIQ watch app. BTW, there is another variation. You can't get to the widget loop from even a native activity on the 735. A FW thing is both cases. (actually, more a "available memory" issue.) KEY_CLOCK really doesn't come into play (it doesn't even occur on most devices)
  • I'll just mention this in case it helps others.

    KEY_CLOCK does occur on the EPIX, and allows the user to load a watch face, including a CIQ one. But this causes lots of problems for the APP. Apparently newer firmware blocks this out (ie VVAHR) but none is available for the EPIX, and perhaps some other older watches? Maybe Fenix3?
    Anyhow in onKey, if key.getKey() = Ui.KEY_CLOCK, then return true. This fixes it up on the epix.

    Related to your comment about access to watch face within an app, i also found this statement somewhere which tends to agree with what you said.
    "In fact if you are running a CIQ watch face it returns you to one of the "stock" watch faces because you cannot run two CIQ programs at the same time (other than data fields)."

    I am not certain if this info is in the garmin documentation, i have not found it. I think this limitation would be a good one to include, it wasted a lot of my time trying to fix my app.