// SPDX-FileCopyrightText: 2026 Reion Wong // SPDX-License-Identifier: BSD-3-Clause #include "pages/display/brightness.h" #include #include using namespace cutefish::base; namespace settings { static constexpr const char* kService = "com.cutefish.Services"; static constexpr const char* kPath = "/com/cutefish/Services/Brightness"; static constexpr const char* kInterface = "com.cutefish.Services.Brightness"; Brightness::Brightness() : m_service(dbus::Connection::session(), kService, kPath, kInterface) { m_matches.push_back(m_service.onSignal("displaysChanged", [this](const dbus::Message&) { refresh(); })); m_matches.push_back(m_service.onSignal("displayBrightnessChanged", [this](const dbus::Message& message) { std::string display; int32_t value = 0; if (message.read(display, value)) handleValueChanged(display, value); })); } void Brightness::setDisplay(const std::string& display) { if (m_display == display) return; m_display = display; refresh(); } void Brightness::setValue(int value) { if (m_available) m_service.send("setDisplayBrightness", m_display, int32_t(value)); } // Read at once, as the row is shown or not from the page's first frame. void Brightness::refresh() { const auto displays = m_service.call("displays").value>(); const bool available = !m_display.empty() && displays && std::find(displays->begin(), displays->end(), m_display) != displays->end(); if (available) { if (const auto value = m_service.call("displayBrightness", m_display).value()) handleValueChanged(m_display, *value); } if (m_available != available) { m_available = available; changed.emit(); } } void Brightness::handleValueChanged(const std::string& display, int value) { if (display != m_display || value < 0 || m_value == value) return; m_value = value; changed.emit(); } } // namespace settings