Skip to content

DM voice/video calls — call button, ring/accept/decline UI #127

Description

@krazyjakee

Summary

The Flutter client has no DM voice/video call feature — no way to start a call from a DM, and no incoming-call (ring / accept / decline) UI. The underlying voice stack is channel-agnostic and could carry a DM call, but nothing is wired and the backend currently rejects it (see server issue, linked).

Current state

  • Voice stack is channel-agnostic. lib/features/voice/controllers/voice.dart join(channelId, spaceId)client.voice.join(channelId) → LiveKit VoiceSession. spaceId is allowed to be null.
  • No DM call UI. The DM conversation view (lib/features/user/views/accord_direct_messages_conversations.dart) header has back / group-info / group-options (view members, add/rename/leave) + a message composer — but no call button.
  • No incoming-call flow. No ring / accept / decline / missed-call UI; no call-request stream. Grep for incoming / outgoing / ringing / accept / decline in the voice layer returns nothing.
  • No call state model. No AccordCall / call metadata; AccordVoiceServerUpdate carries only LiveKit creds + the user's voiceState.

Blocked on

Server support — DaccordProject/accordserver rejects voice/join on DM channels (channel_not_voice / channel_has_no_space) and has no call signaling. That work must land first. Linked: server issue.

What needs to happen (client)

  • Call button in the DM conversation header (1:1 and group DM), audio + video.
  • Outgoing-call UI (calling… / cancel).
  • Incoming-call UI: ring (sound + banner/full-screen), accept / decline, driven by the new gateway call event.
  • In-call view reuse: adapt VoiceChannelView / voice_view.dart for a DM-call context (no space chrome).
  • Missed-call indicator / system notification.
  • accordkit: wire the new call signaling gateway events into a Riverpod controller (client.voice.join(dmChannelId) already exists for the media side).

Context

Voice transport is LiveKit (packages/livekit_client) via accordkit client.voice. The reference Godot client (../daccord) should be checked for whether it already implements DM calls as a UX reference.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions