1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict';
/**
* This library should help debugging Gaia on a desktop browser, where APIs like
* mozTelephony or mozApps are not supported.
*/
// navigator.mozTelephony
(function(window) {
var navigator = window.navigator;
if ('mozTelephony' in navigator)
return;
var TelephonyCalls = [];
if (typeof(RecentsDBManager) != 'undefined' && RecentsDBManager) {
RecentsDBManager.init(function() {
RecentsDBManager.prepopulateDB(function() {
RecentsDBManager.close();
});
});
}
navigator.mozTelephony = {
dial: function(number) {
var TelephonyCall = {
number: number,
state: 'dialing',
addEventListener: function() {},
hangUp: function() {},
removeEventListener: function() {}
};
TelephonyCalls.push(TelephonyCall);
return TelephonyCall;
},
addEventListener: function(name, handler) {
},
get calls() {
return TelephonyCalls;
},
muted: false,
speakerEnabled: false,
// Stubs
onincoming: null,
oncallschanged: null
};
})(this);
// Emulate device buttons. This is groteskly unsafe and should be removed soon.
(function(window) {
var supportedEvents = { keydown: true, keyup: true };
var listeners = [];
var originalAddEventListener = window.addEventListener;
window.addEventListener = function(type, listener, capture) {
if (this === window && supportedEvents[type]) {
listeners.push({ type: type, listener: listener, capture: capture });
}
originalAddEventListener.call(this, type, listener, capture);
};
var originalRemoveEventListener = window.removeEventListener;
window.removeEventListener = function(type, listener) {
if (this === window && supportedEvents[type]) {
var newListeners = [];
for (var n = 0; n < listeners.length; ++n) {
if (listeners[n].type == type && listeners[n].listener == listener)
continue;
newListeners.push(listeners[n]);
}
listeners = newListeners;
}
originalRemoveEventListener.call(this, type, listener);
};
var KeyEventProto = {
DOM_VK_HOME: 36
};
window.addEventListener('message', function(event) {
var data = event.data;
if (typeof data === 'string' && data.indexOf('moz-key-') == 0) {
var type, key;
if (data.indexOf('moz-key-down-') == 0) {
type = 'keydown';
key = data.substr(13);
} else if (data.indexOf('moz-key-up-') == 0) {
type = 'keyup';
key = data.substr(11);
} else {
return;
}
key = KeyEvent[key];
for (var n = 0; n < listeners.length; ++n) {
if (listeners[n].type == type) {
var fn = listeners[n].listener;
var e = Object.create(KeyEventProto);
e.type = type;
e.keyCode = key;
if (typeof fn === 'function')
fn(e);
else if (typeof fn === 'object' && fn.handleEvent)
fn.handleEvent(e);
if (listeners[n].capture)
return;
}
}
}
});
})(this);
|