3

Is there a possibility from the connectIQ API to check if the watch is round or square?

My app is drawing a progress bar for a timer and I could make it generic if I find a way to determine if the screen is round or square

dmrrlc
  • 201
  • 2
  • 7

3 Answers3

4

The class Toybox::System::DeviceSettings has the method screenShape().

With the following possible return values:

  • SCREEN_SHAPE_ROUND = 1
  • SCREEN_SHAPE_SEMI_ROUND = 2
  • SCREEN_SHAPE_RECTANGLE = 3
Seb Charrot
  • 2,816
  • 1
  • 22
  • 24
2

It is possible to use the resource compiler to specify resources for different screen geometry. This can be leveraged to identify on which device an app is running.

In your project, specify a unique set of resources (which includes things like strings, images, and menus) for each device you intend to support by creating device-specific directories in the root of the project (e.g. resources-vivoactive or resources-fenix3).

Next, create a string resource in the resources.xml file within each devices' resource directory that specifies the device type:

<resources>
    <bitmap id="LauncherIcon" filename="images/launcher_icon.png" />
    <string id="AppName">MyApp</string>
    <string id="deviceType">vivoactive</string>
</resources>

When the app starts, do a simple check to get the device on which the app is running:

function onStart() {
    deviceType = Ui.loadResource(Rez.Strings.deviceType);
}

Then, check the deviceType whenever if you need to do something unique for a particular device:

function drawProgressBar() {
    if (deviceType.equals("vivoactive")) {
        // Do vivoactive-specific stuff here
        ...
    }
}

You could abstract this a little if you prefer, buy using more generic deviceTypes like 'round', 'square', etc., so you wouldn't have to write logic to handle every unique device model.

Connect IQ
  • 81
  • 1
  • 3
  • 3
    You can check the shape of the device screen by checking the value of `Sys.getDeviceSettings().screenShape`. The documentation for it can be found [here](http://developer.garmin.com/downloads/connect-iq/monkey-c/doc/Toybox/System/DeviceSettings.html#screenShape-instance_method). – Travis Vitek Dec 28 '15 at 23:01
1

There doesn't seem to be a direct function but you can always check for watch face's width and height:

dc.getWidth(), dc.getHeight()

If they're equal, say, 218px, you have a Fenix 3 and obviously a round face. If they're 205px x 148px, you're dealing with a square-faced vívoactive.

Maybe write a function you can call from onLayout:

function isRoundFace (dc) {
    return dc.getWidth() == dc.getHeight();
}
Perttu Haliseva
  • 530
  • 5
  • 16