<icon src="icon.png" />
<name>BluetoothChat</name>
<tizen:privilege name="http://tizen.org/privilege/application.launch" />
- <tizen:privilege name="http://tizen.org/privilege/application.read" />
<tizen:privilege name="http://tizen.org/privilege/bluetooth.admin" />
<tizen:privilege name="http://tizen.org/privilege/bluetooth.gap" />
<tizen:privilege name="http://tizen.org/privilege/bluetooth.spp" />
}
#chat-header .ui-btn-footer-down {
- width: 58px;
+ width: 45px;
+ right: 0px;
}
.ui-btn-start {
top: 17px;
}
-.focus {}
+.focus {}
\ No newline at end of file
});
$('#turnOnButton').on('tap', function (event) {
- event.preventDefault();
- event.stopPropagation();
self.ui.hideStartButtons();
app.powerOn();
});
$('#serverButton').on('tap', function (event) {
- event.preventDefault();
- event.stopPropagation();
app.resetApplicationMode();
app.startServer();
});
$('#clientButton').on('tap', function (event) {
- event.preventDefault();
- event.stopPropagation();
app.resetApplicationMode();
app.startClient();
});
});
$('#keyboard').on('pageshow', function () {
- $('#keyboard-text').focus();
+ setTimeout(function () { $('#keyboard-text').focus(); }, 500);
});
$('#keyboard-header').on('tap', '#keyboard-back-button', function (event) {
+++ /dev/null
-/*jslint devel: true*/
-/*global $, tizen, app */
-
-var client = {
- sendPing: function sendPing() {
- "use strict";
- var sendTextMsg, messageObj, messageObjToString, i, len;
- sendTextMsg = [];
- messageObj = {name: encodeURIComponent(app.currentName), text: '', ping: true, bye: false};
- messageObjToString = JSON.stringify(messageObj);
- len = messageObjToString.length;
-
- for (i = 0; i < len; i += 1) {
- sendTextMsg[i] = messageObjToString.charCodeAt(i);
- }
- try {
- if (app.globalSocket !== null && app.globalSocket.state === "OPEN") {
- app.globalSocket.writeData(sendTextMsg);
- }
- } catch (error) {
- console.error('sendPing: ' + error.message);
- }
- },
-
- onSocketConnected: function onSocketConnected(socket) {
- "use strict";
- var data, recvmsg, i, len, messageObj;
-
- app.globalSocket = socket;
- $.mobile.changePage('#chat');
-
- socket.onmessage = function () {
- data = socket.readData();
- len = data.length;
- recvmsg = '';
- for (i = 0; i < len; i += 1) {
- recvmsg += String.fromCharCode(data[i]);
- }
- messageObj = JSON.parse(recvmsg);
- app.displayReceivedMessage(messageObj.name, messageObj.text, messageObj.ping, messageObj.bye);
- };
-
- socket.onerror = function (e) {
- socket.close();
- };
- socket.onclose = function () {
- app.connection = false;
- app.checkChatSendButtonState();
- app.globalSocket = null;
- };
- $('#chat-title').text('Client: ' + app.currentName + ' << >> ' + app.chatServerDevice.name);
- app.connection = true;
- app.checkChatSendButtonState();
- client.sendPing();
- },
-
- onSocketError: function onSocketError(error) {
- "use strict";
- $('#choose-content').find('ul li').css('background-color', '#fff');
- app.showPopup('Server rejected the connection. Try again. ' + error.message, $('#choose'));
- },
-
- bondSuccess: function bondSuccess(device) {
- "use strict";
-
- app.chatServerDevice = device;
-
- try {
- device.connectToServiceByUUID(app.serviceUUID, client.onSocketConnected, client.onSocketError, 'RFCOMM');
- } catch (exc) {
- console.error('connectToServiceByUUID: ' + exc.message + '<br/>');
- }
- },
-
- bondError: function bondError(error) {
- "use strict";
-
- $('#choose-content').find('ul li').css('background-color', '#fff');
- app.showPopup('Bonding problem with selected device. Try again. ' + error.message, $('#choose'));
- },
-
- addDeviceToList: function addDeviceToList(ul, chooseContent, device) {
- "use strict";
- var listElement, address, sub2,
- startBonding = function (element, address) {
- app.adapter.createBonding(address, client.bondSuccess, client.bondError);
- ul.find('li').css('background-color', '#fff');
- element.css('background-color', '#aaa');
- };
- if ($.inArray(device.address, app.deviceAddresses) === -1) {
- app.deviceAddresses.push(device.address);
- listElement = $('<li class="ui-li-has-multiline" address="' + device.address + '">' + device.name + '</li>');
- address = $('<span class="ui-li-text-sub"></span>');
- address.text(device.address);
- sub2 = $('<span class="ui-li-text-sub2"></span>');
- listElement.append(address).append(sub2);
- listElement.on('tap', function (event) {
- event.stopPropagation();
- var address, element;
- address = $(this).attr('address');
- element = $(this);
- if (app.discovering) {
- app.adapter.stopDiscovery(function () {
- app.discovering = false;
- startBonding(element, address);
- }, function (e) {
- console.error('stopDiscovery error: ' + e.message);
- });
- } else {
- startBonding(element, address);
- }
- });
- ul.append(listElement);
- ul.listview('refresh');
- }
- },
-
- searchServer: function searchServer() {
- "use strict";
- var chooseContent, ul, discoverDevicesSuccessCallback;
- app.deviceAddresses = [];
- chooseContent = $('#choose-content');
- ul = $('<ul data-role="listview"></ul>');
- chooseContent.find('.ui-scrollview-view').append(ul);
- chooseContent.trigger('create');
-
- discoverDevicesSuccessCallback = {
- onstarted: function () { app.discovering = true; },
- ondevicefound: function (device) {
- client.addDeviceToList(ul, chooseContent, device);
- },
- ondevicedisappeared: function (address) {},
- onfinished: function (devices) { app.discovering = false; }
- };
-
- app.adapter.discoverDevices(discoverDevicesSuccessCallback, function (e) { app.discovering = false; });
- }
-};
\ No newline at end of file
+++ /dev/null
-/*jslint devel: true*/
-/*global $, tizen, app */
-
-var server = {
- hideMe: function hideMe() {
- "use strict";
- if (app.adapter.visible) {
- app.adapter.setVisible(false, function () {}, function () {});
- }
- },
-
- onRegisterSuccess: function onRegisterSuccess(recordHandler) {
- "use strict";
- $('#chat-title').text('Server: ' + app.currentName);
- app.chatServiceHandler = recordHandler;
- recordHandler.onconnect = function (socket) {
- app.numberOfClients += 1;
- server.hideMe();
- app.globalSocket = socket;
- socket.onmessage = function () {
- var data, recvmsg = '', i, len, messageObj;
- data = socket.readData();
- len = data.length;
- for (i = 0; i < len; i += 1) {
- recvmsg += String.fromCharCode(data[i]);
- }
- messageObj = JSON.parse(recvmsg);
- app.displayReceivedMessage(messageObj.name, messageObj.text, messageObj.ping, messageObj.bye);
- };
- socket.onerror = function (e) {
- console.error('Server socket error');
- socket.close();
- };
- socket.onclose = function () {
- app.globalSocket = null;
- };
- };
- },
-
- onRegisterError: function onRegisterError() {
- "use strict";
- },
-
- registerServer: function registerServer() {
- "use strict";
- if (app.numberOfClients === 0) {
- try {
- app.adapter.registerRFCOMMServiceByUUID(app.serviceUUID, 'Chat service', server.onRegisterSuccess, server.onRegisterError);
- } catch (error) {
- console.log(error.message);
- }
- }
- },
-
- setServerVisible: function setServerVisible() {
- "use strict";
- try {
- if (!app.adapter.visible) {
- app.adapter.setVisible(true, server.registerServer, function (error) {
- console.error(error);
- }, 0);
- } else {
- server.registerServer();
- }
- } catch (error) {
- console.error(error.message);
- }
- },
-
- onUnregisterSuccess: function onUnregisterSuccess() {
- "use strict";
- app.chatServiceHandler = null;
- app.numberOfClients = 0;
- app.restartBluetooth();
- },
-
- onUnregisterError: function onUnregisterError() {
- "use strict";
- app.numberOfClients = 0;
- app.restartBluetooth();
- },
-
- unRegisterChatService: function unRegisterChatService() {
- "use strict";
- try {
- if (app.chatServiceHandler !== null) {
- app.chatServiceHandler.unregister(server.onUnregisterSuccess, server.onUnregisterError);
- } else {
- app.showStartButtons();
- }
- } catch (error) {
- server.onUnregisterError();
- }
- },
-
- /* WORKAROUND for the footer show when the soft keyboard is displayed */
- showFooter: function showFooter(e) {
- "use strict";
- var page = $.mobile.activePage;
- if (e.state === 'on') {
- page.find(":jqmData(role='footer')").show();
- e.stopPropagation();
- }
- },
-
- /* WORKAROUND for the footer show when the soft keyboard is displayed */
- enableFooterOnSoftKeyboard: function enableFooterOnSoftKeyboard() {
- "use strict";
- window.removeEventListener('softkeyboardchange', server.showFooter, false);
- window.addEventListener('softkeyboardchange', server.showFooter, false);
- }
-};
\ No newline at end of file
+++ /dev/null
-<Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="DistributorSignature">
-<SignedInfo>
-<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod>
-<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"></SignatureMethod>
-<Reference URI="css/style.css">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>EmD4tpoxFU380kfsRc0yFNeD4FO2icwW6oJLo/Bvt7w=</DigestValue>
-</Reference>
-<Reference URI="js/server.js">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>xD7ocCFK2JzpmiZQh3Z9ZMYG07+MQBHqLqVxRrWwlHk=</DigestValue>
-</Reference>
-<Reference URI="js/main.js">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>3IwyxwZuyxwo4dDWsDYURK6cMBhwS/YMefaQA2WJxB0=</DigestValue>
-</Reference>
-<Reference URI="js/client.js">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>j6jhBZmdsP88oZeiGRKyfhkW0LQQlBP+SpoupHePZXY=</DigestValue>
-</Reference>
-<Reference URI="icon.png">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>KYqit9PBLTvR4aRrcA5V+1Xg+YoNHMr5nSElG73ljco=</DigestValue>
-</Reference>
-<Reference URI="config.xml">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>GGACLNjGuq0x4gfS67hs5J2nFiw4SNnp3lFhPccS7L0=</DigestValue>
-</Reference>
-<Reference URI="LICENSE">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>3eAKfddMvUo3Opri3yMldvBqZpQeoqxOo4o/v00KuUo=</DigestValue>
-</Reference>
-<Reference URI="index.html">
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>FFiuA12RGDQVIRnszkXtmOUpu/KJXRlWRBkvkK+JM2Q=</DigestValue>
-</Reference>
-<Reference URI="#prop">
-<Transforms>
-<Transform Algorithm="http://www.w3.org/2006/12/xml-c14n11"></Transform>
-</Transforms>
-<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"></DigestMethod>
-<DigestValue>u/jU3U4Zm5ihTMSjKGlGYbWzDfRkGphPPHx3gJIYEJ4=</DigestValue>
-</Reference>
-</SignedInfo>
-<SignatureValue>
-O8t1POwWRfRj365cqcHzV607iD5eAF90ZgJ8TsK4kQrat/JOgQIZ9YVgVec1VhroqSW+g0HaVB+W
-sWilS1ES9DRp+qIsaoEVJM5oERYjNw5JAl8Ghbn2s3nh9Xm2WMHop3tLWU977F1v57tR6wo/VUxL
-9LJoncckGNrgy0UkuTw=
-</SignatureValue>
-<KeyInfo>
-<X509Data>
-<X509Certificate>
-MIICmzCCAgQCCQDXI7WLdVZwiTANBgkqhkiG9w0BAQUFADCBjzELMAkGA1UEBhMCS1IxDjAMBgNV
-BAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6ZW4gVGVzdCBDQTEiMCAGA1UE
-CwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwbVGl6ZW4gUHVibGljIERpc3Ry
-aWJ1dG9yIENBMB4XDTEyMTAyOTEzMDMwNFoXDTIyMTAyNzEzMDMwNFowgZMxCzAJBgNVBAYTAktS
-MQ4wDAYDVQQIDAVTdXdvbjEOMAwGA1UEBwwFU3V3b24xFjAUBgNVBAoMDVRpemVuIFRlc3QgQ0Ex
-IjAgBgNVBAsMGVRpemVuIERpc3RyaWJ1dG9yIFRlc3QgQ0ExKDAmBgNVBAMMH1RpemVuIFB1Ymxp
-YyBEaXN0cmlidXRvciBTaWduZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALtMvlc5hENK
-90ZdA+y66+Sy0enD1gpZDBh5T9RP0oRsptJv5jjNTseQbQi0SZOdOXb6J7iQdlBCtR343RpIEz8H
-mrBy7mSY7mgwoU4EPpp4CTSUeAuKcmvrNOngTp5Hv7Ngf02TTHOLK3hZLpGayaDviyNZB5PdqQdB
-hokKjzAzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAvGp1gxxAIlFfhJH1efjb9BJK/rtRkbYn9+Ez
-GEbEULg1svsgnyWisFimI3uFvgI/swzr1eKVY3Sc8MQ3+Fdy3EkbDZ2+WAubhcEkorTWjzWz2fL1
-vKaYjeIsuEX6TVRUugHWudPzcEuQRLQf8ibZWjbQdBmpeQYBMg5x+xKLCJc=
-</X509Certificate>
-<X509Certificate>
-MIICtDCCAh2gAwIBAgIJAMDbehElPNKvMA0GCSqGSIb3DQEBBQUAMIGVMQswCQYDVQQGEwJLUjEO
-MAwGA1UECAwFU3V3b24xDjAMBgNVBAcMBVN1d29uMRYwFAYDVQQKDA1UaXplbiBUZXN0IENBMSMw
-IQYDVQQLDBpUVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEpMCcGA1UEAwwgVGl6ZW4gUHVibGlj
-IERpc3RyaWJ1dG9yIFJvb3QgQ0EwHhcNMTIxMDI5MTMwMjUwWhcNMjIxMDI3MTMwMjUwWjCBjzEL
-MAkGA1UEBhMCS1IxDjAMBgNVBAgMBVN1d29uMQ4wDAYDVQQHDAVTdXdvbjEWMBQGA1UECgwNVGl6
-ZW4gVGVzdCBDQTEiMCAGA1UECwwZVGl6ZW4gRGlzdHJpYnV0b3IgVGVzdCBDQTEkMCIGA1UEAwwb
-VGl6ZW4gUHVibGljIERpc3RyaWJ1dG9yIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDe
-OTS/3nXvkDEmsFCJIvRlQ3RKDcxdWJJp625pFqHdmoJBdV+x6jl1raGK2Y1sp2Gdvpjc/z92yzAp
-bE/UVLPh/tRNZPeGhzU4ejDDm7kzdr2f7Ia0U98K+OoY12ucwg7TYNItj9is7Cj4blGfuMDzd2ah
-2AgnCGlwNwV/pv+uVQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBACqJ
-KO33YdoGudwanZIxMdXuxnnD9R6u72ltKk1S4zPfMJJv482CRGCI4FK6djhlsI4i0Lt1SVIJEed+
-yc3qckGm19dW+4xdlkekon7pViEBWuyHw8OWv3RXtTum1+PGHjBJ2eYY4ZKIpz73U/1NC16sTB/0
-VhfnkHwPltmrpYVe
-</X509Certificate>
-</X509Data>
-</KeyInfo>
-<Object Id="prop"><SignatureProperties xmlns:dsp="http://www.w3.org/2009/xmldsig-properties"><SignatureProperty Id="profile" Target="#DistributorSignature"><dsp:Profile URI="http://www.w3.org/ns/widgets-digsig#profile"></dsp:Profile></SignatureProperty><SignatureProperty Id="role" Target="#DistributorSignature"><dsp:Role URI="http://www.w3.org/ns/widgets-digsig#role-distributor"></dsp:Role></SignatureProperty><SignatureProperty Id="identifier" Target="#DistributorSignature"><dsp:Identifier></dsp:Identifier></SignatureProperty></SignatureProperties></Object>
-</Signature>
\ No newline at end of file