aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2014-07-30 16:01:03 -0500
committerCharles Kerr <charles.kerr@canonical.com>2014-07-30 16:01:03 -0500
commit559d185dd7d51e56fbd8246970ef520d3edd18ae (patch)
treed9a4dca12256877c7a74a7361b84826e4dbd9871 /src
parentd6b290fda978379fb07285aaddfeb31686735667 (diff)
downloadayatana-indicator-datetime-559d185dd7d51e56fbd8246970ef520d3edd18ae.tar.gz
ayatana-indicator-datetime-559d185dd7d51e56fbd8246970ef520d3edd18ae.tar.bz2
ayatana-indicator-datetime-559d185dd7d51e56fbd8246970ef520d3edd18ae.zip
initial draft of haptic feedback when alarms play
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/haptic.cpp92
-rw-r--r--src/notifications.cpp2
-rw-r--r--src/snap.cpp8
4 files changed, 100 insertions, 3 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 754d537..a466a48 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -20,6 +20,7 @@ set (SERVICE_CXX_SOURCES
exporter.cpp
formatter.cpp
formatter-desktop.cpp
+ haptic.cpp
locations.cpp
locations-settings.cpp
menu.cpp
diff --git a/src/haptic.cpp b/src/haptic.cpp
new file mode 100644
index 0000000..c5a20df
--- /dev/null
+++ b/src/haptic.cpp
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2014 Canonical Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3, as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranties of
+ * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Charles Kerr <charles.kerr@canonical.com>
+ */
+
+#include <notifications/haptic.h>
+
+#include <ubuntu/application/sensors/haptic.h>
+
+#include <glib.h>
+
+namespace unity {
+namespace indicator {
+namespace notifications {
+
+/***
+****
+***/
+
+class Haptic::Impl
+{
+public:
+
+ Impl(const Mode& mode):
+ m_mode(mode),
+ m_sensor(ua_sensors_haptic_new())
+ {
+ if (m_sensor == nullptr)
+ g_warning ("Haptic device unavailable");
+ else
+ m_tag = g_timeout_add_seconds (1, on_timeout, this);
+ }
+
+ ~Impl()
+ {
+ if (m_tag)
+ g_source_remove(m_tag);
+ }
+
+private:
+
+ static gboolean on_timeout (gpointer gself)
+ {
+ static_cast<Impl*>(gself)->vibrate_now();
+ return G_SOURCE_CONTINUE;
+ }
+
+ void vibrate_now()
+ {
+ const uint32_t msec = 1500;
+ ua_sensors_haptic_vibrate_once (m_sensor, msec);
+ }
+
+ const Mode m_mode;
+ UASensorsHaptic * m_sensor = nullptr;
+ guint m_tag = 0;
+};
+
+/***
+****
+***/
+
+Haptic::Haptic(const Mode& mode):
+ impl(new Impl (mode))
+{
+}
+
+Haptic::~Haptic()
+{
+}
+
+/***
+****
+***/
+
+} // namespace datetime
+} // namespace indicator
+} // namespace unity
diff --git a/src/notifications.cpp b/src/notifications.cpp
index da7351b..c66f634 100644
--- a/src/notifications.cpp
+++ b/src/notifications.cpp
@@ -327,7 +327,7 @@ Engine::~Engine()
bool
Engine::supports_actions() const
{
- return impl->supports_actions();
+ return true; //impl->supports_actions();
}
int
diff --git a/src/snap.cpp b/src/snap.cpp
index 0eb176c..f3e0f20 100644
--- a/src/snap.cpp
+++ b/src/snap.cpp
@@ -20,6 +20,7 @@
#include <datetime/snap.h>
#include <notifications/awake.h>
+#include <notifications/haptic.h>
#include <notifications/sound.h>
#include <gst/gst.h>
@@ -76,6 +77,9 @@ public:
const bool loop = m_engine->supports_actions();
auto sound = std::make_shared<uin::Sound>(uri, volume, loop);
+ // create the haptic feedback...
+ auto haptic = std::make_shared<uin::Haptic>();
+
// show a notification...
const auto minutes = std::chrono::minutes(m_settings->alarm_duration.get());
const bool interactive = m_engine->supports_actions();
@@ -94,10 +98,10 @@ public:
b.add_action ("dismiss", _("Dismiss"));
}
- // add the 'sound' and 'awake' objects to the capture so that
+ // add 'sound', 'haptic', and 'awake' objects to the capture so
// they stay alive until the closed callback is called; i.e.,
// for the lifespan of the notficiation
- b.set_closed_callback([appointment, show, dismiss, sound, awake]
+ b.set_closed_callback([appointment, show, dismiss, sound, awake, haptic]
(const std::string& action){
if (action == "show")
show(appointment);