Improve screen brightness control
This commit is contained in:
parent
f67ce083ce
commit
a1b07fe204
@ -90,12 +90,20 @@ ScreenHelper::ScreenHelper(QObject *parent) : QObject(parent)
|
||||
}
|
||||
|
||||
QSettings settings;
|
||||
m_screenOffTimer.setInterval(settings.value("screenOffTimeout", 15000).toInt());
|
||||
|
||||
m_currentBrightness = settings.value("screenBrightness", 80).toInt();
|
||||
|
||||
|
||||
m_screenDimTimer.setInterval(settings.value("screenOffTimeout", 30000).toInt());
|
||||
m_screenDimTimer.setSingleShot(true);
|
||||
connect(&m_screenDimTimer, &QTimer::timeout, this, &ScreenHelper::dimScreen);
|
||||
if (m_screenDimTimer.interval() > 0) {
|
||||
m_screenDimTimer.start();
|
||||
}
|
||||
|
||||
m_screenOffTimer.setInterval(5000);
|
||||
m_screenOffTimer.setSingleShot(true);
|
||||
connect(&m_screenOffTimer, &QTimer::timeout, this, &ScreenHelper::screenOff);
|
||||
if (m_screenOffTimer.interval() > 0) {
|
||||
m_screenOffTimer.start();
|
||||
}
|
||||
|
||||
// Hide the mouse cursor right away, it'll be restored on mouse move events
|
||||
QApplication::setOverrideCursor(Qt::BlankCursor);
|
||||
@ -109,18 +117,18 @@ bool ScreenHelper::active() const
|
||||
|
||||
int ScreenHelper::screenTimeout() const
|
||||
{
|
||||
return m_screenOffTimer.interval();
|
||||
return m_screenDimTimer.interval();
|
||||
}
|
||||
|
||||
void ScreenHelper::setScreenTimeout(int timeout)
|
||||
{
|
||||
m_screenOffTimer.setInterval(timeout);
|
||||
m_screenDimTimer.setInterval(timeout);
|
||||
QSettings settings;
|
||||
settings.setValue("screenOffTimeout", timeout);
|
||||
if (timeout > 0) {
|
||||
m_screenOffTimer.start();
|
||||
m_screenDimTimer.start();
|
||||
} else {
|
||||
m_screenOffTimer.stop();
|
||||
m_screenDimTimer.stop();
|
||||
}
|
||||
}
|
||||
|
||||
@ -131,9 +139,10 @@ int ScreenHelper::screenBrightness() const
|
||||
|
||||
void ScreenHelper::setScreenBrightness(int percent)
|
||||
{
|
||||
QSettings settings;
|
||||
settings.setValue("screenBrightness", percent);
|
||||
m_currentBrightness = percent;
|
||||
m_brightnessFile.write(QString("%1\n").arg(percent * m_maxBrightness / 100).toUtf8());
|
||||
m_brightnessFile.flush();
|
||||
applyBrightness(m_currentBrightness);
|
||||
}
|
||||
|
||||
bool ScreenHelper::eventFilter(QObject *watched, QEvent *event)
|
||||
@ -181,20 +190,26 @@ bool ScreenHelper::eventFilter(QObject *watched, QEvent *event)
|
||||
m_cursorHidden = false;
|
||||
}
|
||||
|
||||
|
||||
if (!m_screenOffTimer.isActive()) {
|
||||
// No timer is active, means we've off already => turn on and start dim timer, eating the input event
|
||||
if (!m_screenDimTimer.isActive() && !m_screenOffTimer.isActive()) {
|
||||
screenOn();
|
||||
m_screenOffTimer.start();
|
||||
m_screenDimTimer.start();
|
||||
return true;
|
||||
}
|
||||
m_screenOffTimer.start( );
|
||||
// Screen off timer is active, means we've dimmed down already => dim up again and stop offTimer
|
||||
if (m_screenOffTimer.isActive()) {
|
||||
m_screenOffTimer.stop();
|
||||
applyBrightness(m_currentBrightness);
|
||||
}
|
||||
// restart dim timer
|
||||
m_screenDimTimer.start();
|
||||
return QObject::eventFilter(watched, event);
|
||||
}
|
||||
|
||||
void ScreenHelper::screenOn()
|
||||
{
|
||||
qCInfo(dcPlatformIntegration()) << "Turning screen on";
|
||||
int ret = m_powerFile.write("0\n");
|
||||
qint64 ret = m_powerFile.write("0\n");
|
||||
m_powerFile.flush();
|
||||
if (ret < 0) {
|
||||
qCWarning(dcPlatformIntegration()) << "Failed to power on screen";
|
||||
@ -204,9 +219,24 @@ void ScreenHelper::screenOn()
|
||||
void ScreenHelper::screenOff()
|
||||
{
|
||||
qCInfo(dcPlatformIntegration()) << "Turning screen off";
|
||||
int ret = m_powerFile.write("1\n");
|
||||
qint64 ret = m_powerFile.write("1\n");
|
||||
m_powerFile.flush();
|
||||
if (ret < 0) {
|
||||
qCWarning(dcPlatformIntegration()) << "Failed to power off screen";
|
||||
}
|
||||
applyBrightness(m_currentBrightness);
|
||||
}
|
||||
|
||||
void ScreenHelper::dimScreen()
|
||||
{
|
||||
applyBrightness(qRound(m_currentBrightness * 0.5));
|
||||
m_screenOffTimer.start();
|
||||
}
|
||||
|
||||
void ScreenHelper::applyBrightness(int percent)
|
||||
{
|
||||
int absolue = percent * m_maxBrightness / 100;
|
||||
qCDebug(dcPlatformIntegration()) << "Setting screen brightness to" << absolue << "(" << percent << "%)";
|
||||
m_brightnessFile.write(QString("%1\n").arg(absolue).toUtf8());
|
||||
m_brightnessFile.flush();
|
||||
}
|
||||
|
||||
@ -53,9 +53,13 @@ public:
|
||||
private slots:
|
||||
void screenOn();
|
||||
void screenOff();
|
||||
void dimScreen();
|
||||
|
||||
void applyBrightness(int percent);
|
||||
|
||||
private:
|
||||
QTimer m_screenOffTimer;
|
||||
QTimer m_screenDimTimer;
|
||||
QFile m_powerFile;
|
||||
QFile m_brightnessFile;
|
||||
|
||||
|
||||
17
packaging/ubuntu/debian/nymea-app-kiosk-wayland.postinst
Normal file
17
packaging/ubuntu/debian/nymea-app-kiosk-wayland.postinst
Normal file
@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Restart nymea-app after update if it's running
|
||||
systemctl daemon-reload
|
||||
systemctl status nymea-app-kiosk > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
systemctl restart nymea-app-kiosk
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully restarted nymea app kiosk."
|
||||
else
|
||||
echo "FAILED to restart nymea app kiosk."
|
||||
fi
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user