Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #16992 from etiennesegonzac/bug-980984-incoming-al…
Browse files Browse the repository at this point in the history
…ert-from-system

Bug 980984 - Alert the user of an incoming from the system app to improve performance.
r=alive, rik
  • Loading branch information
etiennesegonzac committed Mar 11, 2014
2 parents 6826cb8 + 5e60d21 commit 88677ea
Show file tree
Hide file tree
Showing 10 changed files with 481 additions and 244 deletions.
77 changes: 0 additions & 77 deletions apps/communications/dialer/js/calls_handler.js 100755 → 100644
Expand Up @@ -13,30 +13,8 @@ var CallsHandler = (function callsHandler() {
var telephony = window.navigator.mozTelephony;
telephony.oncallschanged = onCallsChanged;

var settings = window.navigator.mozSettings;

var displayed = false;
var closing = false;
var ringing = false;

/* === Settings === */
var activePhoneSound = null;
SettingsListener.observe('audio.volume.notification', 7, function(value) {
activePhoneSound = !!value;
if (ringing && activePhoneSound) {
ringtonePlayer.play();
}
});

var phoneSoundURL = new SettingsURL();
SettingsListener.observe('dialer.ringtone', '', function(value) {
ringtonePlayer.pause();
ringtonePlayer.src = phoneSoundURL.set(value);

if (ringing && activePhoneSound) {
ringtonePlayer.play();
}
});

// Setting up the SimplePhoneMatcher
// XXX: check bug-926169
Expand All @@ -51,16 +29,6 @@ var CallsHandler = (function callsHandler() {

var btHelper = new BluetoothHelper();

var ringtonePlayer = new Audio();
ringtonePlayer.mozAudioChannelType = 'ringer';
ringtonePlayer.src = phoneSoundURL.get();
ringtonePlayer.loop = true;

var activateVibration = null;
SettingsListener.observe('vibration.enabled', true, function(value) {
activateVibration = !!value;
});

var screenLock;

/* === Setup === */
Expand Down Expand Up @@ -97,8 +65,6 @@ var CallsHandler = (function callsHandler() {
}
};

setupSystemIAC();

postToMainWindow('ready');
}

Expand All @@ -108,25 +74,6 @@ var CallsHandler = (function callsHandler() {
}
}

function setupSystemIAC() {
navigator.mozApps.getSelf().onsuccess = function(evt) {
var app = evt.target.result;
app.connect('dialercomms').then(function(ports) {
ports.forEach(function(port) {
port.onmessage = function(event) {
if (event.data !== 'stop_ringtone') {
return;
}

ringtonePlayer.pause();
ringing = false;
activateVibration = false;
};
});
});
};
}

/* === Handled calls === */
var highPriorityWakeLock = null;
function onCallsChanged() {
Expand Down Expand Up @@ -284,35 +231,11 @@ var CallsHandler = (function callsHandler() {
}

function handleFirstIncoming(call) {
var vibrateInterval = 0;
if ('vibrate' in navigator && activateVibration != false) {
vibrateInterval = window.setInterval(function vibrate() {
// Wait for the setting value to return before starting a vibration.
if (activateVibration) {
navigator.vibrate([200]);
}
}, 600);
navigator.vibrate([200]);
}

if (activePhoneSound == true) {
ringtonePlayer.play();
ringing = true;
} else if (activePhoneSound == null) {
// Let's wait for the setting to return before playing any sound.
ringing = true;
}

screenLock = navigator.requestWakeLock('screen');

call.addEventListener('statechange', function callStateChange() {
call.removeEventListener('statechange', callStateChange);

ringtonePlayer.pause();
ringing = false;

window.clearInterval(vibrateInterval);

if (screenLock) {
screenLock.unlock();
screenLock = null;
Expand Down
84 changes: 0 additions & 84 deletions apps/communications/dialer/test/unit/calls_handler_test.js 100755 → 100644
Expand Up @@ -116,28 +116,6 @@ suite('calls handler', function() {
assert.isTrue(toDefaultSpy.calledOnce);
});

test('should ring if the setting is enabled', function() {
var playSpy = this.sinon.spy(MockAudio.prototype, 'play');

MockSettingsListener.mCallbacks['audio.volume.notification'](7);
CallsHandler.setup();
MockMozTelephony.mTriggerCallsChanged();

assert.isTrue(playSpy.called);
});

test('should vibrate right away if the setting is enabled', function() {
var vibrateSpy = this.sinon.spy(navigator, 'vibrate');

MockSettingsListener.mCallbacks['vibration.enabled'](true);
CallsHandler.setup();
MockMozTelephony.mTriggerCallsChanged();

assert.isTrue(vibrateSpy.calledOnce);
this.sinon.clock.tick(600);
assert.isTrue(vibrateSpy.calledTwice);
});

suite('> call isn\'t picked up', function() {
setup(function() {
MockMozTelephony.mTriggerCallsChanged();
Expand Down Expand Up @@ -1414,66 +1392,4 @@ suite('calls handler', function() {
});
});
});

suite('> inter app communication', function() {
var connectStub;
var thenStub;
var portStub;

setup(function() {
portStub = this.sinon.stub();

thenStub = this.sinon.stub();

connectStub = this.sinon.stub();
connectStub.returns({then: thenStub });

var result = { connect: connectStub };

// Pretend vibration is enabled
MockSettingsListener.mCallbacks['vibration.enabled'](true);

CallsHandler.setup();
MockNavigatormozApps.mTriggerLastRequestSuccess(result);
});

test('should listen to "dialercomms" channel', function() {
assert.isTrue(connectStub.calledWith('dialercomms'));
});

test('should listen to messages on the "dialercomms" channel', function() {
thenStub.yield([portStub]);
assert.isFunction(portStub.onmessage);
});

suite('> when receiving messages', function() {
var pauseSpy;
var vibrateSpy;

var mockCall;
var mockHC;

setup(function() {
pauseSpy = this.sinon.spy(MockAudio.prototype, 'pause');
thenStub.yield([portStub]);

vibrateSpy = this.sinon.spy(navigator, 'vibrate');

portStub.onmessage({data: 'stop_ringtone'});

mockCall = new MockCall('12334', 'incoming');
mockHC = telephonyAddCall.call(this, mockCall);
});

test('should stop ringtone', function() {
assert.isTrue(pauseSpy.called);
});

test('should stop vibration', function() {
MockMozTelephony.mTriggerCallsChanged();
this.sinon.clock.tick(1000);
assert.isFalse(vibrateSpy.called);
});
});
});
});
1 change: 0 additions & 1 deletion apps/communications/manifest.webapp
Expand Up @@ -82,7 +82,6 @@
"wifi-manage":{},
"time": {},
"audio-channel-telephony":{},
"audio-channel-ringer":{},
"idle":{},
"storage": {},
"device-storage:sdcard": { "access": "readcreate" },
Expand Down
4 changes: 1 addition & 3 deletions apps/system/index.html
Expand Up @@ -88,6 +88,7 @@
<script defer src="js/sound_manager.js"></script>
<script defer src="js/source_view.js"></script>
<script defer src="js/hardware_buttons.js"></script>
<script defer src="js/dialer_ringer.js"></script>
<script defer src="js/system_banner.js"></script>
<script defer src="js/system_dialog.js"></script>
<script defer src="js/home_gesture.js"></script>
Expand Down Expand Up @@ -349,9 +350,6 @@
<script defer src="js/storage_watcher.js"></script>
<link rel="stylesheet" type="text/css" href="style/storage_watcher/storage_watcher.css">

<!-- Inter App Communication with Dialer -->
<script defer src="js/dialercomms.js"></script>

<!-- Rocketbar -->
<script defer src="js/browser.js"></script>
<script defer src="js/rocketbar.js"></script>
Expand Down
2 changes: 1 addition & 1 deletion apps/system/js/bootstrap.js
Expand Up @@ -66,7 +66,7 @@ window.addEventListener('load', function startup() {
// Please sort it alphabetically
window.activities = new Activities();
window.devtoolsView = new DevtoolsView();
window.dialerComms = new DialerComms();
window.dialerRinger = new DialerRinger().start();
window.remoteDebugger = new RemoteDebugger();

window.telephonySettings = new TelephonySettings();
Expand Down

0 comments on commit 88677ea

Please sign in to comment.