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 #32561 from gabrielesvelto/bug-1199773-callscreen-…
Browse files Browse the repository at this point in the history
…lockscreen-state-fix

Bug 1199773 - Make the callscreen state coherent with the lockscreen state. r=thills
  • Loading branch information
gabrielesvelto committed Dec 3, 2015
2 parents 50ecf52 + f737129 commit 217ee96
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 83 deletions.
74 changes: 29 additions & 45 deletions apps/callscreen/js/call_screen.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,6 @@ var CallScreen = {
lockedDate: document.getElementById('lockscreen-date'),

statusMessage: document.getElementById('statusMsg'),
configs: {
lockMode: 'incoming-call'
},
showStatusMessage: function cs_showStatusMessage(message) {
var STATUS_TIME = 2000;
var paragraph = this.statusMessage.querySelector('p');
Expand Down Expand Up @@ -160,35 +157,27 @@ var CallScreen = {
this.calls.addEventListener('click', CallsHandler.toggleCalls.bind(this));

window.addEventListener('resize', this.resizeHandler.bind(this));
window.addEventListener('hashchange', this.hashchangeHandler.bind(this));
this.hashchangeHandler();

SettingsListener.observe('wallpaper.image', null,
this._wallpaperImageHandler.bind(this));

// Interaction with the lockscreen
this._lockScreenLayoutInitialized = false;
navigator.mozSettings.addObserver(
'lockscreen.locked', this._lockscreenStateChange.bind(this)
);

this.syncSpeakerEnabled();
},

_connInfoManagerInitialized: false,
initLockScreenConnInfoManager: function cs_initLockScreenConnInfoManager() {
if (this._connInfoManagerInitialized) {
return;
}

/* mobile connection state on lock screen */
if (window.navigator.mozMobileConnections) {
new window.LockScreenConnInfoManager(CallScreen.lockscreenConnStates);
CallScreen._connInfoManagerInitialized = true;
}
},

_slideInitialized: false,
initLockScreenSlide: function cs_initLockScreenSlide() {
if (this._slideInitialized) {
return;
}
this._slideInitialized = true;

// Setup incoming call screen slider
this.hangUpIcon = document.getElementById('lockscreen-area-hangup');
this.pickUpIcon = document.getElementById('lockscreen-area-pickup');
Expand Down Expand Up @@ -238,6 +227,23 @@ var CallScreen = {
});
},

_lockscreenStateChange: function cs_lockscreenStateChange(event) {
if (event.settingValue) {
if (this.screen.dataset.layout === 'incoming') {
this.initLockScreenLayout();
this.render('incoming-locked');
}

this.initUnlockerEvents();
} else {
if (this.screen.dataset.layout === 'incoming-locked') {
this.render('incoming');
}

this.suspendUnlockerEvents();
}
},

_wallpaperImageHandler: function cs_wallpaperImageHandler(image) {
this.mainContainer.style.backgroundImage = 'url(' +
(typeof image === 'string' ? image : URL.createObjectURL(image)) + ')';
Expand Down Expand Up @@ -276,15 +282,14 @@ var CallScreen = {
}
},

hashchangeHandler: function cs_hashchangeHandler() {
if (window.location.hash.startsWith('#locked')) {
_lockScreenLayoutInitialized: false,
initLockScreenLayout: function cs_initLockScreenLayout() {
this.showClock(new Date());

if (!this._lockScreenLayoutInitialized) {
this.initLockScreenConnInfoManager();
this.showClock(new Date());
this.initLockScreenSlide();

if (!this.screen.dataset.layout) {
this.render('incoming-locked');
}
this._lockScreenLayoutInitialized = true;
}
},

Expand Down Expand Up @@ -550,27 +555,6 @@ var CallScreen = {
case 'lockscreenslide-activate-right':
CallsHandler.answer();
break;
case 'lockscreen-mode-on':
this.modeSwitch(evt.detail, true);
break;
case 'lockscreen-mode-off':
this.modeSwitch(evt.detail, false);
break;
}
},

/**
* @param {boolean} switcher - true if mode is on, false if off.
*/
modeSwitch: function cs_modeSwitch(mode, switcher) {
if (switcher) {
if (mode !== this.configs.lockMode) {
this.suspendUnlockerEvents();
}
} else {
if (mode !== this.configs.lockMode) {
this.initUnlockerEvents();
}
}
},

Expand Down
1 change: 1 addition & 0 deletions apps/callscreen/js/calls_handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ var CallsHandler = (function callsHandler() {
} else {
if (window.location.hash.startsWith('#locked') &&
(call.state === 'incoming')) {
CallScreen.initLockScreenLayout();
CallScreen.render('incoming-locked');
} else {
CallScreen.render(call.state);
Expand Down
75 changes: 45 additions & 30 deletions apps/callscreen/test/unit/call_screen_test.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
/* globals CallScreen, FontSizeManager, l10nAssert, MockCallsHandler,
MockHandledCall, MockMozActivity, MockNavigatorMozTelephony,
MockL10n, MocksHelper, MockSettingsListener, Utils, MockMozIntl */
MockL10n, MocksHelper, MockSettingsListener, Utils, MockMozIntl,
MockNavigatorSettings */

'use strict';

require('/shared/test/unit/mocks/mock_l10n.js');
require('/shared/test/unit/mocks/mock_moz_intl.js');
require('/shared/test/unit/mocks/mock_moz_activity.js');
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
require('/shared/test/unit/mocks/mock_navigator_moz_telephony.js');
require('/shared/test/unit/mocks/mock_settings_listener.js');
require('/shared/test/unit/mocks/dialer/mock_handled_call.js');
Expand Down Expand Up @@ -34,6 +36,7 @@ if (!window.CallScreen) {
}

suite('call screen', function() {
var realMozSettings;
var realMozTelephony;
var realMozL10n;
var realMozIntl;
Expand Down Expand Up @@ -66,6 +69,8 @@ suite('call screen', function() {
mocksHelperForCallScreen.attachTestHelpers();

suiteSetup(function() {
realMozSettings = navigator.mozSettings;
navigator.mozSettings = MockNavigatorSettings;
realMozTelephony = navigator.mozTelephony;
navigator.mozTelephony = MockNavigatorMozTelephony;
realSettingsListener = window.SettingsListener;
Expand All @@ -77,6 +82,7 @@ suite('call screen', function() {
});

suiteTeardown(function() {
navigator.mozSettings = realMozSettings;
MockNavigatorMozTelephony.mSuiteTeardown();
navigator.mozTelephony = realMozTelephony;
window.SettingsListener = realSettingsListener;
Expand All @@ -85,6 +91,8 @@ suite('call screen', function() {
});

setup(function(done) {
MockNavigatorSettings.mSetup();

body = document.body;

screen = document.createElement('div');
Expand Down Expand Up @@ -200,6 +208,7 @@ suite('call screen', function() {
});

teardown(function() {
MockNavigatorSettings.mTeardown();
MockNavigatorMozTelephony.mTeardown();
screen.parentNode.removeChild(screen);
});
Expand All @@ -220,7 +229,7 @@ suite('call screen', function() {
});
});

test('screen init type other than incoming-locked', function() {
test('regular screen init', function() {
CallScreen.init();
sinon.assert.notCalled(CallScreen.showClock);
sinon.assert.notCalled(CallScreen.initLockScreenSlide);
Expand All @@ -229,34 +238,6 @@ suite('call screen', function() {
sinon.assert.notCalled(MockCallsHandler.mergeCalls);
});

suite('incoming-locked screen initialize', function() {
var oldHash;

setup(function() {
oldHash = window.location.hash;
window.location.hash = '#locked?timestamp=0';
});

teardown(function() {
window.location.hash = oldHash;
});

test('incoming-locked screen init without layout set', function() {
CallScreen.init();
sinon.assert.called(CallScreen.showClock);
sinon.assert.called(CallScreen.initLockScreenSlide);
sinon.assert.called(CallScreen.render);
});

test('incoming-locked screen init with layout set', function() {
CallScreen.screen.dataset.layout = 'incoming-locked';
CallScreen.init();
sinon.assert.called(CallScreen.showClock);
sinon.assert.called(CallScreen.initLockScreenSlide);
sinon.assert.notCalled(CallScreen.render);
});
});

suite('button listeners successfully added and notified', function() {
var event;

Expand Down Expand Up @@ -395,6 +376,40 @@ suite('call screen', function() {
});
});

suite('lockscreen state', function() {
setup(function() {
this.sinon.stub(CallScreen, 'initLockScreenConnInfoManager');
this.sinon.stub(CallScreen, 'initLockScreenSlide');
this.sinon.stub(CallScreen, 'showClock');
this.sinon.spy(CallScreen, 'render');
CallScreen.init();
});

test('unlocking when an incoming call is present', function() {
CallScreen.screen.dataset.layout = 'incoming-locked';
MockNavigatorSettings.mTriggerObservers('lockscreen.locked', {
settingValue: false
});
sinon.assert.notCalled(CallScreen.initLockScreenConnInfoManager);
sinon.assert.notCalled(CallScreen.initLockScreenSlide);
sinon.assert.notCalled(CallScreen.showClock);
sinon.assert.calledOnce(CallScreen.render);
sinon.assert.calledWith(CallScreen.render, 'incoming');
});

test('locking when an incoming call is present', function() {
CallScreen.screen.dataset.layout = 'incoming';
MockNavigatorSettings.mTriggerObservers('lockscreen.locked', {
settingValue: true
});
sinon.assert.calledOnce(CallScreen.initLockScreenConnInfoManager);
sinon.assert.calledOnce(CallScreen.initLockScreenSlide);
sinon.assert.calledOnce(CallScreen.showClock);
sinon.assert.calledOnce(CallScreen.render);
sinon.assert.calledWith(CallScreen.render, 'incoming-locked');
});
});

suite('background image setter', function() {
var fakeBlob = new Blob([], {type: 'image/png'});
var fakeURL = URL.createObjectURL(fakeBlob);
Expand Down
8 changes: 0 additions & 8 deletions apps/communications/dialer/js/dialer.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ var CallHandler = (function callHandler() {
var FB_SYNC_ERROR_PARAM = 'isSyncError';

/* === Settings === */
var screenState = null;
var engineeringModeKey = null;

/* === WebActivity === */
Expand Down Expand Up @@ -415,13 +414,6 @@ var CallHandler = (function callHandler() {
}
});
LazyLoader.load('/shared/js/settings_listener.js', function() {
SettingsListener.observe('lockscreen.locked', null, function(value) {
if (value) {
screenState = 'locked';
} else {
screenState = 'unlocked';
}
});
SettingsListener.observe('engineering-mode.key', null, function(value) {
engineeringModeKey = value || null;
});
Expand Down

0 comments on commit 217ee96

Please sign in to comment.