e36ab23844b7267e22c4b375d2ee6fbfb6bbd7ef
[profile/ivi/webdialer.git] / js / dialer.js
1 /*
2  * Copyright (c) 2012, Intel Corporation.
3  *
4  * This program is licensed under the terms and conditions of the 
5  * Apache License, version 2.0.  The full text of the Apache License is at
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  */
9
10 var mainCanvas, bgCanvas, buttonCanvas;
11 var mainCtx, bgCtx, buttonCtx, mouseCtx;
12 var drawn = false;
13 var screenHeight;
14 var screenWidth;
15 var images = [];
16 var objects = [];
17 var mouseDrag = false, mouseDown = false;
18 var prevXMouse, prevYMouse;
19 var clicksDisabled = true;
20
21 var mainPageTitleTemplate = {"font" : "bold 40pt Arial", "lineWidth" : 2.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "center",  
22     "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 32, "shadowColor" : "rgba(0, 0, 110, 1.0)"};       
23
24 var mainPageButtonTemplate = {"font" : "bold 20pt Arial", "lineWidth" : 1.5, "strokeStyle" : "white", "textAlign" : "center", "textBaseline" : "middle", 
25     "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 10, "shadowColor" : "black"};      
26
27 var buttonTextTemplate = {"font" : "bold 30pt Arial", "fillStyle" : "white", "textAlign" : "center", "textBaseline" : "middle",
28     "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 12, "shadowColor" : "rgba(50, 50, 50, 1.0)"};
29
30 var mainPage = new MenuObject({"name" : "main", "xLoc" : 0, "yLoc" : 0, "visible" : true});
31 var callPage = new MenuObject({"name" : "incomingCall", "xLoc" : 0, "yLoc" : 0, "visible" : true});
32
33 var currentPage = mainPage;
34 var currentNumber = " ";
35 var currentState = "idle";
36
37 var activeCall = null;
38 var activeService = null;
39 var noModems = false;
40 var selectedObj;
41
42 function onMouseDown(event) 
43 {       
44     if (!clicksDisabled)
45     {
46         selectedObj = objectsAtLocation(currentPage, event.clientX, event.clientY);             
47
48         if (selectedObj && selectedObj.onClick)
49             selectedObj.onClick(event);
50
51         prevXMouse = event.clientX;
52         prevYMouse = event.clientY;
53     }
54 }
55
56 function onMouseUp(event) 
57 {       
58     if (selectedObj && selectedObj.onRelease)
59         selectedObj.onRelease(event);
60 }
61
62 function resizeCanvas() 
63 {   
64     screenWidth = $(window).width();
65     screenHeight = $(window).height();
66
67     $(mainCanvas).attr('width', screenWidth);
68     $(mainCanvas).attr('height', screenHeight);
69     $(bgCanvas).attr('width', screenWidth);
70     $(bgCanvas).attr('height', screenHeight);
71     $(buttonCanvas).attr('width', screenWidth);
72     $(buttonCanvas).attr('height', screenHeight);
73     $(mouseClicksLayer).attr('width', screenWidth);
74     $(mouseClicksLayer).attr('height', screenHeight);
75
76     if (currentPage)
77         initPages();   
78 }
79
80 function loadImages(sources, callback)
81 {
82     var loadedImages = 0;
83     var numImages = 0;
84
85     for (var src in sources) 
86     {
87         numImages++;
88     }
89     for (var src in sources) 
90     {
91         images[src] = new Image();
92         images[src].onload = function(){
93             if (++loadedImages >= numImages) {          
94                 callback(images);
95             }
96         };
97         images[src].src = sources[src];
98     }
99 }
100
101 function init() 
102 {   
103     var activeAccount = null;
104     var listener = {
105         "onAccountUpdated": function(account) {}, 
106         "onAccountAdded": function(account) { 
107             if (activeService == null) {
108                 activeAccount = account;
109                 activeService = tizen.call.getCallService(activeAccount.id);
110             }
111
112             noModems = false;
113             initMainPage();
114             switchMenu(mainPage);               
115             clicksDisabled = false;
116
117
118             console.log("Modem available for account: " + activeAccount.id);
119         }, 
120         "onAccountRemoved": function(id) {
121             if (activeAccount && activeAccount.id == id) {
122                 // grab any account available
123                 activeAccount = tizen.account.findServices('')[0];
124                 try {
125                     activeService = tizen.call.getCallService(activeAccount.id);
126                 } catch (err) {
127                     noModems = true;
128                     initMainPage();
129                     switchMenu(mainPage);                                   
130                     console.log("No available modems!");
131                 }
132             }
133         }
134     }
135     mainCanvas = document.getElementById("mainCanvas");
136     bgCanvas = document.getElementById("bgCanvas");
137     buttonCanvas = document.getElementById("buttonCanvas");
138     mouseClicksLayer = document.getElementById("mouseClicks");
139
140     mainCtx = mainCanvas.getContext("2d");
141     bgCtx = bgCanvas.getContext("2d");
142     buttonCtx = buttonCanvas.getContext("2d");
143     mouseCtx = mouseClicksLayer.getContext("2d");
144
145     var sources = {
146 phoneIcon: "images/bluetooth-smartphone.png",
147            callButton: "images/ivi_btn-call.png",
148            callButtonActive: "images/ivi_btn-call-active.png",
149            closeButton: "images/ivi_btn-close.png",
150            deleteButton: "images/ivi_btn-delete.png",
151            deleteButtonActive: "images/ivi_btn-delete-active.png",
152            endCallButton: "images/ivi_btn-endcall.png",
153            endCallButtonActive: "images/ivi_btn-endcall-active.png",
154            incomingAcceptButton: "images/ivi_btn-incomingcall-accept.png",
155            incomingAcceptButtonActive: "images/ivi_btn-incomingcall-accept-active.png",
156            incomingDeclineButton: "images/ivi_btn-incomingcall-decline.png",
157            incomingDeclineButtonActive: "images/ivi_btn-incomingcall-decline-active.png",
158            listItem: "images/ivi_btn-list.png",
159            listItemActive: "images/ivi_btn-list-active.png",
160            numberButton: "images/ivi_btn-numbers.png",
161            numberButtonActive: "images/ivi_btn-numbers-active.png",
162            buttonBG: "images/ivi_buttonarea.png",
163            callIcon: "images/ivi_icon-call.png",
164            deleteIcon: "images/ivi_icon-delete.png",
165            endCallIcon: "images/ivi_icon-endcall.png",
166            deleteListItemIcon: "images/ivi_icon-list-delete.png",
167            deleteListItemIconActive: "images/ivi_icon-list-delete-active.png",
168            clockIcon: "images/ivi_icon-time.png",
169            textArea: "images/ivi_textarea.png",
170            bgImage: "images/ivi-v1_ivi-background.jpg" 
171     };
172
173     loadImages(sources, resizeCanvas);
174
175     resizeCanvas();
176     resizeCanvas();     
177
178     $(window).bind('resize', resizeCanvas);
179
180     mouseClicksLayer.addEventListener('mousedown', onMouseDown);   
181     mouseClicksLayer.addEventListener('mouseup', onMouseUp);
182
183     tizen.account.addAccountListener(listener);
184     setTimeout(function(){
185             if (tizen.account.findServices('').length == 0) 
186             {
187             noModems = true;
188             initMainPage();
189             switchMenu(mainPage);
190             console.log("No available modems!");       
191             }
192             },1000);
193
194     var handler = {
195 onIncoming: function(call) {
196                 activeCall = call;
197                 currentState = "incomingCall";          
198                 initCallPage(currentState);    
199                 updateNumber(call.callData.LineIdentification);
200                 updateCallStateText("Incoming Call...");
201                 switchMenu(callPage);
202             },
203 onDialing: function(call) {
204                activeCall = call;
205            },
206 onAlerting: function(call) {
207                 activeCall = call;
208             },
209 onDisconnected: function(call, disconnectReason) {
210                     activeCall = null;
211                     stopTimer();
212                     switchMenu(mainPage);
213                 },
214 onDisconnecting: function(call) {
215                      stopTimer();
216                      switchMenu(mainPage);
217                  },
218 onAccepted: function(call) {
219                 startTimer();
220                 updateCallStateText("Active");
221                 activeCall = call;
222             },
223 onActivated: function(call) {
224                  updateCallStateText("Active");
225                  startTimer();
226              },
227 onError: function(call){
228              console.log("onError: "); console.log(call);
229          }
230     };
231     tizen.call.addCallHandler(handler);
232 }
233
234 function switchMenu(nextMenu)
235 {   
236     currentPage.visible = false;                
237     currentPage = nextMenu; 
238     currentPage.visible = true;
239     currentPage.drawMenu();     
240 }
241
242 function initPages()
243 {
244     initMainPage();
245     initCallPage(currentState);
246     // initDisabledPage();
247
248     bgCtx.drawImage(images.bgImage, 0, 0, screenWidth, screenHeight);
249     currentPage.drawMenu();
250 }
251
252 $(document).ready(function () {
253         init();
254         });