Commit Graph

426 Commits

Author SHA1 Message Date
Peter Steinberger
412a3eb1ac build: bump version to 2026.3.22 2026-03-22 11:58:33 -07:00
Kaneki
d551d8b8f7 fix: make Android current-location callback cancellation-safe (#52318) (thanks @Kaneki-x)
* Android: make current-location callback cancellation-safe

* fix: make Android current-location callback cancellation-safe (#52318) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 22:40:45 +05:30
Kaneki
c7788773bf fix: serialize TalkModeManager player cleanup (#52310) (thanks @Kaneki-x)
* Android: fix MediaPlayer double-release race in TalkModeManager

* Android: guard currentPosition read against concurrent player release

* fix: serialize TalkModeManager player cleanup

* fix: serialize TalkModeManager player cleanup (#52310) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 22:31:30 +05:30
Felippe Mercurio
8790c54635 fix(android): use scheme default port for gateway setup URLs (#43540)
* fix(android): use scheme default port for gateway setup URLs

* test(android): cover gateway endpoint default ports

* fix(android): preserve direct gateway default port

* fix(android): preserve explicit cleartext port display

* fix: preserve Android gateway setup URL ports (#43540) (thanks @fmercurio)

---------

Co-authored-by: clawdia <clawdia@fmercurio.tech>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 10:21:38 +05:30
Goweii
e7e4c68caf Android: update status bar appearance in OpenClawTheme (#51098)
* Android: update status bar appearance in OpenClawTheme

* fix: update Android status bar appearance (#51098) (thanks @goweii)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 09:33:24 +05:30
Kaneki
1e98dbcad3 Android: fix Bitmap memory leaks in PhotosHandler (#41888)
* Android: fix Bitmap memory leaks in PhotosHandler

Bitmaps created by decodeScaledBitmap and intermediate scaled copies
inside encodeJpegUnderBudget were never recycled, leaking native memory
on every photos.latest invocation (up to 20 bitmaps per call).

- latest(): wrap bitmap usage in try/finally to guarantee recycle
- decodeScaledBitmap(): recycle the decoded bitmap after scaling
- encodeJpegUnderBudget(): use try/finally to recycle intermediate
  scaled bitmaps on all exit paths (success, compress failure, and
  cannot-shrink-further early returns)

Made-with: Cursor

* Android: guard decodeScaledBitmap against scale() exceptions

* fix: note Android photos bitmap cleanup (#41888) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:53:26 +05:30
Kaneki
2909d8cd12 Android: fix Bitmap memory leaks in CanvasController snapshots (#41889)
* Android: fix Bitmap memory leaks in CanvasController snapshots

snapshotPngBase64() and snapshotBase64() create bitmaps via
captureBitmap() and scaleForMaxWidth() but never recycle them,
leaking native memory on every canvas snapshot invocation.

Wrap both methods in nested try/finally blocks:
- outer: always recycles the captured bitmap
- inner: recycles the scaled bitmap only when it differs from the
  captured one (scaleForMaxWidth returns `this` when no scaling needed)

Made-with: Cursor

* fix: note Android canvas snapshot bitmap leak in changelog (#41889) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:50:42 +05:30
Kaneki
88da51d91b Android: fix temp file leak in CameraHandler.handleClip (#41890)
* Android: fix temp file leak in CameraHandler.handleClip

When readBytes() throws (IOException, OOM, etc.), the recorded clip
file was never deleted because delete() only ran on the success path.

Move file.delete() into a finally block so the temp file is cleaned up
regardless of whether readBytes() succeeds or fails.

Made-with: Cursor

* fix: Android camera clip cleanup (#41890) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:49:50 +05:30
kaneki
f7866c1c15 Android: escape SQL LIKE wildcards in contacts search query
The contacts search passed user input directly into a LIKE pattern
without escaping % and _ characters, causing them to act as SQL
wildcards and return incorrect results.

Add an escapeLikePattern() helper that escapes \, %, and _ with a
backslash, and add ESCAPE '\' to the selection clause so SQLite
treats them as literal characters.

Made-with: Cursor
2026-03-22 08:48:29 +05:30
kaneki
d38561acbe Android: fix Bitmap memory leaks in CameraCaptureManager.snap 2026-03-22 08:44:06 +05:30
Kaneki
d6346aaf63 Android: fix sensor callback race condition in MotionHandler (#43781)
* Android: fix sensor callback race in MotionHandler using tryResume

* call completeResume before unregisterListener to avoid coroutine leak

* replace internal tryResume/completeResume with AtomicBoolean guard

* use CancellableContinuation.resume(value, onCancellation) for cancellation safety

* use non-deprecated resume overload for kotlinx.coroutines 1.10+

* fix: simplify Android motion continuation resume

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:41:02 +05:30
Kaneki
e7814f7ba0 Android: fix incomplete JS string escaping in A2UI action status (#43784)
* Android: fix incomplete JS string escaping in A2UI action status

* escape U+2028/U+2029 Unicode line terminators in JS strings

* refactor(android): serialize A2UI action status strings

* fix: serialize Android A2UI action status strings (#43784) (thanks @Kaneki-x)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-22 08:39:53 +05:30
Ayaan Zaidi
b67baae1f6 fix: make permission rationale completion single-shot 2026-03-22 08:34:02 +05:30
kaneki
6db72746fb Android: keep permission dialog cleanup on the main thread 2026-03-22 08:34:02 +05:30
kaneki
518d2dd6a9 Android: harden permission dialogs across activity teardown 2026-03-22 08:34:02 +05:30
Ayaan Zaidi
4c60956d8e build(android): update Gradle tooling 2026-03-20 17:12:10 +05:30
Ayaan Zaidi
3bda64f75c perf(android): reduce tab-switch CPU churn 2026-03-20 17:10:18 +05:30
Ayaan Zaidi
0c2e6fe97f ci(android): use explicit flavor debug tasks 2026-03-20 12:55:52 +05:30
Ayaan Zaidi
f09f98532c feat(android): hide restricted capabilities in play builds 2026-03-20 12:45:25 +05:30
Ayaan Zaidi
ecec0d5b2c build(android): add play and third-party release flavors 2026-03-20 12:45:25 +05:30
Ayaan Zaidi
2afd65741c fix: preserve talk provider and speaking state 2026-03-20 11:08:21 +05:30
Ayaan Zaidi
47e412bd0b fix(review): preserve talk directive overrides 2026-03-20 11:01:24 +05:30
Ayaan Zaidi
4a0341ed03 fix(review): address talk cleanup feedback 2026-03-20 11:01:24 +05:30
Ayaan Zaidi
4386a0ace8 refactor(android): remove legacy elevenlabs talk stack 2026-03-20 11:01:24 +05:30
Ayaan Zaidi
e3afaca1a6 refactor(android): route talk playback through gateway 2026-03-20 11:01:24 +05:30
Ayaan Zaidi
f7fe75a68b refactor(android): simplify talk config parsing 2026-03-20 11:01:24 +05:30
xubaolin
bfe979dd5b refactor: add Android LocationHandler test seam (#50027) (thanks @xu-baolin) 2026-03-19 20:57:43 +05:30
Ayaan Zaidi
040c43ae21 feat(android): benchmark script 2026-03-19 13:13:14 +05:30
Ayaan Zaidi
0443ee82be fix(android): auto-connect gateway on app open 2026-03-19 12:49:18 +05:30
Ayaan Zaidi
608b9a9af2 fix(android): show copyable gateway diagnostics 2026-03-19 10:47:12 +05:30
lixuankai
c86de678f3 feat(android): support android node sms.search (#48299)
* feat(android): support android node sms.search

* feat(android): support android node sms.search

* fix(android): split sms search permissions

* fix: document android sms.search landing (#48299) (thanks @lixuankai)

---------

Co-authored-by: lixuankai <lixuankai@oppo.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-19 08:52:15 +05:30
Ayaan Zaidi
64e412e57e fix(android): lazy-init node runtime after onboarding 2026-03-16 18:54:51 +05:30
Ayaan Zaidi
3e360ec8cb fix(android): shrink chat image attachments 2026-03-16 18:47:09 +05:30
Ayaan Zaidi
a41be2585f fix(android): preserve chat message identity on refresh 2026-03-16 18:42:25 +05:30
Ayaan Zaidi
56e23a887f fix(android): reduce chat recomposition churn 2026-03-16 18:42:20 +05:30
Ace Lee
d7ac16788e fix(android): support android node calllog.search (#44073)
* fix(android): support android node  `calllog.search`

* fix(android): support android node calllog.search

* fix(android): wire callLog through shared surfaces

* fix: land Android callLog support (#44073) (thanks @lxk7280)

---------

Co-authored-by: lixuankai <lixuankai@oppo.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-15 14:54:32 +05:30
Ayaan Zaidi
37c79f84ba fix(android): theme popup surfaces 2026-03-15 09:48:08 +05:30
Sebastian Schubotz
db20141993 feat(android): add dark theme (#46249)
* Android: add mobile dark theme

* Android: fix remaining dark mode card surfaces

* Android: address dark mode review comments

* fix(android): theme onboarding flow

* fix: add Android dark theme coverage (#46249) (thanks @sibbl)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-15 08:35:04 +05:30
Ayaan Zaidi
2ae8837987 fix: keep android canvas home visible after restart 2026-03-14 11:03:02 +05:30
Ayaan Zaidi
1f9cc647f8 build: upload Android native debug symbols 2026-03-14 09:44:31 +05:30
Ayaan Zaidi
f251e7e2c2 build: shrink Android app release bundle 2026-03-14 09:39:33 +05:30
Ayaan Zaidi
f1d9fcd407 build(android): strip unused dnsjava resolver service before R8 2026-03-14 09:25:17 +05:30
Ayaan Zaidi
3fb629219e build(android): add auto-bump signed aab release script 2026-03-14 09:25:17 +05:30
Ayaan Zaidi
df765f602b fix: default Android TLS setup codes to port 443 2026-03-14 08:54:01 +05:30
Ayaan Zaidi
45721d5dec fix: polish Android QR scanner onboarding (#45021) 2026-03-13 17:13:54 +05:30
Ayaan Zaidi
b934cb49c7 fix(android): use Google Code Scanner for onboarding QR 2026-03-13 17:13:54 +05:30
Kaneki
84428bbba6 Android: fix HttpURLConnection leak in TalkModeVoiceResolver (#43780)
* Android: fix HttpURLConnection leak in TalkModeVoiceResolver.listVoices

* fix null errorStream NPE and preserve HTTP keep-alive

* fix: restore voice resolver disconnect cleanup

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-13 14:59:21 +05:30
Ayaan Zaidi
c04544891d feat(android): consolidate Settings into grouped card sections
Remove header bloat, merge Node info into a single Device card,
group permissions into Media/Notifications/Data Access cards with
internal dividers, and combine Screen+Debug into Preferences.
Sections reduced from 9 to 6.
2026-03-13 14:31:39 +05:30
Ayaan Zaidi
8b0e16a1c8 feat(android): soften chat role labels and deduplicate session header
Rename role labels to You/OpenClaw/System, update streaming label to
OpenClaw · Live, and remove the redundant SESSION row + Connected pill
since the top bar and chip row already convey both.
2026-03-13 14:31:39 +05:30
Ayaan Zaidi
c761b5b8a8 feat(android): compact chat composer layout
Remove MESSAGE label and divider, let text field auto-size instead
of fixed 92dp, and merge Detail/Attach into the bottom action row.
2026-03-13 14:31:39 +05:30