noo/client/platforms/hidtracker.cpp

157 lines
2.8 KiB
C++
Raw Normal View History

2018-09-24 22:25:14 +03:00
#include "hidtracker.h"
#include "hidtrackerimpl.h"
#include <QTimer>
#ifdef TARGET_OSX
# include "platforms/osx/hidtrackerimpl_osx.h"
#endif
HIDActivityTracker::HIDActivityTracker()
2019-08-17 20:10:14 +03:00
:mInterval(600), mTrackerActive(false), mState(None), mImpl(nullptr)
2018-09-24 22:25:14 +03:00
{
#ifdef TARGET_OSX
2019-07-28 20:49:34 +03:00
mImpl = new HIDTrackerImplOSX();
mImpl->setInterval(mInterval);
2018-09-24 22:25:14 +03:00
#endif
2019-07-28 20:49:34 +03:00
// Check timer belongs to this object
mCheckTimer = new QTimer(this);
mCheckTimer->setSingleShot(false);
connect(mCheckTimer, SIGNAL(timeout()), this, SLOT(checkState()));
2018-09-24 22:25:14 +03:00
}
HIDActivityTracker::~HIDActivityTracker()
{
}
bool HIDActivityTracker::isPossible()
{
2019-07-28 20:49:34 +03:00
if (!mImpl)
return false;
return mImpl->isPossible();
2018-09-24 22:25:14 +03:00
}
void HIDActivityTracker::setInterval(int seconds)
{
2019-07-28 20:49:34 +03:00
if (mImpl)
mImpl->setInterval(seconds);
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
mInterval = seconds;
2018-09-24 22:25:14 +03:00
}
int HIDActivityTracker::interval() const
{
2019-07-28 20:49:34 +03:00
return mInterval;
2018-09-24 22:25:14 +03:00
}
bool HIDActivityTracker::isTrackerActive()
{
2019-07-28 20:49:34 +03:00
return mTrackerActive;
2018-09-24 22:25:14 +03:00
}
bool HIDActivityTracker::start()
{
2019-07-28 20:49:34 +03:00
if (mTrackerActive)
return true;
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
if (mImpl)
mTrackerActive = mImpl->start();
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
mState = None;
mIdleSignalSent = false;
mActivitySignalSent = false;
if (mTrackerActive)
mCheckTimer->start(1000);
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
return mTrackerActive;
2018-09-24 22:25:14 +03:00
}
void HIDActivityTracker::stop()
{
2019-07-28 20:49:34 +03:00
if (!mTrackerActive)
return;
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
if (mImpl)
mImpl->stop();
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
mState = None;
mCheckTimer->stop();
mTrackerActive = false;
2018-09-24 22:25:14 +03:00
}
bool HIDActivityTracker::isUserActive()
{
2019-07-28 20:49:34 +03:00
if (!mImpl)
return true;
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
return mImpl->isUserActive();
2018-09-24 22:25:14 +03:00
}
void HIDActivityTracker::resetUserActive()
{
2019-07-28 20:49:34 +03:00
if (!mImpl)
return;
mState = None;
mImpl->resetUserActive();
2018-09-24 22:25:14 +03:00
}
void HIDActivityTracker::acceptIdleState()
{
2019-07-28 20:49:34 +03:00
mState = Idle;
2018-09-24 22:25:14 +03:00
}
void HIDActivityTracker::acceptUserActiveState()
{
2019-07-28 20:49:34 +03:00
mState = UserActive;
2018-09-24 22:25:14 +03:00
}
void HIDActivityTracker::checkState()
{
2019-07-28 20:49:34 +03:00
if (!mTrackerActive)
return;
2018-09-24 22:25:14 +03:00
2019-07-28 20:49:34 +03:00
// Now activity tracker is started, check if there was user activity during interval
if (!mImpl->isUserActive())
2018-09-24 22:25:14 +03:00
{
2019-07-28 20:49:34 +03:00
switch (mState)
{
case None:
mState = Idle;
break;
case Idle:
break;
case UserActive:
if (!mIdleSignalSent)
{
mIdleSignalSent = true;
mActivitySignalSent = false;
emit idleDetected();
}
break;
}
2018-09-24 22:25:14 +03:00
}
2019-07-28 20:49:34 +03:00
else
2018-09-24 22:25:14 +03:00
{
2019-07-28 20:49:34 +03:00
switch (mState)
{
case None:
mState = UserActive;
break;
case UserActive:
break;
case Idle:
if (!mActivitySignalSent)
{
mActivitySignalSent = true;
mIdleSignalSent = false;
emit activityDetected();
}
break;
}
2018-09-24 22:25:14 +03:00
}
}