diff --git a/CMakeLists.txt b/CMakeLists.txt
index 957c9c2..eff65b6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,61 +5,38 @@ project(WaterLevelRewrite VERSION 0.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTORCC ON)
-find_package(Qt6 REQUIRED COMPONENTS Gui Core Quick Multimedia)
+find_package(Qt6 REQUIRED COMPONENTS Quick Multimedia)
qt_standard_project_setup(REQUIRES 6.10)
-if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/importedcontent/CMakeLists.txt")
- add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/importedcontent)
-endif()
-
qt_add_executable(appWaterLevelRewrite
main.cpp
+ media.qrc
)
qt_add_qml_module(appWaterLevelRewrite
URI WaterLevelRewrite
QML_FILES
Main.qml
- WaterTank.qml
- SettingsBarIcon.qml
- SettingsPopup.qml
- ConnectButton.qml
- SOURCES
- configinterface.h
- configinterface.cpp
- requestworker.h
- requestworker.cpp
- wifihelper.h
- wifihelper.cpp
- RESOURCES
- media.qrc
- QML_FILES CustomCheckBox.qml
- QML_FILES RequestResponsePopup.qml
- QML_FILES ColorInput.qml
+ QML_FILES WaterTank.qml
+ QML_FILES SettingsBarIcon.qml
+ QML_FILES SettingsPopup.qml
+ SOURCES configinterface.h configinterface.cpp
+ QML_FILES ConnectButton.qml
+ SOURCES requestworker.h requestworker.cpp
+ RESOURCES media.qrc
)
-if(APPLE)
- set_target_properties(appWaterLevelRewrite PROPERTIES
- # MACOSX_BUNDLE_GUI_IDENTIFIER com.example.appWaterLevelRewrite
- MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
- MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
- MACOSX_BUNDLE TRUE
- )
-endif()
-
-if(WIN32)
- set_target_properties(appWaterLevelRewrite PROPERTIES
- WIN32_EXECUTABLE TRUE
- )
-endif()
-
set_target_properties(appWaterLevelRewrite PROPERTIES
- QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android"
+# MACOSX_BUNDLE_GUI_IDENTIFIER com.example.appWaterLevelRewrite
+ MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
+ MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+ MACOSX_BUNDLE TRUE
+ WIN32_EXECUTABLE TRUE
)
target_link_libraries(appWaterLevelRewrite
- PRIVATE Qt6::Quick Qt6::Multimedia Qt6::Gui Qt6::Core
+ PRIVATE Qt6::Quick Qt6::Multimedia
)
install(TARGETS appWaterLevelRewrite
diff --git a/ColorInput.qml b/ColorInput.qml
deleted file mode 100644
index a4cebe7..0000000
--- a/ColorInput.qml
+++ /dev/null
@@ -1,21 +0,0 @@
-import QtQuick
-import QtQuick.Effects
-import QtQuick.Controls
-import QtQuick.Controls.Material
-
-TextField {
- id: color_text
- text: "F05FAF5F"
- property alias color_text: base.color
- Rectangle {
- id: base
- anchors {
- right: parent.right
- rightMargin: 10
- verticalCenter: parent.verticalCenter
- }
- width: 10
- height: parent.height / 2
- color: "#" + color_text.text
- }
-}
diff --git a/CustomCheckBox.qml b/CustomCheckBox.qml
deleted file mode 100644
index 0cdbb38..0000000
--- a/CustomCheckBox.qml
+++ /dev/null
@@ -1,17 +0,0 @@
-import QtQuick
-import QtQuick.Controls.Basic
-
-CheckBox {
- id: control
- property color font_color: "#0000FF00"
- property int font_point_size: 22
- font.pointSize: font_point_size
- checked: true
- contentItem: Text {
- text: control.text
- font: control.font
- color: control.font_color
- verticalAlignment: Text.AlignVCenter
- leftPadding: control.indicator.width + control.spacing
- }
-}
diff --git a/Main.qml b/Main.qml
index 28693c5..8c2a35f 100644
--- a/Main.qml
+++ b/Main.qml
@@ -5,8 +5,8 @@ import QtQuick.Controls
import QtQuick.Controls.Material
Window {
- width: 960
- height: 1400
+ width: 640
+ height: 1080
visible: true
title: qsTr("Water Level Rewrite")
id: root
@@ -14,7 +14,6 @@ Window {
property color dark_accent_color: "#FF5F7F5F"
property color danger_color: "#F0AF2F1F"
property color water_color: "#F00F7FAF"
- property color water_color_above_alert: "#F00FAF0F"
property color background_color: "#1F1F1F"
Material.accent: root.accent_color
property int font_enlarged_text_size: 20
@@ -22,38 +21,13 @@ Window {
property int distance_count_thres: 3
property string mode: "http"
property string status: "Initializing"
- property string connection_text_string: "Reading WiFi Status..."
property string alarm_status_text: ""
- property double water_tank_height_factor: 1.3
- property double water_tank_width_factor: 2
property var root_config: ({})
- property var base_config: {
- "max": 0,
- "min": 0,
- "alert": 0,
- "interval": 0,
- "url": "none",
- "water_tank_width": 2,
- "water_tank_height": 1.3,
- "rate_of_fill_enable": true,
- "current_reading_enable": true,
- "percentage_enable": true,
- "filling_status_enable": true,
- "expected_to_fill_enable": true,
- "accent_color": "F05FAF5F",
- "dark_accent_color": "FF5F7F5F",
- "danger_color": "F0AF2F1F",
- "water_color": "F00F7FAF",
- "water_color_above_alert": "F00FAF0F",
- "background_color": "1F1F1F",
- "font_normal_text_size": 16,
- "font_enlarged_text_size": 20
- }
Rectangle {
anchors.fill: parent
color: root.background_color
- id: root_rect
+
Rectangle {
id: top_bar
height: Math.min(root.height / 12, 100)
@@ -65,7 +39,6 @@ Window {
}
color: "#0A0F0F0F"
SettingsBarIcon {
- id: settings_icon
height: top_bar.height - 20
width: height
anchors {
@@ -82,40 +55,12 @@ Window {
settings_popup.open()
}
}
-
- SettingsBarIcon {
- height: top_bar.height - 20
- width: height
- anchors {
- top: parent.top
- left: parent.left
- bottomMargin: 5
- topMargin: 10
- leftMargin: 5
- }
- text: "⇅"
- color: "#0A0F0F0F"
- radius: 100
- accent_color: root.accent_color
- onOpen: {
- request_response_popup.open()
- }
- }
- }
-
- RequestResponsePopup {
- id: request_response_popup
- accent_color: root.accent_color
- font_enlarged_text_size: 20
-
}
SettingsPopup {
id: settings_popup
accent_color: root.accent_color
- background_color: root.background_color
- font_enlarged_text_size: root.font_enlarged_text_size
- font_normal_text_size: root.font_normal_text_size
+ font_enlarged_text_size: 20
function setConfig(new_config: var) {
settings_popup.config.max = new_config.max
settings_popup.config.min = new_config.min
@@ -126,44 +71,25 @@ Window {
console.log("Saving config: ", config)
config_interface.saveConfig(config);
}
- onDeleteConfig: () => {
- config_interface.deleteConfig();
- }
- }
-
- Text {
- id: connection_text
- anchors {
- top: top_bar.bottom
- topMargin: 20
- horizontalCenter: parent.horizontalCenter
- }
- text: root.connection_text_string
- color: root.accent_color
- font.pointSize: root.font_normal_text_size
}
WaterTank {
id: tank
anchors {
- top: connection_text.bottom
+ top: top_bar.bottom
horizontalCenter: parent.horizontalCenter
- topMargin: 40
+ topMargin: 100
}
- height: (root_rect.height) / root.water_tank_height_factor
- width: root_rect.width / root.water_tank_width_factor
+ height: (parent.height - top_bar.height) / 2
+ width: parent.width / 2.2
base_color: root.background_color
distance: 0
tank_lid_color: "#F0121212"
tank_base_color: "#0FFFFFFF"
- water_level_color: root.water_color
+ water_level_color: "#F00F7FAF"
tank_base_border_color: "#F0121212"
- water_color_above_alert: root.water_color_above_alert
min_thres_input: 0
max_thres_input: 0
- text_color: root.accent_color
- font_normal_text_size: root.font_normal_text_size
- font_enlarged_text_size: root.font_enlarged_text_size
}
@@ -253,7 +179,7 @@ Window {
if(start_alarm.mode === 0)
{
requester.startAlarm();
- root.alarm_status_text = "Started Alarm; Waiting for Trigger: " + root.root_config.alert
+ root.alarm_status_text = "Started Alarm; Waiting for Trigger: " + root.root_config.alert + "%"
}
else {
requester.stopAlarm();
@@ -272,26 +198,14 @@ Window {
onStatusChanged: () => {
root.status = requester.status;
}
- onNetworkReply: (water_level, fill_rate, expected, data) => {
+ onNetworkReply: (water_level, fill_rate, expected) => {
tank.setDistance(water_level);
tank.rate_of_fill = fill_rate;
tank.expected_to_fill = expected;
status.color = root.accent_color;
- request_response_popup.request_response_string = data;
}
- onRequestFailed: (data) => {
+ onRequestFailed: () => {
status.color = root.danger_color;
- request_response_popup.request_response_string = data;
- }
-
- onConnectionText: (text, error) => {
- root.connection_text_string = text
- if(!error) {
- connection_text.color = root.accent_color
- }
- else {
- connection_text.color = root.danger_color
- }
}
}
@@ -299,83 +213,17 @@ Window {
id: config_interface
fileName: "config.json"
onConfig: (config) => {
- settings_popup.config = config;
+ settings_popup.config = config
console.log("Loading initial config");
setConfig(config);
if(root.status === "Initializing") {
root.status = "Press Connect.";
}
}
- onConfigDeleted: () => {
- let config = base_config;
- settings_popup.config = config;
- console.log("Loading initial config");
- setConfig(config);
- if(root.status === "Initializing") {
- root.status = "Press Connect.";
- }
- }
-
function setConfig(config) {
tank.setConfig(config);
requester.setConfig(config);
root.root_config = config;
- if(config.water_tank_height === undefined) {
- config.water_tank_height = 2
- }
- if(config.water_tank_width === undefined) {
- config.water_tank_width = 2.2
- }
- if(config.rate_of_fill_enable === undefined) {
- config.rate_of_fill_enable = true
- }
- if(config.current_reading_enable === undefined) {
- config.current_reading_enable = true
- }
- if(config.percentage_enable === undefined) {
- config.percentage_enable = true
- }
- if(config.filling_status_enable === undefined) {
- config.filling_status_enable = true
- }
- if(config.expected_to_fill_enable === undefined) {
- config.expected_to_fill_enable = true
- }
- if(config.font_enlarged_text_size === undefined) {
- config.font_enlarged_text_size = 20
- }
- if(config.font_normal_text_size === undefined) {
- config.font_normal_text_size = 16
- }
- if(config.accent_color === undefined) {
- config.accent_color = "F05FAF5F"
- }
- if(config.danger_color === undefined) {
- config.danger_color = "F0AF2F1F"
- }
- if(config.dark_accent_color === undefined) {
- config.dark_accent_color = "FF5F7F5F"
- }
- if(config.water_color === undefined) {
- config.water_color = "F00F7FAF"
- }
- if(config.water_color_above_alert === undefined) {
- config.water_color_above_alert = "F00FAF0F"
- }
- if(config.background_color === undefined) {
- config.background_color = "1F1F1F"
- }
- root.water_tank_height_factor = config.water_tank_height
- root.water_tank_width_factor = config.water_tank_width
- root.accent_color = "#" + config.accent_color
- root.danger_color = "#" + config.danger_color
- root.dark_accent_color = "#" + config.dark_accent_color
- root.water_color = "#" + config.water_color
- root.water_color_above_alert = "#" + config.water_color_above_alert
- root.background_color = "#" + config.background_color
- root.font_enlarged_text_size = config.font_enlarged_text_size
- root.font_normal_text_size = config.font_normal_text_size
-
}
}
onClosing: {
diff --git a/RequestResponsePopup.qml b/RequestResponsePopup.qml
deleted file mode 100644
index 468bcda..0000000
--- a/RequestResponsePopup.qml
+++ /dev/null
@@ -1,30 +0,0 @@
-import QtQuick
-import QtQuick.Effects
-import QtQuick.Controls
-import QtQuick.Controls.Material
-
-Popup {
- id: request_response_popup
- property color accent_color: "#00000000"
- property int font_enlarged_text_size: 20
- property int font_normal_text_size: 16
- property string request_response_string: ""
- background: Rectangle {
- color: "#F0121212"
- radius: 5
- border.color: request_response_popup.accent_color
- border.width: 1
- }
- height: Math.max(parent.height / 1.6, contentHeight)
- width: parent.width / 1.2
- anchors.centerIn: Overlay.overlay
- ScrollView {
- id: view
- anchors.fill: parent
- TextArea {
- text: request_response_string
- font.pointSize: font_normal_text_size
- color: request_response_popup.accent_color
- }
- }
-}
diff --git a/SettingsBarIcon.qml b/SettingsBarIcon.qml
index 35072b7..d360331 100644
--- a/SettingsBarIcon.qml
+++ b/SettingsBarIcon.qml
@@ -8,7 +8,6 @@ Rectangle {
signal open;
property color accent_color: "#00000000"
property int font_enlarged_text_size: 20
- property string text: "⚙"
Behavior on color {
ColorAnimation {
duration: 200
@@ -16,10 +15,8 @@ Rectangle {
}
Text {
id: settings_text
- text: settings_rect.text
+ text: "⚙"
anchors.centerIn: parent
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
color: settings_rect.accent_color
font.pointSize: settings_rect.font_enlarged_text_size
}
diff --git a/SettingsPopup.qml b/SettingsPopup.qml
index 6a97c2b..41f5cc7 100644
--- a/SettingsPopup.qml
+++ b/SettingsPopup.qml
@@ -6,32 +6,15 @@ import QtQuick.Controls.Material
Popup {
id: settings_popup
signal saveConfig(config: var)
- signal deleteConfig()
property color accent_color: "#00000000"
property int font_enlarged_text_size: 20
property int font_normal_text_size: 16
- property color background_color: "#00000000"
property var config: {
"max": 0,
"min": 0,
"alert": 0,
"interval": 0,
- "url": "none",
- "water_tank_width": 2,
- "water_tank_height": 1.3,
- "rate_of_fill_enable": true,
- "current_reading_enable": true,
- "percentage_enable": true,
- "filling_status_enable": true,
- "expected_to_fill_enable": true,
- "accent_color": "F05FAF5F",
- "dark_accent_color": "FF5F7F5F",
- "danger_color": "F0AF2F1F",
- "water_color": "F00F7FAF",
- "water_color_above_alert": "F00FAF0F",
- "background_color": "1F1F1F",
- "font_normal_text_size": 16,
- "font_enlarged_text_size": 20
+ "url": "none"
}
background: Rectangle {
@@ -48,461 +31,170 @@ Popup {
anchors.fill: parent
color: "#F0121212"
- ScrollView {
- id: rect_base_scroll_view
+ Text {
+ id: settings_label
+ text: "Settings"
+ width: parent.width
anchors {
top: parent.top
horizontalCenter: parent.horizontalCenter
- bottom: save_config.top
- bottomMargin: 10
- }
- width: parent.width
- clip: true
-
- // Use contentWidth and contentHeight to define the scrollable area
- contentWidth: availableWidth
- contentHeight: settings_column.height
-
- Column {
- id: settings_column
- width: rect_base_scroll_view.width
- spacing: 20
-
- Text {
- id: settings_label
- text: "Settings"
- width: parent.width
- horizontalAlignment: Text.AlignHCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_enlarged_text_size
- }
-
- // Max Threshold
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Max Threshold: "
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: max_thres_input.verticalCenter
- }
-
- }
- TextField {
- id: max_thres_input
- text: config.max
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Min Threshold
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Min Threshold: "
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: min_thres_input.verticalCenter
- }
-
- }
- TextField {
- id: min_thres_input
- text: config.min
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Alert Threshold
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Alert Threshold: "
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: alert_thres_input.verticalCenter
- }
-
- }
- TextField {
- id: alert_thres_input
- text: config.alert
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Update Interval
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Update Interval: "
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: interval_input.verticalCenter
- }
- }
- TextField {
- id: interval_input
- text: config.interval
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // URL
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Url: "
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: http_url_input.verticalCenter
- }
-
- }
- TextField {
- id: http_url_input
- text: config.url
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- cursorPosition: 0
- }
- }
-
- // Tank Image Width
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Tank Image Width"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: water_tank_width_input.verticalCenter
- }
-
- }
- TextField {
- id: water_tank_width_input
- text: String(config.water_tank_width)
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- cursorPosition: 0
- }
- }
-
- // Tank Image Height
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Tank Image Height"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: water_tank_height_input.verticalCenter
- }
- }
- TextField {
- id: water_tank_height_input
- text: String(config.water_tank_height)
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- cursorPosition: 0
- }
- }
-
- // Accent Color
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Accent Color"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: accent_color_input.verticalCenter
- }
- }
- ColorInput {
- id: accent_color_input
- text: config.accent_color
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Dark Accent Color
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Dark Accent Color"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: dark_accent_color_input.verticalCenter
- }
- }
- ColorInput {
- id: dark_accent_color_input
- text: config.dark_accent_color
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Danger Color
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Danger Text Color"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: danger_color_input.verticalCenter
- }
- }
- ColorInput {
- id: danger_color_input
- text: config.danger_color
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Water Color
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Water Color"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: water_color_input.verticalCenter
- }
- }
- ColorInput {
- id: water_color_input
- text: config.water_color
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Alert Water Color
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Alert Water Color"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: water_color_above_alert_input.verticalCenter
- }
- }
- ColorInput {
- id: water_color_above_alert_input
- text: config.water_color_above_alert
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Background Color
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Backgound Color"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: background_color_input.verticalCenter
- }
- }
- ColorInput {
- id: background_color_input
- text: config.background_color
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- }
- }
-
- // Normal Font Size
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Font Size"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: font_normal_text_size_input.verticalCenter
- }
- }
- TextField {
- id: font_normal_text_size_input
- text: String(config.font_normal_text_size)
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- cursorPosition: 0
- }
- }
-
- // Header Font Size
- Row {
- width: parent.width
- spacing: 10
- Text {
- text: "Header Font Size"
- width: parent.width * 0.4
- verticalAlignment: Text.AlignVCenter
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- anchors {
- verticalCenter: font_enlarged_text_size_input.verticalCenter
- }
- }
- TextField {
- id: font_enlarged_text_size_input
- text: String(config.font_enlarged_text_size)
- width: parent.width * 0.55
- color: settings_popup.accent_color
- font.pointSize: settings_popup.font_normal_text_size
- cursorPosition: 0
- }
- }
-
- // CheckBox
- CustomCheckBox {
- id: current_reading_enable
- checked: config.current_reading_enable
- font_color: settings_popup.accent_color
- font_point_size: settings_popup.font_normal_text_size
- text: "Enable Current Reading"
- leftPadding: 0
- }
-
- // CheckBox
- CustomCheckBox {
- id: percentage_enable
- checked: config.percentage_enable
- font_color: settings_popup.accent_color
- font_point_size: settings_popup.font_normal_text_size
- text: "Enable Percentage Reading"
- leftPadding: 0
- }
-
- // CheckBox
- CustomCheckBox {
- id: filling_status_enable
- checked: config.filling_status_enable
- font_color: settings_popup.accent_color
- font_point_size: settings_popup.font_normal_text_size
- text: "Enable Filling Status"
- leftPadding: 0
- }
-
- // CheckBox
- CustomCheckBox {
- id: rate_of_fill_enable
- checked: config.rate_of_fill_enable
- font_color: settings_popup.accent_color
- font_point_size: settings_popup.font_normal_text_size
- text: "Enable Text Rate of Fill"
- leftPadding: 0
- }
-
- // CheckBox
- CustomCheckBox {
- id: expected_to_fill_enable
- checked: config.expected_to_fill_enable
- font_color: settings_popup.accent_color
- font_point_size: settings_popup.font_normal_text_size
- text: "Enable Expected to fill"
- leftPadding: 0
- }
-
- ConnectButton {
- id: delete_config_button
- width: parent.width / 1.5
- height: 80
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
-
- font_color: settings_popup.accent_color
- font_enlarged_text_size: settings_popup.font_enlarged_text_size
- font_normal_text_size: settings_popup.font_normal_text_size
- color: settings_popup.background_color
- accent_color: settings_popup.accent_color
- text: "Delete/Reset Config"
- text2: text
- onConnect: {
- settings_popup.deleteConfig();
- }
- }
}
+ horizontalAlignment: Text.AlignHCenter
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_enlarged_text_size
}
+
+
+ Text {
+ id: max_thres_label
+ text: "Max Threshold: "
+ anchors {
+ topMargin: 20
+ top: settings_label.bottom
+ left: parent.left
+ verticalCenter: max_thres_input.verticalCenter
+ }
+ height: max_thres_input.height
+ verticalAlignment: Text.AlignVCenter
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+ TextField {
+ id: max_thres_input
+ text: config.max
+ anchors {
+ right: parent.right
+ rightMargin: 5
+ top: settings_label.bottom
+ topMargin: 20
+ }
+ width: parent.width / 2
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+
+ Text {
+ id: min_thres_label
+ text: "Min Threshold: "
+ anchors {
+ topMargin: 20
+ top: max_thres_label.bottom
+ left: parent.left
+ verticalCenter: min_thres_input.verticalCenter
+ }
+ height: min_thres_input.height
+ verticalAlignment: Text.AlignVCenter
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+ TextField {
+ id: min_thres_input
+ text: config.min
+ anchors {
+ right: parent.right
+ rightMargin: 5
+ top: max_thres_label.bottom
+ topMargin: 20
+ }
+ width: parent.width / 2
+ color: root.accent_color
+ font.pointSize: root.font_normal_text_size
+ }
+
+
+ Text {
+ id: alert_thres_label
+ text: "Alert Percentage: "
+ anchors {
+ topMargin: 20
+ top: min_thres_label.bottom
+ left: parent.left
+ verticalCenter: alert_thres_input.verticalCenter
+ }
+ height: alert_thres_input.height
+ verticalAlignment: Text.AlignVCenter
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+ TextField {
+ id: alert_thres_input
+ text: config.alert
+ anchors {
+ right: parent.right
+ rightMargin: 5
+ top: min_thres_label.bottom
+ topMargin: 20
+ }
+ width: parent.width / 2
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+ Text {
+ id: interval_label
+ text: "Update Interval: "
+ anchors {
+ topMargin: 20
+ top: alert_thres_label.bottom
+ left: parent.left
+ verticalCenter: interval_input.verticalCenter
+ }
+ height: interval_input.height
+ verticalAlignment: Text.AlignVCenter
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+
+ TextField {
+ id: interval_input
+ text: config.interval
+ anchors {
+ right: parent.right
+ rightMargin: 5
+ top: alert_thres_input.bottom
+ topMargin: 20
+ }
+ width: parent.width / 2
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+ Text {
+ id: http_url_label
+ text: "Url: "
+ anchors {
+ topMargin: 20
+ top: interval_label.bottom
+ left: parent.left
+ verticalCenter: http_url_input.verticalCenter
+ }
+ height: http_url_input.height
+ verticalAlignment: Text.AlignVCenter
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ }
+
+ TextField {
+ id: http_url_input
+ text: config.url
+ anchors {
+ right: parent.right
+ rightMargin: 20
+ leftMargin: 20
+ top: interval_input.bottom
+ topMargin: 20
+ }
+ width: Math.max(parent.width / 2, parent.width - http_url_label.width - anchors.leftMargin)
+ color: settings_popup.accent_color
+ font.pointSize: settings_popup.font_normal_text_size
+ cursorPosition: 0
+ }
+
Rectangle {
id: save_config
anchors {
@@ -545,43 +237,7 @@ Popup {
let alert = parseFloat(alert_thres_input.text);
let url = http_url_input.text;
let interval = parseInt(interval_input.text);
- let image_width = parseFloat(water_tank_width_input.text);
- let image_height = parseFloat(water_tank_height_input.text);
-
- let current_reading = current_reading_enable.checked;
- let percentage_reading = percentage_enable.checked
- let filling_status = filling_status_enable.checked;
- let rate_of_fill = rate_of_fill_enable.checked;
- let expected_to_fill = expected_to_fill_enable.checked;
-
- let normal_font_size = parseInt(font_normal_text_size_input.text);
- let enlarged_font_size = parseInt(font_enlarged_text_size_input.text);
-
- let accent_color = accent_color_input.text;
- let dark_accent_color = dark_accent_color_input.text;
- let danger_color = danger_color_input.text;
- let water_color = water_color_input.text;
- let water_color_above_alert = water_color_above_alert_input.text;
- let background_color = background_color_input.text;
-
- var new_config = {"max": max, "min": min, "alert": alert, "url": url,
- "interval": interval,
- "water_tank_height": image_height,
- "water_tank_width": image_width,
- "current_reading_enable": current_reading,
- "percentage_enable": percentage_reading,
- "filling_status_enable": filling_status,
- "rate_of_fill_enable": rate_of_fill,
- "expected_to_fill_enable": expected_to_fill,
- "font_normal_text_size": normal_font_size,
- "font_enlarged_text_size": enlarged_font_size,
- "accent_color": accent_color,
- "dark_accent_color": dark_accent_color,
- "danger_color": danger_color,
- "water_color": water_color,
- "water_color_above_alert": water_color_above_alert,
- "background_color": background_color
- }
+ var new_config = {"max": max, "min": min, "alert": alert, "url": url, "interval": interval}
settings_popup.saveConfig(new_config)
settings_popup.close();
}
@@ -589,6 +245,7 @@ Popup {
save_config.color = settings_rect_pressed_prev
}
}
+
}
}
}
\ No newline at end of file
diff --git a/WaterTank.qml b/WaterTank.qml
index 633fac8..dc264f1 100644
--- a/WaterTank.qml
+++ b/WaterTank.qml
@@ -9,12 +9,9 @@ Item {
property color tank_lid_color: "#F0121212"
property color tank_base_color: "#00FFFFFF"
property color water_level_color: "#F00F7FAF"
- property color water_color_above_alert: "#F00FAF0F"
property color tank_base_border_color: "#F0121212"
property color text_color: "#F05FAF5F"
property double height_max: tank_base.height - 10
- property int font_normal_text_size: 0
- property int font_enlarged_text_size: 0
property double current_level: 0
property double percentage_filled: 0
property int distance: 0
@@ -22,12 +19,6 @@ Item {
property double max_thres_input: 0
property double rate_of_fill: 0
property double expected_to_fill: 0
- property double alert_threshold: 0
- property bool enable_current_reading: true
- property bool enable_percentage_reading: true
- property bool enable_filling_status: true
- property bool enable_rate_of_fill: true
- property bool enable_expected_to_fill: true
Rectangle {
id: base
@@ -37,7 +28,7 @@ Item {
id: tank_lid
color: root.tank_lid_color
anchors {
- top: parent.top
+ bottom: tank_base.top
horizontalCenter: tank_base.horizontalCenter
bottomMargin: -5
}
@@ -49,12 +40,9 @@ Item {
Rectangle {
id: tank_base
color: root.tank_base_color
- anchors {
- top: tank_lid.bottom
- horizontalCenter: parent.horizontalCenter
- }
+ anchors.centerIn: parent
width: parent.width
- height: parent.height * 0.55
+ height: parent.height
border.color: root.tank_base_border_color
border.width: 5
radius: 4
@@ -82,93 +70,73 @@ Item {
}
}
- ScrollView {
- id: rect_base_scroll_view
+ Text {
+ id: water_level_reading
+ text: "Current Reading: " + (root.distance / 10)+ " cm"
+ font.pointSize: 16
+ color: root.text_color
anchors {
margins: 5
top: tank_base.bottom
- bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
}
- width: parent.width
-
- contentWidth: parent.width
- contentHeight: settings_column.implicitHeight
- Column {
- id: settings_column
- spacing: 10
- width: rect_base_scroll_view.width
- Text {
- id: water_level_reading
- text: "Current Reading: " + (root.distance / 10)+ " cm"
- font.pointSize: root.font_normal_text_size
- color: root.text_color
- visible: enable_current_reading
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
- horizontalAlignment: Text.AlignHCenter
- }
-
- Text {
- id: water_level_percentage
- text: "Percentage: " + root.percentage_filled.toFixed(2) + " %"
- font.pointSize: root.font_normal_text_size
- visible: enable_percentage_reading
- color: root.text_color
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
- horizontalAlignment: Text.AlignHCenter
- }
-
- Text {
- id: fill_status
- text: "Filling status: " + (( root.rate_of_fill > 0)? "Filling" : "Discharging")
- font.pointSize: root.font_normal_text_size
- color: root.text_color
- visible: enable_filling_status
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
- horizontalAlignment: Text.AlignHCenter
- }
- Text {
- id: rate_of_fill_label
- text: "Rate of fill: " + root.rate_of_fill + " cm/s"
- font.pointSize: root.font_normal_text_size
- color: root.text_color
- visible: enable_rate_of_fill
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
- horizontalAlignment: Text.AlignHCenter
- }
- Text {
- id: expected_to_fill_label
- text: "Expected to fill in: " + root.expected_to_fill + " s"
- font.pointSize: root.font_normal_text_size
- color: root.text_color
- visible: (root.rate_of_fill > 0 && enable_expected_to_fill === true) ? true : false
- anchors {
- horizontalCenter: parent.horizontalCenter
- }
- horizontalAlignment: Text.AlignHCenter
- }
- }
+ horizontalAlignment: Text.AlignHCenter
}
+ Text {
+ id: water_level_percentage
+ text: "Percentage: " + root.percentage_filled + " %"
+ font.pointSize: 16
+ color: root.text_color
+ anchors {
+ margins: 5
+ top: water_level_reading.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ Text {
+ id: fill_status
+ text: "Filling status: " + (( root.rate_of_fill > 0)? "Filling" : "Discharging")
+ font.pointSize: 16
+ color: root.text_color
+ anchors {
+ margins: 5
+ top: water_level_percentage.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
+ horizontalAlignment: Text.AlignHCenter
+ }
+ Text {
+ id: rate_of_fill_label
+ text: "Rate of fill: " + root.rate_of_fill + " cm/s"
+ font.pointSize: 16
+ color: root.text_color
+ anchors {
+ margins: 5
+ top: fill_status.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
+ horizontalAlignment: Text.AlignHCenter
+ }
+ Text {
+ id: expected_to_fill_label
+ text: "Expected to fill in: " + root.expected_to_fill + " s"
+ font.pointSize: 16
+ color: root.text_color
+ visible: (root.rate_of_fill > 0) ? true : false
+ anchors {
+ margins: 5
+ top: rate_of_fill_label.bottom
+ horizontalCenter: parent.horizontalCenter
+ }
+ horizontalAlignment: Text.AlignHCenter
+ }
}
function setConfig(config: var) {
min_thres_input = config.min;
max_thres_input = config.max;
- alert_threshold = config.alert;
- enable_current_reading = config.current_reading_enable;
- enable_percentage_reading = config.percentage_enable;
- enable_filling_status = config.filling_status_enable;
- enable_rate_of_fill = config.rate_of_fill_enable;
- enable_expected_to_fill = config.expected_to_fill_enable;
-
}
function setDistance(distance) {
@@ -188,17 +156,8 @@ Item {
console.log("Current reading is: " + current_reading)
console.log("Normalized height is: " + normalized_height)
console.log("Percentage filled is: " + percentage_filled)
- console.log("Alert threshold is: " + root.alert_threshold)
- console.log("Is level above alert threshold: " + (distance_f <= root.alert_threshold))
root.current_level = normalized_height;
root.percentage_filled = percentage_filled;
-
- if(distance_f <= root.alert_threshold) {
- water_level.color = water_color_above_alert
- }
- else {
- water_level.color = water_level_color
- }
}
}
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
deleted file mode 100644
index 2598885..0000000
--- a/android/AndroidManifest.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/configinterface.cpp b/configinterface.cpp
index 8f40d45..258560f 100644
--- a/configinterface.cpp
+++ b/configinterface.cpp
@@ -2,7 +2,6 @@
#include
#include
-#include
ConfigInterface::ConfigInterface(QObject *parent)
: QObject{parent}
@@ -38,12 +37,6 @@ void ConfigInterface::setFileName(const QString &newFileName)
emit fileNameChanged();
}
-void ConfigInterface::deleteConfig()
-{
- std::filesystem::remove(std::filesystem::path(m_fileName.toStdString()));
- emit configDeleted();
-}
-
void ConfigInterface::saveConfig(QJsonObject config)
{
QJsonDocument doc;
diff --git a/configinterface.h b/configinterface.h
index e3cb75e..606b496 100644
--- a/configinterface.h
+++ b/configinterface.h
@@ -19,9 +19,7 @@ public:
signals:
void config(QJsonObject config);
void fileNameChanged();
- void configDeleted();
public slots:
- void deleteConfig();
void saveConfig(QJsonObject config);
private:
QString m_fileName;
diff --git a/main.cpp b/main.cpp
index ecedbf4..c438cd2 100644
--- a/main.cpp
+++ b/main.cpp
@@ -3,11 +3,8 @@
int main(int argc, char *argv[])
{
- qputenv("QT_SCALE_FACTOR", "1.0");
- qputenv("QT_SCALE_FACTOR_ROUNDING_POLICY", "Round");
QGuiApplication app(argc, argv);
-
QQmlApplicationEngine engine;
QObject::connect(
&engine,
diff --git a/requestworker.cpp b/requestworker.cpp
index f0657ef..983c554 100644
--- a/requestworker.cpp
+++ b/requestworker.cpp
@@ -4,21 +4,11 @@
#include
#include
#include
-#include
RequestWorker::RequestWorker(QObject *parent)
: QObject{parent}
{
-#ifdef Q_OS_ANDROID
- wifi = new WiFiHelper(this);
- connect(wifi, &WiFiHelper::ssidRetrieved, this, &RequestWorker::gotWiFiSSID);
- poll_wifi = new QTimer(this);
- poll_wifi->setInterval(3000);
- poll_wifi->setSingleShot(false);
- connect(poll_wifi, &QTimer::timeout, this, &RequestWorker::pollWiFi);
- wifi->requestPermissionsAndFetch();
- poll_wifi->start();
-#endif
+
}
void RequestWorker::setConfig(QJsonObject config)
@@ -64,104 +54,10 @@ void RequestWorker::stop()
qDebug() << "Stopping" << timer->isActive();
}
-QString RequestWorker::getRequestResponseString(QNetworkReply *rep, QString rep_data)
-{
- if(!rep) {
- return "No Reply";
- }
- QNetworkRequest req = rep->request();
- QString errorString = rep->errorString();
- QString resp = "GET " + req.url().toString() + "\n";
- for(auto &key: req.rawHeaderList()) {
- QByteArray value = req.rawHeader(key);
- resp += key + ": " + value + "\n";
- }
- qDebug() << "Raw header list size: " << req.rawHeaderList().size();
- QString ret;
- ret = "Request:\n";
- ret += resp;
- ret += "Response:\n";
- if(rep_data == "")
- ret += errorString;
- else
- ret += rep_data;
- return ret;
-}
-
-void RequestWorker::pollWiFi()
-{
-#ifdef Q_OS_ANDROID
- if(wifi) {
- wifi->requestPermissionsAndFetch();
- }
-#endif
-}
-
-void RequestWorker::gotWiFiSSID(QString ssid)
-{
- if(ssid.length() > 0 && ssid != "Permission Denied" && ssid != "") {
- emit connectionText("WiFi connected: " + ssid);
- }
- else if(ssid.length() == 0) {
- emit connectionText("WiFi might not be connected", true);
- }
- else if(ssid != "") {
- emit connectionText("Failed to query wifi info", true);
- }
- else {
- emit connectionText("WiFi disconnected", true);
- }
-}
-
void RequestWorker::playAlarm()
{
- if (player_started)
+ if(player_started)
return;
-
- // Step 1: Copy the qrc resource to a local cache file so Android can read it
-#ifdef Q_OS_ANDROID
- QString qrcPath = ":/sounds/echo.mp3";
- QString cachePath = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/echo.mp3";
-
- if (QFile::exists(cachePath)) {
- QFile::remove(cachePath);
- }
-
- if (QFile::copy(qrcPath, cachePath)) {
- qDebug() << "Successfully copied resource to cache:" << cachePath;
- } else {
- qDebug() << "Failed to copy resource to cache path!";
- return;
- }
-
- // Step 2: Use Android JNI to initialize and play via android.media.MediaPlayer
- QJniEnvironment env;
-
- // Create new android.media.MediaPlayer()
- QJniObject mediaPlayer("android/media/MediaPlayer");
- if (!mediaPlayer.isValid()) {
- qDebug() << "Failed to create native Android MediaPlayer!";
- return;
- }
-
- // Set data source using the local cache file path
- QJniObject jPath = QJniObject::fromString(cachePath);
- mediaPlayer.callMethod("setDataSource", "(Ljava/lang/String;)V", jPath.object());
-
- // Enable looping
- mediaPlayer.callMethod("setLooping", "(Z)V", true);
-
- // Prepare and start playback
- mediaPlayer.callMethod("prepare");
- mediaPlayer.callMethod("start");
-
- // Store a global reference so it doesn't get garbage collected immediately
- m_androidMediaPlayer = new QJniObject(mediaPlayer.object());
-
- player_started = true;
- qDebug() << "Native Android alarm started successfully.";
- return;
-#endif
if(player) {
player->deleteLater();
player = nullptr;
@@ -203,16 +99,15 @@ void RequestWorker::makeRequest()
void RequestWorker::requestFinished(QNetworkReply *rep)
{
QByteArray data = rep->readAll();
+ rep->deleteLater();
+ rep = nullptr;
auto now = std::chrono::high_resolution_clock::now();
auto time_diff = std::chrono::duration_cast(now - prev_time);
if(data.size() == 0) {
prev_time = now;
timer->start();
- QString request_response_string = getRequestResponseString(rep);
- emit requestFailed(request_response_string);
+ emit requestFailed();
emit setStatus("Invalid Response; Resending Request");
- rep->deleteLater();
- rep = nullptr;
return;
}
unsigned int time_in_microseconds = time_diff.count();
@@ -222,10 +117,10 @@ void RequestWorker::requestFinished(QNetworkReply *rep)
float rate_of_fill = ( float )(prev_distance - water_level) /(float) time_in_microseconds;
rate_of_fill = rate_of_fill * 1'000'000;
int expected_to_fill = (water_level - min_height) / rate_of_fill;
- int percentage_filled = (float (max_height - water_level) / float (max_height)) * 100;
+ int percentage_filled = (float (max_height - water_level) / float (max_height)) *100;
if(enable_alarm) {
qDebug() << "Alarm enabled";
- if(water_level <= alarm_thres) {
+ if(percentage_filled >= alarm_thres) {
playAlarm();
}
}
@@ -240,19 +135,14 @@ void RequestWorker::requestFinished(QNetworkReply *rep)
qDebug() << "Percentage filled: " << percentage_filled;
qDebug() << "Time difference: " << time_in_microseconds;
prev_distance = water_level;
- QString timestamp = QDateTime::currentDateTime().toString("hh:mm:ss");
- QString request_response_string = getRequestResponseString(rep, data);
- request_response_string += "Timestamp:\n" + timestamp;
- rep->deleteLater();
- rep = nullptr;
- emit networkReply(data_water_level, rate_of_fill, expected_to_fill, request_response_string);
+ emit networkReply(data_water_level, rate_of_fill, expected_to_fill);
if(stop_timer) {
setStatus("Timer stopped.");
return;
}
prev_time = now;
timer->start();
- QString status = "Got Reply on: " + timestamp + "; Waiting to Send.";
+ QString status = "Got Reply on: " + QDateTime::currentDateTime().toString("hh:mm:ss") + "; Waiting to Send.";
setStatus(status);
}
@@ -276,9 +166,6 @@ void RequestWorker::startAlarm()
void RequestWorker::stopAlarm()
{
- if (!player_started)
- return;
-
enable_alarm = false;
player_started = false;
if(player) {
@@ -290,13 +177,4 @@ void RequestWorker::stopAlarm()
audioOutput->deleteLater();
audioOutput = nullptr;
}
-#ifdef Q_OS_ANDROID
- if (m_androidMediaPlayer && m_androidMediaPlayer->isValid()) {
- m_androidMediaPlayer->callMethod("stop");
- m_androidMediaPlayer->callMethod("release");
-
- delete m_androidMediaPlayer;
- m_androidMediaPlayer = nullptr;
- }
-#endif
}
diff --git a/requestworker.h b/requestworker.h
index c759e44..f78e3a6 100644
--- a/requestworker.h
+++ b/requestworker.h
@@ -11,10 +11,6 @@
#include
#include
#include
-#ifdef Q_OS_ANDROID
-#include "wifihelper.h"
-#include
-#endif
class RequestWorker : public QObject
{
@@ -35,10 +31,6 @@ class RequestWorker : public QObject
bool player_started = false;
QMediaPlayer *player = nullptr;
QAudioOutput *audioOutput = nullptr;
-#ifdef Q_OS_ANDROID
- WiFiHelper *wifi = nullptr;
- QTimer *poll_wifi = nullptr;
-#endif
std::chrono::time_point prev_time;
public:
explicit RequestWorker(QObject *parent = nullptr);
@@ -46,11 +38,10 @@ public:
void setStatus(const QString &newStatus);
signals:
- void requestFailed(QString request_response_string);
- void networkReply(int distance, float rate_of_fill, int expected_to_fill, QString data);
+ void requestFailed();
+ void networkReply(int distance, float rate_of_fill, int expected_to_fill);
void statusChanged();
void playMedia();
- void connectionText(QString text, bool errored = false);
public slots:
void startAlarm();
void stopAlarm();
@@ -58,17 +49,11 @@ public slots:
void start();
void stop();
private slots:
- QString getRequestResponseString(QNetworkReply *rep, QString rep_data = "");
- void pollWiFi();
- void gotWiFiSSID(QString ssid);
void playAlarm();
void makeRequest();
void requestFinished(QNetworkReply *rep);
private:
QString m_status;
-#ifdef Q_OS_ANDROID
- QJniObject *m_androidMediaPlayer = nullptr;
-#endif
};
#endif // REQUESTWORKER_H
diff --git a/wifihelper.cpp b/wifihelper.cpp
deleted file mode 100644
index 835cea7..0000000
--- a/wifihelper.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-#include "wifihelper.h"
-#include
-#include
-#ifdef Q_OS_ANDROID
-#include
-#endif
-#include
-
-WiFiHelper::WiFiHelper(QObject *parent)
- : QObject{parent}
-{
-
-}
-
-QString WiFiHelper::getWifiSsid() {
-#ifdef Q_OS_ANDROID
- // Get Android application context in Qt 6
- QJniObject context = QNativeInterface::QAndroidApplication::context();
- if (!context.isValid()) return QString();
-
- // Get WifiManager service
- QJniObject wifiService = QJniObject::fromString("wifi");
- QJniObject wifiManager = context.callObjectMethod(
- "getSystemService",
- "(Ljava/lang/String;)Ljava/lang/Object;",
- wifiService.object()
- );
- if (!wifiManager.isValid()) return QString();
-
- // Fetch WifiInfo
- QJniObject wifiInfo = wifiManager.callObjectMethod(
- "getConnectionInfo",
- "()Landroid/net/wifi/WifiInfo;"
- );
- if (!wifiInfo.isValid()) return QString();
-
- // Get SSID string
- QJniObject ssidJni = wifiInfo.callObjectMethod(
- "getSSID",
- "()Ljava/lang/String;"
- );
- if (!ssidJni.isValid()) return QString();
-
- QString ssid = ssidJni.toString();
-
- // Android returns SSIDs wrapped in double quotes (e.g., "\"MyWiFi\"")
- if (ssid.startsWith('"') && ssid.endsWith('"') && ssid.length() > 1) {
- ssid = ssid.mid(1, ssid.length() - 2);
- }
-
- return ssid;
-#endif
- return "";
-}
-
-void WiFiHelper::requestPermissionsAndFetch() {
-#ifdef Q_OS_ANDROID
- QLocationPermission locationPermission;
- locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise);
- Qt::PermissionStatus status = qApp->checkPermission(locationPermission);
-
- if (status == Qt::PermissionStatus::Granted) {
- emit ssidRetrieved(getWifiSsid());
- } else {
- qDebug() << "Requesting permission.";
- qApp->requestPermission(locationPermission, this, [this](const QPermission &permission) {
- if (permission.status() == Qt::PermissionStatus::Granted) {
- qDebug() << "Requested permission and got ssid";
- emit ssidRetrieved(getWifiSsid());
- } else {
- qDebug() << "Failed to get WiFi SSID due to denied permission.";
- emit ssidRetrieved("Permission Denied");
- }
- });
- }
-#endif
-}
diff --git a/wifihelper.h b/wifihelper.h
deleted file mode 100644
index ab10632..0000000
--- a/wifihelper.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef WIFIHELPER_H
-#define WIFIHELPER_H
-
-#include
-
-class WiFiHelper : public QObject
-{
- Q_OBJECT
-public:
- explicit WiFiHelper(QObject *parent = nullptr);
- Q_INVOKABLE QString getWifiSsid();
- Q_INVOKABLE void requestPermissionsAndFetch();
-
-signals:
- void ssidRetrieved(const QString &ssid);
-};
-#endif // WIFIHELPER_H