The Complications API is kind of a mess right now... help?

I've found so many discrepancies between documentation & reality.  The system is a really great idea, but the documentation for each complication is really unhelpful.  And the return format for some of this data is pretty tough to work with. 

Does anyone have more authoritative info for what's going on with this API?

Example 1: COMPLICATION_TYPE_CURRENT_WEATHER

Documentation says "Value is a String with the current weather"

I expected to receive a string value, like "Sunny" or "Cloudy", but instead the value being returned is a Lang.Number.  I'm assuming this is the condition number, like we get from the weather API?  See output from debugger attached:  (Can't attach image due to forum error, "The selected file is not allowed due to file quota restrictions.", so please see link here:)

Example 2: COMPLICATION_TYPE_TRAINING_STATUS

Documentation says "Value is a String representing your training status", but there's no list of what those strings could be.  I'd love to be able to show icons for each of these statuses or just have some idea about what they are, but there's no easy way to get all the valid values.  I did find the list of training statuses in an article here, but immediately I got a string that didn't match -- instead of "No Status" (from the article) I got "No Result."  Also, how would one even going about simulating all the possible training statuses if we can't get a list?

Example 3: COMPLICATION_TYPE_RECOVERY_TIME

Documentation says: "Value is a Number of seconds remaining in your recovery time" (Emphasis added)

Ha! The comedy.  The simulator is giving me complication.unit = "h" (for hours, I assume?).  And when I load this up on the watch, I'm getting minutes!  That's 3 different kinds of units up in the air. 

  • I also suffered with COMPLICATION_TYPE_TRAINING_STATUS. I wanted to show training status using colors, so I tried to check string value and choose color. However the string is in device language so my code does not work globally unless I check strings in all other languages. I think at least there should be list of strings as "range".

  • Welcome to Garmin :(

    You can add your idea to the long list of announced but never really implemented features, like: settings groups, array settings,...

  • The API doc as well as the sim do need some work, but what you see on a device is consistent from what I've seen.  I have a test watch face that can subscribe to any of the 39 native complications, display their value, and see what happens with "onPress".

    Yes, the doc and sim should be fixed, but for now, I'd go with what you see on a real device as that probably won't change.

  • Yes so I gathered all English strings like 'Peaking' and 'Detraining' and wrote code to set colors according to what the string for the current training status is. It worked fine on English devices but when I switched language to Korean it didn't work. After changing language the string is now "운동 능력 향상" and "디트레이닝", the strings are now translated to the language I chose.

    So if I consider all the global users for implementing the feature, I should gather all the translations of training status strings.... And now I hope that the API provides something localization-free. Disappointed

  • pretty sure that these things are already translated in the watch. Can't we use "built-in" Rez.Strings.peaking or something similar?

  • In this case, I would just display the string as trying to convert the string (in the watches language) to a number could result in a memory issue with your app and a possible maintainence  issue if a string changes, a new language added, etc..

    Native complications are published in a way that they are used with native watch faces and not how someone may want to use them with CIQ.

  • Yeah it feels like I just "picked" the training status strings which were supposed to be delivered to native watch faces.

    Hope I can reach built-in strings... Until then I should find out how to display string neatly. Thanks.

  • Translated strings for the different languages are in the garmin/text folder the *.ln* files, but I've never heard of a way to access them with CIQ.

    Another wrinkle here is if you use custom fonts to display the string, where that font needs all characters for all languages.  It's best to just use a native font for this.

  • I'm just going to tag in here again, with this: the store doesn't even list the complications permission correctly:

    This app requires access to:

    • Run in the background when it is not active (potentially affecting battery life)
    • Send/receive information to/from the Internet
    • ??permissions.complicationsubscriber_en_US??
    • GPS location
    • Heart rate, barometer, temperature, and altitude history
    • Your Garmin ConnectTm fitness profile
  • Yes, the store is missing the proper strings for the permissions, including for a publisher.

    • ??permissions.complicationpublisher_en_US??