Skip to content
Snippets Groups Projects
Commit 972f664b authored by David Baker's avatar David Baker
Browse files

add sounds to the calling interface

parent 1dc4ad1e
No related branches found
No related tags found
No related merge requests found
...@@ -105,6 +105,29 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even ...@@ -105,6 +105,29 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even
} }
); );
}); });
$rootScope.$watch('currentCall.state', function(newVal, oldVal) {
if (newVal == 'ringing') {
angular.element('#ringbackAudio')[0].pause();
angular.element('#ringAudio')[0].load();
angular.element('#ringAudio')[0].play();
} else if (newVal == 'invite_sent') {
angular.element('#ringAudio')[0].pause();
angular.element('#ringbackAudio')[0].load();
angular.element('#ringbackAudio')[0].play();
} else if (newVal == 'ended' && oldVal == 'connected') {
angular.element('#ringAudio')[0].pause();
angular.element('#ringbackAudio')[0].pause();
angular.element('#callendAudio')[0].play();
} else if (newVal == 'ended' && oldVal == 'invite_sent') {
angular.element('#ringAudio')[0].pause();
angular.element('#ringbackAudio')[0].pause();
angular.element('#busyAudio')[0].play();
} else if (oldVal == 'invite_sent') {
angular.element('#ringbackAudio')[0].pause();
} else if (oldVal == 'ringing') {
angular.element('#ringAudio')[0].pause();
}
});
$rootScope.$on(matrixPhoneService.INCOMING_CALL_EVENT, function(ngEvent, call) { $rootScope.$on(matrixPhoneService.INCOMING_CALL_EVENT, function(ngEvent, call) {
console.trace("incoming call"); console.trace("incoming call");
...@@ -125,7 +148,7 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even ...@@ -125,7 +148,7 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even
$animate.addClass(icon, 'callIconRotate'); $animate.addClass(icon, 'callIconRotate');
$timeout(function(){ $timeout(function(){
$rootScope.currentCall = undefined; $rootScope.currentCall = undefined;
}, 2000); }, 4070);
}, 100); }, 100);
}; };
...@@ -139,7 +162,7 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even ...@@ -139,7 +162,7 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even
$animate.addClass(icon, 'callIconRotate'); $animate.addClass(icon, 'callIconRotate');
$timeout(function(){ $timeout(function(){
$rootScope.currentCall = undefined; $rootScope.currentCall = undefined;
}, 2000); }, 4070);
}, 100); }, 100);
} }
}]); }]);
...@@ -120,7 +120,9 @@ angular.module('MatrixCall', []) ...@@ -120,7 +120,9 @@ angular.module('MatrixCall', [])
}, function(e) { }, function(e) {
self.getLocalOfferFailed(e); self.getLocalOfferFailed(e);
}); });
this.state = 'create_offer'; $rootScope.$apply(function() {
self.state = 'create_offer';
});
}; };
MatrixCall.prototype.gotUserMediaForAnswer = function(stream) { MatrixCall.prototype.gotUserMediaForAnswer = function(stream) {
...@@ -138,7 +140,9 @@ angular.module('MatrixCall', []) ...@@ -138,7 +140,9 @@ angular.module('MatrixCall', [])
}, },
}; };
this.peerConn.createAnswer(function(d) { self.createdAnswer(d); }, function(e) {}, constraints); this.peerConn.createAnswer(function(d) { self.createdAnswer(d); }, function(e) {}, constraints);
this.state = 'create_answer'; $rootScope.$apply(function() {
self.state = 'create_answer';
});
}; };
MatrixCall.prototype.gotLocalIceCandidate = function(event) { MatrixCall.prototype.gotLocalIceCandidate = function(event) {
...@@ -177,7 +181,11 @@ angular.module('MatrixCall', []) ...@@ -177,7 +181,11 @@ angular.module('MatrixCall', [])
offer: description offer: description
}; };
matrixService.sendEvent(this.room_id, 'm.call.invite', undefined, content).then(this.messageSent, this.messageSendFailed); matrixService.sendEvent(this.room_id, 'm.call.invite', undefined, content).then(this.messageSent, this.messageSendFailed);
this.state = 'invite_sent';
self = this;
$rootScope.$apply(function() {
self.state = 'invite_sent';
});
}; };
MatrixCall.prototype.createdAnswer = function(description) { MatrixCall.prototype.createdAnswer = function(description) {
...@@ -189,7 +197,10 @@ angular.module('MatrixCall', []) ...@@ -189,7 +197,10 @@ angular.module('MatrixCall', [])
answer: description answer: description
}; };
matrixService.sendEvent(this.room_id, 'm.call.answer', undefined, content).then(this.messageSent, this.messageSendFailed); matrixService.sendEvent(this.room_id, 'm.call.answer', undefined, content).then(this.messageSent, this.messageSendFailed);
this.state = 'connecting'; self = this;
$rootScope.$apply(function() {
self.state = 'connecting';
});
}; };
MatrixCall.prototype.messageSent = function() { MatrixCall.prototype.messageSent = function() {
...@@ -211,9 +222,11 @@ angular.module('MatrixCall', []) ...@@ -211,9 +222,11 @@ angular.module('MatrixCall', [])
console.trace("Ice connection state changed to: "+this.peerConn.iceConnectionState); console.trace("Ice connection state changed to: "+this.peerConn.iceConnectionState);
// ideally we'd consider the call to be connected when we get media but chrome doesn't implement nay of the 'onstarted' events yet // ideally we'd consider the call to be connected when we get media but chrome doesn't implement nay of the 'onstarted' events yet
if (this.peerConn.iceConnectionState == 'completed' || this.peerConn.iceConnectionState == 'connected') { if (this.peerConn.iceConnectionState == 'completed' || this.peerConn.iceConnectionState == 'connected') {
this.state = 'connected'; self = this;
this.didConnect = true; $rootScope.$apply(function() {
$rootScope.$apply(); self.state = 'connected';
self.didConnect = true;
});
} }
}; };
...@@ -251,17 +264,26 @@ angular.module('MatrixCall', []) ...@@ -251,17 +264,26 @@ angular.module('MatrixCall', [])
}; };
MatrixCall.prototype.onRemoteStreamStarted = function(event) { MatrixCall.prototype.onRemoteStreamStarted = function(event) {
this.state = 'connected'; self = this;
$rootScope.$apply(function() {
self.state = 'connected';
});
}; };
MatrixCall.prototype.onRemoteStreamEnded = function(event) { MatrixCall.prototype.onRemoteStreamEnded = function(event) {
this.state = 'ended'; self = this;
this.stopAllMedia(); $rootScope.$apply(function() {
this.onHangup(); self.state = 'ended';
self.stopAllMedia();
self.onHangup();
});
}; };
MatrixCall.prototype.onRemoteStreamTrackStarted = function(event) { MatrixCall.prototype.onRemoteStreamTrackStarted = function(event) {
this.state = 'connected'; self = this;
$rootScope.$apply(function() {
self.state = 'connected';
});
}; };
MatrixCall.prototype.onHangupReceived = function() { MatrixCall.prototype.onHangupReceived = function() {
......
...@@ -70,6 +70,22 @@ ...@@ -70,6 +70,22 @@
<button ng-click="hangupCall()">Reject</button> <button ng-click="hangupCall()">Reject</button>
</span> </span>
<button ng-click="hangupCall()" ng-show="currentCall && currentCall.state != 'ringing' && currentCall.state != 'ended' && currentCall.state != 'fledgling'">Hang up</button> <button ng-click="hangupCall()" ng-show="currentCall && currentCall.state != 'ringing' && currentCall.state != 'ended' && currentCall.state != 'fledgling'">Hang up</button>
<audio id="ringAudio" loop>
<source src="media/ring.ogg" type="audio/ogg" />
<source src="media/ring.mp3" type="audio/mpeg" />
</audio>
<audio id="ringbackAudio" loop>
<source src="media/ringback.ogg" type="audio/ogg" />
<source src="media/ringback.mp3" type="audio/mpeg" />
</audio>
<audio id="callendAudio">
<source src="media/callend.ogg" type="audio/ogg" />
<source src="media/callend.mp3" type="audio/mpeg" />
</audio>
<audio id="busyAudio">
<source src="media/busy.ogg" type="audio/ogg" />
<source src="media/busy.mp3" type="audio/mpeg" />
</audio>
</div> </div>
<a href id="headerUserId" ng-click='goToUserPage(user_id)'>{{ user_id }}</a> <a href id="headerUserId" ng-click='goToUserPage(user_id)'>{{ user_id }}</a>
&nbsp; &nbsp;
......
File added
File added
File added
File added
File added
File added
File added
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment