InfiniTimeOrg / InfiniTime

Firmware for Pinetime smartwatch written in C++ and based on FreeRTOS
GNU General Public License v3.0
2.63k stars 902 forks source link

settings: Add setting for auto-opening apps #2004

Open vkareh opened 4 months ago

vkareh commented 4 months ago

~MusicService: Autostart music app on music start~ ~When starting music on a paired device, the music service will automatically trigger the music app to open.~ edit: Repurposed this PR to a more general feature for auto-opening apps.

Certain apps can be configured to auto-open based on component events:

InfiniSim_2024-02-09_142706

Fixes https://github.com/InfiniTimeOrg/InfiniTime/discussions/1619

github-actions[bot] commented 4 months ago
Build size and comparison to main: Section Size Difference
text 378348B 1140B
data 940B 0B
bss 63564B 8B
mark9064 commented 4 months ago

I like the sound of this feature, but I think it should be optional. I have my phone and computers all connected with KDE connect, so any audio I play on any device syncs to my phone which sends it to InifiniTime. This is great, but making it switch to the music app every time any audio/media is played anywhere would drive me insane as it'd be switching all the time

FintasticMan commented 4 months ago

I personally don't think that this would be a very nice user experience. As Mark says, I play media on my phone quite a lot, which will have it start and stop quite frequently. If that causes it to switch to the music app each time, it would get quite annoying. I think that this would be better implemented as a quick-switch action, where you can configure an app to get to quickly.

vkareh commented 4 months ago

I've added the ability to configure which apps auto-open based on certain events:

InfiniSim_2024-02-09_142706

mark9064 commented 4 months ago

I like this generic solution a lot, my preferred watch face has battery percentage on it so being able to turn off auto battery show would be nice

JF002 commented 4 months ago

I understand that such a feature might be useful in some cases but... I would like to challenge it for the following reasons:

As I said, I understand why some users request this kind of feature, but I'm not sure this is the best way to implement it. Feel free to share your opinions :)

MoonlightWave-12 commented 4 months ago

Some of my thoughts about this feature:

It should only automatically open apps while the smartwatch is not used for something else; so, basically only while it is on the watch-face.

Considering that most of this feature depends on interacting with a companion-app, i think that it may be better to have a way for a companion-app to request opening any app on the smartwatch and keep the settings for wether or not to do it in that companion-app. It would also be good if the companion-app can check for the availability of a smartwatch-app, so it can decide wether or not to offer such a setting, or tell the user how to make it available.

Automatically opening an app can make the usage-flow much easier. For example: just start navigation in a smartphone-app, and one is ready to go; instead of having to change things on 2 devices, going through several screens on each device. I also consider it to be an accessibility-feature; it basically makes such functionality usable/discoverable to begin with, for various people who do not have toying-with-tech as a hobby.

vkareh commented 4 months ago

@JF002

UX : [...] It means that the state of the application that is currently running would be erased [...]

I updated the patchset to only load the app if there's no app loaded currently.

Code : I don't think this implementation is compatible with the new compile time configuration of applications and watch faces : what happens in the Navigation or Music app are not built into the firmware?

Great question. Testing this now to see what happens.

[...] we avoid adding new settings whenever possible and we favor implementing a single solid default behavior instead.

Fair point. I think this concern is the only one we cannot address in code and would require a decision from the InfiniTime core team (InfiniTeam? :stuck_out_tongue: )

vkareh commented 4 months ago

@JF002

  • Code : I don't think this implementation is compatible with the new compile time configuration of applications and watch faces : what happens in the Navigation or Music app are not built into the firmware?

I've accounted for this now. The DisplayApp verifies if the app is available before attempting to perform the action.

@MoonlightWave-12

It should only automatically open apps while the smartwatch is not used for something else; so, basically only while it is on the watch-face.

This is now fixed.

[...] have a way for a companion-app to request opening any app on the smartwatch [...]

This could be interesting... Gadgetbridge has device-specific settings. InfiniTime could implement a service that allows it to interact with apps.

[...] or tell the user how to make it available [...]

General users won't be able to decide which app gets installed on their watch.

Automatically opening an app can make the usage-flow much easier.

I agree. This feature's goal is to increase usability. When I play music/podcasts, I expect my watch to know so that I can see/interact. Same with navigation. My companion app (Gadgetbridge) is smart enough that it doesn't just randomly sends any sound/notification as though it were media, and limits it only to actual media playing on my phone (Spotify Lite / AntennaPod). Things like movies from streaming services do not get sent to the watch (which is what I expect anyway), so the behaviour here is really what I would expect of a connected device.