// Copyright (C) 2025 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef BACKEND_H #define BACKEND_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class BackEnd : public QObject { Q_OBJECT QML_ELEMENT public: explicit BackEnd(QObject *parent = nullptr); enum class Direction { Down = 0, Up = 1 }; Q_ENUM(Direction) Q_INVOKABLE void disableFullWakeLock(); Q_INVOKABLE void disablePartialWakeLock(); Q_INVOKABLE void notify(); Q_INVOKABLE void setFullWakeLock(); Q_INVOKABLE void setPartialWakeLock(); Q_INVOKABLE void vibrate(); Q_INVOKABLE void adjustBrightness(enum Direction); Q_INVOKABLE void adjustVolume(enum Direction); Q_PROPERTY(bool isFixedVolume READ isFixedVolume CONSTANT) bool isFixedVolume() const { return m_audioManager.isVolumeFixed(); } signals: void showPopup(const QString &volumeDisabledReason); private: const int m_systemVersion = QOperatingSystemVersion::current().version().majorVersion(); static constexpr int vibrateTimeInMillisecs = 1000; static constexpr int maxBrightness = 245; static constexpr int minBrightness = 10; static constexpr double brightnessStep = 10.0 / 255; void createNotification(); void handleVolumeError(const QString &problem, const QString &solution); QNativeInterface::QAndroidApplication *m_qAndroidApp; android::app::ActivityProxy m_activityContext; android::app::NotificationManagerProxy m_notificationManager; android::app::NotificationProxy m_notification; android::media::AudioManagerProxy m_audioManager; android::os::ContextProxy m_context; android::os::WakeLockProxy m_partialWakeLock; android::provider::GlobalProxy m_global; android::provider::SystemProxy m_system; android::view::LayoutParamsProxy m_layoutParams; android::view::WindowProxy m_window; }; #endif // BACKEND_H