Make LenaPi usable on Android devices
- Add app icon - prevend android device from shutting down cpu while playing music - fix scaling bug - fix energy saver for RasPi by reconnecting to music player - minor refactorings and renaming
This commit is contained in:
parent
851b83a53a
commit
1f12d93300
19 changed files with 499 additions and 48 deletions
|
|
@ -4,16 +4,35 @@
|
|||
#include <QFileInfo>
|
||||
#include <QProcess>
|
||||
#include <iostream>
|
||||
EnergySaver::~EnergySaver()
|
||||
{
|
||||
#ifdef ANDROID
|
||||
releaseAndroidLock();
|
||||
#endif
|
||||
}
|
||||
|
||||
void EnergySaver::init()
|
||||
{
|
||||
auto saver = instance();
|
||||
saver->mIsAutoShutDownEnabled = false;
|
||||
#ifdef ANDROID
|
||||
saver->initAdroidLocks();
|
||||
#endif
|
||||
}
|
||||
|
||||
void EnergySaver::init(int interval, const QString &shutdownScript)
|
||||
{
|
||||
auto saver = instance();
|
||||
saver->mIsAutoShutDownEnabled = true;
|
||||
QFileInfo script(shutdownScript);
|
||||
if(script.exists()){
|
||||
auto saver = instance();
|
||||
saver->setShutdownScript(shutdownScript);
|
||||
saver->initTimer(interval*1000);
|
||||
saver->restartTimer();
|
||||
}
|
||||
#ifdef ANDROID
|
||||
saver->initAdroidLocks();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -21,15 +40,32 @@ void EnergySaver::init(int interval, const QString &shutdownScript)
|
|||
EnergySaver *EnergySaver::instance()
|
||||
{
|
||||
static EnergySaver* inst;
|
||||
if (inst == nullptr)
|
||||
if (!inst)
|
||||
{
|
||||
inst = new EnergySaver();
|
||||
}
|
||||
return inst;
|
||||
}
|
||||
|
||||
void EnergySaver::deactivate()
|
||||
{
|
||||
mIsActive = false;
|
||||
mTimer.stop();
|
||||
setAndroidLock();
|
||||
}
|
||||
|
||||
void EnergySaver::activate()
|
||||
{
|
||||
mIsActive = true;
|
||||
restartTimer();
|
||||
releaseAndroidLock();
|
||||
}
|
||||
|
||||
void EnergySaver::restartTimer()
|
||||
{
|
||||
// Energy saver is currently deactivated -> Do NOT start timer
|
||||
if(!mIsActive) return;
|
||||
|
||||
if(mTimer.isActive()){
|
||||
mTimer.stop();
|
||||
}
|
||||
|
|
@ -49,9 +85,59 @@ void EnergySaver::setShutdownScript(const QString &shutdownScript)
|
|||
mShutdownScript = shutdownScript;
|
||||
}
|
||||
|
||||
void EnergySaver::initAdroidLocks()
|
||||
{
|
||||
#ifdef ANDROID
|
||||
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
|
||||
if ( activity.isValid() )
|
||||
{
|
||||
QAndroidJniObject serviceName = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Context","POWER_SERVICE");
|
||||
if ( serviceName.isValid() )
|
||||
{
|
||||
QAndroidJniObject powerMgr = activity.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;",serviceName.object<jobject>());
|
||||
if ( powerMgr.isValid() )
|
||||
{
|
||||
jint levelAndFlags = QAndroidJniObject::getStaticField<jint>("android/os/PowerManager","SCREEN_DIM_WAKE_LOCK");
|
||||
|
||||
QAndroidJniObject tag = QAndroidJniObject::fromString( "My Tag" );
|
||||
|
||||
m_wakeLock = powerMgr.callObjectMethod("newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;", levelAndFlags,tag.object<jstring>());
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void EnergySaver::setAndroidLock()
|
||||
{
|
||||
#ifdef ANDROID
|
||||
if ( m_wakeLock.isValid() )
|
||||
{
|
||||
m_wakeLock.callMethod<void>("acquire", "()V");
|
||||
qDebug() << "Locked device, can't go to standby anymore";
|
||||
}
|
||||
else
|
||||
{
|
||||
assert( false );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void EnergySaver::releaseAndroidLock()
|
||||
{
|
||||
#ifdef ANDROID
|
||||
if ( m_wakeLock.isValid() )
|
||||
{
|
||||
m_wakeLock.callMethod<void>("release", "()V");
|
||||
qDebug() << "Unlocked device, can now go to standby";
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void EnergySaver::onTimeout()
|
||||
{
|
||||
if(!mIsAutoShutDownEnabled) return;
|
||||
std::cout << "Shutting down.";
|
||||
#ifndef _DEBUG
|
||||
QProcess p;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue