summaryrefslogtreecommitdiff
path: root/src/controller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/controller.cpp')
-rw-r--r--src/controller.cpp38
1 files changed, 33 insertions, 5 deletions
diff --git a/src/controller.cpp b/src/controller.cpp
index 70be33a..5593582 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -7,6 +7,7 @@
#include "controller.h"
static const QLatin1String setting_address("address");
+static const QLatin1String setting_transport("transport");
static const QLatin1String setting_cur_page("cur-page");
static const QLatin1String setting_24h_mode("24h-mode");
static const QLatin1String setting_ddmm_mode("ddmm-mode");
@@ -31,13 +32,18 @@ Controller::Controller(const QString &settingsPrefix, QQuickView *view, QObject
connect(_monitor, &NotificationMonitor::incomingNotification, this, &Controller::handleIncomingNotification);
connect(_widgets, &QAbstractItemModel::dataChanged, this, &Controller::handleWidgetChanged);
- connectToAddress(_settings->value(setting_address).toString());
+ connectToDevice();
}
Controller::~Controller()
{
}
+bool Controller::isWatchConnected() const
+{
+ return _metawatch && _metawatch->isDeviceConnected();
+}
+
MetaWatch::WatchMode Controller::mode() const
{
return _curMode;
@@ -52,7 +58,9 @@ void Controller::setPage(int page)
{
if (page != _curPage) {
_curPage = page;
- _metawatch->updateLcdDisplayPage(_curPage);
+ if (isWatchConnected()) {
+ _metawatch->updateLcdDisplayPage(_curPage);
+ }
emit pageChanged();
}
}
@@ -67,8 +75,19 @@ bool Controller::batteryCharging() const
return _batteryCharging;
}
-void Controller::connectToAddress(const QString &address)
+void Controller::connectToDevice()
{
+ const QString address = _settings->value(setting_address).toString();
+ const QString transport_name = _settings->value(setting_transport).toString();
+
+ qDebug() << "Using transport" << transport_name;
+
+ MetaWatch::TransportType transport = MetaWatch::TransportBluetoothLowEnergy; // Default
+
+ if (transport_name.compare("bluetooth", Qt::CaseInsensitive) == 0) {
+ transport = MetaWatch::TransportBluetooth;
+ }
+
if (_metawatch) {
if (address == _address) {
// Connecting to the same address and there's already a watch object created
@@ -89,7 +108,7 @@ void Controller::connectToAddress(const QString &address)
return;
}
- _metawatch = new MetaWatch(_address, this);
+ _metawatch = new MetaWatch(_address, transport, this);
connect(_metawatch, &MetaWatch::connected, _reconnect, &ReconnectTimer::stop);
connect(_metawatch, &MetaWatch::connected, this, &Controller::handleMetaWatchConnected);
connect(_metawatch, &MetaWatch::disconnected, _reconnect, &ReconnectTimer::scheduleNextAttempt);
@@ -106,6 +125,8 @@ void Controller::updateProperties()
{
MetaWatch::WatchProperties props;
+ if (!isWatchConnected()) return;
+
if (_settings->value(setting_24h_mode).toBool()) {
props |= MetaWatch::WatchPropertyHourFormat24h;
}
@@ -133,7 +154,7 @@ void Controller::handleSettingChanged(const QString &key)
{
qDebug() << "Setting" << key << "changed";
if (key == setting_address) {
- connectToAddress(_settings->value(setting_address).toString());
+ connectToDevice();
} else if (key == setting_cur_page) {
int page = _settings->value(setting_cur_page).toInt();
if (_curPage != page) {
@@ -195,6 +216,10 @@ void Controller::handleMetaWatchBatteryStatus(bool charging, int charge)
void Controller::handleIncomingNotification(const QString &sender, const QIcon &icon, const QString &summary, const QString &body)
{
+ if (!isWatchConnected()) {
+ return; // Ignoring notification if metawatch is not connected.
+ }
+
QImage image(96, 96, QImage::Format_MonoLSB);
QPainter p(&image);
@@ -249,10 +274,13 @@ void Controller::handleIncomingNotification(const QString &sender, const QIcon &
void Controller::handleWidgetChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
{
if (roles.indexOf(WidgetInfoModel::UrlRole) >= 0) {
+ if (!isWatchConnected()) return;
+
// Can't send partial updates to watch, so entire list must be
// resubmitted everytime something important changes
_metawatch->updateWidgetList(_widgets->toList());
+ // If the changed widget is on the current page, watch needs to refresh.
if (_widgets->data(topLeft, WidgetInfoModel::PageRole).toInt() == _curPage) {
_metawatch->updateLcdDisplayPage(_curPage);
}