Skip to content

Commit 7822cfc

Browse files
committed
Refactor call API, move answer, hangup, hold etc methos to Call class.
1 parent 2ec248f commit 7822cfc

File tree

8 files changed

+307
-224
lines changed

8 files changed

+307
-224
lines changed

example/lib/main.dart

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,30 @@ void main() {
1818

1919
class MyApp extends StatelessWidget {
2020
final SIPUAHelper _helper = SIPUAHelper();
21+
var routes = {
22+
'/': (helper) => DialPadWidget(helper),
23+
'/register': (helper) => RegisterWidget(helper),
24+
'/callscreen': (helper, {arguments}) => CallScreenWidget(helper, arguments),
25+
'/about': (helper) => AboutWidget(),
26+
};
27+
28+
Route<dynamic> _onGenerateRoute(RouteSettings settings) {
29+
final String name = settings.name;
30+
final Function pageContentBuilder = routes[name];
31+
if (pageContentBuilder != null) {
32+
if (settings.arguments != null) {
33+
final Route route = MaterialPageRoute(
34+
builder: (context) =>
35+
pageContentBuilder(_helper, arguments: settings.arguments));
36+
return route;
37+
} else {
38+
final Route route = MaterialPageRoute(
39+
builder: (context) => pageContentBuilder(_helper));
40+
return route;
41+
}
42+
}
43+
}
44+
2145
@override
2246
Widget build(BuildContext context) {
2347
return MaterialApp(
@@ -27,12 +51,7 @@ class MyApp extends StatelessWidget {
2751
fontFamily: 'Roboto',
2852
),
2953
initialRoute: '/',
30-
routes: {
31-
'/': (context) => DialPadWidget(_helper),
32-
'/register': (context) => RegisterWidget(_helper),
33-
'/callscreen': (context) => CallScreenWidget(_helper),
34-
'/about': (context) => AboutWidget(),
35-
},
54+
onGenerateRoute: _onGenerateRoute,
3655
);
3756
}
3857
}

example/lib/src/callscreen.dart

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import 'package:sip_ua/sip_ua.dart';
77

88
class CallScreenWidget extends StatefulWidget {
99
final SIPUAHelper _helper;
10-
CallScreenWidget(this._helper, {Key key}) : super(key: key);
10+
final Call _call;
11+
CallScreenWidget(this._helper, this._call, {Key key}) : super(key: key);
1112
@override
1213
_MyCallScreenWidget createState() => _MyCallScreenWidget();
1314
}
@@ -23,26 +24,25 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
2324
MediaStream _remoteStream;
2425

2526
bool _showNumPad = false;
26-
2727
String _timeLabel = '00:00';
2828
Timer _timer;
29-
3029
bool _audioMuted = false;
3130
bool _videoMuted = false;
3231
bool _speakerOn = false;
3332
bool _hold = false;
3433
String _holdOriginator;
3534
CallStateEnum _state = CallStateEnum.NONE;
36-
3735
SIPUAHelper get helper => widget._helper;
3836

3937
bool get voiceonly =>
4038
(_localStream == null || _localStream.getVideoTracks().isEmpty) &&
4139
(_remoteStream == null || _remoteStream.getVideoTracks().isEmpty);
4240

43-
String get remote_identity => helper.remote_identity;
41+
String get remote_identity => call.remote_identity;
42+
43+
String get direction => call.direction;
4444

45-
String get direction => helper.direction;
45+
Call get call => widget._call;
4646

4747
@override
4848
initState() {
@@ -95,7 +95,7 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
9595
}
9696

9797
@override
98-
void callStateChanged(CallState callState) {
98+
void callStateChanged(Call call, CallState callState) {
9999
if (callState.state == CallStateEnum.HOLD ||
100100
callState.state == CallStateEnum.UNHOLD) {
101101
_hold = callState.state == CallStateEnum.HOLD;
@@ -191,12 +191,12 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
191191
}
192192

193193
void _handleHangup() {
194-
helper.hangup();
194+
call.hangup();
195195
_timer.cancel();
196196
}
197197

198198
void _handleAccept() {
199-
helper.answer();
199+
call.answer(helper.buildCallOptions());
200200
}
201201

202202
void _switchCamera() {
@@ -207,25 +207,25 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
207207

208208
void _muteAudio() {
209209
if (_audioMuted) {
210-
helper.unmute(true, false);
210+
call.unmute(true, false);
211211
} else {
212-
helper.mute(true, false);
212+
call.mute(true, false);
213213
}
214214
}
215215

216216
void _muteVideo() {
217217
if (_videoMuted) {
218-
helper.unmute(false, true);
218+
call.unmute(false, true);
219219
} else {
220-
helper.mute(false, true);
220+
call.mute(false, true);
221221
}
222222
}
223223

224224
void _handleHold() {
225225
if (_hold) {
226-
helper.unhold();
226+
call.unhold();
227227
} else {
228-
helper.hold();
228+
call.hold();
229229
}
230230
}
231231

@@ -252,7 +252,7 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
252252
FlatButton(
253253
child: Text('Ok'),
254254
onPressed: () {
255-
helper.refer(_tansfer_target);
255+
call.refer(_tansfer_target);
256256
Navigator.of(context).pop();
257257
},
258258
),
@@ -270,7 +270,7 @@ class _MyCallScreenWidget extends State<CallScreenWidget>
270270

271271
void _handleDtmf(String tone) {
272272
print('Dtmf tone => $tone');
273-
helper.sendDTMF(tone);
273+
call.sendDTMF(tone);
274274
}
275275

276276
void _handleKeyPad() {

example/lib/src/dialpad.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ class _MyDialPadWidget extends State<DialPadWidget>
2727

2828
void _loadSettings() async {
2929
_preferences = await SharedPreferences.getInstance();
30-
_dest =
31-
_preferences.getString('dest') ?? 'sip:[email protected]';
30+
_dest = _preferences.getString('dest') ?? 'sip:[email protected]';
3231
_textController = TextEditingController(text: _dest);
3332
_textController.text = _dest;
3433
this.setState(() {});
@@ -266,9 +265,9 @@ class _MyDialPadWidget extends State<DialPadWidget>
266265
void transportStateChanged(TransportState state) {}
267266

268267
@override
269-
void callStateChanged(CallState callState) {
268+
void callStateChanged(Call call, CallState callState) {
270269
if (callState.state == CallStateEnum.CALL_INITIATION) {
271-
Navigator.pushNamed(context, '/callscreen');
270+
Navigator.pushNamed(context, '/callscreen', arguments: call);
272271
}
273272
}
274273
}

example/lib/src/register.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ class _MyRegisterWidget extends State<RegisterWidget>
295295
}
296296

297297
@override
298-
void callStateChanged(CallState state) {
298+
void callStateChanged(Call call, CallState state) {
299299
//NO OP
300300
}
301301

lib/sip_ua.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
/// only expose the bare minimum of internals required
22
export 'src/enum_helper.dart';
33
export 'src/sip_ua_helper.dart';
4+
5+
export 'src/ua.dart';
6+

lib/src/event_manager/call_events.dart

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,93 +3,109 @@ import '../sip_message.dart';
33
import '../rtc_session.dart';
44
import 'package:flutter_webrtc/webrtc.dart';
55

6-
class EventNewRTCSession extends EventType {
6+
class CallEvent extends EventType {
77
RTCSession session;
8+
String get id => session.id;
9+
CallEvent(this.session);
10+
}
11+
12+
class EventNewRTCSession extends CallEvent {
813
String originator;
914
dynamic request;
10-
EventNewRTCSession({this.session, String originator, dynamic request});
15+
EventNewRTCSession({RTCSession session, String originator, dynamic request})
16+
: super(session);
1117
}
1218

13-
class EventCallConnecting extends EventType {
14-
EventCallConnecting({dynamic request});
19+
class EventCallConnecting extends CallEvent {
20+
EventCallConnecting({RTCSession session, dynamic request}) : super(session);
1521
}
1622

17-
class EventCallEnded extends EventType {
23+
class EventCallEnded extends CallEvent {
1824
String originator;
1925
ErrorCause cause;
2026
IncomingRequest request;
21-
EventCallEnded({this.originator, this.cause, this.request});
27+
EventCallEnded(
28+
{RTCSession session, this.originator, this.cause, this.request})
29+
: super(session);
2230
}
2331

24-
class EventCallProgress extends EventType {
32+
class EventCallProgress extends CallEvent {
2533
String originator;
2634
dynamic response;
27-
EventCallProgress({this.originator, this.response});
35+
EventCallProgress({RTCSession session, this.originator, this.response})
36+
: super(session);
2837
}
2938

30-
class EventCallConfirmed extends EventType {
39+
class EventCallConfirmed extends CallEvent {
3140
String originator;
3241
dynamic ack;
33-
EventCallConfirmed({this.originator, this.ack});
42+
EventCallConfirmed({RTCSession session, this.originator, this.ack})
43+
: super(session);
3444
}
3545

36-
class EventCallHold extends EventType {
46+
class EventCallHold extends CallEvent {
3747
String originator;
38-
EventCallHold({this.originator});
48+
EventCallHold({RTCSession session, this.originator}) : super(session);
3949
}
4050

41-
class EventCallUnhold extends EventType {
51+
class EventCallUnhold extends CallEvent {
4252
String originator;
43-
EventCallUnhold({String originator});
53+
EventCallUnhold({RTCSession session, String originator}) : super(session);
4454
}
4555

46-
class EventCallMuted extends EventType {
56+
class EventCallMuted extends CallEvent {
4757
bool audio;
4858
bool video;
49-
EventCallMuted({this.audio, this.video});
59+
EventCallMuted({RTCSession session, this.audio, this.video}) : super(session);
5060
}
5161

52-
class EventCallUnmuted extends EventType {
62+
class EventCallUnmuted extends CallEvent {
5363
bool audio;
5464
bool video;
55-
EventCallUnmuted({this.audio, this.video});
65+
EventCallUnmuted({RTCSession session, this.audio, this.video})
66+
: super(session);
5667
}
5768

58-
class EventCallAccepted extends EventType {
69+
class EventCallAccepted extends CallEvent {
5970
String originator;
6071
dynamic response;
61-
EventCallAccepted({this.originator, this.response});
72+
EventCallAccepted({RTCSession session, this.originator, this.response})
73+
: super(session);
6274
}
6375

64-
class EventCallFailed extends EventType {
76+
class EventCallFailed extends CallEvent {
6577
dynamic response;
6678
String originator;
6779
ErrorCause cause;
6880
dynamic request;
6981
String status_line;
7082
EventCallFailed(
71-
{String state,
83+
{RTCSession session,
84+
String state,
7285
this.response,
7386
this.originator,
7487
MediaStream stream,
7588
this.cause,
7689
this.request,
77-
this.status_line});
90+
this.status_line})
91+
: super(session);
7892
}
7993

80-
class EventStream extends EventType {
94+
class EventStream extends CallEvent {
8195
String originator;
8296
MediaStream stream;
83-
EventStream({this.originator, this.stream});
97+
EventStream({RTCSession session, this.originator, this.stream})
98+
: super(session);
8499
}
85100

86-
class EventCallRefer extends EventType {
101+
class EventCallRefer extends CallEvent {
87102
String aor;
88103

89104
/// bool Function({Function initCallback, dynamic options}) accept;
90105
dynamic accept;
91106

92107
/// bool Function(dynamic options) reject;
93108
dynamic reject;
94-
EventCallRefer({this.aor, this.accept, this.reject});
109+
EventCallRefer({RTCSession session, this.aor, this.accept, this.reject})
110+
: super(session);
95111
}

0 commit comments

Comments
 (0)