Commit graph

157 commits

Author SHA1 Message Date
0f5bc33619 fix(calls): resolve call glare via co-presence, not answer
Both users starting a call in the same DM at once collapsed both attempts: two useSwitchOrStartDmCall instances (header outgoing + strip answer) race on the shared callEmbedAtom, the counter-ring surfaces during the outgoing embed's forming window, and answering it disposes+recreates the embed — putting two MembershipManagers on one (user,device) state-key, driving the SDK 'Missing own membership: force re-join' thrash. Fix per MatrixRTC canon (a call is co-presence, there is no 'answer'): a formingCallRoomIdAtom set synchronously before the outgoing awaits marks the room as forming; an incoming call for a room we already hold/are forming becomes a no-op (element-x model), the counter-ring is suppressed while forming, and the native-answer consumer won't tear down our forming call. Root + design from the internal research workflow. Not yet validated on device.
2026-07-04 02:40:47 +03:00
71a71fa56b feat(calls): verify Answer-intent token + harden native ring lifecycle
Every Answer PendingIntent now carries a per-install secret (CallActionToken, private prefs); the JS consumer and MainActivity over-lock verify it before auto-joining, blocking a forged hot-mic join from another local app. MainActivity marks the Telecom session answered natively on a shade Answer, and its over-lock onResume backstop waits a settle window. Native ring start runs fully under telecomLock (no orphan slot), a Telecom failure degrades to notification-only instead of killing the ring, the full-screen ring timeout tracks the real lifetime, and IncomingRing.data is a ConcurrentHashMap. FGS notification/channel strings localized via PushStrings; dead Call.accept key dropped. From the internal multi-agent review.
2026-07-04 02:14:08 +03:00
64517a73f7 fix(calls): close glare cross-call races and lifecycle gaps
Re-dial after a crossed/cancelled DM call now rings again: DM 'ongoing' is peer-scoped so a stale own membership no longer forces a join_existing intent (which drops the ring), and an outgoing start waits for our own membership to leave; zombie same-room dispose first gives the widget a bounded chance to send its leave. Plus: incoming-ring suppress ignores stale own-device membership, useCallJoined resets per embed, no-answer timer re-anchors to the ring actually sent, mute mirror tracks last-sent state, SW self-dismiss checks eventId, Telecom disconnect clears a dead-widget atom, and a same-room join marks the native session answered. From the internal multi-agent review.
2026-07-04 02:06:31 +03:00
fe32bed081 fix(calls): harden DM signaling — Doze ring ceiling, FGS onCreate crash, logout teardown, role-aware grace, web ring withdrawal, caller-cancel 2026-06-24 02:44:52 +03:00
3d10fc2d3e feat(calls): over-lock call screen — answer without unlocking (element-x pattern), minimize + live timer 2026-06-24 00:43:39 +03:00
fa09674748 feat(calls): incoming via Telecom + answer-from-killed (session mgmt, FCM ring bridge, phoneCall FGS, JS sync) 2026-06-24 00:43:39 +03:00
2c3dfcb965 refactor(calls): drop TELECOM_ENABLED flag, retire AudioRoute plugin, bump minSdk to 26 2026-06-24 00:43:39 +03:00
f2eb363db4 feat(calls): native self-managed Telecom backend for Android (Phase A/B, flag-gated off, validated on Samsung) 2026-06-23 02:47:17 +03:00
b500afc8a9 fix: harden client against crafted-event crashes and audit-found hardening gaps 2026-06-12 13:04:19 +03:00
a286d1e2c6 feat(telegram): rewrite the widget onto the bridge provisioning API with OpenID auth, a contacts picker, and MSC4039 avatars 2026-06-10 22:24:23 +03:00
717928154b feat(proxy): route Android WebView and native traffic through a user-supplied HTTP/SOCKS5 proxy via an authed loopback relay 2026-06-08 02:18:44 +03:00
7e7630bba4 feat(room): add voice messages with an in-composer recorder, playback bubble, and per-room disable toggle 2026-06-05 18:08:03 +03:00
0ff06e577b feat(calls): redesign the DM voice-call rail with a loudspeaker toggle, live duration and explicit accept/decline, dropping the deafen control 2026-06-05 01:07:08 +03:00
d985b289c9 fix(notifications): show the loudest mode per group and re-enable disabled rules so a server-disabled rule can be toggled 2026-06-04 12:48:55 +03:00
94bc35092a refactor(notifications): cut the email-pusher row and its orphaned hook 2026-06-04 01:20:36 +03:00
185d0a60a7 feat(ai): replace the Vojo AI widget with a native, isolated ChatGPT-style chat surface (threads, history, typing) 2026-06-02 01:49:31 +03:00
fe8ba2878b feat(bots): add the Vojo AI bot widget and its capability-gated add-to-chat room picker 2026-05-31 18:30:52 +03:00
0a62fa8e1d feat(room): colour the DM stream rail per side — white own nick/dots, purple peer nick, gray peer dots, green own dot while awaiting a reply 2026-05-31 13:46:14 +03:00
0f882567c5 feat(room): rework the 1:1 DM timeline into a VS Code-style rail with bold author labels, bubble-less own messages and same-sender run grouping 2026-05-29 23:45:18 +03:00
aa3dbc13ef feat(members): replace MembersDrawer with Dawn-styled members sheet and group hero for every non-1:1 room and channel 2026-05-28 20:51:37 +03:00
2a24ee60ff fix(presence): gate /sync set_presence on app foreground state so background long-polls stop marking idle users as online 2026-05-28 17:22:59 +03:00
870e13d895 feat(mobile-tabs-pager): swipe between Direct, Channels and Bots on Capacitor native with static header, 24px gap, atom-bridged action icons and inert offscreen panes 2026-05-18 22:00:53 +03:00
5dbe83aa9d feat(push): real sender+room avatars via MXC bridge with adaptive shortcut icons, plus review fixes (GROUP_ALERT_ALL, eventId dedup, isEncrypted privacy default, structured roomname parse, mark-as-read optimistic docs) 2026-05-17 17:39:19 +03:00
06778702b2 feat(push): inline RemoteInput reply on per-room notifications for cleartext rooms with optimistic local echo and encryption-state re-dump 2026-05-17 02:29:20 +03:00
38d24e5527 feat(push): group room messages into a per-room MessagingStyle conversation with DM/group channels, mark-as-read action and receipt-driven dismiss 2026-05-17 02:06:21 +03:00
408f165f60 feat(push): add WorkManager polling fallback that delivers notifications via /_matrix/client/v3/notifications when FCM is blocked 2026-05-17 01:27:55 +03:00
f2ecca64da feat(share): receive Android system share intents and drop the payload into the next chat the user opens via a top banner cue 2026-05-16 19:33:06 +03:00
6982ec374e chore(lint): close all typecheck and eslint tech debt to enable husky pre-commit hook with --max-warnings 0 2026-05-16 17:22:53 +03:00
c78984a6d8 fix(direct): exclude bridged portal rooms from Direct tab so Telegram chats live exclusively in their per-bridge personal filtering space 2026-05-16 00:31:38 +03:00
81d23be61f feat(theme): ship Settings picker with system/light/dark and Vojo light palette reshading sidebar, chat, bubbles, horseshoe void and PWA chrome 2026-05-15 01:06:49 +03:00
1ee1d50c41 fix(dm-name): drop matrix-js-sdk mxid disambiguation suffix from DM room names by using peer rawDisplayName 2026-05-13 22:54:26 +03:00
11c46d9250 feat(channels): replace workspace switcher popout with sliding horseshoe sheet and inline create-channel row, retire sidebar CreateTab 2026-05-13 14:21:39 +03:00
0b31e6b930 feat(channels): route room-in-space navigations through /channels/ with eventId-anchored permalinks and channels-aware cold-push redirect 2026-05-10 20:13:50 +03:00
e80453785e feat(channels): ship M4 per-thread unread with thread receipts mute-aware atom and architectural cleanup 2026-05-10 14:35:51 +03:00
4632be30f7 feat(channels): ship M2 thread drawer + composer + shareable thread URL with cold-load relations repair 2026-05-09 22:49:53 +03:00
efe58dc2e2 feat(channels): ship M1 — Каналы segment with /channels/ routes and channels-mode RoomTimeline filter 2026-05-09 15:06:13 +03:00
c6eba1e935 chore(deps): bump matrix-js-sdk 40.2.0 → 41.4.0 with SessionMembershipData barrel and EC sticky-event capability extension 2026-05-09 13:00:45 +03:00
3ea01a9c3f chore(deps): bump matrix-js-sdk 39.4.0 → 40.2.0 adapting sessionMembershipsForRoom removal and dedup-key trichotomy 2026-05-09 12:18:02 +03:00
0d93a223d0 chore(deps): bump matrix-js-sdk 38.4.0 → 39.4.0 adapting MatrixRTCSession.slotDescription rename 2026-05-09 11:33:55 +03:00
cd824e0c90 feat(profile): mobile top-horseshoe rail and desktop right pane host a Dawn-style user card with hero, info rows, and floating 3-dot actions menu 2026-05-08 19:04:12 +03:00
f4292611cf feat(calls): split-horseshoe call surface with redesigned ring/active pill, orbit border, custom outline icons, tap-to-room 2026-05-08 01:30:36 +03:00
f102593081 Revert "feat(connection): replace 30s 'Connecting...' banner with bottom-edge sync indicator and homeserver footer dot, drop mascot loading splash"
This reverts commit a1ff5db724.
2026-05-03 20:15:26 +03:00
e547c466a8 feat(settings): drop user-facing time/date format toggle and derive everything from system locale via Intl.DateTimeFormat 2026-05-03 19:27:54 +03:00
a1ff5db724 feat(connection): replace 30s 'Connecting...' banner with bottom-edge sync indicator and homeserver footer dot, drop mascot loading splash 2026-05-03 18:21:00 +03:00
ed1544dd5e feat(direct): land inline invite cards with spam-filter toggle and retire the /inbox/ tree along with its sidebar tab 2026-05-03 13:49:33 +03:00
35ade7e941 feat(bots-telegram): ship M12 login flow with BotShell host hero and Go bridgev2 dialect parser 2026-05-02 22:12:37 +03:00
d961dddfbc feat(bots): land Phase 2 widget host/driver with retry UX and route-aware notifications 2026-05-02 00:44:52 +03:00
83e246da1f Add runtime-configured bot tab 2026-05-01 20:21:55 +03:00
3cd1611ee2 fix(call): restore Android CallStyle banner for DM voice calls in encrypted rooms 2026-04-29 13:45:13 +03:00
d2c77496a7 redesign(p4): land Dawn RoomViewHeader for all rooms with peer chrome, presence, member-count subline, and reactive bridge gate. 2026-04-29 01:03:12 +03:00