summaryrefslogtreecommitdiff
path: root/qml
diff options
context:
space:
mode:
authorJouni Roivas <jroivas@iki.fi>2014-01-13 21:59:34 +0200
committerJouni Roivas <jroivas@iki.fi>2014-01-13 21:59:34 +0200
commit7e4e1e0192da304ae4efecdf8724a7c3f2c2d5ee (patch)
treebfb0eec985e83b76ed1c9b1a8949a9f36e226f6f /qml
parent6e0fd5a7c7a4749fb342bfd8b3671485bcba3159 (diff)
Initial import
Diffstat (limited to 'qml')
-rw-r--r--qml/cover/CoverPage.qml47
-rw-r--r--qml/pages/WatchPage.qml222
-rw-r--r--qml/waterwatch.qml42
3 files changed, 311 insertions, 0 deletions
diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml
new file mode 100644
index 0000000..b717b49
--- /dev/null
+++ b/qml/cover/CoverPage.qml
@@ -0,0 +1,47 @@
+/*
+ Copyright (C) 2013 Jouni Roivas
+ Copyright (C) 2013 Jolla Ltd.
+ Contact: Thomas Perl <thomas.perl@jollamobile.com>
+ All rights reserved.
+
+ You may use this file under the terms of BSD license as follows:
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Jolla Ltd nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+import QtQuick 2.0
+import Sailfish.Silica 1.0
+
+CoverBackground {
+ Label {
+ id: label
+ anchors.centerIn: parent
+ text: "WaterWatch"
+ }
+ Label {
+ anchors.top: label.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: watchConnector.name
+ font.pointSize: Theme.fontSizeSmall
+ }
+}
diff --git a/qml/pages/WatchPage.qml b/qml/pages/WatchPage.qml
new file mode 100644
index 0000000..743e130
--- /dev/null
+++ b/qml/pages/WatchPage.qml
@@ -0,0 +1,222 @@
+/*
+ Copyright (C) 2013 Jouni Roivas
+ Copyright (C) 2013 Jolla Ltd.
+ Contact: Thomas Perl <thomas.perl@jollamobile.com>
+ All rights reserved.
+
+ You may use this file under the terms of BSD license as follows:
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Jolla Ltd nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+import QtQuick 2.0
+import QtQml 2.1
+import Sailfish.Silica 1.0
+import QtBluetooth 5.0
+import Sailfish.Bluetooth 1.0
+import Bluetooth 0.0
+import org.nemomobile.voicecall 1.0
+import org.nemomobile.notifications 1.0
+import watch 0.1
+
+Page {
+ id: page
+ WatchConnector {
+ id: watchConnector
+
+ onHangup: {
+ // Watch instantiated hangup, follow the orders
+ manager.hangupAll();
+ }
+ }
+ property var callerDetails: new Object
+
+ VoiceCallManager {
+ id:manager
+
+ function hangupAll() {
+ for (var index = 0; index < voiceCalls.count; index++) {
+ voiceCalls.instance(index).hangup();
+ }
+ }
+
+ onError: {
+ console.log("Error: "+message)
+ watchConnector.endPhoneCall();
+ }
+
+ function updateState() {
+ //This needs cleaning up...
+ var statusPriority = [
+ VoiceCall.STATUS_ALERTING,
+ VoiceCall.STATUS_DIALING,
+ VoiceCall.STATUS_DISCONNECTED,
+ VoiceCall.STATUS_ACTIVE,
+ VoiceCall.STATUS_HELD,
+ VoiceCall.STATUS_NULL
+ ]
+
+ var newPrimaryCall = null
+ for (var p = 0; p < statusPriority.length; p++) {
+ for (var i = 0; i < voiceCalls.count; i++) {
+ if (voiceCalls.instance(i).status === statusPriority[p]) {
+ newPrimaryCall = voiceCalls.instance(i)
+ break
+ }
+ }
+ if (newPrimaryCall) {
+ break
+ }
+ }
+ var person = "";
+ if (newPrimaryCall && callerDetails[newPrimaryCall.handlerId]) {
+ person = callerDetails[newPrimaryCall.handlerId].person
+ }
+
+ for (var ic = 0; ic < voiceCalls.count; ic++) {
+ var call = voiceCalls.instance(ic)
+ console.log("call: " + call.lineId + " state: " + call.statusText + " " + call.status + " " + call.handlerId + "\n")
+ if (call.status === VoiceCall.STATUS_ALERTING || call.status === VoiceCall.STATUS_DIALING) {
+ console.log("Tell outgoing: " + call.lineId);
+ //FIXME: Not working?
+ watchConnector.ring(call.lineId, person, 0);
+ } else if (call.status === VoiceCall.STATUS_INCOMING || call.status === VoiceCall.STATUS_WAITING) {
+ console.log("Tell incoming: " + call.lineId);
+ watchConnector.ring(call.lineId, person);
+ } else if (call.status === VoiceCall.STATUS_DISCONNECTED || call.status === VoiceCall.STATUS_NULL) {
+ console.log("Endphone");
+ watchConnector.endPhoneCall();
+ } else if (call.status === VoiceCall.ACTIVE) {
+ console.log("Startphone");
+ watchConnector.startPhoneCall();
+ }
+ }
+ }
+ }
+ Timer {
+ id: updateStateTimer
+ interval: 50
+ onTriggered: manager.updateState()
+ }
+
+ Instantiator {
+ id: callMonitor
+ model: manager.voiceCalls
+
+ delegate: QtObject {
+ property string callStatus: instance.status
+ property string remoteUid
+ property string person: ""
+ onCallStatusChanged: {
+ console.log("Status changed: " + callStatus);
+ if (callStatus === VoiceCall.STATUS_DISCONNECTED || callStatus === VoiceCall.STATUS_NULL) {
+ watchConnector.endPhoneCall();
+ manager.updateState();
+ } else {
+ updateStateTimer.start();
+ }
+ }
+ Component.onCompleted: {
+ remoteUid = instance.lineId
+ person = remoteUid !== "" ? people.personByPhoneNumber(remoteUid) : ""
+ manager.updateState()
+ }
+ }
+ onObjectAdded: {
+ callerDetails[object.handlerId] = object
+ }
+ onObjectRemoved: {
+ delete callerDetails[object.handlerId]
+ manager.updateState()
+ }
+ }
+
+
+ SilicaFlickable {
+ anchors.fill: parent
+
+ contentHeight: column.height
+
+ Column {
+ id: column
+
+ width: page.width
+ spacing: Theme.paddingLarge
+ PageHeader {
+ title: "WaterWatch"
+ }
+ Label {
+ visible: !watchConnector.isConnected
+ text: "Waiting for watch...\nIf it can't be found plase\ncheck it's available and\npaired in Bluetooth settings."
+ width: column.width
+ }
+ Repeater {
+ model: KnownDevicesModel { id: knownDevicesModel }
+ delegate: ListItem {
+ id: pairedItem
+ visible: (model.paired && watchConnector.isConnected)
+ Label {
+ text: model.alias.length ? model.alias : model.address
+ }
+ onVisibleChanged: {
+ if (pairedItem.visible) {
+ watchConnector.deviceConnect(model.alias, model.address);
+ }
+ }
+ }
+ }
+ Button {
+ text: "Ping"
+ onClicked: {
+ watchConnector.ping(66)
+ }
+ }
+ Button {
+ text: "Send SMS"
+ onClicked: {
+ watchConnector.sendSMSNotification("Dummy", "Hello world!")
+ }
+ }
+ Button {
+ text: "Ring"
+ onClicked: {
+ watchConnector.ring("+1234567890", "Test user")
+ }
+ }
+ Button {
+ text: "Start call"
+ onClicked: {
+ watchConnector.startPhoneCall()
+ }
+ }
+ Button {
+ text: "End call"
+ onClicked: {
+ watchConnector.endPhoneCall()
+ }
+ }
+ }
+ }
+}
+
+
diff --git a/qml/waterwatch.qml b/qml/waterwatch.qml
new file mode 100644
index 0000000..b41c7f5
--- /dev/null
+++ b/qml/waterwatch.qml
@@ -0,0 +1,42 @@
+/*
+ Copyright (C) 2013 Jouni Roivas
+ Copyright (C) 2013 Jolla Ltd.
+ Contact: Thomas Perl <thomas.perl@jollamobile.com>
+ All rights reserved.
+
+ You may use this file under the terms of BSD license as follows:
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the Jolla Ltd nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+import QtQuick 2.0
+import Sailfish.Silica 1.0
+import "pages"
+
+ApplicationWindow
+{
+ initialPage: Component { WatchPage { } }
+ cover: Qt.resolvedUrl("cover/CoverPage.qml")
+}
+
+