Skip to content

WearOS support - #3218

Merged
TheLastProject merged 14 commits into
mainfrom
wip/wearos
Aug 12, 2026
Merged

WearOS support#3218
TheLastProject merged 14 commits into
mainfrom
wip/wearos

Conversation

@TheLastProject

@TheLastProject TheLastProject commented Jul 20, 2026

Copy link
Copy Markdown
Member

Fixes #25

TODO:

TODO but can wait until after the first release:

For current versioning plan see #3247, related F-Droid thread: https://forum.f-droid.org/t/question-about-submitting-a-wearos-companion-app-to-f-droid/34580

@TheLastProject

Copy link
Copy Markdown
Member Author

Just one thing remaining: taking the watch to an actual store and seeing if it works well with the scanner and then this can be merged and released :)

@TheLastProject

Copy link
Copy Markdown
Member Author

Just got a crash on my test device when just starting Catima. But starting it a second time worked fine:

java.lang.RuntimeException: Unable to create application protect.card_locker.LoyaltyCardLockerApplication: android.app.ForegroundServiceStartNotAllowedException: startForegroundService() not allowed due to mAllowStartForeground false: service me.hackerchick.catima.debug/protect.card_locker.wearos.BluetoothServerService
	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7624)
	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(ActivityThread.java:0)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2400)
	at android.os.Handler.dispatchMessage(Handler.java:106)
	at android.os.Looper.loopOnce(Looper.java:226)
	at android.os.Looper.loop(Looper.java:313)
	at android.app.ActivityThread.main(ActivityThread.java:8762)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
Caused by: android.app.ForegroundServiceStartNotAllowedException: startForegroundService() not allowed due to mAllowStartForeground false: service me.hackerchick.catima.debug/protect.card_locker.wearos.BluetoothServerService
	at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:54)
	at android.app.ForegroundServiceStartNotAllowedException$1.createFromParcel(ForegroundServiceStartNotAllowedException.java:50)
	at android.os.Parcel.readParcelableInternal(Parcel.java:4809)
	at android.os.Parcel.readParcelable(Parcel.java:4777)
	at android.os.Parcel.createExceptionOrNull(Parcel.java:3040)
	at android.os.Parcel.createException(Parcel.java:3029)
	at android.os.Parcel.readException(Parcel.java:3012)
	at android.os.Parcel.readException(Parcel.java:2954)
	at android.app.IActivityManager$Stub$Proxy.startService(IActivityManager.java:6214)
	at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1967)
	at android.app.ContextImpl.startForegroundService(ContextImpl.java:1933)
	at android.content.ContextWrapper.startForegroundService(ContextWrapper.java:839)
	at androidx.core.content.ContextCompat$Api26Impl.startForegroundService(ContextCompat.java:871)
	at androidx.core.content.ContextCompat.startForegroundService(ContextCompat.java:563)
	at protect.card_locker.wearos.WearSyncServiceManager.start(WearSyncServiceManager.kt:108)
	at protect.card_locker.wearos.WearSyncServiceManager.synchronize(WearSyncServiceManager.kt:62)
	at protect.card_locker.LoyaltyCardLockerApplication.onCreate(LoyaltyCardLockerApplication.java:49)
	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1266)
	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7619)
	... 9 more

@TheLastProject

Copy link
Copy Markdown
Member Author

Worked around the crash in #3259

blacklight and others added 14 commits August 11, 2026 22:06
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
Also always display sync status on screen
This improves the sizing of the notification icons and uses a generic
sync icon for the Bluetooth server running (so users don't get used to
ignoring the Catima icon).

Generated throudh Android Studio New -> Image Asset -> Notification
Icons -> Path: .design/master_monochrome.svg -> Trim: Yes -> Padding: 0%
@TheLastProject

Copy link
Copy Markdown
Member Author

Tested it with the self-scan at the local Albert Heijn. Worked fine, bit finicky at the second checkout scanner but no issues. I can see people like this over taking their phone out of their pocket/bag.

@TheLastProject

Copy link
Copy Markdown
Member Author

Is this perfect? No. Especially not with the weird random foreground service crash I got once.

Is it good enough for people to start using? Yeah, I definitely think so!

@TheLastProject
TheLastProject merged commit 0869623 into main Aug 12, 2026
5 checks passed
@TheLastProject
TheLastProject deleted the wip/wearos branch August 12, 2026 15:48
@TheLastProject

Copy link
Copy Markdown
Member Author

Weblate set up for the new Wear OS component, so translators can start translating :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Wear OS support

2 participants