summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qml/cover/CoverPage.qml14
-rw-r--r--qml/pages/FirstPage.qml114
-rw-r--r--qml/pages/SecondPage.qml62
-rw-r--r--rpm/salmeta.spec2
-rw-r--r--rpm/salmeta.yaml2
-rw-r--r--salmeta.pro7
-rw-r--r--src/controller.cpp7
-rw-r--r--src/reconnecttimer.cpp27
-rw-r--r--src/reconnecttimer.h7
-rw-r--r--src/salmeta.cpp10
-rw-r--r--src/watchviewitem.cpp15
-rw-r--r--src/watchviewitem.h20
-rw-r--r--translations/salmeta.ts24
13 files changed, 126 insertions, 185 deletions
diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml
index 786b78f..e6c3216 100644
--- a/qml/cover/CoverPage.qml
+++ b/qml/cover/CoverPage.qml
@@ -35,19 +35,7 @@ CoverBackground {
Label {
id: label
anchors.centerIn: parent
- text: qsTr("My Cover")
- }
-
- CoverActionList {
- id: coverAction
-
- CoverAction {
- iconSource: "image://theme/icon-cover-next"
- }
-
- CoverAction {
- iconSource: "image://theme/icon-cover-pause"
- }
+ text: "Salmeta"
}
}
diff --git a/qml/pages/FirstPage.qml b/qml/pages/FirstPage.qml
index 14d7410..b86029e 100644
--- a/qml/pages/FirstPage.qml
+++ b/qml/pages/FirstPage.qml
@@ -1,73 +1,69 @@
-/*
- Copyright (C) 2013 Jolla Ltd.
- Contact: Thomas Perl <thomas.perl@jollamobile.com>
- All rights reserved.
+import QtQuick 2.0
+import Sailfish.Silica 1.0
+import Sailfish.Bluetooth 1.0
+import org.nemomobile.configuration 1.0
+import com.javispedro.salmeta 1.0
- You may use this file under the terms of BSD license as follows:
+Page {
+ id: page
- 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.
+ ConfigurationValue {
+ id: deviceAddress
+ key: settingsPrefix + "/address"
+ defaultValue: "Select"
+ }
- 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.
-*/
+ SilicaFlickable {
+ anchors.fill: parent
-import QtQuick 2.0
-import Sailfish.Silica 1.0
+ PullDownMenu {
+ MenuItem {
+ text: qsTr("Not done yet")
+ }
+ }
+ contentHeight: column.height
-Page {
- id: page
+ Column {
+ id: column
+ width: page.width
+ spacing: Theme.paddingLarge
+
+ PageHeader {
+ title: "Salmeta"
+ }
+
+ SectionHeader {
+ text: qsTr("Device settings");
+ }
- // To enable PullDownMenu, place our content in a SilicaFlickable
- SilicaFlickable {
- anchors.fill: parent
+ ValueButton {
+ x: Theme.paddingLarge
+ label: "Device"
+ value: deviceAddress.value
- // PullDownMenu and PushUpMenu must be declared in SilicaFlickable, SilicaListView or SilicaGridView
- PullDownMenu {
- MenuItem {
- text: qsTr("Show Page 2")
- onClicked: pageStack.push(Qt.resolvedUrl("SecondPage.qml"))
- }
- }
+ onClicked: {
+ var dialog = pageStack.push("Sailfish.Bluetooth.BluetoothDevicePickerDialog");
- // Tell SilicaFlickable the height of its content.
- contentHeight: column.height
+ dialog.selectedDeviceChanged.connect(function() {
+ if (dialog.selectedDevice != "") {
+ deviceAddress.value = dialog.selectedDevice
+ }
+ });
+ }
+ }
- // Place our content in a Column. The PageHeader is always placed at the top
- // of the page, followed by our content.
- Column {
- id: column
+ SectionHeader {
+ text: qsTr("Widgets");
+ }
- width: page.width
- spacing: Theme.paddingLarge
- PageHeader {
- title: qsTr("UI Template")
- }
- Label {
- x: Theme.paddingLarge
- text: qsTr("Hello Sailors")
- color: Theme.secondaryHighlightColor
- font.pixelSize: Theme.fontSizeExtraLarge
- }
- }
- }
+ WatchView {
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 96 * 4
+ height: 96 * 4
+ }
+ }
+ }
}
diff --git a/qml/pages/SecondPage.qml b/qml/pages/SecondPage.qml
deleted file mode 100644
index 4f37362..0000000
--- a/qml/pages/SecondPage.qml
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- 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
-
-
-Page {
- id: page
- SilicaListView {
- id: listView
- model: 20
- anchors.fill: parent
- header: PageHeader {
- title: qsTr("Nested Page")
- }
- delegate: BackgroundItem {
- id: delegate
-
- Label {
- x: Theme.paddingLarge
- text: qsTr("Item") + " " + index
- anchors.verticalCenter: parent.verticalCenter
- color: delegate.highlighted ? Theme.highlightColor : Theme.primaryColor
- }
- onClicked: console.log("Clicked " + index)
- }
- VerticalScrollDecorator {}
- }
-}
-
-
-
-
-
diff --git a/rpm/salmeta.spec b/rpm/salmeta.spec
index dfafb60..de24543 100644
--- a/rpm/salmeta.spec
+++ b/rpm/salmeta.spec
@@ -21,6 +21,8 @@ URL: http://javispedro.com
Source0: %{name}-%{version}.tar.bz2
Source100: salmeta.yaml
Requires: sailfishsilica-qt5 >= 0.10.9
+Requires: sailfish-components-bluetooth-qt5
+Requires: nemo-qml-plugin-configuration-qt5
Requires: systemd
Requires: systemd-user-session-targets
BuildRequires: pkgconfig(sailfishapp) >= 1.0.2
diff --git a/rpm/salmeta.yaml b/rpm/salmeta.yaml
index 14e443f..d664d45 100644
--- a/rpm/salmeta.yaml
+++ b/rpm/salmeta.yaml
@@ -24,6 +24,8 @@ PkgConfigBR:
Requires:
- sailfishsilica-qt5 >= 0.10.9
+ - sailfish-components-bluetooth-qt5
+ - nemo-qml-plugin-configuration-qt5
- systemd
- systemd-user-session-targets
diff --git a/salmeta.pro b/salmeta.pro
index c8d68cc..740bb53 100644
--- a/salmeta.pro
+++ b/salmeta.pro
@@ -17,7 +17,8 @@ SOURCES += src/salmeta.cpp \
src/reconnecttimer.cpp \
src/notificationmonitor.cpp \
src/widgetview.cpp \
- src/widgetinfo.cpp
+ src/widgetinfo.cpp \
+ src/watchviewitem.cpp
HEADERS += \
src/controller.h \
@@ -27,12 +28,12 @@ HEADERS += \
src/reconnecttimer.h \
src/notificationmonitor.h \
src/widgetview.h \
- src/widgetinfo.h
+ src/widgetinfo.h \
+ src/watchviewitem.h
OTHER_FILES += qml/salmeta.qml \
qml/cover/CoverPage.qml \
qml/pages/FirstPage.qml \
- qml/pages/SecondPage.qml \
rpm/salmeta.changes.in \
rpm/salmeta.spec \
rpm/salmeta.yaml \
diff --git a/src/controller.cpp b/src/controller.cpp
index 02c8252..047ad96 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -22,10 +22,11 @@ Controller::Controller(const QString &settingsPrefix, QQuickView *view, QObject
connect(_settings, &MDConfGroup::valueChanged, this, &Controller::handleSettingChanged);
connect(_metawatch, &MetaWatch::connected, _reconnect, &ReconnectTimer::stop);
connect(_metawatch, &MetaWatch::connected, this, &Controller::handleMetaWatchConnected);
- connect(_metawatch, &MetaWatch::disconnected, _reconnect, &ReconnectTimer::start);
+ connect(_metawatch, &MetaWatch::disconnected, _reconnect, &ReconnectTimer::scheduleNextAttempt);
connect(_metawatch, &MetaWatch::batteryStatus, this, &Controller::handleMetaWatchBatteryStatus);
- connect(_reconnect, &ReconnectTimer::tick, _metawatch, &MetaWatch::connectDevice);
- _reconnect->start();
+ connect(_reconnect, &ReconnectTimer::tryReconnect, _metawatch, &MetaWatch::connectDevice);
+
+ _reconnect->scheduleNextAttempt();
reloadPages();
}
diff --git a/src/reconnecttimer.cpp b/src/reconnecttimer.cpp
index eaf6cbb..a58a13e 100644
--- a/src/reconnecttimer.cpp
+++ b/src/reconnecttimer.cpp
@@ -15,33 +15,33 @@ ReconnectTimer::ReconnectTimer(QObject *parent)
: QObject(parent),
_iphb(iphb_open(0)),
_notifier(new QSocketNotifier(iphb_get_fd(_iphb), QSocketNotifier::Read, this)),
- _active(false)
+ _active(false),
+ _counter(0)
{
connect(_notifier, &QSocketNotifier::activated, this, &ReconnectTimer::handleIphbActivity);
}
ReconnectTimer::~ReconnectTimer()
{
- iphb_close(_iphb);
+ _active = false;
+ _iphb = iphb_close(_iphb);
}
-void ReconnectTimer::start()
+void ReconnectTimer::scheduleNextAttempt()
{
_active = true;
- _counter = 0;
- setupWait();
+
+ time_t res = iphb_wait2(_iphb, wait_times[_counter] / 2, wait_times[_counter], 0, 0);
+
+ if (res == -1) {
+ qErrnoWarning("Failed to iphb_wait");
+ }
}
void ReconnectTimer::stop()
{
_active = false;
_counter = 0;
- iphb_wait(_iphb, 0, 0, 0);
-}
-
-void ReconnectTimer::setupWait()
-{
- iphb_wait(_iphb, wait_times[_counter] / 2, wait_times[_counter], 0);
}
void ReconnectTimer::handleIphbActivity()
@@ -55,10 +55,9 @@ void ReconnectTimer::handleIphbActivity()
return;
}
- emit tick();
-
+ _active = false;
if (++_counter > num_wait_times)
_counter = num_wait_times;
- setupWait();
+ emit tryReconnect();
}
diff --git a/src/reconnecttimer.h b/src/reconnecttimer.h
index c8d901f..af4ae98 100644
--- a/src/reconnecttimer.h
+++ b/src/reconnecttimer.h
@@ -13,14 +13,11 @@ public:
~ReconnectTimer();
public slots:
- void start();
+ void scheduleNextAttempt();
void stop();
signals:
- void tick();
-
-private:
- void setupWait();
+ void tryReconnect();
private slots:
void handleIphbActivity();
diff --git a/src/salmeta.cpp b/src/salmeta.cpp
index c4bcb0c..f13cd64 100644
--- a/src/salmeta.cpp
+++ b/src/salmeta.cpp
@@ -2,9 +2,10 @@
#include <sailfishapp.h>
#include "controller.h"
+#include "watchviewitem.h"
static bool launch_daemon = false;
-static QString settings_key_prefix;
+static QString settings_key_prefix("/apps/salmeta/watch0");
int main(int argc, char *argv[])
{
@@ -24,16 +25,15 @@ int main(int argc, char *argv[])
++it;
}
- if (launch_daemon) {
- if (settings_key_prefix.isEmpty()) {
- settings_key_prefix = "/apps/salmeta/watch0";
- }
+ qmlRegisterType<WatchViewItem>("com.javispedro.salmeta", 1, 0, "WatchView");
+ if (launch_daemon) {
qDebug() << "Starting salmeta (daemon) with settings from" << settings_key_prefix;
new Controller(settings_key_prefix, SailfishApp::createView());
} else {
QQuickView *view = SailfishApp::createView();
+ view->rootContext()->setContextProperty("settingsPrefix", settings_key_prefix);
view->setSource(SailfishApp::pathTo("qml/salmeta.qml"));
view->show();
}
diff --git a/src/watchviewitem.cpp b/src/watchviewitem.cpp
new file mode 100644
index 0000000..dbd4e8a
--- /dev/null
+++ b/src/watchviewitem.cpp
@@ -0,0 +1,15 @@
+#include <QtCore/QDebug>
+#include <QtGui/QPainter>
+
+#include "watchviewitem.h"
+
+WatchViewItem::WatchViewItem(QQuickItem *parent) :
+ QQuickPaintedItem(parent)
+{
+ setFillColor(Qt::white);
+}
+
+void WatchViewItem::paint(QPainter *painter)
+{
+
+}
diff --git a/src/watchviewitem.h b/src/watchviewitem.h
new file mode 100644
index 0000000..5219852
--- /dev/null
+++ b/src/watchviewitem.h
@@ -0,0 +1,20 @@
+#ifndef WATCHVIEWITEM_H
+#define WATCHVIEWITEM_H
+
+#include <QtQuick/QQuickPaintedItem>
+
+class WatchViewItem : public QQuickPaintedItem
+{
+ Q_OBJECT
+public:
+ explicit WatchViewItem(QQuickItem *parent = 0);
+
+ void paint(QPainter *painter);
+
+signals:
+
+public slots:
+
+};
+
+#endif // WATCHVIEWITEM_H
diff --git a/translations/salmeta.ts b/translations/salmeta.ts
index 0374c0e..09129a8 100644
--- a/translations/salmeta.ts
+++ b/translations/salmeta.ts
@@ -2,35 +2,17 @@
<!DOCTYPE TS>
<TS version="2.0">
<context>
- <name>CoverPage</name>
- <message>
- <source>My Cover</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>FirstPage</name>
<message>
- <source>Show Page 2</source>
+ <source>Not done yet</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>UI Template</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Hello Sailors</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SecondPage</name>
- <message>
- <source>Nested Page</source>
+ <source>Device settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Item</source>
+ <source>Widgets</source>
<translation type="unfinished"></translation>
</message>
</context>