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

Commit

Permalink
Bug 894287 - [Lockscreen] When there are connected calls, disable 'em…
Browse files Browse the repository at this point in the history
…ergency call' button

(cherry-picked & conflict resolved from a6a5ba4)
  • Loading branch information
rexboy7 committed Aug 13, 2013
1 parent 6d5e08e commit e6bab78
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
12 changes: 12 additions & 0 deletions apps/system/js/lockscreen.js
Expand Up @@ -134,6 +134,9 @@ var LockScreen = {
window.addEventListener('screenchange', this);
document.addEventListener('visibilitychange', this);

/* Telephony changes */
navigator.mozTelephony.addEventListener('callschanged', this);

/* Gesture */
this.area.addEventListener('mousedown', this);
this.areaCamera.addEventListener('click', this);
Expand Down Expand Up @@ -390,6 +393,15 @@ var LockScreen = {
evt.stopImmediatePropagation();
evt.stopPropagation();
break;

case 'callschanged':
var emergencyCallBtn = this.passcodePad.querySelector('a[data-key=e]');
if (!!navigator.mozTelephony.calls.length) {
emergencyCallBtn.classList.add('disabled');
} else {
emergencyCallBtn.classList.remove('disabled');
}
break;
}
},

Expand Down
8 changes: 8 additions & 0 deletions apps/system/style/lockscreen/lockscreen.css
Expand Up @@ -504,6 +504,14 @@ button::-moz-focus-inner {
vertical-align: middle;
}

#lockscreen-passcode-pad > a.disabled {
pointer-events: none;
}

#lockscreen-passcode-pad > a.disabled > span {
color: #4d4d4d;
}

#lockscreen-panel-emergency-call {
transform: translateX(100%);
}
Expand Down
44 changes: 44 additions & 0 deletions apps/system/test/unit/lockscreen_test.js
@@ -1,8 +1,14 @@
'use strict';
requireApp('system/test/unit/mock_clock.js', function() {
window.realClock = window.Clock;
window.Clock = MockClock;
requireApp('system/js/lockscreen.js');
});

requireApp('system/test/unit/mock_settings_listener.js');
requireApp('system/test/unit/mocks_helper.js');
requireApp('system/test/unit/mock_l10n.js');
requireApp('system/test/unit/mock_navigator_moz_telephony.js');

requireApp('system/js/lockscreen.js');

Expand All @@ -15,6 +21,8 @@ mocksForStatusBar.forEach(function(mockName) {
});

suite('lockscreen', function() {
var subject;

var mocksHelper;

var realSettingsListener, realMozL10n;
Expand All @@ -23,6 +31,10 @@ suite('lockscreen', function() {

var red_png, green_png;

var realMozTelephony;
var domPasscodePad;
var domEmergencyCallBtn;

suiteSetup(function() {
mocksHelper = new MocksHelper(mocksForStatusBar);
mocksHelper.suiteSetup();
Expand All @@ -41,16 +53,33 @@ suite('lockscreen', function() {
});

setup(function() {
subject = window.LockScreen;

realMozTelephony = navigator.mozTelephony;
navigator.mozTelephony = window.MockNavigatorMozTelephony;

fakeLockscreenPanel = document.createElement('div');
fakeLockscreenPanel.classList.add('lockscreen-panel');
fakeLockscreenPanel.setAttribute('data-wallpaper', '');
document.body.appendChild(fakeLockscreenPanel);

domPasscodePad = document.createElement('div');
domPasscodePad.id = 'lockscreen-passcode-pad';
domEmergencyCallBtn = document.createElement('a');
domEmergencyCallBtn.dataset.key = 'e';
domPasscodePad.appendChild(domEmergencyCallBtn);
document.body.appendChild(domPasscodePad);
subject.passcodePad = domPasscodePad;

mocksHelper.setup();
});

teardown(function() {
fakeLockscreenPanel.parentNode.removeChild(fakeLockscreenPanel);
navigator.mozTelephony = realMozTelephony;
document.body.removeChild(domPasscodePad);
LockScreen.passcodePad = null;

mocksHelper.teardown();
});

Expand Down Expand Up @@ -123,6 +152,21 @@ suite('lockscreen', function() {
done();
});
});
});

test('Emergency call: should disable emergency-call button',
function() {
navigator.mozTelephony.calls = {length: 1};
var evt = {type: 'callschanged'};
subject.handleEvent(evt);
assert.isTrue(domEmergencyCallBtn.classList.contains('disabled'));
});

test('Emergency call: should enable emergency-call button',
function() {
navigator.mozTelephony.calls = {length: 0};
var evt = {type: 'callschanged'};
subject.handleEvent(evt);
assert.isFalse(domEmergencyCallBtn.classList.contains('disabled'));
});
});
5 changes: 5 additions & 0 deletions apps/system/test/unit/mock_clock.js
@@ -0,0 +1,5 @@
'use strict';

function MockClock() {
this.membervariable = 0;
}

0 comments on commit e6bab78

Please sign in to comment.