2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 /*jslint devel: true*/
18 /*global $, tizen, timeExpired, contactList: true, moveToStartPage, stopNFC, setTagDetectRead, setTagDetectWrite, setTargetDetect, startNFC */
20 var nfcAdapter = null;
21 var addressBook = null;
22 var appStarted = false;
23 var timeOutHandler = null;
26 var nfcStateMemory = false;
28 var showPopup = function (message, page) {
30 popup = $('<div id="popup" data-role="popupwindow" data-style="center_basic_1btn"><p data-role="text">' + message + '</p><div data-role="button-bg"><a href="#" data-role="button" data-inline="true" onclick="closePopup();">OK</a></div></div>');
32 page.trigger('create');
33 popup.data('page', page);
34 popup.popupwindow('open');
37 var closePopup = function () {
39 var page = popup.data('page');
40 page.data('monit', '');
41 popup.popupwindow('close');
45 var disableAccept = function () {
47 $('#accept-choose').css('pointer-events', 'none').addClass('ui-disabled');
50 var enableAccept = function () {
52 $('#accept-choose').css('pointer-events', 'auto').removeClass('ui-disabled');
55 var checkCharsSize = function (string) {
57 var i, result = '', length = string.length;
58 for (i = 0; i < length; i += 1) {
59 if (string.charCodeAt(i) < 256) {
66 var saveDefaultCard = function () {
68 var elementSelected = $('#message-chat li.selected');
69 localStorage.started = true;
70 localStorage.id = elementSelected.attr('id');
71 localStorage.firstName = checkCharsSize(elementSelected.attr('firstName'));
72 localStorage.lastName = checkCharsSize(elementSelected.attr('lastName'));
73 localStorage.phoneNumber = checkCharsSize(elementSelected.attr('phoneNumber'));
74 localStorage.vCard = elementSelected.attr('vCard');
75 $.mobile.changePage('#start');
78 var initAddressBook = function () {
80 var addressBooksCB = function (addressbooks) {
81 if (addressbooks.length > 0) {
82 addressBook = addressbooks[0];
84 console.log('addressBook: failed');
87 errorCB = function (e) {
88 console.log('problem with getAddressBooks() method: ' + e.message);
92 tizen.contact.getAddressBooks(addressBooksCB, errorCB);
94 console.log('problem with getAddressBooks() method: ' + e.message);
98 var createListRecord = function (contacts) {
100 contactList = contacts;
101 $.mobile.changePage('#choose');
104 var prepareCallerName = function (contact) {
106 var callerName, firstName, lastName;
108 firstName = contact.name.firstName;
109 lastName = contact.name.lastName;
110 if (firstName !== '' && firstName !== null) {
111 callerName = firstName;
113 if (lastName !== '' && lastName !== null) {
114 if (callerName === '') {
115 callerName += lastName;
118 callerName += lastName;
121 if (callerName === '') {
122 callerName = 'no name';
127 var showContactsList = function () {
132 contactsFoundCB = function (contacts) {
133 var ul = $('<ul data-role="listview" id="message-chat"></ul>'),
135 sortedContactList = [],
147 $('#choose > #content-choose > .ui-scrollview-view').empty().append(ul);
149 listElementTap = function (event) {
150 event.preventDefault();
152 $(this).parent().find('li').css('background-color', '#fff').removeClass('selected');
153 $(this).css('background-color', '#ccc').addClass('selected');
156 for (i = 0, len = contacts.length; i < len; i += 1) {
161 vCard = contacts[i].convertToString('VCARD_30');
162 if (contacts[i].name.firstName !== null) {
163 firstName = contacts[i].name.firstName;
165 if (contacts[i].name.lastName !== null) {
166 lastName = contacts[i].name.lastName;
168 if (contacts[i].phoneNumbers[0] !== undefined) {
169 phoneNumber = contacts[i].phoneNumbers[0].number;
171 sortedContactList.push({caller: prepareCallerName(contacts[i]), firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, id: id, vCard: vCard, contact: contacts[i]});
174 sortedContactList.sort(function (a, b) {
175 if (a.caller < b.caller) {
178 if (a.caller > b.caller) {
184 for (j = 0, length = sortedContactList.length; j < length; j += 1) {
185 listElement = $('<li class="ui-li-2line-2sub" firstName="' + sortedContactList[j].firstName + '" lastName="' + sortedContactList[j].lastName + '" phoneNumber="' + sortedContactList[j].phoneNumber + '" id="' + sortedContactList[j].id + '" vCard="' + sortedContactList[j].vCard + '"><span class="ui-li-text-main">' + sortedContactList[j].caller + '</span><span class="ui-li-text-sub">' + sortedContactList[j].phoneNumber + '</span></li>');
186 if (localStorage.id === listElement.attr('id')) {
187 listElement.css('background-color', '#ccc');
189 listElement.on('tap', listElementTap);
190 ul.append(listElement);
193 $('#choose > #content-choose').trigger('create');
195 errorCB = function (e) {
196 console.log('problem with find() method: ' + e.message);
198 addressBook.find(contactsFoundCB, errorCB);
201 var countDown = function (time, obj) {
206 timeOutHandler = setTimeout(function () { countDown(time, obj); }, 1000);
212 var prepareWaitingPage = function (title, text) {
214 var waitingBox, waitingContent;
215 waitingBox = $('<div class="box" id="waitingBox"></div>');
216 waitingContent = $('<p class="defaultVeryBigText">' + text + '</p><p class="defaultCounterText" id="counter"></p>');
217 $('#header-transfer H1').text(title);
218 $('#content-transfer .ui-scrollview-view').empty();
219 waitingBox.append(waitingContent);
220 $('#content-transfer .ui-scrollview-view').append(waitingBox);
221 $('#content-start').trigger('create');
222 countDown(10, $('#counter'));
225 var loadTemporaryContent = function () {
227 var temporaryBox, temporaryContent, temporaryButton;
228 temporaryBox = $('<div class="box" id="temporaryBox"></div>');
229 temporaryContent = $('<p class="defaultText">Default card hasn\'t defined yet!<br>Do you want to define it now?</p>');
230 temporaryButton = $('<div data-role="button" class="ui-btn-create">Create default card</div>');
232 temporaryButton.on('tap', function (event) {
233 event.preventDefault();
234 $.mobile.changePage('#choose');
237 $('#content-start .ui-scrollview-view').empty();
238 temporaryBox.append(temporaryContent).append(temporaryButton);
239 $('#content-start .ui-scrollview-view').append(temporaryBox);
240 $('#content-start').trigger('create');
243 var loadStartContent = function () {
245 var startBox, gap, comment, changeContact, readFromCard, writeToCard, communicateWithOtherDevice;
246 startBox = $('<div class="box" id="startBox"></div>');
247 gap = $('<div class="gap"></div>');
248 comment = $('<div id="comment"><p class="comment">Your default contact</p><p class="comment">( ' + (localStorage.firstName || '') + ' ' + (localStorage.lastName || '') + ' )</p></div>');
249 changeContact = $('<div data-role="button" class="ui-btn-create">Change your default contact</div>');
250 changeContact.on('tap', function (event) {
251 event.preventDefault();
252 $.mobile.changePage('#choose');
254 readFromCard = $('<div data-role="button" class="ui-btn-create">Read from card</div>');
255 readFromCard.on('tap', function (event) {
256 event.preventDefault();
257 $('#transfer').data('option', 'read');
258 $.mobile.changePage('#transfer');
260 writeToCard = $('<div data-role="button" class="ui-btn-create">Write to card</div>');
261 writeToCard.on('tap', function (event) {
262 event.preventDefault();
263 $('#transfer').data('option', 'write');
264 $.mobile.changePage('#transfer');
266 communicateWithOtherDevice = $('<div data-role="button" class="ui-btn-create">Communicate with other device</div>');
267 communicateWithOtherDevice.on('tap', function (event) {
268 event.preventDefault();
269 $('#transfer').data('option', 'communicate');
270 $.mobile.changePage('#transfer');
273 $('#content-start .ui-scrollview-view').empty();
274 startBox.append(changeContact).append(gap.clone()).append(readFromCard).append(gap.clone()).append(writeToCard).append(gap.clone()).append(communicateWithOtherDevice);
275 $('#content-start .ui-scrollview-view').append(comment);
276 $('#content-start .ui-scrollview-view').append(startBox);
277 $('#content-start').trigger('create');
280 var loadStartPage = function () {
282 if (localStorage.started === undefined) {
283 loadTemporaryContent();
289 var prepareContactsTemplate = function (phone, first, last) {
293 ul = $('<ul data-role="listview" id="contacts-data"></ul>');
294 $('#contact > #content-contact > .ui-scrollview-view').empty().append(ul);
296 ul.append($('<li class="ui-li-2line-2sub"><span class="ui-li-text-main contacts-data-value">' + ((first === '' || first === 'null') ? '...' : first) + '</span><span class="ui-li-text-sub contacts-data-title">First Name</span></li>'));
297 ul.append($('<li class="ui-li-2line-2sub"><span class="ui-li-text-main contacts-data-value">' + ((last === '' || last === 'null') ? '...' : last) + '</span><span class="ui-li-text-sub contacts-data-title">Last Name</span></li>'));
298 ul.append($('<li class="ui-li-2line-2sub"><span class="ui-li-text-main contacts-data-value">' + ((phone === '' || phone === 'null') ? '...' : phone) + '</span><span class="ui-li-text-sub contacts-data-title">Phone Number</span></li>'));
300 $('#contact > #content-contact').trigger('create');
303 var saveContact = function () {
305 var phone, first, last, contactPage = $('#contact'), contact = null;
306 phone = contactPage.data('contactsData').phone;
307 first = contactPage.data('contactsData').first;
308 last = contactPage.data('contactsData').last;
311 contact = new tizen.Contact({name: new tizen.ContactName({firstName: first, lastName: last}), phoneNumbers: [new tizen.ContactPhoneNumber(phone)]});
312 addressBook.add(contact);
313 moveToStartPage('New contact added');
315 moveToStartPage('Problem with new contact adding');
316 console.log('The following error occurred while adding: ' + err.name);
320 var defineEvents = function () {
322 $('#header-start .ui-btn-back').on('tap', function (event) {
323 event.preventDefault();
327 $('#footer-transfer').on('tap', '.ui-btn-back', function (event) {
328 event.preventDefault();
332 $('#footer-contact').on('tap', '.ui-btn-back', function (event) {
333 event.preventDefault();
334 $.mobile.changePage('#start');
337 $('#choose').on('pagebeforeshow', function () {
341 $('#choose').on('pageshow', function (event) {
345 $('#contact').on('pageshow', function (event) {
346 var phone, first, last;
347 phone = $(this).data('contactsData').phone;
348 first = $(this).data('contactsData').first;
349 last = $(this).data('contactsData').last;
350 prepareContactsTemplate(phone, first, last);
353 $('#accept-choose').on('tap', function (event) {
354 event.preventDefault();
358 $('#save-contact').on('tap', function (event) {
359 event.preventDefault();
363 $('#start').on('pagebeforeshow', function () {
369 $('#start').on('pageshow', function () {
372 monit = obj.data('monit');
373 if (monit !== '' && monit !== undefined) {
374 showPopup(obj.data('monit'), obj);
378 $('#transfer').on('pageshow', function () {
379 var option = $(this).data('option');
380 if (option === 'read') {
381 prepareWaitingPage('Card to Device', 'PUT WIRELESS TAG<br>CLOSE TO<br>YOUR DEVICE');
387 } else if (option === 'write') {
388 prepareWaitingPage('Device to Card', 'PUT WIRELESS TAG<br>CLOSE TO<br>YOUR DEVICE');
395 prepareWaitingPage('Device to Device', 'PUT YOUR DEVICE<br>CLOSE TO<br>OTHER DEVICE');
405 var init = function () {
412 $(document).ready(init);