I notice that some Garmin Apps on the F7/Epix Gen2 range display the ability to turn off the touch screen:
Is that functionality available in the Toybox API?
I notice that some Garmin Apps on the F7/Epix Gen2 range display the ability to turn off the touch screen:
Is that functionality available in the Toybox API?
The safest approach is to allow both buttons and touch, as you'll likely have users that prefer buttons, touch, or use both.
Nope, that's just not an option for me: I have too many…
Isn't programmatically disabling touch just intercepting touch messages and returning true without actually doing anything?
I suspect that's a picture of a native activity,
Yes, it's the Garmin "Boating" app.
can disable the touch screen in the simulator with…
Not Available in the API (including 4.1.0). On the watch itself, a hot key can be set up to turn touch on/off, and in the watch settings, you can set if touch is used in general, during activities, and during sleep.
The safest approach is to allow both buttons and touch, as you'll likely have users that prefer buttons, touch, or use both.
The safest approach is to allow both buttons and touch, as you'll likely have users that prefer buttons, touch, or use both.
Nope, that's just not an option for me: I have too many mutually incompatible layouts to be able to support both, for example:
And with the "Toggle Touch" Simulator setting broken, unless I lash out another $1300 to buy an F7, I am unable to develop an option that relies on the user disabling Touch on an F7/Epix 2 to run my app.
Garmin's in-house app developers know this is a big deal and have built themselves a solution (programmatically disable touch) which they have denied to us developers.
Brandon.ConnectIQ Garmin: our apps are selling your watches, please assist. At the moment my app is only selling last years models.
Isn't programmatically disabling touch just intercepting touch messages and returning true without actually doing anything?
There is no public or non-public Connect IQ API that can disable the touch screen, so I'm not sure why you have the impression we've withheld something. In fact, the typical approach to this kind of thing is for the system to provide status to Connect IQ about a system setting (e.g System.DeviceSettings.isTouchScreen() ), but Connect IQ is not able to make system-wide changes to the related setting.
I think ekutter-dnu's suggestion below is one piece of an approach--you could intercept touch events and have them do nothing in the app. For UX/layouts, you'd need to use Jungles to control which devices will have the desired layouts.
I am curious about your comment about Toggle Touch Screen option being broken. Can you explain what is broken? There are some things about the control that I think need to be addressed (its state defaults to on with each app run, the option is not visible when not applicable), but it does allow you to enable and disable the touch screen.
Brandon.ConnectIQThanks for your response.
There is no public or non-public Connect IQ API that can disable the touch screen, so I'm not sure why you have the impression we've withheld something
I am basing my comments on a conversation I have had with a potential app user with an Epix2. He sent me the screen shot in my opening post that, by displaying "Touch Disabled", indicated to him that the app had disabled the touch screen. He had not manually disabled the touch screen. My conclusion was that the app had disabled the touch screen.
Can you explain what is broken?
In the 4.0.7 Simulator, there is an option Settings>Toggle Touch Screen for Epix Gen2 and Fenix7 watch apps. In either state, checked or non-checked, System.getDeviceSettings().isTouchScreen returns true and the touch screen is active.
I think ekutter's suggestion below is one piece of an approach
Unfortunately that is not an option for my app as I have mutually incompatible screen layouts for touch and non-touch screens.
I am basing my comments on a conversation I have had with a potential app user with an Epix2.
Ah, okay - I suspect that's a picture of a native activity, which does have some options available that I don't think are available for Connect IQ apps. I can raise this as an improvement, but I realize that won't help you short term.
checked or non-checked, System.getDeviceSettings().isTouchScreen returns true and the touch screen is active.
I'll have to double-check this. I did find this thread where there's some additional discussion about this. I can disable the touch screen in the simulator with this option, but I think isTouchScreen() should be returning false when it's disabled.
Unfortunately that is not an option for my app as I have mutually incompatible screen layouts for touch and non-touch screens.
Right - that's why I suggested using Jungles. With them, you can specify resources and even separate code to run on specific products. So if you configured the project to use the non-touch layouts on fenix 7 and epix plus implemented touch event handlers to just return true on those products, it would effectively make these products behave like button-only products while running your app.
I suspect that's a picture of a native activity,
Yes, it's the Garmin "Boating" app.
can disable the touch screen in the simulator with this option
Not in my version of Simulator 4.0.7. It functions as a touch screen in either state of the toggle.
[CORRECTION] with Toggled checked, the touch screen IS disabled, but System.getDeviceSettings().isTouchScreen still returns true.
Right - that's why I suggested using Jungles
Yes, but it's a lot of work which, because of the Sim problem, I can't test without buying a $1k+ watch!
My solution would be to test the state of the touch screen at the start and require the user to disable touch before running my app.
Touch screens anyway perform poorly in my wet-fingered sailing environment.
This is simple with jungles. I'll use the epix2 as an example.
base.excludeAnnotations=forceButtons epix2.excludeAnnotations=useIsTouchScreenSettings
Then in your code, then have
(:useTouchScreenSettings) function whatDoIDo() {return false;} (:forceButtons) function whatDoIDo() {return true;}
The return value from whatDoIDo() tells you what you need to know.
Update: I had it backwards in the jungle.
This is simple with jungles.
This might be true in a simple app, but it is a lot of work in my app where I'm providing a lot of functionality to the touch-device user via on-screen buttons in many views.
It would be much simpler for me to be able to test the state of the touch screen on a hybrid device (touch and buttons) and require the user to disable touch before starting the app.
Without a device or a working sim I am unable to test that approach.
The retun value from whatDoIDo() really tells you all you need to know. Which layouts to use, and what input to ignore, Save the return value and just check it in your code in the same way you check isTouchScreen in your code.