Skip to content

feat(widgets): Add Control Center controls and interactive widgets - #2800

Draft
karlitschek wants to merge 3 commits into
feat/haptics-reactions-widgets-call-adaptationfrom
feat/widgets-controls-interactive
Draft

karlitschek wants to merge 3 commits into
feat/haptics-reactions-widgets-call-adaptationfrom
feat/widgets-controls-interactive

Conversation

@karlitschek

Copy link
Copy Markdown
Member

Controls for Control Center, Lock Screen and Action button (iOS 18):

  • Mute in call: mutes/unmutes the microphone of the ongoing call and shows the state
  • Do not disturb: switches the user status between Do not disturb and Online
  • New conversation: opens the app to create or join a conversation

Interactive widgets (iOS 17):

  • The large conversations widget gets a mark as read button (shown as read right away, the real state follows from the server)
  • New small Status widget with buttons for Online, Away, Do not disturb, Invisible

The widget extension has no server access, so the actions are LiveActivityIntents performed in the app's process (launched in the background if needed). Their types are compiled into both targets (TalkWidgetIntents.swift). The app keeps a small state in the app group (call/mute state, user status, TalkControlsState.swift) and reloads controls and the status widget on changes; it is removed on logout.

Also contains a commit letting Xcode sort the widget entries of the project file (same commit in the Apple Watch PR).

Notes

Testing

  • App and all extensions build for the simulator (Xcode 27.1)
  • New unit tests UnitInteractiveWidgetsTest; App Intents metadata of app and widget extension contain the new intents
  • The combined branch with all features also builds in Release for generic/platform=iOS (iPhone, iPad, Mac "Designed for iPad") and for watchOS hardware
  • Not yet tried by hand with a real account and device, hence the draft.

🤖 Generated with Claude Code

karlitschek and others added 3 commits October 25, 2026 21:36
…ect file

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
Control Center, Lock Screen and Action button controls (iOS 18):
- Mute in call: mutes or unmutes the microphone in the ongoing call,
  and shows whether it is muted
- Do not disturb: switches the user status between Do not disturb and
  Online
- New conversation: opens the app to create or join a conversation

Interactive widgets (iOS 17):
- The large conversations widget gets a button to mark a conversation
  as read. The widget shows it as read right away, the real state
  follows once the server answered and the rooms were updated.
- New small Status widget, showing the current status with buttons to
  switch between Online, Away, Do not disturb and Invisible.

The widget extension has no access to the server, so the actions are
LiveActivityIntents, which are performed in the app's process (it is
launched in the background when needed). Their types are compiled into
both targets (TalkWidgetIntents.swift). The app keeps a small state in
the app group, whether there's a call, whether the microphone is muted,
and the user status (TalkControlsState.swift), and reloads the controls
and the status widget when it changes. It is removed on logout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant