mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 00:05:16 +00:00
Add audio only calls support
This commit is contained in:
@ -324,7 +324,12 @@ class _CallScreenState extends SafeState<CallScreen> {
|
||||
// Register callbacks
|
||||
peerConnection.onIceCandidate =
|
||||
(c) => CallsHelper.sendIceCandidate(convID, memberID, c);
|
||||
peerConnection.onAddStream = (s) => _renderers[memberID].srcObject = s;
|
||||
peerConnection.onAddStream = (s) {
|
||||
setState(() {
|
||||
_membersList.getUser(memberID).stream = s;
|
||||
_renderers[memberID].srcObject = s;
|
||||
});
|
||||
};
|
||||
|
||||
// Request an offer to establish a peer connection
|
||||
await CallsHelper.requestOffer(convID, memberID);
|
||||
@ -373,7 +378,8 @@ class _CallScreenState extends SafeState<CallScreen> {
|
||||
|
||||
/// Call this when a user has interrupted streaming
|
||||
Future<void> _removeRemotePeerConnection(int memberID) async {
|
||||
_membersList.getUser(memberID).status = MemberStatus.JOINED;
|
||||
final member = _membersList.getUser(memberID);
|
||||
member.status = MemberStatus.JOINED;
|
||||
setState(() {});
|
||||
|
||||
if (_peersConnections.containsKey(memberID)) {
|
||||
@ -385,6 +391,11 @@ class _CallScreenState extends SafeState<CallScreen> {
|
||||
await _renderers[memberID].dispose();
|
||||
_renderers.remove(memberID);
|
||||
}
|
||||
|
||||
if (member.stream != null) {
|
||||
member.stream.dispose();
|
||||
member.stream = null;
|
||||
}
|
||||
}
|
||||
|
||||
/// Call this when a member has completely left the call
|
||||
@ -491,7 +502,8 @@ class _CallScreenState extends SafeState<CallScreen> {
|
||||
// Remove peers videos
|
||||
Column(
|
||||
children: _membersList.readyPeers
|
||||
.where((f) => _renderers.containsKey(f.userID))
|
||||
.where(
|
||||
(f) => f.hasVideoStream && _renderers.containsKey(f.userID))
|
||||
.map((f) => _buildMemberVideo(f.userID))
|
||||
.toList(),
|
||||
),
|
||||
@ -528,6 +540,7 @@ class _CallScreenState extends SafeState<CallScreen> {
|
||||
children: <Widget>[
|
||||
// Show / hide user video button
|
||||
_FooterButton(
|
||||
visible: _canMakeVideoCall,
|
||||
icon: Icon(_isLocalStreamVisible
|
||||
? Icons.visibility
|
||||
: Icons.visibility_off),
|
||||
@ -549,6 +562,7 @@ class _CallScreenState extends SafeState<CallScreen> {
|
||||
|
||||
// Toggle video button
|
||||
_FooterButton(
|
||||
visible: _canMakeVideoCall,
|
||||
icon: Icon(isStreamingVideo && !isVideoMuted
|
||||
? Icons.videocam
|
||||
: Icons.videocam_off),
|
||||
@ -583,17 +597,21 @@ class _CallScreenState extends SafeState<CallScreen> {
|
||||
class _FooterButton extends StatelessWidget {
|
||||
final Function() onPressed;
|
||||
final Widget icon;
|
||||
final bool visible;
|
||||
|
||||
const _FooterButton({
|
||||
Key key,
|
||||
@required this.icon,
|
||||
@required this.onPressed,
|
||||
this.visible = true,
|
||||
}) : assert(onPressed != null),
|
||||
assert(icon != null),
|
||||
assert(visible != null),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (!visible) return Container();
|
||||
return Expanded(
|
||||
child: IconButton(
|
||||
icon: icon,
|
||||
|
Reference in New Issue
Block a user