You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by st...@apache.org on 2014/08/06 00:05:25 UTC

git commit: ubuntu: Implemented vibrateWithPattern/cancelVibration

Repository: cordova-plugin-vibration
Updated Branches:
  refs/heads/master 99b68b9a0 -> b49489aa3


ubuntu: Implemented vibrateWithPattern/cancelVibration


Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration/commit/b49489aa
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration/tree/b49489aa
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration/diff/b49489aa

Branch: refs/heads/master
Commit: b49489aa3ec0ec008dafbd67e127f244af679b9d
Parents: 99b68b9
Author: Maxim Ermilov <ma...@canonical.com>
Authored: Thu Jun 19 00:28:00 2014 +0400
Committer: Maxim Ermilov <ma...@canonical.com>
Committed: Tue Aug 5 05:38:16 2014 +0400

----------------------------------------------------------------------
 src/ubuntu/vibration.cpp | 46 +++++++++++++++++++++++++++++++++----------
 src/ubuntu/vibration.h   |  9 ++++++++-
 2 files changed, 44 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration/blob/b49489aa/src/ubuntu/vibration.cpp
----------------------------------------------------------------------
diff --git a/src/ubuntu/vibration.cpp b/src/ubuntu/vibration.cpp
index b6cfb70..45c5a83 100644
--- a/src/ubuntu/vibration.cpp
+++ b/src/ubuntu/vibration.cpp
@@ -17,22 +17,48 @@
  *
 */
 
-#include <QFeedbackHapticsEffect>
 #include "vibration.h"
 
 void Vibration::vibrate(int, int, int mills) {
-    QFeedbackHapticsEffect *vibrate = new QFeedbackHapticsEffect;
+    QSharedPointer<QFeedbackHapticsEffect> vibrate = QSharedPointer<QFeedbackHapticsEffect>::create();
     vibrate->setIntensity(1.0);
     vibrate->setDuration(mills);
 
-    connect(vibrate, &QFeedbackHapticsEffect::stateChanged, [&]() {
-        QFeedbackEffect *effect = qobject_cast<QFeedbackEffect *>(sender());
-        if (!effect)
-            return;
-        if (effect->state() == QFeedbackEffect::Stopped)
-            effect->deleteLater();
-    });
-
     vibrate->start();
+
+    _effects.append(vibrate);
 }
 
+void Vibration::cancelVibration(int, int) {
+    _timers.clear();
+    _effects.clear();
+}
+
+void Vibration::vibrateWithPattern(int, int, const QList<int> &pattern, int repeat) {
+    QSharedPointer<QTimer> timer = QSharedPointer<QTimer>::create();
+    QSharedPointer<int> k = QSharedPointer<int>::create();
+
+    QSharedPointer<QFeedbackHapticsEffect> vibrate = QSharedPointer<QFeedbackHapticsEffect>::create();
+    vibrate->setIntensity(1.0);
+
+    _effects.append(vibrate);
+    _timers.append(timer);
+
+    timer->connect(timer.data(), &QTimer::timeout, [=, timer = timer.data()] () {
+        if (*k >= pattern.size()) {
+            if (repeat < 0 || repeat >= pattern.size()) {
+                timer->stop();
+                return;
+            }
+            *k = repeat;
+        }
+        bool idle = (*k % 2 == 0);
+        if (!idle) {
+            vibrate->setDuration(pattern[*k]);
+            vibrate->start();
+        }
+        timer->start(pattern[*k]);
+        (*k)++;
+    });
+    timer->start(1);
+}

http://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration/blob/b49489aa/src/ubuntu/vibration.h
----------------------------------------------------------------------
diff --git a/src/ubuntu/vibration.h b/src/ubuntu/vibration.h
index 051dcdd..741b45f 100644
--- a/src/ubuntu/vibration.h
+++ b/src/ubuntu/vibration.h
@@ -20,7 +20,8 @@
 #ifndef _VIBRATION_H_SFAFKNVX3456
 #define _VIBRATION_H_SFAFKNVX3456
 
-#include <QtQuick>
+#include <QtCore>
+#include <QFeedbackHapticsEffect>
 #include <cplugin.h>
 
 class Vibration: public CPlugin {
@@ -42,6 +43,12 @@ public:
     }
 public slots:
     void vibrate(int, int, int mills);
+    void cancelVibration(int, int);
+    void vibrateWithPattern(int, int, const QList<int> &pattern, int);
+
+private:
+    QList<QSharedPointer<QFeedbackEffect>> _effects;
+    QList<QSharedPointer<QTimer>> _timers;
 };
 
 #endif