[app] Provide haptic feedback on entering/leaving selection mode
This commit is contained in:
parent
2aa3b9e568
commit
b16f5e986b
6 changed files with 226 additions and 2 deletions
|
@ -104,6 +104,7 @@ SOURCES += \
|
||||||
src/BooksCoverModel.cpp \
|
src/BooksCoverModel.cpp \
|
||||||
src/BooksCoverWidget.cpp \
|
src/BooksCoverWidget.cpp \
|
||||||
src/BooksDialogManager.cpp \
|
src/BooksDialogManager.cpp \
|
||||||
|
src/BooksFeedback.cpp \
|
||||||
src/BooksHints.cpp \
|
src/BooksHints.cpp \
|
||||||
src/BooksImageProvider.cpp \
|
src/BooksImageProvider.cpp \
|
||||||
src/BooksImportModel.cpp \
|
src/BooksImportModel.cpp \
|
||||||
|
@ -148,6 +149,7 @@ HEADERS += \
|
||||||
src/BooksCoverWidget.h \
|
src/BooksCoverWidget.h \
|
||||||
src/BooksDefs.h \
|
src/BooksDefs.h \
|
||||||
src/BooksDialogManager.h \
|
src/BooksDialogManager.h \
|
||||||
|
src/BooksFeedback.h \
|
||||||
src/BooksHints.h \
|
src/BooksHints.h \
|
||||||
src/BooksImageProvider.h \
|
src/BooksImageProvider.h \
|
||||||
src/BooksImportModel.h \
|
src/BooksImportModel.h \
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2015-2017 Jolla Ltd.
|
Copyright (C) 2015-2017 Jolla Ltd.
|
||||||
Contact: Slava Monich <slava.monich@jolla.com>
|
Copyright (C) 2015-2017 Slava Monich <slava.monich@jolla.com>
|
||||||
|
|
||||||
You may use this file under the terms of BSD license as follows:
|
You may use this file under the terms of BSD license as follows:
|
||||||
|
|
||||||
|
@ -193,6 +193,7 @@ SilicaFlickable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onSelectingChanged: {
|
onSelectingChanged: {
|
||||||
|
globalFeedback.start("push_gesture")
|
||||||
if (currentPage) {
|
if (currentPage) {
|
||||||
root.selecting = pageView.selecting
|
root.selecting = pageView.selecting
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ ApplicationWindow {
|
||||||
property variant currentShelf: mainPage.currentShelf
|
property variant currentShelf: mainPage.currentShelf
|
||||||
|
|
||||||
BooksHints { id: globalHints }
|
BooksHints { id: globalHints }
|
||||||
|
BooksFeedback { id: globalFeedback }
|
||||||
SystemState { id: globalSystemState }
|
SystemState { id: globalSystemState }
|
||||||
|
|
||||||
initialPage: BooksMainPage { id: mainPage }
|
initialPage: BooksMainPage { id: mainPage }
|
||||||
|
|
162
app/src/BooksFeedback.cpp
Normal file
162
app/src/BooksFeedback.cpp
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 Jolla Ltd.
|
||||||
|
* Copyright (C) 2017 Slava Monich <slava.monich@jolla.com>
|
||||||
|
*
|
||||||
|
* You may use this file under the terms of the 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 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
|
||||||
|
* OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "BooksFeedback.h"
|
||||||
|
#include "HarbourDebug.h"
|
||||||
|
|
||||||
|
#include <QDBusConnection>
|
||||||
|
#include <QDBusAbstractInterface>
|
||||||
|
#include <QDBusPendingCallWatcher>
|
||||||
|
#include <QDBusPendingReply>
|
||||||
|
|
||||||
|
#define NGFD_CONNECTION QDBusConnection::systemBus()
|
||||||
|
#define NGFD_SERVICE "com.nokia.NonGraphicFeedback1.Backend"
|
||||||
|
#define NGFD_PATH "/com/nokia/NonGraphicFeedback1"
|
||||||
|
#define NGFD_INTERFACE "com.nokia.NonGraphicFeedback1"
|
||||||
|
|
||||||
|
#define NGFD_STATUS_FAILED (0)
|
||||||
|
#define NGFD_STATUS_COMPLETED (1)
|
||||||
|
#define NGFD_STATUS_PLAYING (2)
|
||||||
|
#define NGFD_STATUS_PAUSED (3)
|
||||||
|
|
||||||
|
class BooksFeedback::Private : QDBusAbstractInterface {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
Private(QObject* aParent);
|
||||||
|
|
||||||
|
bool start(QString aEvent);
|
||||||
|
void stop();
|
||||||
|
void stop(uint aEventId);
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void onPlayFinished(QDBusPendingCallWatcher* aCall);
|
||||||
|
void onStatusChanged(uint aId, uint aStatus);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void Status(uint aId, uint aStatus);
|
||||||
|
|
||||||
|
public:
|
||||||
|
uint iEventId;
|
||||||
|
bool iPlaying;
|
||||||
|
};
|
||||||
|
|
||||||
|
BooksFeedback::Private::Private(QObject* aParent) :
|
||||||
|
QDBusAbstractInterface(NGFD_SERVICE,NGFD_PATH, NGFD_INTERFACE,
|
||||||
|
NGFD_CONNECTION, aParent), iEventId(0), iPlaying(false)
|
||||||
|
{
|
||||||
|
connect(this, SIGNAL(Status(uint,uint)), SLOT(onStatusChanged(uint,uint)));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BooksFeedback::Private::start(QString aEvent)
|
||||||
|
{
|
||||||
|
if (!iPlaying) {
|
||||||
|
iPlaying = true;
|
||||||
|
HDEBUG(aEvent);
|
||||||
|
connect(new QDBusPendingCallWatcher(asyncCall(QString("Play"),
|
||||||
|
aEvent, QVariantMap()), this),
|
||||||
|
SIGNAL(finished(QDBusPendingCallWatcher*)),
|
||||||
|
SLOT(onPlayFinished(QDBusPendingCallWatcher*)));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksFeedback::Private::stop(uint aEventId)
|
||||||
|
{
|
||||||
|
HDEBUG(aEventId);
|
||||||
|
asyncCall(QString("Stop"), iPlaying);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksFeedback::Private::stop()
|
||||||
|
{
|
||||||
|
if (iPlaying) {
|
||||||
|
iPlaying = false;
|
||||||
|
if (iEventId) {
|
||||||
|
stop(iEventId);
|
||||||
|
iEventId = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksFeedback::Private::onPlayFinished(QDBusPendingCallWatcher* aCall)
|
||||||
|
{
|
||||||
|
QDBusPendingReply<uint> reply = *aCall;
|
||||||
|
if (reply.isError()) {
|
||||||
|
HWARN(reply.error());
|
||||||
|
iPlaying = false;
|
||||||
|
} else {
|
||||||
|
uint eventId= reply.value();
|
||||||
|
HDEBUG(eventId);
|
||||||
|
if (iPlaying) {
|
||||||
|
iEventId = eventId;
|
||||||
|
} else {
|
||||||
|
stop(eventId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
aCall->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksFeedback::Private::onStatusChanged(uint aId, uint aStatus)
|
||||||
|
{
|
||||||
|
HDEBUG(aId << aStatus);
|
||||||
|
switch (aStatus) {
|
||||||
|
case NGFD_STATUS_PLAYING:
|
||||||
|
case NGFD_STATUS_PAUSED:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (aId == iEventId) {
|
||||||
|
iEventId = 0;
|
||||||
|
iPlaying = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BooksFeedback::BooksFeedback(QObject* aParent) :
|
||||||
|
QObject(aParent),
|
||||||
|
iPrivate(new Private(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BooksFeedback::start(QString aEvent)
|
||||||
|
{
|
||||||
|
return iPrivate->start(aEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksFeedback::stop()
|
||||||
|
{
|
||||||
|
iPrivate->stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "BooksFeedback.moc"
|
56
app/src/BooksFeedback.h
Normal file
56
app/src/BooksFeedback.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2017 Jolla Ltd.
|
||||||
|
* Copyright (C) 2017 Slava Monich <slava.monich@jolla.com>
|
||||||
|
*
|
||||||
|
* You may use this file under the terms of the 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 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
|
||||||
|
* OWNER 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOKS_FEEDBACK_H
|
||||||
|
#define BOOKS_FEEDBACK_H
|
||||||
|
|
||||||
|
#include <QtQml>
|
||||||
|
|
||||||
|
class BooksFeedback : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit BooksFeedback(QObject* aParent = NULL);
|
||||||
|
|
||||||
|
Q_INVOKABLE bool start(QString aEvent);
|
||||||
|
Q_INVOKABLE void stop();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Private;
|
||||||
|
Private* iPrivate;
|
||||||
|
};
|
||||||
|
|
||||||
|
QML_DECLARE_TYPE(BooksFeedback)
|
||||||
|
|
||||||
|
#endif // BOOKS_FEEDBACK_H
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015-2017 Jolla Ltd.
|
* Copyright (C) 2015-2017 Jolla Ltd.
|
||||||
* Contact: Slava Monich <slava.monich@jolla.com>
|
* Copyright (C) 2015-2017 Slava Monich <slava.monich@jolla.com>
|
||||||
*
|
*
|
||||||
* You may use this file under the terms of the BSD license as follows:
|
* You may use this file under the terms of the BSD license as follows:
|
||||||
*
|
*
|
||||||
|
@ -46,6 +46,7 @@
|
||||||
#include "BooksListWatcher.h"
|
#include "BooksListWatcher.h"
|
||||||
#include "BooksCoverWidget.h"
|
#include "BooksCoverWidget.h"
|
||||||
#include "BooksTaskQueue.h"
|
#include "BooksTaskQueue.h"
|
||||||
|
#include "BooksFeedback.h"
|
||||||
#include "BooksHints.h"
|
#include "BooksHints.h"
|
||||||
|
|
||||||
#include "HarbourDebug.h"
|
#include "HarbourDebug.h"
|
||||||
|
@ -82,6 +83,7 @@ Q_DECL_EXPORT int main(int argc, char **argv)
|
||||||
BOOKS_QML_REGISTER(BooksPageWidget, "PageWidget");
|
BOOKS_QML_REGISTER(BooksPageWidget, "PageWidget");
|
||||||
BOOKS_QML_REGISTER(BooksListWatcher, "ListWatcher");
|
BOOKS_QML_REGISTER(BooksListWatcher, "ListWatcher");
|
||||||
BOOKS_QML_REGISTER(BooksCoverWidget, "BookCover");
|
BOOKS_QML_REGISTER(BooksCoverWidget, "BookCover");
|
||||||
|
BOOKS_QML_REGISTER(BooksFeedback, "BooksFeedback");
|
||||||
BOOKS_QML_REGISTER(BooksHints, "BooksHints");
|
BOOKS_QML_REGISTER(BooksHints, "BooksHints");
|
||||||
BOOKS_QML_REGISTER(BooksSettings, "BooksSettings");
|
BOOKS_QML_REGISTER(BooksSettings, "BooksSettings");
|
||||||
HarbourLib::registerTypes(BOOKS_QML_PLUGIN,
|
HarbourLib::registerTypes(BOOKS_QML_PLUGIN,
|
||||||
|
|
Loading…
Reference in a new issue