From 44dde3a1b39dcd40fd906a2380c422ebbb95375c Mon Sep 17 00:00:00 2001 From: CARBONTREX Date: Mon, 23 Jun 2025 18:45:43 +0200 Subject: [PATCH 1/2] Added HEMS application to the repository --- hems-core/src/api/ha/entity.rs | 45 +- hems-core/src/resources/devices/ha_entity.rs | 26 + hems_application/.editorconfig | 3 + hems_application/.gitignore | 56 ++ hems_application/.gitlab-ci.yml | 89 ++ hems_application/.metadata | 45 + hems_application/README.md | 181 ++++ hems_application/analysis_options.yaml | 4 + hems_application/android/.gitignore | 14 + hems_application/android/app/build.gradle.kts | 53 + .../android/app/google-services.json | 29 + .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 72 ++ .../com/example/hems_app/MainActivity.kt | 5 + .../drawable-hdpi/ic_launcher_foreground.png | Bin 0 -> 9445 bytes .../res/drawable-hdpi/icon_transparent.png | Bin 0 -> 106450 bytes .../drawable-mdpi/ic_launcher_foreground.png | Bin 0 -> 5789 bytes .../res/drawable-mdpi/icon_transparent.png | Bin 0 -> 106450 bytes .../src/main/res/drawable-v21/background.png | Bin 0 -> 69 bytes .../res/drawable-v21/icon_transparent.png | Bin 0 -> 106450 bytes .../res/drawable-v21/launch_background.xml | 6 + .../drawable-xhdpi/ic_launcher_foreground.png | Bin 0 -> 13692 bytes .../res/drawable-xhdpi/icon_transparent.png | Bin 0 -> 106450 bytes .../ic_launcher_foreground.png | Bin 0 -> 22761 bytes .../res/drawable-xxhdpi/icon_transparent.png | Bin 0 -> 106450 bytes .../ic_launcher_foreground.png | Bin 0 -> 33231 bytes .../res/drawable-xxxhdpi/icon_transparent.png | Bin 0 -> 106450 bytes .../app/src/main/res/drawable/background.png | Bin 0 -> 69 bytes .../main/res/drawable/icon_transparent.png | Bin 0 -> 106450 bytes .../main/res/drawable/launch_background.xml | 6 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 9 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2974 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1922 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4061 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6076 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8199 bytes .../src/main/res/values-night-v31/styles.xml | 20 + .../app/src/main/res/values-night/styles.xml | 22 + .../app/src/main/res/values-v31/styles.xml | 20 + .../app/src/main/res/values/colors.xml | 4 + .../app/src/main/res/values/styles.xml | 22 + .../app/src/profile/AndroidManifest.xml | 7 + hems_application/android/build.gradle.kts | 21 + hems_application/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 7 + hems_application/android/settings.gradle.kts | 28 + hems_application/assets/icons/icon.png | Bin 0 -> 45111 bytes .../assets/icons/icon_transparent.png | Bin 0 -> 106450 bytes hems_application/dart_test.yaml | 2 + hems_application/devtools_options.yaml | 3 + hems_application/firebase.json | 25 + hems_application/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + hems_application/ios/Flutter/Debug.xcconfig | 1 + hems_application/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 ++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + hems_application/ios/Runner/AppDelegate.swift | 20 + .../AppIcon.appiconset/Contents.json | 1 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 48634 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 705 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1540 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 2504 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1105 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 2410 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 3708 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1540 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 3329 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 5006 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 2018 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 4243 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 2350 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 4844 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 5006 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 7650 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 2974 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 6076 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 3194 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 6396 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 7152 bytes .../LaunchBackground.imageset/Contents.json | 21 + .../LaunchBackground.imageset/background.png | Bin 0 -> 69 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 69 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 69 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 69 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 44 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + hems_application/ios/Runner/Info.plist | 51 + .../ios/Runner/Runner-Bridging-Header.h | 1 + .../ios/RunnerTests/RunnerTests.swift | 12 + hems_application/l10n.yaml | 4 + hems_application/lib/app_navigation.dart | 72 ++ hems_application/lib/extensions.dart | 6 + .../lib/firebase/firebase_msg.dart | 15 + .../lib/firebase/firebase_options.dart | 88 ++ hems_application/lib/l10n/app_en.arb | 122 +++ hems_application/lib/l10n/app_nl.arb | 121 +++ hems_application/lib/main.dart | 82 ++ hems_application/lib/material/themes.dart | 144 +++ .../lib/model/api/battery_info.dart | 62 ++ .../lib/model/api/battery_status.dart | 2 + .../lib/model/api/device_status.dart | 96 ++ .../lib/model/api/entity_request.dart | 22 + hems_application/lib/model/api/job.dart | 21 + .../lib/model/api/measurement.dart | 19 + .../lib/model/api/meter_info.dart | 48 + .../lib/model/api/schedule_job.dart | 19 + .../lib/model/api/solar_info.dart | 18 + .../lib/model/api/thermal_info.dart | 38 + .../lib/model/internal/device.dart | 99 ++ hems_application/lib/model/internal/room.dart | 108 ++ .../lib/service/battery_service.dart | 73 ++ .../lib/service/device_service.dart | 39 + .../lib/service/entity_service.dart | 71 ++ .../service/local_notifications_service.dart | 104 ++ .../lib/service/meter_service.dart | 41 + .../lib/service/solar_service.dart | 58 ++ .../lib/service/thermal_service.dart | 71 ++ .../lib/service/timeshifter_service.dart | 112 +++ hems_application/lib/state/app_state.dart | 198 ++++ .../lib/state/locale_notifier.dart | 34 + .../lib/state/stat_collector.dart | 103 ++ .../lib/state/theme_notifier.dart | 35 + .../lib/util/hems_backend_util.dart | 133 +++ .../lib/util/timeshifter_util.dart | 275 +++++ .../widget/analytics/animated_power_flow.dart | 114 +++ .../widget/analytics/consumption_chart.dart | 79 ++ .../widget/analytics/power_flow_painter.dart | 91 ++ .../lib/widget/device/battery_info_card.dart | 316 ++++++ .../widget/device/battery_ring_painter.dart | 120 +++ .../widget/device/ha_entity_info_card.dart | 124 +++ .../lib/widget/device/meter_info_card.dart | 114 +++ .../lib/widget/device/solar_info_card.dart | 105 ++ .../widget/device/solar_toggle_switch.dart | 42 + .../lib/widget/device/thermal_info_card.dart | 150 +++ .../widget/device/thermometer_painter.dart | 126 +++ .../lib/widget/device/timeshifter_card.dart | 233 +++++ .../lib/widget/page/create_job.dart | 404 ++++++++ .../lib/widget/page/device_schedule_page.dart | 103 ++ .../widget/page/device_selection_page.dart | 66 ++ .../lib/widget/page/devices_page.dart | 213 ++++ .../lib/widget/page/edit_room.dart | 434 ++++++++ .../lib/widget/page/home_page.dart | 196 ++++ .../lib/widget/page/schedules_page.dart | 174 ++++ .../lib/widget/page/settings_page.dart | 223 ++++ hems_application/lib/widget/room_card.dart | 56 ++ .../lib/widget/schedule_view.dart | 119 +++ .../lib/widget/scheduled_job.dart | 191 ++++ .../lib/widget/util/value_row.dart | 40 + hems_application/linux/.gitignore | 1 + hems_application/linux/CMakeLists.txt | 128 +++ hems_application/linux/flutter/CMakeLists.txt | 88 ++ hems_application/linux/runner/CMakeLists.txt | 26 + hems_application/linux/runner/main.cc | 6 + .../linux/runner/my_application.cc | 130 +++ .../linux/runner/my_application.h | 18 + hems_application/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 1 + .../macos/Flutter/Flutter-Release.xcconfig | 1 + .../macos/Runner.xcodeproj/project.pbxproj | 705 +++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + hems_application/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + hems_application/pubspec.lock | 951 ++++++++++++++++++ hems_application/pubspec.yaml | 68 ++ .../test/app_navigation_test.dart | 127 +++ .../test/model/api/battery_info_test.dart | 119 +++ .../test/model/api/device_status_test.dart | 117 +++ .../test/model/api/entity_request_test.dart | 44 + hems_application/test/model/api/job_test.dart | 32 + .../test/model/api/measurement_test.dart | 32 + .../test/model/api/meter_info_test.dart | 130 +++ .../test/model/api/schedule_job_test.dart | 29 + .../test/model/api/solar_info_test.dart | 41 + .../test/model/api/thermal_info_test.dart | 60 ++ .../test/model/internal/device_test.dart | 171 ++++ .../test/model/internal/room_test.dart | 254 +++++ .../test/service/battery_service_test.dart | 76 ++ .../test/service/device_service_test.dart | 12 + .../test/service/entity_service_test.dart | 82 ++ .../test/service/meter_service_test.dart | 56 ++ .../test/service/solar_service_test.dart | 52 + .../test/service/thermal_service_test.dart | 76 ++ .../service/timeshifter_service_test.dart | 106 ++ .../testing_utils/wrap_with_material_app.dart | 17 + .../test/util/hems_backend_util_test.dart | 67 ++ .../test/util/timeshifter_util_test.dart | 271 +++++ .../analytics/animated_power_flow_test.dart | 27 + .../analytics/consumption_chart_test.dart | 49 + .../widget/device/battery_info_card_test.dart | 146 +++ .../device/ha_entity_info_card_test.dart | 98 ++ .../widget/device/meter_info_card_test.dart | 87 ++ .../widget/device/solar_info_card_test.dart | 69 ++ .../device/solar_toggle_switch_test.dart | 26 + .../widget/device/thermal_info_card_test.dart | 67 ++ .../widget/device/timeshifter_card_test.dart | 143 +++ .../test/widget/page/create_job_test.dart | 135 +++ .../page/device_schedule_page_test.dart | 139 +++ .../page/device_selection_page_test.dart | 64 ++ .../test/widget/page/devices_page_test.dart | 155 +++ .../test/widget/page/edit_room_test.dart | 364 +++++++ .../test/widget/page/home_page_test.dart | 137 +++ .../test/widget/page/schedules_page_test.dart | 149 +++ .../test/widget/page/settings_page_test.dart | 73 ++ .../test/widget/room_card_test.dart | 38 + .../test/widget/schedule_view_test.dart | 95 ++ .../test/widget/scheduled_job_test.dart | 145 +++ .../test/widget/util/value_row_test.dart | 38 + hems_application/web/app.html | 38 + hems_application/web/favicon.png | Bin 0 -> 558 bytes hems_application/web/icons/Icon-192.png | Bin 0 -> 8199 bytes hems_application/web/icons/Icon-512.png | Bin 0 -> 22226 bytes .../web/icons/Icon-maskable-192.png | Bin 0 -> 8199 bytes .../web/icons/Icon-maskable-512.png | Bin 0 -> 22226 bytes hems_application/web/index.html | 145 +++ hems_application/web/manifest.json | 35 + hems_application/windows/.gitignore | 17 + hems_application/windows/CMakeLists.txt | 108 ++ .../windows/flutter/CMakeLists.txt | 109 ++ .../windows/runner/CMakeLists.txt | 40 + hems_application/windows/runner/Runner.rc | 121 +++ .../windows/runner/flutter_window.cpp | 71 ++ .../windows/runner/flutter_window.h | 33 + hems_application/windows/runner/main.cpp | 43 + hems_application/windows/runner/resource.h | 16 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 1944 bytes .../windows/runner/runner.exe.manifest | 14 + hems_application/windows/runner/utils.cpp | 65 ++ hems_application/windows/runner/utils.h | 19 + .../windows/runner/win32_window.cpp | 288 ++++++ .../windows/runner/win32_window.h | 102 ++ 259 files changed, 16511 insertions(+), 1 deletion(-) create mode 100644 hems_application/.editorconfig create mode 100644 hems_application/.gitignore create mode 100644 hems_application/.gitlab-ci.yml create mode 100644 hems_application/.metadata create mode 100644 hems_application/README.md create mode 100644 hems_application/analysis_options.yaml create mode 100644 hems_application/android/.gitignore create mode 100644 hems_application/android/app/build.gradle.kts create mode 100644 hems_application/android/app/google-services.json create mode 100644 hems_application/android/app/src/debug/AndroidManifest.xml create mode 100644 hems_application/android/app/src/main/AndroidManifest.xml create mode 100644 hems_application/android/app/src/main/kotlin/com/example/hems_app/MainActivity.kt create mode 100644 hems_application/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png create mode 100644 hems_application/android/app/src/main/res/drawable-hdpi/icon_transparent.png create mode 100644 hems_application/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png create mode 100644 hems_application/android/app/src/main/res/drawable-mdpi/icon_transparent.png create mode 100644 hems_application/android/app/src/main/res/drawable-v21/background.png create mode 100644 hems_application/android/app/src/main/res/drawable-v21/icon_transparent.png create mode 100644 hems_application/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 hems_application/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png create mode 100644 hems_application/android/app/src/main/res/drawable-xhdpi/icon_transparent.png create mode 100644 hems_application/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png create mode 100644 hems_application/android/app/src/main/res/drawable-xxhdpi/icon_transparent.png create mode 100644 hems_application/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png create mode 100644 hems_application/android/app/src/main/res/drawable-xxxhdpi/icon_transparent.png create mode 100644 hems_application/android/app/src/main/res/drawable/background.png create mode 100644 hems_application/android/app/src/main/res/drawable/icon_transparent.png create mode 100644 hems_application/android/app/src/main/res/drawable/launch_background.xml create mode 100644 hems_application/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 hems_application/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 hems_application/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 hems_application/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 hems_application/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 hems_application/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 hems_application/android/app/src/main/res/values-night-v31/styles.xml create mode 100644 hems_application/android/app/src/main/res/values-night/styles.xml create mode 100644 hems_application/android/app/src/main/res/values-v31/styles.xml create mode 100644 hems_application/android/app/src/main/res/values/colors.xml create mode 100644 hems_application/android/app/src/main/res/values/styles.xml create mode 100644 hems_application/android/app/src/profile/AndroidManifest.xml create mode 100644 hems_application/android/build.gradle.kts create mode 100644 hems_application/android/gradle.properties create mode 100644 hems_application/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 hems_application/android/settings.gradle.kts create mode 100644 hems_application/assets/icons/icon.png create mode 100644 hems_application/assets/icons/icon_transparent.png create mode 100644 hems_application/dart_test.yaml create mode 100644 hems_application/devtools_options.yaml create mode 100644 hems_application/firebase.json create mode 100644 hems_application/ios/.gitignore create mode 100644 hems_application/ios/Flutter/AppFrameworkInfo.plist create mode 100644 hems_application/ios/Flutter/Debug.xcconfig create mode 100644 hems_application/ios/Flutter/Release.xcconfig create mode 100644 hems_application/ios/Runner.xcodeproj/project.pbxproj create mode 100644 hems_application/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 hems_application/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 hems_application/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 hems_application/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 hems_application/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 hems_application/ios/Runner/AppDelegate.swift create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json create mode 100644 hems_application/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 hems_application/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 hems_application/ios/Runner/Base.lproj/Main.storyboard create mode 100644 hems_application/ios/Runner/Info.plist create mode 100644 hems_application/ios/Runner/Runner-Bridging-Header.h create mode 100644 hems_application/ios/RunnerTests/RunnerTests.swift create mode 100644 hems_application/l10n.yaml create mode 100644 hems_application/lib/app_navigation.dart create mode 100644 hems_application/lib/extensions.dart create mode 100644 hems_application/lib/firebase/firebase_msg.dart create mode 100644 hems_application/lib/firebase/firebase_options.dart create mode 100644 hems_application/lib/l10n/app_en.arb create mode 100644 hems_application/lib/l10n/app_nl.arb create mode 100644 hems_application/lib/main.dart create mode 100644 hems_application/lib/material/themes.dart create mode 100644 hems_application/lib/model/api/battery_info.dart create mode 100644 hems_application/lib/model/api/battery_status.dart create mode 100644 hems_application/lib/model/api/device_status.dart create mode 100644 hems_application/lib/model/api/entity_request.dart create mode 100644 hems_application/lib/model/api/job.dart create mode 100644 hems_application/lib/model/api/measurement.dart create mode 100644 hems_application/lib/model/api/meter_info.dart create mode 100644 hems_application/lib/model/api/schedule_job.dart create mode 100644 hems_application/lib/model/api/solar_info.dart create mode 100644 hems_application/lib/model/api/thermal_info.dart create mode 100644 hems_application/lib/model/internal/device.dart create mode 100644 hems_application/lib/model/internal/room.dart create mode 100644 hems_application/lib/service/battery_service.dart create mode 100644 hems_application/lib/service/device_service.dart create mode 100644 hems_application/lib/service/entity_service.dart create mode 100644 hems_application/lib/service/local_notifications_service.dart create mode 100644 hems_application/lib/service/meter_service.dart create mode 100644 hems_application/lib/service/solar_service.dart create mode 100644 hems_application/lib/service/thermal_service.dart create mode 100644 hems_application/lib/service/timeshifter_service.dart create mode 100644 hems_application/lib/state/app_state.dart create mode 100644 hems_application/lib/state/locale_notifier.dart create mode 100644 hems_application/lib/state/stat_collector.dart create mode 100644 hems_application/lib/state/theme_notifier.dart create mode 100644 hems_application/lib/util/hems_backend_util.dart create mode 100644 hems_application/lib/util/timeshifter_util.dart create mode 100644 hems_application/lib/widget/analytics/animated_power_flow.dart create mode 100644 hems_application/lib/widget/analytics/consumption_chart.dart create mode 100644 hems_application/lib/widget/analytics/power_flow_painter.dart create mode 100644 hems_application/lib/widget/device/battery_info_card.dart create mode 100644 hems_application/lib/widget/device/battery_ring_painter.dart create mode 100644 hems_application/lib/widget/device/ha_entity_info_card.dart create mode 100644 hems_application/lib/widget/device/meter_info_card.dart create mode 100644 hems_application/lib/widget/device/solar_info_card.dart create mode 100644 hems_application/lib/widget/device/solar_toggle_switch.dart create mode 100644 hems_application/lib/widget/device/thermal_info_card.dart create mode 100644 hems_application/lib/widget/device/thermometer_painter.dart create mode 100644 hems_application/lib/widget/device/timeshifter_card.dart create mode 100644 hems_application/lib/widget/page/create_job.dart create mode 100644 hems_application/lib/widget/page/device_schedule_page.dart create mode 100644 hems_application/lib/widget/page/device_selection_page.dart create mode 100644 hems_application/lib/widget/page/devices_page.dart create mode 100644 hems_application/lib/widget/page/edit_room.dart create mode 100644 hems_application/lib/widget/page/home_page.dart create mode 100644 hems_application/lib/widget/page/schedules_page.dart create mode 100644 hems_application/lib/widget/page/settings_page.dart create mode 100644 hems_application/lib/widget/room_card.dart create mode 100644 hems_application/lib/widget/schedule_view.dart create mode 100644 hems_application/lib/widget/scheduled_job.dart create mode 100644 hems_application/lib/widget/util/value_row.dart create mode 100644 hems_application/linux/.gitignore create mode 100644 hems_application/linux/CMakeLists.txt create mode 100644 hems_application/linux/flutter/CMakeLists.txt create mode 100644 hems_application/linux/runner/CMakeLists.txt create mode 100644 hems_application/linux/runner/main.cc create mode 100644 hems_application/linux/runner/my_application.cc create mode 100644 hems_application/linux/runner/my_application.h create mode 100644 hems_application/macos/.gitignore create mode 100644 hems_application/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 hems_application/macos/Flutter/Flutter-Release.xcconfig create mode 100644 hems_application/macos/Runner.xcodeproj/project.pbxproj create mode 100644 hems_application/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 hems_application/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 hems_application/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 hems_application/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 hems_application/macos/Runner/AppDelegate.swift create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 hems_application/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 hems_application/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 hems_application/macos/Runner/Configs/Debug.xcconfig create mode 100644 hems_application/macos/Runner/Configs/Release.xcconfig create mode 100644 hems_application/macos/Runner/Configs/Warnings.xcconfig create mode 100644 hems_application/macos/Runner/DebugProfile.entitlements create mode 100644 hems_application/macos/Runner/Info.plist create mode 100644 hems_application/macos/Runner/MainFlutterWindow.swift create mode 100644 hems_application/macos/Runner/Release.entitlements create mode 100644 hems_application/macos/RunnerTests/RunnerTests.swift create mode 100644 hems_application/pubspec.lock create mode 100644 hems_application/pubspec.yaml create mode 100644 hems_application/test/app_navigation_test.dart create mode 100644 hems_application/test/model/api/battery_info_test.dart create mode 100644 hems_application/test/model/api/device_status_test.dart create mode 100644 hems_application/test/model/api/entity_request_test.dart create mode 100644 hems_application/test/model/api/job_test.dart create mode 100644 hems_application/test/model/api/measurement_test.dart create mode 100644 hems_application/test/model/api/meter_info_test.dart create mode 100644 hems_application/test/model/api/schedule_job_test.dart create mode 100644 hems_application/test/model/api/solar_info_test.dart create mode 100644 hems_application/test/model/api/thermal_info_test.dart create mode 100644 hems_application/test/model/internal/device_test.dart create mode 100644 hems_application/test/model/internal/room_test.dart create mode 100644 hems_application/test/service/battery_service_test.dart create mode 100644 hems_application/test/service/device_service_test.dart create mode 100644 hems_application/test/service/entity_service_test.dart create mode 100644 hems_application/test/service/meter_service_test.dart create mode 100644 hems_application/test/service/solar_service_test.dart create mode 100644 hems_application/test/service/thermal_service_test.dart create mode 100644 hems_application/test/service/timeshifter_service_test.dart create mode 100644 hems_application/test/testing_utils/wrap_with_material_app.dart create mode 100644 hems_application/test/util/hems_backend_util_test.dart create mode 100644 hems_application/test/util/timeshifter_util_test.dart create mode 100644 hems_application/test/widget/analytics/animated_power_flow_test.dart create mode 100644 hems_application/test/widget/analytics/consumption_chart_test.dart create mode 100644 hems_application/test/widget/device/battery_info_card_test.dart create mode 100644 hems_application/test/widget/device/ha_entity_info_card_test.dart create mode 100644 hems_application/test/widget/device/meter_info_card_test.dart create mode 100644 hems_application/test/widget/device/solar_info_card_test.dart create mode 100644 hems_application/test/widget/device/solar_toggle_switch_test.dart create mode 100644 hems_application/test/widget/device/thermal_info_card_test.dart create mode 100644 hems_application/test/widget/device/timeshifter_card_test.dart create mode 100644 hems_application/test/widget/page/create_job_test.dart create mode 100644 hems_application/test/widget/page/device_schedule_page_test.dart create mode 100644 hems_application/test/widget/page/device_selection_page_test.dart create mode 100644 hems_application/test/widget/page/devices_page_test.dart create mode 100644 hems_application/test/widget/page/edit_room_test.dart create mode 100644 hems_application/test/widget/page/home_page_test.dart create mode 100644 hems_application/test/widget/page/schedules_page_test.dart create mode 100644 hems_application/test/widget/page/settings_page_test.dart create mode 100644 hems_application/test/widget/room_card_test.dart create mode 100644 hems_application/test/widget/schedule_view_test.dart create mode 100644 hems_application/test/widget/scheduled_job_test.dart create mode 100644 hems_application/test/widget/util/value_row_test.dart create mode 100644 hems_application/web/app.html create mode 100644 hems_application/web/favicon.png create mode 100644 hems_application/web/icons/Icon-192.png create mode 100644 hems_application/web/icons/Icon-512.png create mode 100644 hems_application/web/icons/Icon-maskable-192.png create mode 100644 hems_application/web/icons/Icon-maskable-512.png create mode 100644 hems_application/web/index.html create mode 100644 hems_application/web/manifest.json create mode 100644 hems_application/windows/.gitignore create mode 100644 hems_application/windows/CMakeLists.txt create mode 100644 hems_application/windows/flutter/CMakeLists.txt create mode 100644 hems_application/windows/runner/CMakeLists.txt create mode 100644 hems_application/windows/runner/Runner.rc create mode 100644 hems_application/windows/runner/flutter_window.cpp create mode 100644 hems_application/windows/runner/flutter_window.h create mode 100644 hems_application/windows/runner/main.cpp create mode 100644 hems_application/windows/runner/resource.h create mode 100644 hems_application/windows/runner/resources/app_icon.ico create mode 100644 hems_application/windows/runner/runner.exe.manifest create mode 100644 hems_application/windows/runner/utils.cpp create mode 100644 hems_application/windows/runner/utils.h create mode 100644 hems_application/windows/runner/win32_window.cpp create mode 100644 hems_application/windows/runner/win32_window.h diff --git a/hems-core/src/api/ha/entity.rs b/hems-core/src/api/ha/entity.rs index 2ef4411..4aef760 100644 --- a/hems-core/src/api/ha/entity.rs +++ b/hems-core/src/api/ha/entity.rs @@ -1,10 +1,17 @@ use std::env; -use actix_web::web::Json; +use serde::Serialize; +use serde::Deserialize; use serde_json::Value; use super::{init, init_load_map, ApiError, EntityState, BASE_URL, CLIENT, LOAD_MAP}; +#[allow(dead_code)] +#[derive(Serialize, Deserialize, Debug)] +pub struct EntityServiceRequest { + pub entity_id: String, +} + pub async fn get_entity_consumption(entity_id: &str) -> Result { let client = CLIENT.get_or_init(init); let url = format!("{}/api/states/{}", *BASE_URL, entity_id); @@ -93,3 +100,39 @@ pub async fn get_entity_state(entity_id: &str) -> Result { Ok(response_body) } + +pub async fn toggle_entity_state(entity_id: &str, entity_state: bool) -> Result { + let client = CLIENT.get_or_init(init); + let url = format!("{}/api/services/{}/{}", + *BASE_URL, + entity_id.split(".").next().unwrap_or_default(), + if entity_state { "turn_on" } else { "turn_off" } + ); + let ha_token = env::var("HA_TOKEN").expect("HA_TOKEN must be set"); + + let request = EntityServiceRequest { + entity_id: entity_id.to_string(), + }; + + let response = client + .post(url) + .json(&request) + .bearer_auth(ha_token) + .send() + .await?; + + if !response.status().is_success() { + let error_text = response + .text() + .await + .unwrap_or_else(|_| "Unknown error".to_string()); + return Err(ApiError::HomeAssistantError(format!( + "Failed to set entity state: {}", + error_text + ))); + } + + let response_body = response.json().await?; + + Ok(response_body) +} diff --git a/hems-core/src/resources/devices/ha_entity.rs b/hems-core/src/resources/devices/ha_entity.rs index 476418c..b47e02d 100644 --- a/hems-core/src/resources/devices/ha_entity.rs +++ b/hems-core/src/resources/devices/ha_entity.rs @@ -8,6 +8,9 @@ pub fn configure(cfg: &mut utoipa_actix_web::service_config::ServiceConfig) { cfg.service( scope::scope("/entity") .service(get_entity_consumption) + .service(get_entity_state) + .service(set_entity_state) + .service(toggle) .service(add_entity), ); } @@ -109,3 +112,26 @@ async fn add_entity(request: web::Json) -> impl Responder { Err(e) => HttpResponse::InternalServerError().body(format!("Failed to add entity, :{}", e)), } } + +#[utoipa::path( + get, + tag = "Entity", + description = "Set entity state", + responses( + (status = 200, description = "Entity state set successfully"), + (status = 500, description = "Failed to set entity state"), + ), + params( + ("house_id" = u32, description = "House ID"), + ("entity_name" = String, description = "Name of the entity"), + ("state" = bool, description = "State to toggle to"), + ), +)] +#[get("/{entity_name}/toggle/{state}")] +async fn toggle(id: web::Path<(u32, String, bool)>) -> impl Responder { + let (_house_id, entity_name, state) = id.into_inner(); + match entity::toggle_entity_state(&entity_name, state).await { + Ok(entity_states) => HttpResponse::Ok().json(entity_states), + Err(e) => HttpResponse::InternalServerError().body(format!("Failed to toggle device state: {}", e)), + } +} diff --git a/hems_application/.editorconfig b/hems_application/.editorconfig new file mode 100644 index 0000000..76a93c0 --- /dev/null +++ b/hems_application/.editorconfig @@ -0,0 +1,3 @@ +[*] +indent_style = space +indent_size = 2 diff --git a/hems_application/.gitignore b/hems_application/.gitignore new file mode 100644 index 0000000..e9b8969 --- /dev/null +++ b/hems_application/.gitignore @@ -0,0 +1,56 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +lib/l10n/app_localizations.dart +lib/l10n/app_localizations_*.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# Auto Generated Files +/windows/flutter/generated* +/linux/flutter/generated* +/macos/Flutter/Generated* + +# Editor specific folders +/.vscode +android/build/reports/problems/problems-report.html diff --git a/hems_application/.gitlab-ci.yml b/hems_application/.gitlab-ci.yml new file mode 100644 index 0000000..e06bc71 --- /dev/null +++ b/hems_application/.gitlab-ci.yml @@ -0,0 +1,89 @@ +# Copyright (c) 2011-present GitLab Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +spec: + inputs: + hems-url: + default: http://localhost:8080 + description: The URL for the HEMS backend + +--- + +image: "ghcr.io/cirruslabs/flutter:3.32.1" + +variables: + DOCUMENTATION_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/documentation/${CI_COMMIT_TAG}/documentation-${CI_COMMIT_TAG}.zip + APK_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/android-apk/${CI_COMMIT_TAG}/hems_application-${CI_COMMIT_TAG}.apk + +test: + stage: test + before_script: + - flutter pub get + - flutter gen-l10n + - flutter pub global activate junitreport + - export PATH="$HOME/.pub-cache/bin:$PATH" + script: + - flutter test --machine --coverage | tojunit -o report.xml + - lcov --summary coverage/lcov.info + - genhtml coverage/lcov.info --output=coverage + coverage: '/lines\.*: \d+\.\d+\%/' + artifacts: + name: coverage + paths: + - $CI_PROJECT_DIR/coverage + reports: + junit: report.xml + +build: + stage: build + rules: + - if: $CI_COMMIT_TAG + before_script: + - flutter pub get + - flutter gen-l10n + script: + - flutter build apk --dart-define=HEMS_URL=$[[ inputs.hems-url ]] + - dart doc . + - zip -r documentation.zip doc + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \ + --upload-file build/app/outputs/apk/release/app-release.apk \ + $APK_URL + - | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \ + --upload-file documentation.zip \ + $DOCUMENTATION_URL + +release: + stage: deploy + image: registry.gitlab.com/gitlab-org/release-cli:v0.24.0 + rules: + - if: $CI_COMMIT_TAG + script: + - echo "running release" + release: + tag_name: '$CI_COMMIT_TAG' + description: 'Release $CI_COMMIT_TAG, with "$[[ inputs.hems-url ]]" as the HEMS server URL.' + assets: + links: + - name: 'HEMS application apk' + url: $APK_URL + - name: 'Documentation' + url: $DOCUMENTATION_URL diff --git a/hems_application/.metadata b/hems_application/.metadata new file mode 100644 index 0000000..a429db3 --- /dev/null +++ b/hems_application/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "archlinuxaur0000000000000000000000000000" + channel: "" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: archlinuxaur0000000000000000000000000000 + base_revision: archlinuxaur0000000000000000000000000000 + - platform: android + create_revision: archlinuxaur0000000000000000000000000000 + base_revision: archlinuxaur0000000000000000000000000000 + - platform: ios + create_revision: archlinuxaur0000000000000000000000000000 + base_revision: archlinuxaur0000000000000000000000000000 + - platform: linux + create_revision: archlinuxaur0000000000000000000000000000 + base_revision: archlinuxaur0000000000000000000000000000 + - platform: macos + create_revision: archlinuxaur0000000000000000000000000000 + base_revision: archlinuxaur0000000000000000000000000000 + - platform: web + create_revision: archlinuxaur0000000000000000000000000000 + base_revision: archlinuxaur0000000000000000000000000000 + - platform: windows + create_revision: archlinuxaur0000000000000000000000000000 + base_revision: archlinuxaur0000000000000000000000000000 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/hems_application/README.md b/hems_application/README.md new file mode 100644 index 0000000..92c3a63 --- /dev/null +++ b/hems_application/README.md @@ -0,0 +1,181 @@ +# Project Overview +Our application is a user-friendly frontend for the [HHEMS](https://github.com/AlgTUDelft/HHEMS) backend. Hybrid Home Energy Management System (HHEMS) is a system to manage smart energy systems. The aim of the project is to make smart energy systems accessible to people without the technical expertise. Our application's goal is to create a intuitive to use frontend for the project so that it can be used by people who are not tech-savvy. + +# Release +Our latest release build with the generated documentation and an android APK package can be found [here](https://gitlab.ewi.tudelft.nl/cse2000-software-project/2024-2025/cluster-w/03d/03d/-/releases/permalink/latest). + +# Setup + +First, the backend from [HHEMS](https://github.com/AlgTUDelft/HHEMS) needs to be set up. The readme in that repository lists the necessary steps for successfully running the Docker containers for the backend. + +Next, the IP address of the backend is required to start the app. Depending on where you are running Docker, this can be achieved by using the following commands: ip addr (Linux), ipconfig (Windows) + +Flutter and Dart extensions are required to build the app. + +Depending on which platform you are trying to build the app (IOS, Android, Windows, Edge etc.), additional tools might be needed. Run `flutter doctor -v` and follow the steps shown there. + +Prior to running the app for the first time or when changes are made to then lib\l10n, run this command: + +`flutter gen-l10n` + +To run the app, use the following command and make sure HEMS_URL corresponds with the backend: + +`flutter run --dart-define=HEMS_URL=''` + +`flutter test --dart-define=HEMS_URL=''` + +`flutter build --dart-define=HEMS_URL=''` + +If any errors or warnings are encountered, refer to the Important Commands sections of the readme first. + +# Important Commands + +In case of errors, run the following commands: + +`flutter doctor -v` to check for missing setups. + +`flutter clean` to clean all dependencies. + +`flutter pub get` adds all dependencies from pubspec.yaml. + +Prior to running the app for the first time or when changes are made to then lib\l10n, run this command: + +`flutter gen-l10n` + +For running the app, use the following command and make sure HHEMS_URL corresponds with the backend: + +`flutter run --dart-define=HHEMS_URL=''` + +`flutter test --dart-define=HHEMS_URL=''` + +`flutter build --dart-define=HHEMS_URL=''` + + +# Firebase Notifications + +This mobile application makes use of an external Firebase project (console) to send push notifications to users. Its main purpose is to send marketing/promotions/new features notifications to all users of a respective platform (Android/IOS) or all platforms combined. + +To create a campaign, in the 'hems-03d' firebase project, go to Run/Messaging/Create your first campaign. Select Firebase Notification messages, enter all notification details and platforms, schedule a date, and then press Review. + +Ownership of a Firebase project can be conveniently exchanged. Go to settings, Users and permissions, Add member, press the 3 dots, edit access and change it to Owner. + +Permissions: the user will need to accept notification permissions to make use of this feature. + +Dependencies used: `firebase_core, firebase_messaging, firebase_analytics` + +Related classes/config files: `firebase.json, lib\firebase\firebase_msg.dart, lib\firebase\firebase_options.dart` + +For further documentation: https://firebase.google.com/docs + +# Local Notifications + +Informative notifications (i.e. reminders) are handled through Flutter's built-in packages. Currently, the application sends a notification every time a user schedules a job 10 minutes before it starts and 10 minutes before it stops (if applicable). When a schedule is cancelled, so are all related notifications. + +All logic related to initializing the notification service, handling permissions, sending instant or scheduled notifications and cancelling them can be found in `lib\service\local_notifications_service.dart`. It also makes use of the timezone package, but for now, the timezone is hardcoded to Europe Brussels as the app is intended for Dutch households and also to avoid having to handle location permissions. In the future, if the plan is to extend outside of the Netherlands, it is recommended to implement this. + +Permissions: the user will need to accept notification permissions to make use of this feature. For Android, the uses-permissions and receivers can be found in `android\app\src\main\AndroidManifest.xml`. For IOS, `ios\Runner\AppDelegate.swift` is responsible for the permissions. + +Dependencies used: flutter_local_notifications + +Related classes/config files: `lib\service\local_notifications_service.dart, android\app\src\main\AndroidManifest.xml, ios\Runner\AppDelegate.swift` + +For further documentation: https://pub.dev/packages/flutter_local_notifications + +# Language / l10n + +The application currently supports 2 languages: Dutch and English. The default language is English upon first opening the app. It can be changed at any time in the Settings page, persisting locally. + +Localized strings can be added and removed from the app_en.arb and app_nl.arb files in the `lib/l10n` folder. To add a new language simply create a new .arb file and add the supported locale to the MaterialApp in `lib/main.dart`. + +To automatically generate the classes that expose the localized strings to the code, run this command: +`flutter gen-l10n` + +Dependencies used: `intl` + +Related folder: `lib\l10n` + +For further documentation: https://pub.dev/packages/intl + +# Navigation Tabs + +Our app frontend is designed using the bottom bar navigation system style in Flutter, containing the following 4 main tabs: +- Home Tab: The application will always launch on this tab, which displays the rooms created by the user, and analytics including a network diagram of power flow from producers to consumers and a bar chart displaying the overall power consumption in the past minute. +- Schedules Tab: This tab allows users to see upcoming and currently active jobs for timeshifter devices, as well as letting them create such a job. There is also a “Suggestions” widget, currently non-functional, which displays recommendations to the user to aid them in making optimal use of their devices. +- Devices Tab: This tab displays widgets for all of the devices connected to the app. It also allows the user to add/remove devices to/from the app. Most of these devices are interactive in some capacity: choose battery target, choose temperature target, schedule a job for a device, turn on/off lamps etc. +- Settings Tab: This tab provides the user with the ability to switch themes (light/dark mode), change language (English/Dutch) and export/import home configuration to/from clipboard. + +# DartDoc Documentation + +For autogenerating the documentation in a HTML file, run this command: + +`dart doc .` + +The file can be found here: `doc\api\index.html `. It contains all the DartDoc documentation (any text that follows `///`) throughout the whole project in an easy-to-read format. + +# Icon Integration + +Our current icon is made by us using Canva, and is free to use commercially as it only uses basic lines, shapes and fonts. +To change the Icon for all platforms, follow these steps: +- In `assets\icons`, change icon.png and icon_transparent(can be the same as the first icon, but needs to be white on transparent, used for Android Notifications). Do not change the names. +- (For Android 12+) In `android\app\src\main\res`, replace icon_transparent.png in all drawable folders. +- In pubspec.yaml, under 'flutter_launcher_icons:' , select the platform you want to generate the icons for by changing their respective boolean to true. +- Run this command: `dart run flutter_launcher_icons`. + +Recommended icon sizes: 1024x1024, 512x512 +Recommended icon extension: .png + +To change the splash screen (background color) when the application launches, follow these steps: +- In pubspec.yaml, under 'flutter_native_splash:', change color (should be in hex). We also suggest changing the color under 'flutter_launcher_icons:' for 'adaptive_icon_background' to be the same. +- Run this command: `dart run flutter_native_splash:create` + +Dependencies used: `flutter_native_splash, flutter_launcher_icons` + +Related classes/config files: `pubspec.yaml, assets\icons, android\app\src\main\res` + +For further documentation: https://pub.dev/packages/flutter_native_splash and https://pub.dev/packages/flutter_launcher_icons + +# Testing + +Application code is verified by the following categories of tests: +- Unit tests for any methods that do not interact with the backend. +- Integration tests for any methods that communicate directly or indirectly with the backend. +- UI tests for any UI elements (i.e widgets, tabs, buttons, etc.). + +Note: Integration tests expect the backend to be running with the basic configuration with Home Assistant configured in the demo configuration. Integration tests are automatically skipped if the server URL is not found in the dart environment. In addition, these tests are tagged with integration which can be used to exclude or exclusively include them when running. + +The --coverage flag can be used to collect test coverage information. This creates an lcov file at coverage/lcov.info. If so desired, lcov can be used to summarize the coverage data or generate an html report showing which parts of the code are covered and which parts are not by tests. + +Example commands to run for testing: +```sh +flutter test # run integration and widget tests, skips integration tests +flutter test -x integration # Runs every test except integration tests +flutter test --dart-define=HEMS_URL='' # run all tests +flutter test --dart-define=HEMS_URL='' -t integration # Only run the integration tests +flutter test --dart-define=HEMS_URL='' --coverage # Run all the tests, collect coverage information + +lcov --summary coverage/lcov.info # Summarize test coverage information +genhtml coverage/lcov.info --output=coverage # Generate an html coverage report showing which lines are covered and which lines are not. +``` + +Dependencies used: `lcov` (optional) + +Related classes/config files: `test/` + +# Pipeline + +Our project uses a GitLab CI/CD pipeline to test and build our application. The pipeline runs all the unit and widget tests whenever a merge request is created to ensure the branched to be merged is fully functional. In addition it collects coverage information, so it is possible to see when testing starts to lag behind. Information about the tests such as which tests passed/failed and which lines were covered by tests are uploaded as pipeline artifacts. + +In addition to testing, our pipeline builds and deploys our application in the form of a GitLab release whenever a new git tag is created. It builds the application in APK form and generates the documentation. These are then uploaded to GitLab's generic package registry. Finally a release sharing the same name with the tag is generated, with links to both the APK and documentation. + +Dependencies used: `junitreport, lcov, zip, curl, release-cli` + +Related classes/config files: `.gitlab-ci.yml` + +# Guidelines + +The following rules are recommended to be followed when further contributing to this repository for consistency purposes: + +- Follow the Model-View-Controller structure, the distinction can be see in the folders in lib: model, widget, service subfolders. +- Document important classes and methods using DartDoc (`///`). As it can be seen in already existing documentation, it is important that the first line of documentation in each method/class should be followed by a empty line and that no warnings are thrown when running `dart doc .`. +- When creating new widgets and other UI elements, relate to the `lib\material\themes.dart` file before hardcoding any colors, font styles, font sizes etc. +- Test any new code with their relevant testing procedure: Unit tests, Integration tests and/or UI tests. diff --git a/hems_application/analysis_options.yaml b/hems_application/analysis_options.yaml new file mode 100644 index 0000000..3385d20 --- /dev/null +++ b/hems_application/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml +analyzer: + errors: + invalid_use_of_protected_member: ignore diff --git a/hems_application/android/.gitignore b/hems_application/android/.gitignore new file mode 100644 index 0000000..be3943c --- /dev/null +++ b/hems_application/android/.gitignore @@ -0,0 +1,14 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java +.cxx/ + +# Remember to never publicly share your keystore. +# See https://flutter.dev/to/reference-keystore +key.properties +**/*.keystore +**/*.jks diff --git a/hems_application/android/app/build.gradle.kts b/hems_application/android/app/build.gradle.kts new file mode 100644 index 0000000..27c7fef --- /dev/null +++ b/hems_application/android/app/build.gradle.kts @@ -0,0 +1,53 @@ +plugins { + id("com.android.application") + // START: FlutterFire Configuration + id("com.google.gms.google-services") + // END: FlutterFire Configuration + id("kotlin-android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +android { + + ndkVersion = "27.0.12077973" + namespace = "com.example.hems_app" + compileSdk = flutter.compileSdkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + isCoreLibraryDesugaringEnabled = true + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.hems_app" + // You can update the following values to match your application needs. + // For more information, see: https://flutter.dev/to/review-gradle-config. + minSdk = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutter.versionCode + versionName = flutter.versionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.getByName("debug") + } + } +} + +flutter { + source = "../.." +} + +dependencies { + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4") +} diff --git a/hems_application/android/app/google-services.json b/hems_application/android/app/google-services.json new file mode 100644 index 0000000..7b64b98 --- /dev/null +++ b/hems_application/android/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "382446275425", + "project_id": "hems-03d", + "storage_bucket": "hems-03d.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:382446275425:android:d69ffb43d319aab4edd320", + "android_client_info": { + "package_name": "com.example.hems_app" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyCi3oCRZf_3tgP2zWHngSXNusCGVlUCi-E" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/hems_application/android/app/src/debug/AndroidManifest.xml b/hems_application/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/hems_application/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/hems_application/android/app/src/main/AndroidManifest.xml b/hems_application/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6fd3d46 --- /dev/null +++ b/hems_application/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hems_application/android/app/src/main/kotlin/com/example/hems_app/MainActivity.kt b/hems_application/android/app/src/main/kotlin/com/example/hems_app/MainActivity.kt new file mode 100644 index 0000000..50d1da8 --- /dev/null +++ b/hems_application/android/app/src/main/kotlin/com/example/hems_app/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.hems_app + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/hems_application/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/hems_application/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b35bd8dfcd75d6dc6cf8021aacd09e58a41a09 GIT binary patch literal 9445 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-hdpi/icon_transparent.png b/hems_application/android/app/src/main/res/drawable-hdpi/icon_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a82f70f41c4d8c264c7a877b370b67388f0c99 GIT binary patch literal 106450 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh 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

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk 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

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/hems_application/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..6797cf7a284a3d1cc87fa0c5e5340983f0bd656b GIT binary patch literal 5789 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh 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

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk 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

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-v21/background.png b/hems_application/android/app/src/main/res/drawable-v21/background.png new file mode 100644 index 0000000000000000000000000000000000000000..e893872e38149c40d334a814221eecf3f630d087 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*6yBWG>pWnk`QJhg56 RonJt422WQ%mvv4FO#sm!5extT literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-v21/icon_transparent.png b/hems_application/android/app/src/main/res/drawable-v21/icon_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a82f70f41c4d8c264c7a877b370b67388f0c99 GIT binary patch literal 106450 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh 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

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk 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

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-v21/launch_background.xml b/hems_application/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f88598c --- /dev/null +++ b/hems_application/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/hems_application/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/hems_application/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2b0933d6116c64d702ade084484a10ecfcf5d4 GIT binary patch literal 13692 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh 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

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk 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

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/hems_application/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..01d3569c25db83927d120ea58988fc5e158538c2 GIT binary patch literal 22761 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 Copm_? literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-xxhdpi/icon_transparent.png b/hems_application/android/app/src/main/res/drawable-xxhdpi/icon_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a82f70f41c4d8c264c7a877b370b67388f0c99 GIT binary patch literal 106450 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh 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

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk 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

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/hems_application/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..194bb829822600639da7bc2f3d5461ad70103af2 GIT binary patch literal 33231 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%0AoFL& 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh z2-+q2b`ZKgy|Y&<$&ugFNKN-ho)`2FL_j9{On~ZR0A1LKe(_pUs)%HuHG26X0d&5v zKr?lC68J_kVNHeZ6R{yUPQ5StPXgF!asTdS{Sc_YnXzd~+8$BM=wMprq@}FWNGR;T zW}r0)7JkaTQaox+fzI{HQ{X0cZvh7m4)9~VcD<*%Uk8=Xe8>459WcW`(#dF7U_&|( zp^lZ^%pPmYO;NKD&}hU}X6Fx8R%I&Ka24=dCvRZ=MGL^7@}J&!Y8v?X_EN((XUg^i z1<&X%c?)n!h>sU=seW(9W&l^@9xoUi2-{2erau>wVSIg02fbnJp=a$em~rkqc8PHT zEMr&g@95ybjXL%%g6CJXt>>|hm20YDmeY?U3 z4o)p}7~hNHH4gf!xwm{yq&6lKITvA@yCB) zkM&n>5c02dmV*B9)#Fb}#@`l6^OA80R?T7wra9Rf`}4P_%rKzay$@@Dn@mtQ!1^(d zv>Vpx3@KT|bn%2EJ8N{UD+fJmcC^jx- zuIC(8FW%64Ul42EFkx{~m1x?P*nJjfohwvv`rP9phPA??Mf8`a>axy`_sVy`94D89 z9;Oz&5=TBl@OnYT5PqmOO92_asm=1Gg>M2P?e$rMldw6*Sy;>3(;c+`DA?YvQ(_~h z>t4q-##F=Lq8(~=VbQXtvi^o(XG}1KO-&YQP%FzQwU3G`C5A5bxn-nSHE@C&y~JO5 z+Y%zNnrI#aa0!=9&W8igZHgnGhMDr^nA?A`vz7GN&!3qBY3haLLi4CgD>>SIL~UY| zKc@2@dl&{Z(!z;rZ&iHuf*Qd~s<7EMmbaWiv*Lbr!wcxL* zE6V0}Jk<@uJn~zK2*;TH(NV}#r26Q+ezx)HK|p}gcO5xk7i4!(?*}frOGiVDq3TI? z*Q3*td4qR3{t@cw_35-(eFLH`!Y`^UZdqdai|~r0q&-L?493-pi9vSLx{+<)OhDy|5uTpSqo@|#>w;d0VD#c zr!FP@HHSw(NCy4UXH{Cwv6JK>>Axe=$$bjNG^aX*l3qokf`LoRaOce#gnV=6tad|y zjtAyP9KVKnZ^Ux%Xh=zl|ES0a)a#X#NBVf!P@xRzV^MzwpEfM$q>tQ<{R@xI_f&KV z+Hm4zo%fQk9tX8kk-R=4rc-Q0=^{L;)EB5lRY|UuA%vT@Szq4n78&A&dF{WNQkdvC z-P|~HE);Yb&>DKcnNTl$W!gi!2f(Ir2Z&>nPh*l3ZRg zw86qyXGrjwP(Hd{Cv(kZ68XvZ?6j?o6?Wf6(?syCUwa15BPnw)$9#`+0TapS4VA6K z(th3b(+KigC%;7CK}>xW)@985TY_&92r_#A`kR)tyATJaP|eGV@+SSgz_O_>833rm z=pN~-x;9Rmd+tb?1*Jef_{}sxm938f_rZ$DnOJ?16^P=AJ|P{rs5+7baQZ~jl8TSt zt^xz_Q_%1Hy{-HtF;-jT2u0VZVHQlIi&h(80&pZv6{sma4O1qhkBv#Q-=!4O^4ML_ zaYwa2$=R?)!2XQ&5VQezo?CgXT3V%{UN6WedmwTa?O&{Bms=(fkpCdI7ok>`?dBOf zkH&wNN{|{ITFj<{-%iz=DQ=D-3U2ITrQd}9_AZ?FF|JBJTYoUb#v(Y6DdA1 zNo|o%Y{{6;y0~n?M|P~LIwPXYr-7Ld+!8F>PA&zz?xU5J_q!R0ra!=D@RYp%rY)_a zJ~jvzDa%TMKbaff0u}&Iq?X4YCbBa;xclJye4L2DQmP5sbnDv=W&$RXe0Y)LyeRIy z1QT4`-m%g5hs8|tu(7iN>&fchIMuwaU0$Zs&6P7}z}lO>Bat;a}fH@ zD&vG8fvN5K(NK?L`^6flL0nU_f=xfekilP6b)Sp+Rl%w|*7+iXHrBlJ26#(F_}uX0 zVO-Brb2bTVe_QjUbbTMXo$ksW9JlqCr++{+oNQqeuXBQDKKMxe?XT@ty&ODSQ* z^;9fcPbss57eCignM*n*KA5(2Y}I){1hF71TsVyqg%4X}^cY7CFS*W3v(oa(U?A90 zJ5N{;Zz|YdyRqkNW6&+O}|6U5_;Sr^fkqR zaEUA(y_Vh_x5f%-&jcJuEjz8PcyC7-K^CK@J zRY?53jERK!YG%IorM0M%$(0Q_GS?Q9)q5(IYAk%ptUhREBlXvO%sv%ZCA7CQs8A<# zZ8G(a>@Wt6>qdn=6DzUZBaFvoQ4xPLsXF-c==H^ml6S$h|`08-$ z>*j?;z#oPN7zeCcixtJGY7#FQzo8(0N!$g|JxUx|Ukupjsz1Cb3g5se?#F7xtKpdc z_AStwlT30N5T7b|m`Fw7#K#0gcOT^m;( z(PEO}!jyC_yqAu;7$$nU=gH?>eoT;<1?oe_GvjY-=}LoSu6udbOIAgsoR*#%9R$Dt zbUA-u!R!S**fypk0Z~@P5@?0aoPTCTcVAPY-|)9oGHAxKKI!8i4~r-C9mlG4TpmBO z`gIM9&_r0|Sf}e zrw)B@`?MqY{>`i2gN5=%J(t)Ap9^Yxdi1$@dC;b%v*#b8O5HL32*6%Q7xrAH0T-Rm zzQdOw9_Z;vZwxpYDRcy5aj9Sj!NSY9>x+)$f370QO)bhDfSD%l zIDqE*7*jbjaOL3;XN1OHCGQaglW4T1(r}_*y{ZWVp4 zHkGlc%exGQH9y%VnrsjO8sneNY{Hc;K9;wMXSJwH#Qs*rwBe;1Y$x|rD#%TnakVid zwU(9?@wOdkn`&@(_u?5zlDKtS&hbkzZKVryrE^PVQuDA;)}G`kV*}GQJ-m=Lnd(f* zW)EEglcZWMbY%JQ%UV`fq=Non$-F#CLL=AV%UtnoQ6POE)lfg{?0~eEpAvGsJw($hu$lRGz*@uy&~cxuj1b`IXU_rP%^KXk+8X7 zmjYy_{i(s@;nv!97!zC-SbyR+DjHzmqFlw-8Kab@f`W(zhzf|Lgh(SQ9g1{{G($+I3@V5S5+XUYfOIo7Lns|mLw61} zbTf1Ie1GRXuh-?Dz|0eSuf6X3{;YR3?MDuLQoos;2j;os&V+sKa~GH0f8E04sTpeD z$cN5pEG9&jWLC}0Zk*{BirnJL3KU_)uwdF4LrMc7af<>G{Vo-6(_DEO`+%1HXIzt4 z1C)&9%h~@>C@SUwP z1&()((8nY^M|i3RyhU`r;4SS;s~;|tPoZ4C*o_O18be1r|JwNqwf&`tpf9Q93)i!rXWUV zuw!l~|NCB|X^5SGZsln=X=$GaOz5AU^@lx}W$-EPV5D86=Fn+5vuUcQJHS%x$zpOR zC=o`IgxqU*4!|nF>0G{Fo`y1fdE&@!z2P!&z{9sLNQX-=%}8WsFE(!}0$1;L(Xf88HW zG%;tzNi||_th<{%$Ho24f3rK-PKjbPmUJ>IxDFs~!26+^MXD`{oHEQ%$ z(lIYDhN>{s2!jG`irdU<_)gbDcX%c+A&an^tNm@Aei!l>9oJSRwVt^V_P!Ap)gFSo z;U}gd@<=5lTAODeYNGMR_|;cr4c`W&JDe7;Fr3*zz9bESkS%{_@QOsRpqPC}yRZny z>2nYxaga6HL(XZKE9rz~^%<1@i^pKep_TI=6Av#J{q>@i(Yr9I{MVXKjD;$*bnioE zqlS`l7NLpzDaJVrfH)2pPx%AY?WT?wCw6%EewCps2lifg+-Z==-#alNab4W<*y@6N zdp^22_hy#Fx=Py^ULTVR-h56IOx?2Og zNwX&f-`bvuYjyT6x;YcM0O!y7zSFXcxTeX`lB4U8b_Gz_J@& zBziWE8>od(-WL2r{4jj05u&N2EK z)JO2{>}d>=Zk5q(qJ?&ZgR`*26n+_OQP0Foy5G0ke=v<{xn-q)=_$vlW#tSChCaZP z`~B{k`a4*4blqA%*%fefei`kF{dy&`z1;r&F&&G(=sU1JG7z0H`5hwentJ<)vv6lJ zHp~M*&ool>o3ezC@h7Wrs`|-^pAHn^`rLiH0YN4Bd?_DK zi@l?TV?riA5y2pU5BRta5|JU4!Nbv|flV}nZAYLRScVScYe{;Sz}@|2lXNRZcRX3Y zMBrs7{!aW2k_Ilh%x14LbCa}M*1SN>(OstxOo?-7aX(40}YsK{_yGTT)(9^Qa!-xIq z;E?NoQB!K(*7{2g>z(630Zr*JHmc39k!8QrxjPehjfdg%In*XWhMD7di_)HnZ(*>P z02eM~7h%T15&dEk?2Bu7pOnqt)=topiATcyh%zsR!b_NS*35T44;|Tpi(CxYpI$%r%F(j)p@W{%yld2s!$ClATq9YOr_4d}cC&-KkWzB~ho;{N~v!G~b!0x*kSOHd^dN*fwI4xr?o*%awMm%8wU{pM+X2%Z|6WQ%;D zKT~UvudZzB?3h*(7w>5(1p?Ap0i(e7K~7*D=+Okad8B=hxRK z3`TAae)_#!aIIok$+zZP*~_&chd4yN+C9>LUACMGsETx8PJ;Zt{md`t;cF39)^#;a z8yYO@C-`b-GB>t2^Eal~36U`SmYZQ=HLp#su=+2YLz__1(9gueZ$ith^}g2w>s@SW zVM?=cjTBx|5=FmGoh!0Cr6QwOiY3A2)RipGE}TMq~ffClJtbp9HO zobJ=|P0Mj2aniSSl%Zu#7!+D>4LDJcngX<2LtSmVP(`u(y>;Q>$Er0AaUh2`sDu-x z&#{A;TIVE}zuV&bL*TzC$jr|WpNk^wYe8Qe*8bNj2&hM758 zG}1Zr#0CCb0>h-JO=t_4Qr(uk25Mxayx#eiRsIqL=$(_-{JvLo*+Q&kBjHZFR+Nyn z!ZiqLc)CW^tVVRi0b(A@h}VGQAkb?Zzfxbip%3gbA39Zdjh9fx*AtbdF3-qy{o<6& z8+!4vDM@Oyu(h|#K#!o~+-Aa@dJwGKK?&ZvV`;aTQR+7=H-KamuY?PRaAbbQ0&)K~ zS;vnemYN%GP`GZ^KMAhUd5`(JAI(m%WDy;O$DO&i1k#nr0`CBTN*VF4ovBuf9joP* zmRAgYlRPIF*nJW4si7oA~WjW!HM&tlYjuINz?#J?wX#0)itQ2(z1c7~m#( zq|G^5W!8y`_K;xf>B%aldm}VnY5^>u?|_JA)YA`SY9a_L5cW|ErNG;(F(i!ZRC=Zp z)?@3Fjx_~a{AsSO`|6PsHhRk#caCBu0tfJuis~=d1@On_Q{1zspn+a?DaS;AMQ)r+dvjqLvG1^_ zVI_DB8ya@cr_6OOFLC+9O?jvM+GXI0%lkGc(SIGJs=XA{f;R>ylfz*aaf*M42G~ut zkz(bY-A~m3Jwf6Lyu3^Z6a+`l{KLoJ72~B?xGjL@bi;D;ElBNFRCL@r1P`>#id+m@ z;@^2(d!t?ERogUZn#xxMQm(^4Nuq#evn@1HW24q zVm>>A4FI7awUNSGY6w-ghNTk$Mb(5;F!9i4CJ4;4`cADo<0Rj#PSY+k95)su#V4(f zButN2aiE43#@=i%52ySD$?cX=nmABr#l5vr(x$%JpZ>s4(9awEu*guv5x2>9Mbxql zqS!H-^#O~LFaYlhva6pg{E(JY?|G=o$0 zcbe+gdTZhgwqkxD2FX8)*Xnwh)%S}Im&%(I-$r9b?FKT48$jiJToYT&-9o_|1AZfj zY!oIIfoezyEg@wsDq7KW{L+^%{~lwvL4vWoJDb{Xu^*N|BH4Zh`$Qg095r;y9kD2* zhRDMYSmeVw316YhpR&L;{!v|`5qdIiO+mtt6P+A;n|o?r`%`VEog!t`-&l(fFQRaC z3ET8TjdWl;!$Mos|1Ir(xZWhc#f~^ou+k^F*N;a*0CiqR8Xg`Aon5dzU_$OdU^#Caw~Yb zFR&Z!YsdCxz^3rNCy6h&PGyn9o(|}b{87+*W8eg@ik>d})D}i-B4J?ZrsUa_uqH+% zZtr&SCTV#3ZeqB8+O~HzX;BZ?xc5Z&(;EKCY{UH${Lz^eroO}0?(W5VyuN(E7FvQN zhJe~a#S?3a?$1!JvUwwR7B%2}{IRRi2fj4p6pfSnxXN%HP6G&cr_>ec{TeSfaPuGP z5hcC(HK=6)!Xe^GgmIM+UJpiem&LA_zCns?%OrBY0zH8py!C!njG>Sad^!DSXGrLe zb8atdi}85YxGW4nzE>Nth~0A@C`hZ)m$syX5-PyV?goQqQVlTho-f9&((S7Q#+GtD z1sNA53#>mrJ`afeWZzjJ_t=e*TbCgOI%C#RgJIQ~&^D`=`e3D7je~V-X5C>oca7`9 zyFpdgyJj$YeZ#%JdkuLpu7M!4+KY7PstX6^2;(50jYk@8uP%c$CTK`1pC%M~^&Mr$ zjU8d)f(+m%ufVk)QO%p+q3xCl=s4hf26h1iB;NHD=5pwefCXp{_<*q#r7lS&rDO%- zQQ~i~L#&VdoF@BX2pVNH(Uv)%p9yv4$m?%^R_L5Oydu-4qW?zNA%fXepvU(T2=djr zBI41vKv_r&;1dKr4IEcz7e`uD<;I9jZ?@<(3TDIFm5p9eZEr~VymV~j&4XthMiQJ= zkKzt_{tl>QA%DdL$JqT1n~Z~MEO9|2PtDOg+EK1CK;a1F-;F_^C_W#<^v39wR`Dp;Y`0Bk(g{Wd;;N zvkhG_BIq)kVVv;Qol`xQd5ID@S60t(uxdxr4j@i}*t&E3+P32`=S9tEDx{qPTd&R1 z@a$zP`bXzy$uzx>8>!vx2}{dQI1gyYmE57Hbp++bP-mk>XB5q+S%rb^vu#$12k|H3 z_l9}%m_d64KBoc3mL zigieEIX$V0k8zb{K;VLGe7e5>2wfrBQtSG~i}NWRP&CCRGrn-Ge^P== zokHp2Ut!q^b&t=)PTwSGHB&+$T?qUmLW|L6^cR6262E>oP1+DMjov^0xG@RGnkQ=3 z92mp6%g_aj?Lc0Wyfl+ca^&fpRPh%eZ1usv5t(${q32Kh!-M4#v z#V_1EO-Kc&prlL3fd3cvBZAqE&)ktQGeq-GtI*XC2LYX;SplWNFuXuBlHH+t&p4pt zb;Ro15Ig=gbOrJq`6&pNaz?XpvX2Qb8Lv*iOda;j}MWQaz^~c}Bs&Tw&EG226Gkk7W)1TOGNHxDG$50TB%>zlhM;a=LS6I^H ztUJykua~hAL%yt5F-V^=<+*rYlnuT09o(ulh_BXq!%l_0kVtqlFq8c6iTXn2Tft%I z!1d9JqZQ>y{bt#cm&O)*a{7^RGFjzX?bUjjj8T~#Uz6a&*v(~{SmkfGndP(ssZM3L z!|*7El>4rZ&G$brPj9`)vTGqr7LaQ$0zEX&jd02aYKh8>);!v1jT=JCI94zBEou|Wt z@kCKV^ePhhu(j2Y*E(31#y`Uluivs4aNL2ZyC3890dt=~Vq5?lF(CcuZngusZ;2k} zv~ocWQ2;)42JLsd`-qb>mSJUB{?Oumx{Nxw*ZYMd;U30z8Z)DniGE}aA(K zWFOPA$^49ayEntSFF=bzT{Ud95e-gNjz>I8-`Ks>Ib$KqN^a+6G zc>J@~ALh4t$z15O3aFA_Ca4I;cs9Ur0&0PB5ufA%+hgnCebBfeK4L9ZzBl@<=0Uh{ z1)ovNwq*~77th=)OCjm~?vv8N8Nm)ywJ(Rp|Nb6!aIOh9%FxG|(PEV@V%FuAr-6$d zr-0B&JR?jbK6G*TrA%8%C(#HG*S6ZlwGtG}8y(nLS}q1ooL2b=&!7h&Ig0pGW+Zf2 zF%47>tq4^Gxpm?#3JW{V_@^})VYqqS1n=#gswBe694MEYBe8HmmT<6v)wG52H(e)T z8$VR*)@z7ve+SF><#0aB>3i*k9C~8~XA7L0Q~#GMIA`h*OHTFqA-mmUEB-Xp+efSm zdXzsWWwwJu?ZrRoWu-}HKMc`W;G_>weCeC6c_aJbKhaC~^UvhvK5D(bfqD2i<=*Zd8?ULaLdto}U#ZG3hBoJ58w ze9h!{wLjR_klTSfg7z>SR6b{V!IP8jx8(tENQ~4N@b3WDPv6i8@7FxlTv2Ey<}-1{ zQFz&39$-_xJn=72xc2oGOfP;7dv`Lyw!Y=SBjQ z(xvs(j(|N-;)RRqi#zyU#Q+Qx_!t7<3s6id7kquzFB72L?f(Ug)QEH(6j`l5l__ha zzfLMh5!CF<$Og7)O~d${6mdh%s5qM&@L9BBO$Tj^Dtp73Y8d3n(4b+Ln5-@w+-dwiS zdlG-hyea%niT2_bxjsPs78eqy{qqdJL+iwToscYyYCjhcx@eY82LNb?O|6wi=Q3Mw zw`2s)9%=xuRMpjBBESA*H|p|@OyDtM1=s9VVxhwxK;$Yfol?G89V=7asM7J;7-wjy zL0)sCktp9JJgREl{7H*8 z=XVF(a!k+SNq_JEJi?E}-Agm@fEl(dei`7>Kp(iZ3t^y?hvn?m*q1tkCl6qH7Cr)v z=gfLIy2&2ox_I;z<_;}za7TqDRNvJ&V#r~AKUh{L47mSP)shfHrT2G-0&*A0FdfAN zydIDyA5cww1+N5v%E|0h$K}DXe-O_|lm)2GlLVd-WfF2pOE3VWymY-awzvEyD)#TY z_5EJs!izIpf|_LY;k8p)H;$6v&43{kWtQN|--9GMqNIaX9xs_22u#8O$WW_0BqGie=u?9fVcohmuJ`slR@&Fx=}<> zzR<9u63@{9ge!0N5q6f$j0CEXz2G!Q?o+{CFM!Up+TrBD_E1kMa?J&#fWUJQiqqL|0$XtC|-@Uv>e>~d;H$FOz=LJuOx`f#cilCs{n2?z)Aw*-hF{y zz-tA(!6;Uf;F7YJ=8tzBN;Ue7ANB>Bq@S zPoIeQA8r%qwg4~yLVrPFbyriF&C|KjaY6V%l^_=Z?XN(+e|eYq3Rg%>a14!_vXO*{ zrpCve+n0|(=!IZpP;+NfB}8|BkU9KuS|pCCWjgg;xDKG3R5q^>i|w`H;;^21cSM60 zu^*!ppd{PBy4mo+&jg?|%0-Qtqmi*?5-`<~v?c&xrVuOzKowasi2M7!VZi$M-*@%Q z^l~qmsq6jeHf_ysq5{Lp(IhA$Jv*Z@p~Q=n!4(L~O$Q>6N=>#(=U*>Rx2Wfgsg;n1<%(?Wk6Vi&*^=hm$iq_lf7U6g``3G z83}CRK%{AirTuXXkfxmx|Di&!M-5FV7mfz(XBmsmJuWp|1d|bnS17_WHUQA0bKTpE z1bSM{XEgTfoCo^Y%00yOt$><0>5QmCh0XPIlvb;Ir#^Y0EBn;|O?t5Cw@sW^uJHNbUR*6x<|j z{*}r5=Rl}>D4Ac_nF=sTdl=6H1)6((UGTg2DGD}=4XS>FURMpQ)BQi^El9k2kE553 zdVtDHD5$``wHORLvEG5_{?~W3F{$~sM-7PTY+uU<#F2=%(UXr*yZ+(PEGqXGjY_+$ zv@n;2c3n6by7T z4M`mAmjb39K(JxbHzc}I#mutRU^afroZ0>VjF6##Cc0<>f988 zn`EpZ$G-;(qh;x2_B^Brv=J#%0{Z6s%)>fIEB^ZCa?3&Dol1L10D$vnK<%&CMVMtpMUt z%szF%-DjN<*syiQk6k6R%x$aa*)lN<)xNG_`#o4ZAsU?s(|hOq!&|$T{|@8 z8=Jr}JNaMt2Jk#aHwP(!aQ*rVN(9i>wm2KT_}1ShNEAPq$MgBAfCOM!16G73eP5_R zKw-eZaull{mwiz>Q~nqT4*gK^<*3Q z3^DO%U{y92+(lp|>`ekXnMDqOb_Dv!OR~KRgfT^{0{B(+=l--|@b? z^CWO|F$YQ*Y^C4KZHnZhnV0hhRCT1fZk%56noKv?Cra3zJV*O*d?S+jOMC@f|}a#&|H z@A8ISpA3;m0#2Igb-hE-P1M8evzgX7lH24wrUbbsx0M4vEg4X zFpQX@NB?5CVyW^>S4Y2$UP?H-4DR+O-~m)Z=t4-pReK9X3iy&70SJr zW8XG9)fSkUQwAR@%He*tAK`(mAvO=6Q>jWPgT7;5V1nH*>5&3bg>Rj>zPFrfJzBYj zu5TgvO36~*x7(fn!1Xry=aR1SWSdlnel zb1QAmtjgB}KjHx>40k~(0f>>$ zYw;S^IXgRZCpe@8$a(-z(ULI%7d#3)MFWMLx>vz_rPqfA33(nU>~V`5(TI7+IkPbA zyfk;CmeoHG805658zi8laHL1|X(-Y#+Hxa-nN#9bTrR_prpgxrbiE=xWTq!H2~;k z5kQ7U8dNo8Wg8E?QKSb3+?1j}y+lXLkZ-p}p5Q($8^G@nQTwSvG*#B8!vH{SOaq&} zUmoD4eeIF3q({c%M|gJsJQMH)-F?s-dttXuCFyanDz-|;ZJ@^^Q^4~P@a+Mndniq{ zmWc#t&Q!!Io1lWqgm(|zg6XgDhV@wI2aZ!X7p9NZIfLE14#Tr|OIhww@6&O6(Tr)D zxAQ-~g1uv{E5h=kaVAuzK7jB-W0_*CH>zPXXS!x$B8g=e%Xcps7fCm zY0&6|PFVBfzPI)p(SOfS&YcB!a@tbmGYPXRKb z3!p`wa{R2EJcEJ45|UfX?q~mI zn5k{oaHmbuZYc0>&(AA32gxkTtf{h_OLej0g$SlP_88kWur$G53i~lv7#w$ks%csy z)yvW@b&7$xtjTIeEjj=_cp7QKGS-p3s>nPQ%TAmL#FCJ5oq z_JMP$B2JDo@4S#2zCE~ThHy{g3l|CBP)#fXWJQ{4BQQWg#`HGuAB|yT2T&Gpi2`th zT6}IS?zs)fy>~kHGmTe3IBpYkgY2iny+JTnbkjVsc=5u+h^VVTr*SQCV_;Z!#I*fZ zvBVo%wD*T|1lKLH76CBQZNaISfu)nfyMFA>A25bNwH2j;h98PRmmG-0S}(m8H4`ubCA6kR`L{LWApdvd_dVJj}O6!((sH(DygY~J~Fr(eHTmQiepRWD6 zPvdM`eHKUxn9VOxoqV!6QX~Mv-1?J(q~O19n124Rt(IaZJ5D&7P0fF5NjCjmlpGE-3G~jx&8fa?^y%9wLVl23ylYYiH9$DV9Qszrh#y%vI{* zj3_!P%p9wop8J8#;~Av5FQwO>Bs->zyH6NIh>nk@hWz*WfL27(5Y5J$Is^_ER*c#2 zss%hnLGaN|L^$b~`ut()Js~S}Wd+Gr7w(`N42N4Au6MP6A{EXAw)1H7!_NR7Ve=9W zPzfxhn<&jkEK}dU$hz3{24G^O9L=6;ZY6Di>yH^R7#T;h9I9t>dOC?bl5gt(bjwdR zvHPHQx-9;{u1{wkpWg0vIc{A$H<|GHOZ~I`R{86^-8^qvYFFPcE)_NQ_5v;bC%~du z*8fgKAV1{U$3}`PgvpB~=rRxJ?y6bB`4vCrC+1};YhcJ1J)JnHdHom45$#jt)8CF}DWxtjNb8Wfc}{&Y|!o`^5#8h3~G! zBY&TszRwifrvUEMj1C_=rE8DmV0E_G?GOR76bq);V6IO=)RRV^%c~^PdaWgf$_^AJ zyCGG@_NzkE`#+2kb!B|Bnd_98ul(~|#5LPrOUqtRHymiSdjM#A_15ajsIA(nM@e_h z44{{T*e$brJ|T45;i&Eg+)ci_dJBki*GlqduBloR1S;cM2|h=64fUHZc09&LDWO6F zwwdX!beEGYFVGrwYl4MwJ1hK*gDz#95)7E3E>-@WQCJ0(LYZ6G>F=36z#KH2nP>>a zZXVRSl!!pd)_X^SA5Jd&sBt*h@j8EtBJ>SvI@$$45?{X8ot0R08#Y7LT}zH@$~FD# z;=c0&O!<+SdVv8Lw)S-0wW+}xCcy+xT))S7^|}DC@JP*DBy1n;4lBux0Vha0w`iB% zYV^v-Ev+RU23YSort!5Hi}BQv4&FEqUU}%C4ssYhx*h^V_nlxDl=jAw_EjO&#TkZZ zjTHiZO|pxNMu%qRJgD}N0(7?>ctT>}Iikij7{jp28OeED@`g)(w^ik@5UYHL6xOWU zAwMm>tXG~PEavF`C;PXKI-BR6kEix#ec&gcv1RYEQ3EE+k>$Ka_F`-f3~3-M)SZ=1 zioza(Q55Xl&ynu)c>LvO5*-Tqw!&*<-d*(=mD61m`B3qEr0J=o^ZJXN`^V~pJ`W*r zZQyY76@;_|j~!IMD_*0|0i(!nSbi_Zsl~1jdC{f7_B*bD?=TcwCD%<<$6ontS?C6ndJj=O0Wa1 zJjNpYj(MhlPeGtz5;DiY*;v|teQ>={;pMZR8mVJ#Prac_YM_|ofoNh^?^OKdRKLKI zt}8e-osoU8Mz-Y_?qfNAGErbQ^})$EZ?CP%<2W?sx{>p{7xJ3|Ef!E$KP}`mP?l*< zaLbrM(l2ws!XRJjj;A@7Hx%I~FmJe9MeQ*iPoS`PIsLO^i`}sbUS&W5#1eKWN5G^$ zI|lxNG&juGR+S)EIZoA++iB9X0b$HZ+4O7wiR!Y;(M_8m-?Zh#6>*nSNhd8>3Fig? znp?LsX){n!y>c=atXaAyP9-+d*ALxoyYNo0sC+Y#uTV=IHq zguPcFr!)Y=m!l_k%o<%Z9D*ikra-`N|F7DedRmQ7^MrE)GQSt~6Qi8uGSKrhCINl# z$xZr4>{(wJ^)M_D4R8CA6c`o<>FZa~23(QRlb;tIxB60hxq%LZF%6B-qq+%s6UK&F z?s6ZU3QfkP&Drq6Q3*i)(c0BwXw5Y9RF9>6pB8sG#3Uvu0>(KkYoCDV;Wr@X&i4YN za5?0Cjvu!9sPKgeH^;$hsH+UZ^gjT*u;?YLE9=Zo}4 zxV8HNq8f!Rpx9I<@X|&%7lIHMuS7&e7mIs>C6y8K?KL}R7Rbo52LhpgxPHr%aR?h8 zdN$-DH>VBR(%6`&2Ap)eQ|NIGBlQ-Nz_`33bTqRKCx%6h$-os+K|!#)wWifzbBIbc}qwzo~1lgM`~4LDk9kY z!=wJG6G7!3jYebVDCQSYLDw-S$#}Ko z^nZ0pf;TJf%ypnT+3~;`^6gQsjTeP>WC54~eC)2{p_#V?YcC^EN6ozLovbhDUM0|d z^2QJHuO|f!s%fAY)2c(PR*XkS+7vBEk zV!!JjF7zvd7CuI)JB$t5@KRp*cSE%B^`@7g!R%7(|lK#g`L_#kBr7vHvnVx`Du|AA#d;1LrdR_59<|!FxVMGo0Cbd? zF7cr>isn(j2+z?IXk4X1u584N>nX0=nF_T0<;H-0u-u`o?k7gEPIeN9cz*3+1@aYk zKeurb@D#iB@P<&5;M!SWd~N?%V5_<9+~wAYP!Ve20kOT+nhIx7Ay&bBYtO>J?a4Yj z43!1Z12ZnAiddY_{b(JRXz%QI>+PTp_Hsf5~>0v!g9}R#YtK*7HJ%H9;dG3#@4YtU2Hmttg))Fp9O9 zJ~RUQ$5HRjy@d@vJY$MNE^H?0LUqT#n!!XG!!cU%=E>t;-e#%S?Ve&>D1UOd)q% zVKnG^9@m5Jua7UweuVl(_2$^LIk=@|g zS{VOwn;TyiikYYo7jdX^`Z)Oq2{*Z74&uD=Eie_-hKYfB!F5SIL!e@NtvB+pAQVpU z(%%GwbpNzQ=qtgxQ&}=Ng%#v{E;ImLA&`>ae185vX7|*!&*Y}@Igos=br2-2L-WSg zk+wEFPM}fG8owHpeUsg!`zu0cKA*r0Q;7V&ZoA4#13lU;2VT8^VgiBL+bLAZ2o*OI zSoY%Aj!Dfi+@U&oAMr1hIhz5u^UszaOYLskBNfBkc1OP4b2)>%10cN6uLzSYM+)xO z#W@~aFfDXHg#X#2!w8-W#qU%T$i(1@bRvA7S5)Iw3!v?q7FUB;ONiqbS6CyM0|BY< z8XTtw;NL`O^Nyigbdi~^OI1pxKy_#&^aBzrk2entc8L7~yXQ|2uy*fG{)RCEH^KKy zU_8fq!@*`RtJCHp$ezHgzlUtJ=Ns&RHx&U%T0MfrSI2|*0epn;MKmoS@OY3*|9T)! z2d~!+VM4_B?x%-Yc)t-YCzss$1;(y2L5G6J^@qSjbkY$K1O}0KJ)MpbF`N8z;07A( z8tD|>XbF8iyXk$9N>1Wc(+1b#k@#>u%i%kum}?Utk4lD45ChQ~_@4JBo95JFU2#go zC(GUYg_vH>|6Pb^B_&dbOS?Lg%BQ0Jt1u(IwQ^!|BF80*L$FgFj8ekbB$xCagFr>l zPLBl^2e-gp@L$*kHn<4zUKMS$BSsIvQSHEm^9Jg`UCJw=sewD zjHS^syX5EjE64R5e&0M)QQ$O0ZLN;H0BqR@J5yhQ@yy-=?hVF5L?+sSGQVDKMK0qU z?tZ3>WdD$2YPuN!D)%B+x{p_!Ow;b}06F4!Dwe$2l12jBCP{(Jf^ z=njBQme3Nlrtkx!?X-lvY|~n}Uz>iS2q|5WJs=?r-^;4*QV+D4+IdCt&(gS>KL*=* zrvvokHxT-#$r=$;R&20ywo`|{twO2q&5mr$SI^dU0M`#r2mR$OM;e*+19ye}XPIk$L;B=sz6I+?oHd-3bGT!G{ z_L!Jg-sZ~_laUjOW>Gx;wjc9_+h1Ccx(}~{e|;7~uF#D4N6NQ%eRTTP93Q*8RYfx@ z7`0vc%`>4g>|T7`<<2E-o_Pb3>8hQMJsI$uqnVVA6c+NTYT}M=1-aYcX#yrk=TAHf z-@JO|fWwS0cD-LUbJXAL)@ZEH*4HzXpM6O&Q1|QS5Btu}8g8tgg$?s1gls|KiPY7D z?i=5BPs#q@=eXkWk=y?U5#OERO*~ZOlV2-dmU~n_I~h=@Yi%mxb?%0Vj;3L6TqBa^ z5>m`}${iEYjcrR3q-~i*J9a*N0T%s$35jci+j)B0gCnThvbym&E4a*gyS?YBebLGw9A=twb8`j+%kwAazo zx;BjuRoP=gzvFMKBzK3V_ufPreW&))z9_?yVf`hVoR4XKo|+zVbz{&|Kt_=1EOO&%($3c9_$asY9nJxUZ~CRJ-^QIBEWW&9a8b&YYwfF>t?^AWbVeT8 zZ-s}?aj^V7`GyyOm`I8Q*5j^L98%o7cW>2IF=*?;yR?EUYarqE>SKQs%96`iXW;ks z6ikU}W(Yl}9hZ`dXy0Qjo55&VlLG4ca4$VHfebv}&CO^sJ9uHj?>$!#k9R$r)wjV1 z{u-WN-7_{!xIHSiRmDw11Luh-UrHOsOkMQREE8CYtj<1H)>+0=K?g3+oL_;ze=kiZ zXurEOe2YZNipYv+Ygjww*Zh+RVYqLG4cqr0asN2uQ_KCY`MUh8*}fx1U+`|T(wtQw zx}a8+Q9j7xo@F;{3HnST=UnQ>ZW6`X8R899{+Ob3!P7Vit=KlzxOTB=qG!`zK3xzy zqaihV|F39&e-jtjyosYAy4E~-uh^I7KH)=ri`1DGS2A=XR^ukpA%5RV*ZqACS!Yo? zSRcnVA}j=$`GwOw)7umQ*LtC&yMB!;`!`+>Psi>L%TPNGKkMQy$J0%|I>jQzm-m)= zqBlay!`pP7-K*z6*9&C)%)DmXj6PHXaWO()rg`>p#QLThcqm@D1ioX0tg6=`9r7aL zyKZ#($IhLLXC6ytCilRNo;ud@=>F#fF;O#DRTlVbGpr@bX4lzfbepR%xS#D`sBO4d z`}RS?5lvuZ^$62$<>sETF&8`4frcaOU}P);?v4b1UZ{8bO=5K^U4yAQ9rGpaGn(oC zNjTrc0dwat1>v=LJ@Ho*3XgY5XVE6gYk3UmR2k{s85Q1&il`$oE*4mNw|BC^PwSs9aFi78&CiA;pS5KKkwH!0u^F3pl-?omn&SU%<>9tFcMHlM&>gt++ zqCmL?zk?e4?m>us{b6RHB1bl{`9&6|*#{0>;wO9sKe6Pi{lUVD0YP0FCile5r(SM7 zgH7++k9Ufw9I|x(ONyxW;W5~UGd0XZY!0K8bZf6d2>V0U_#e;yV^`wt6Q^BrzuQoJ zU+3ZY>i1OxlY6IC+kt_S$!(+VKGZ%}9x@VhK-pXJr8+y4knr#8#Muhk0_B)|@`7a=)5`2p?i)YV{k`pnPMo!{GedHPrwyqCvJOl7|nEVvK5E6RyZbcSz&cXM61# z3fW3BN#l^!=40bm6!f?J`41}rlzQpS9l~vGV{SC5HF~G_TR^OqNPm= zX^k25gk~B)>>Uav*7;_H3j4GxSKzrHrKMl7S8cy~nd2{`F#9DRbD|p;nYH%347w8Z z9x||%vR|Yd<=Ev36}zPE2__$$R-61iJd0S{ZT9{K7dU8`VOY--Vy;uIVBgZ{Q$?t) zL?65%iCrCR(26L4lVY-k@}%{^DCAX?9WjUqaFPLokP) zx~S1|vU2bVq(jSU=blhxlwIsAd}5 zsQq+4)UyofSZ7yN#3&vIt+#t$@!4Y_OC`<_Q*r<2e*RomMv7}eEEm@s(9IlJopSi! ze)(Dr6N+#kV)efe;%^i$S@k|=z(p7zo7mJ$^BIA9ew`ayWoG^dmI#`;}m}Vyd|${=;?W) z^Lw@nvVtn-xsNJx2j1rt`t0qAh{5V4%SyMLe3cID*_yCdWJrx#51V>tL)~d@@8VmE zkE0{_9=V~DN(GkE1{b}jJZEb@=3kR-D!^AgrCddXX|mJ)eeuX-0SEb4U+qUcbbccKq)V5#I3lVAj$K} zj>`rY)c$K+ki6BesO!B#SXlRS3aTFuUm8^f71V^)s;$@EZDn%LyGb#w(|wFgO3|jD?A1l)9*MKlX}aO5*ute2 ze#;%xxQe}+ryJ5X_n1|24ws?18^l>->H<3T>OAypC2znA)b3q8@GFKRBYpXZj6O?F z@VWP9v?ksX62G%~^mT0*@!!Hz=%NV~@kEp^w=my2IXh}@hKoCUZ3jDi*zT~dz)Y0} z#Sb_Qt-;T<-mmxe7%_f$yJaetoN#pB^x_~rPEc`&N2}>qI**t-UFU2&`R(e+**bMa zlkK^Vvk{Wd#&^8mZ&3x+tb8hr)8nCq{zQo$X5@afXhVWJ;!D0ZS=jk0^5-W~|5U`7 zJ zgSCygdk1@nVlSVP96_JPb#%31xv1|;7!bjhJYf#2(=^Pg_j5`KJtooncz=`rBZE%TeAtDL=Q1y3i{_dMR{ zliZ02dm)7uN@tS*g?#_#_FV8pD_lr0eu^p)l@P)X$LMqX#;^)LS8PTPe-3qs4LP#+ z>+impsm476YM1O%z(pcP!!vWfZCQ&2&m9JD74N*kA(+;C&%9=dR)Id-SKH& zOz7Wq%#m@z^O;=OuTyeV!c9e^>oP~~+ZAI>s#o0qEbg9a@!YBMo$S#|W*(P1$^h5& zlgZlt$_--Zl1;Vv4f}okRfzc_s-^uY`~zVP-i&Hdgr#b3Bq)M45WMl}H*cwhq!rx# zd7?@+Z}{R_nN8yVVd|~JqUyf);WKm!3JQpnC?OIGh|&U&AT6jMjVLK4-GdSarIa)x zDJ{}9f`W>GG}4H)G($7hcetlZ>jhNZ znGfTa6N!29Q8Zg5noP`?3UL}@Uue^ykiSkrihQe+ktvbc_J)HomhEOrS@+E2&B$LA zS@R3~)C|7@PHE5z*lX4sZegi!WcxTu;&tk8{yXo59Am8H7ih-j+A+OHT+QM8J z{}eff@)VOE4TO>9I$ku=zgF#Cwx`VP^FkROjDTe~-+!(2Uv90CAd}864#Vx$g2J;E z^#!vel=76h<&-%(suxHpNl~ct2q{0&@i=npkVgspE`92A51ae*b>g=R#_&>k#UI`I zR?vTRNpRZ$q+zjN(vMDhBml4%$flO}{qHRh~AqSG^ zoMyG8br=u;c2lZT9mRD!6WhxN<00FOk+wB|SLYhV1B)MV-C|TYL$caD`KOUyb{#p< zHA{#x*bl+f0=#Mx`5bIxy3*efbj?jIQe;K-I$zdYS@iLDS9o{yKjKH;J z@(uT(={E@)CI2#F)Xa8Xm9p6H@8<4v?eF1=XYpldwFb5fa)wo%(7cua_@ANgDp2g)_fArK~^ICm*Yfb zF*n>`m)|G2sXKaCP<0lQL8cUwp^XlEe>f0Vwc;G|==cj8;V#Gwsu$(i<;>b{@8h{k zr`4o>`u`G|Ccq?fRm0P@pS(93UtN{J*ZMzlFgG*Ay?nP%j_>aCl+lWj^AO{BeD{@^PE35>drzDescla|vMbyuJiA#Jk5!SNdP+wMC)&MFQDe-Qj zB-{S77_fd_L8>IKIOeR#aFV2k>h@{*(`fd3c48`Yjo1AKqc>lZ zFFyK~T$hA-H(YHm+;g#fn?FkyN}Yd|@P2_vK)Q-T_E8Uh%|#xCSt+b3LT>>(z&<;y z5#I8GKZC(KF=1NB5h~9qt#JjL8c9)Sr$0T>p*Lh>e;A5(nR_&OSd@PIJ)9_4`NX}j z=R?_+(OIj`QH_bNzW%)j>gTApB5i68#1Z@nOefJGCFYOMKcKKZrQsLGTw&4{p4~~7 z>Ya624}Th+=fsO{ymcL|LsfjZHa~Pw9s82l(8clC(uF#G$je4w#yW9jG3{LUD^oq~ zpg22}R7U+gS;itK{NZT#g2IcdI2j402~x|P$zyQ%I%M@SgcNcd(>qL~X1yXylg_-A zG4VnU9`o^A@fHZZV&47VHB`N=dPRCT71D*rSG^i$)#fi~?+mRZV}56K9}GTy8c;Tk zS+)AWowot!Krqk9+|IVD=mSHQOB`F`&qlx3^tiSysm?;?<h}P0@UEoGRMrT~dlYBcn-IoSc682Y!UC^POy{xSNN$~L$JTzHWDFW!Ur(uV!Klx5F2q%s%my%HEX;daKJz5YUq4!D ztYIj5Bg)*{mz@1zD_OW$#Rtr;xAh43>m^DcV(%2kU+z6-5I$VKy&602-Aqa3X46Vu z;p;lk6Wu5UVXh{n{FKUpnubB;)B)0hBi8uc6v>(*ySf2Q8_&({`<93yJ(5 z`ZgQ0O&vHn(utc0ao6P0#d{5zk
73=^9_mtmUD$ZSvBDR=tfy1S<|%XJY$n^Bdrjx#XvDl$2xqdwcx?MS!$wedB(ib)^M zuPeGOwja#K#q8gGc-4BgKQ2-0VaV&o;|`))#3dOP%Vpo~IOJpm-Mn14d!q4KA_+3b z*?y{xR7eyg4RI^HP(;R<*k>guIhjJxG(?1xZ|v#+KcXfA1$HU=2ESwoUj#Ga%1YX0 zbCtL}Yi4;t!7t!p5l*|TH+5Cge`wp+kY9z5f`X5Wo`TC44*X~@A4!Qge>*3u$=KUn z4eb512Bc_eQI$ zR94KUq`#)hC4fmL2sujnbpLLoaw`KNt}a<1@}no^!Z%5sw5x22I}Ro(N)$lrxi7f^NIpgqN(!(V2N%-JP{d zISRv_&N}j}TJn_q(#`$x4(ftuw(HHP#?Z&{xEm!I;yO+U<`J14yzBk>Oc5pl-)w4ln^TZaWWgwZi}Jo}dub7Z zx$MS?(h3Xk9k#H* z>%m3~iGAV203-!6SD>+huI!m%QaBojVJm=pDB!U&H0@zNl34WbM;ssSzB8%dP% z#$pq=tr~r?ZaMQNs1l-d7d1!p_7Jx`N;{>dNBZ#B%N|Gn--V(HuX+U_Q5U9Jx&XFq zwZ?~o-r{?iRU4xihdWYJ4n02Fw!it?qZS2lfMG5gVYNb0h$2GB|Mvgm|D*%!Pns<1 zO6U_O1BZsvp&^5We7QRB`t?u0w?;lKMMkcmw8PXNI4)}R+50RUyt1ppwT!p|KVbmW zsWdQ3lA{#3BN6e$ zA~u72PtE=C?+|tpkuwp$Kc~Ukvt}Rw+49Hr>uaxMzHrkZxk<1PHD-Zn*7YDyiA&lh zL!=b2!1|UjTiZk>I2V!WtAaNWq@}W{}2VxNH)Q^-7lt=_j z0uxxhD$Nl2(y7|OC9zQjzv^ncY47R7@-Ho8?(Hn=k|sAuRdsC(J%Z^ef_O$BbR@Rh ze@hk$v(lVy5w-doR?U1UQyaKKRx#`8HQGy^$VHCSaS&coLxQH1e<>SE*mBEqWJqrz zGot+$AnpWz&!VSI&itv7h%`#zVSTfRE5!_sYooPm_zeMHgazHY#Nhqk!UqPz56|wr ztI1;{D!~mh_3zEzTO@G5j2stH=?-5Iv~@IJR_1!_a_x0Z(dkop-|B%QP#2bpCYMr99l$!97PAbO|bz*I6^%C5=j(vf@nlj!#J4m1)fZ1 z;791F_;Huero^k!NX0r<1%9#jzkVJ(JnDR>rt2R+5t*`p)>19#D1dGiS7bk?caTO5 zBxfk{r|LIhaJ@1l>6}4SPmzow42-yBC^zKIDK(-T zP1m4lz&pepQ7P*uEa}{RN{aKD6d4@6FGR@@rEQgo{JMn8$L6!Q-XXYa=l}{cNB!B( z0Ya3ywW1Aci2fpRdQsC&%C1pudXv_+eUsH^4mO>XT>Vl9@cL#7$jJZi<8;S$Na!g% z89Ch;G*zE1$2`&2u5p-`5;w+46DIiGoIC>It{R{YNVss5PuYl6ZjqADcHmOrgu{x0|8nUeYJ7ASNgMNy@dz;<232SYE z`2G^JJQoIj^$y`zsY%asnayWcC{wIa15uhry2=RJhv(59_*HHqu;+{k3$1d}?cigN z>oye^^nLSPjWfXKAksA8#k_2Uo&8P#>bLOPlgH7p=8KvT^xW`InrjX`;c)qU#Geh* ziGp-u!j7=dayx@*5mGfI_odSbMaFfAzyry*DwmeXS2LsT`+b3+tg0y+Kw$Na{8F@Oovh^)ekGC0sE#L`uouyC-YJb{r#-XV|v zO>u^!A|;nEeBtsDY{|v*-TBx(!=Mu{ha&XV^Fb<{KMimVUfS);pA~8|j42i3s4MgRScHLg^Pj&nJsNb^$ zN9qdsDku7pD<@$lx@xs`nwS)Jq^Y86C;>a&yP)koL2ARN9>jJyP`eLaD0ZZ|;3&_@ z*w)M~L2>Hg^9WdD?7W$pam01N{&*6M91Smyr*WGwS#v_UA|w4dt zuAjmXD?EcWz*@9-v>^~AT;S-5xiXQY2T{e`)~+kgBuuUMb2K_8afE7u7df~9ojF(i zCcFH7U3g%LW%$TH$LQUl=Occx{pM%}1~$&fEnS1w1d*Y}hXZzpX_RsmtnwlM)`F`r zA8Ed^O9-R_Kevelyi@p!VA2M9XzXuGl&{b&9^efLcww@nxsjdiXog)SZl`x+vs#vi z?z=<|to3v)Dmg<$u8El4`36cspU0sxA}vUAEL0p9ijpRu=z_1F?B6GZ&Eun@I`P%( zMu(H|o^7tmX^=Rd|9%0uk?myeC#8OGP0^30B&)25KPe{KJf)HCe-{*{UAoBFvPCCr zl9(s63@6p5DdH9DfQkFLAo<%2#y-=3q0wto|)U1&S| z`Fr2`N>1o&W!>P<8gO)H5I_GNghIZg_PD-O&8xrrU7BQqA7}s?)K_8^l*qfzBVl1k zela@tBr*%Q;GIr<+Sl;RPWd{Qa6WgKphpDK>DpLk>=loj8q0Kc`)NcXEXT~1j}oUL zb$0YIbaVsj!OhwsuRGTF$JCjD!M5iLX7VHIvb>MTJD-RzT@dx^g!d|vVoWz&jz0CK=%utvMXxp4+_44;AT3Iii_tfN->z_FKvb`iE zEwMTbmQ91F+_3={X^@Ig#j3uey;Sp@4ue`fh1LQ%m3KGG_)2ukhm`Ue8pGoM(&Sy` zU?;Tm+)ig_)HwiiB8p~wU8N}Ux%3f8;On?O$eK=MMuw>yhGH7wSj`6^I%)04a)e6G zpsx@UBQ-0Ktky-O_0in>sa{Ai;fMI2Ex>AR=*u0&)JyHFUop|`I{RgsJu(m=y|~}T z-#ab8%|Q63bSpVzSu%Y77b?Yy|8F>^D7bX+g77 zm~eQvm&RzfTs$C^urS`59A@Na$l6hkXmR&D^Q)RORJ=H-k3%7+EB6Sy=vJB?NZ%sU z*Ko52(_1mUe_p@pZL7(X$OL+Z;n^}7F)}2QIU4e~(@2HK<$EQ?Zz$iLfwegbN7Hr~Rm_Y}U?EX#kD$Fe#Tql3gUarZ z9F>{zZ(C$|s1g?udvdKl$y-pEQl-yLdR`!I#e@COo5`KI%H7HBtpy{HnX2_yrMPs_ z&5IsGH}YXUjod7l4M&)_XLGEDTHh0qxF$AKd5i6$xW$XsMPySB1q%;oUY*YvZi$soH^MD*hL(FVdctrJe`IX9g<%iaz zPN6Oen;6MBWQS?Z-so|p<{}C~HkV-3j%^-?K?7^#G=`mO#+J>e@mK>qcr%U;9wlfB z-gF}{Cpm6^-ZIb6$oBCs_0#7?-|B&u)WxeE07Dy(o84ik$&+Ex+}S1`bXF^DJobO+ z|JgDt2b%n7XYa17FKOgVr+x*q&LE4+r9F}bN60(bE@&sNklvjj^=j^K4Px9!NuMM` z_M7bSM`LExDnlZ?*c{(q){{H$=5^_wih2@d{f};h2qr6bh3qDxn8-zk+PMzMpC(8E zH?n?oLNPiDBIl8OvX8ez?IBHQZHlaR|uXW|Fp`$mO<2NuT01ePbQ+U#k2un_e1YxMzV`>g=A}hq& zG`0JYrM3SERXrVq2)TpwAVQV-DU}youndqM=L3<<@b7zmDx|90XXN-v)@!l=+{mHR zXzUJqkRNj{gq8U$*G`c5D!JMFnxCHHt4}JI3a;7lgnjrKBoIWAp_M-N8A+$xjYvD0 zm>iRMm1IKEyb%9KaP;uu=D#DOx4b`+`XWl--Ei#rp6W&qTo#h?*jCalIx@uX^WqK* zGF6jhPYkM;g*j5feFkE}(Qxb4f+Nci+0pkOwZ!fk2;At_SD9I20ht7zt)n^eQ#qzd zmTT2wG7j&IaGTc$T=>7OlssAA_H&pS*%Zl& zxs7t=iel1vgo2I4L2Y-qf&Bfy!8#VilO;bINY*O9kTR9XrDmxkoIv^RM>l$`8A%V# zlTT21@d#@9rr=&l=*;{yH#5=z@k1s{fr(&-x3ssAf^>*95nfKnWXBKRrvp129_pm9V!$ zEl9e=60#~|9^J?Ws9g|ZrW>R+gujmtemaB4Jcut6zY%V~Z5pqGy9ZI@2E}m^k~x1G z#9JOX_lf*4%kOpc_YsVuIReSdXF-M|FmN`*V=BZP!#_@oE4X9R$dma-6wDP8<=Ih9 zFJ%L3h>6kc=|tk3nS)H4J82{(awB_bu>*qk(jzmCa*wvQZ&xkQIsA`puPu?iS4TC`hG_P}@kA_K z_3Fp4=wI5Oen5@B#n4^kQo5_+%qQKyVpi1-^c$xUmYkSC&zwD5L%kUNg$(^4qK3pt z($2o=*_4gFz%v%7<4J?6Aty!){dPMDqk2NgZ5|fHaHtHvu>D`7M=0Rgl{X9_D0s)? z`#bZ=4tIuNcJ&yp`Dj*t^xmXogmbm#8C5T_!V3<%+I=PzP1(QQb9|H+-rg$Be}n+G z;^Ktjvo9-t>m)ex-f5+Knu8=0SWGjHjn;|wYL8Mx;BAOg=4FjEh`^ce&yV)s@loN$ z=&wBJlZbBn*)iPaPaCBX zHZ)D>WrUM3?2P?~ekbN3#Ggl88kmv=Msw@38M8tBZ~=ZLLOSva3o)8`UDE%q^?ik& z=_^QWlOVp6c#!?rWYE9C|Gw|1bB%Ta>)w9tRziNGeO9>IwUp5 z5NXEOPVL!%9mdG^~8i;HHBxKl5dtd$dI*l3bZK# z$!ei_4&Ko2e{1TuW-u>V3~Gc=L(i0^Zej{_w3wekZS-avPWM@e1DPHm(#S-f(>h+i zYI^+7z|n=C)r2AG!PJT5pa9Q~L;men?;qrh3f=iJQ)BDD zb_0?G-l6N$$2Df;kt_;>M4_T+?fxN$XWq}5eVlT&6N}g{j25sxHV{%nT|p6}H8Nwm zo8BE>Ms$#ZlDi>Ccbuz7fi#t1rO{8b5*Dt9)+1L);e(7j--$#RWvfX4eaQPBJ5^+i zl`XmPGBODMu`93EV`Y2%r zrge7Vd?Hsc5eZ{bsv{X0lEk+f>#w#U$L)PYWIxM||CoP_7oYSDh2hZ&eBu9ZGIOo& zST1(ab@_cp%v`(>+sS6q^rj;fz;{~FJuE!dct3Byzy1<`ZyL%6Lq@t!Ypwu251co zV#Z)o^LMVIVWh}C4snI#>*%xIpUNeyy537tTYyUI{x|TG@X$RwF3FH9>@Z>HGFL&Q zuegwsb+_7u1tX5M&s`-<&DjhGATxin;s5;dzURoZJ7t_0hLHjLCmrAB-s;wThn6S>1Kc64N!3F{sp_o8z6(7RFZ07rOM3-+vT z9F$0v)26}3-}s`!bC3JgE&1GR%zT!yrR1SF9?_UOMmDu=h+fS9GN?y)q}~CPOTC-5 z@xb!xt|GS&*%nF!v7Y=noDwy<_urwr>4f1^(uMnhOu3rP!9A{BHdPb{$ag)vMl!0v z;`Ap-ARg;TI@t287pTZrdvgGdce;B=()HIHIWTlgRt^7+uGx;7RW6-FXFWAtEWr^3zi3@VnW~hn)DG!Yu~IXoN9yl{B4GiPPblg)TqEG%o5HXV^l zNc{N5%cN!Mlb$HBb`)2PJd)5e2)E4AwYxJE?q1&GEY%>;-_U_-z|}j2#;DBLzhc*X z{zF@}jpjV|uhaJ{C%jL~OOC|e51v*$@Fyh13ui%@T_}%C39+=+5O{cTzQUxR_7{Dk zYkw;RDyvseDk}Dbz8Wb>18%L@FfD-Mt*?Z(W?P_+9f#Vfzc6g7Vn&|JyrPPEFD<|8 zhs&lc3zH$2GGbnT*9+-ce_W{Q^TU4s-Vu2*K^k`i3hz#klQEKz^a?UG%2OPtpfpvP zzo}8B6I~Rw3euQV02ya;h;D(fgh%Y`0(shAu(B+LnVsiulIhQnd6I7AK-Tvj>`t5Q z+E%mg*mB84RmHJsq-oHeEBa;Q@~s5>zW1TB>g4qo^1d#%K8F2cy|LOTF)$GTr45`y zp{-S~jbv?5j1Pzfyizfzg&f*XyKk{pQWG?VTXpRz#&=B*=^QzY)s0w(jD6pNe3Ecl z#R!h~`F@|T9x(Ig7=v_F75MYczI?Ula-1tzIB2zT(&V(={4K{fhN0^KH}VMCD+~}C_4w{VT<)6HYgBDuaxbOmu0gD(anD0?qVFY}i7Dbt zI$u7Qk67(`3DKqfPd2ZePd$xWIV!g9a=05_t#*e54ho|yJkUE>Th z?gysgU@!^`GDusYfShRjfQSa9(=&4A-tX3Npt^#0#0F`eB#F2ZII!ik z@khbwaIiqn&~}V@Fg2jO1oRP^n3@OY2P#wvOD3Lew3`(q265dh;>PZoJjMk9^(&;L zZ&%x;P@vgt4VkoT$B^<(R@6VrA7ODUs9;xp&~C*`7rw0e$6o5MA?hCzT>IeZ>^3u^ zS6qMTqbPoTH8qesVe-#^qrI#;3=XarOWaMXw%Ue%TkPN~$ENbIyCE0@PNz2U7hC|t z3oe@m@JS@%?je8~=*&bQz(!ET$ZcDdIh=eafLCmV0 z=@be$vIzN0yR@h#Nk6IU6hY=J!ejd*dgXunG$9lHCdkK6suKC0i!bA)z^qMhyd|uK zhRCLYmRHE~0Wyeo^#lP+1>waw6MV($#w9kTXLAG!Z$h zs!x+LU$$8*WItsG5+HMu+h1$#dAn4M%^gI}}4V zBeFDRdag91x+ZQ7U9$Vr0Mc# zwCpJ|q%%kgX$VDOTJnDMId8S;Exe3ZeF;O)TO%jO^N7BdEw*U_E$!N?G6HwyU)w-C zdTy1d=SZ-hmZYs5eDB&aQc=q-7k3RTIkMD&OOp|3!^pC8F!dR<6_4v5e|9;*dx6BR zvU!@2G5TG+h}zMvBA&R03};x(74eO)Id7@yy_e7u(i~=SAxO~xs`B8FYKQ^~=x;D3 zzSh~$q^O~L#3VJ3t)Td0>hNPT&j9DkQp{WAUqg7ck2Fm(!)lXjzol@>1moF_;#&b` z$j{dIFT?$QP4-3xqcB{EMb{mF|~#0IzA zLD-Qi?+6Fiko5~{p+j(AaKH*iWj2ShgQZ+!*MYunEyppo({FcZ{&)Y#OVF~FmA7cl zu#6c?8-TF@$eEkAO-rGI_>~)?52Rp0JhqsxB(In?ZI8%~H1d16_w`^mb^v8WRzj1` z@K0$Q6$gVjf7UrgG!An1Ncb;=8vSi0SW3_E(R<;8B)uoo0@HTG>>T@_8)hpH`?t0u z1AMJLCP@YCg_K)+PICnnCm9Gxy_T(9S}Toow@tx|`8}SbzMwse^kz&E@Y-C_&1v!* z69S6YA>UO@-o%!b_iE8q;x~LI>s@lR1aC*;wvr^=6dNvm$nkst%kb+&M^js{U_vz5 zy+Ryp+vlSB&ZP%2rUKmt?)zxP+Lyv$OQ>I8_%Se2v3&vFAN}4=@MN{i6T-#V>9416 zV(4i2#_-$R{$2aO3=qu5;L6WnCWnvNvVQ&*BCq_sw#j(|tXiWDah!zhGyg#_$V_nG z=RsCjUm)AA9yLQkBeH%oQBbFIcgvB&>jQ>2but+Q%bbKACJ^IEuzl$SVWn*qB zhG>U)h5cSD;SN(j`@Io@4};+R4E10#k>{Vl z%E=mU)lckvP5s^VDP>oWkp4n6erI7bMZxuC6Ee(KKk-!!BQP^JH@o7It_A`RU&`%gjVSl|`N)Ubd^4F{0;6VG`0YYVj{zl{O>)p?^ z#Z!mRd)9GRrPIJ>yghR98(|zZY(%Q)d_05-Bj*VPGWlk#x``*Ez zqGCYGSAz{G-F!|GlTzx?AD5IyvO0@ozf&Y!9e8cnkybAR@V8V^#r_Ab=kKVeo(8v1 z7F5;6!31;*7P7OcCAEQJ_I6jQZHz&2a4Ruzw#R7U(q}UqK@tw+!VIMB9{hLJZMLOi zJKXR7@P3Qzs|!31O0C+`D*Vy_G&Gx29QCBEkYo#ff|3BbBt6xOZM+}ho~_rqZKuB5 ziNZ8}$RVstL9o7xo$x*{8F61h9&ixw7#BPHBlG1`5N)bRvIoYj@Ds;xkq{&ISrDXn zYU*=NhcMmJ1z&qlt;t|eLqHq#ykUEAkKaOED$%*%?AEDj|gV$I9cIum(7EpD&oX%n(kWdNtYgh15lcnZjMA$k1Iqe6S0(b4V)U74~d0iPpBn`grGdFiY!q<#EjhwK30$D+Y9bR zn37L~(4zh&%P9GA-NQPCA)BhD4b%Dx!ioLe@muN-Fn+OCbPTNtoj*#L!QX6-JNRyh zbd)h22|ir|pxrgNO~)q1KHzdDcz4>TaNf#LiD?sZ;9EQ6dkkZ=DM@%3rVQE{kxZz4 zHkcP>0P}8#gT7$Rx|Wazg_$7JuqlmxD+yP1kal@r+AU3Lc3%2aRMrts*}DzOq-o7g zIcroR-$~edCwa?S+W|gCyj?!$HVGQfU-yHPIg|a!M;3%I4Z%U$^xE`KYLPv9Vnm@4 zOSC$QsfVwhl(K8jq1p;}YV(wmEVAQ&hS3Wd-nv|dDQo?Xeq@^H4fFp^XHVKeF{ zm5+T)Gn<4O0-{7vqflthjouYvDlJH75-40b_yUn4lP|aq+{kV5dXg3s(|VPE~)`V?#8!l!%Em`1+pEM_5{?T2h?P>g6<};Ce&>uae`J zvO2FzD)mZ;=SQ!Zj@n6v@#U*Sj@U~ORMZ3pE(n)jSPBrWtMpWoz^2yX-+8nGI>1^W z=|sW8_}YQu9IEF`A={@S!X2#R2AaU^gS@Yf{4p z%H0`P6Z+uaFN&IHHgD&jK`ZT)Jufx{UjiD1K!CI`M^=lGGt2Ra*<{lNP2Yu)B%jpL zy)@;mQ;~!B>`WxeZ@3ysXsg<2mjp5TpnQel#bY#xN~oz8tNbbX%Lk6!zVDeFn(c#z z9~(}#8Xy+}i#w_Ww~O7>qZ;&!_#>A`!Gd4suQ3qg~ ze>xS;-eA^Ixc*+==6bs8Nj?q!tUTm|_Wk+;J__Pm&3e&4QlE}-zg+Jpq$j<=KM@kKe&{#I4zM(0@1pk@kPLgBY>MGq| zoM|X50t&90oNGp&qHH_YHC3*0iQl5(-P%Wdcj6FE7TGCxu!=TPerz__6-98TG1Wlj zfG6UPz{8G2%KD39lWu*DENDPO=3HMoXKwU#hT`u&?YgAor<5m8x-lDPCu$XUN>xJO zB-ek+*4?o>gfl@CI6|vX-B}kq6ei4JUR)zSC47W7lPGJ~#LUCCL)$N_`W+-)da&`W z2a*MYpFeu+I*t}E5zL|Hzl?-5JM~nZuWA_GmO7i!(1M@|7ulZ-UwBM$RIK|t_)cxF{G&=2}FtVW6uERRp=-t=o?>lxWy5&ph z;nRR5*3RS#(V5o{wzL$-t!w7y;>Lao7FwR$eD7c__?FV6`Dvrb#AZEaolS1KqCO1R z#)d`Seh+dIlc+A&YT-NTzIvADun1Z~|15fY)n8eucc7mL-GO%mG|fl+57`SE3&}9? zqvqxjvzg8N8}0bTrD@23xqavy_qU0moq$s7=T|Fxl;gB7LJGkdNQOuso8WDF{SuN%8vhe52a`9|#C4<=Q3r|jF|mWIqo1z!q$c_v;<99Gm&Wge z))be88W@%6`Ra8&j`2S3$0HNfw0j=hFKCOGCIOdJtuMHa+IYVtWFznBX#6ipCD(9@ zO+xdAa?$=Lub^pxkd*TZ_AP-EtQlStT{5s5q>dE9o(Z^^P)YYdxhFITV}Z0Z=d5Bi zlr{x{rC;La*j3rI=;ck!+N!vHY0YTxd_xYeQcBI!$_A&0-ky$Y`A>&8iowRh>TJ3O z+Rc#5fqh7!+-XgNG@?~mM5@WYm=!B-C>LjUXim&bB$92o=j1K&uy8Ebl}O7A4BFy~ z?ir2O3n=7Oj*F=+9S6($>C|WG!Ec#v6>IAcul+XhaVhft4L#q%SuZrivbc1hKT{aE zv^$`@P3KOm}DiOpRezF^W%g4IY^|A^d`kkcg)dp?AyLp!Yy^ z9id9+C9JyB6}MuChHl+)26xC6QJVu!^a@?&;R;P;%TNKU0VSrFCPC}Ll5r0&)4FAM zmAO@6@EqoZ=c)OeO_ZSAzlmN{` zOsJHlLVCY2IX2}<#kWEg>*9##o?za$K?jd@W4Xy|xHk!6?4+y2P@O5l(qHA!|A%98 z`x%O}kma$ML}CS`Pi=@nVv*bL1_q4F)6DfdSEMa`&mC-^TW~k=%lqZM(b*v+m~2`d z#jc)wLEZ8Q|3aCaFBicp{;JHXFsAzbeD{30hZk2clpr*#CJ2B|{w~2FPs|vrD%z)c z)=I)n*QIH@5IZI3^VbypY_1**_cF#C8Xq0je!qCah{~k6QkR4^UYEqBCy1n?R!0$b zipaVT8PItHNoS$-Yn^KdG=1Y|H$Tgo)!#ptUIlh$79w6$GL4ob=Ynlu@#+>+v1`K~ z$GFiJ8@_#%Bl#eOyuqrq@z>htoud@Dq{18QdsIIRVnenI6>V^#B)Wa%SX} zoFu>%0)a4hL?A!~Jd{ewEce8_j0lf!3rn6#Nw^PYTR($z7Qu5=2Job!soo zF1Kh76V#^K6njiWu)U?!tNf@skxzvlB)hIOese;=ZDu3>$pCKWM|oi3FRj1$pIhT2 z8-M%pb<=O(LUXIFN3On&C&1pz;NUIdoroL|*6&JeBQN+!qUe^lU<>&qC-)+grP0%y^1H%oM;)?a~C z_2sd#M*wXXK1@}NTtVcFZZ0KQTK8^@tUs!MyeY>~due~G8w#JPfJI`Aq*)U3w>L9f zCR9XcKwj8xC%oh|_ zg`Prd&?u%VLF|6*`n#k(uwfCcHX|(=0~SAGYR-({aBFLKvt-8LL=5C8kQjNvR*CJH zq^q0HDRQ3LG1`cgORllWX)gx%Qvdka?w>fhuVI;;b~TS$>x*xmfm#(fHah-PJiyh6 z=^ie@I4Kc{9a(v$!<(gCwj7Wf$!L&LX*L&vZ89Fjc(stMR)^ppE(bBg>+T8@^ypUP zFKy)h;wee=1M|yL*^KN08Ux29HH0hJwqyqA5Z6J*u$m_dQ%k}o)!viAth&U*8^T8w zYp^9jDoG&-AW=;#Sr&&^Ui3a}RZUU@;xZV@)yrE{H@^PP>U(Fd`?Jr`o#0Hwf}yUr zCo$_vCXbYRi$Mw00a|`_cl}|x*qeNOv|E;Dq8YhSyYuFK>FqAur(cz)0!l!$y&>EZ zydF!PeoA)i*D-lU35Vh4#em0_r4@ra3y@qN&R4Xy%3b>4I3eKPViXpUHOw7E0cxvg zbKVB@+xhhSOP^d&)AVXRI*{`?mYno$6?M8JByp*CjdK;Pn?x@b77^Mg9j~QKi^|~4 z1X~V0S^=yTQ%R4#t*x9LCrI~`DnKF^wRg~GaNA%x0fr;|I zEA9Am-hZ*>+l+nQ4+&1Fa(<%U|Lp>WsLi>iDO?L`u#3xBNnRd`M&|-^)TafwBe>A! zi_p@hlemh0nTYd6tb6+>I}RzCG#1Un_CIgC8VQn#%pG;3fxT7z#_)4N6gtGu?RKC4 zXayD0uXk~07F8fY35ME*o29kacxys$yS*(ciF5i~R3Umqje`gp(j0+jK>)hP9|v-` z8|2##V3DC6mW4;yTT5Holeq#&5i+5A;fw0K-lE2Xeckwik6w=mQxFJrG2wzY6pB?e zR(HPp{P;(~xmsSu5=h|4ip35}MBpMNCkXQ3H1;-dYd}#Pul*+1pM)Ks#c|6|C7HZJ;enS(gfIHBo z3W}oYvRjKiZWiAJkrHkl=epMPouk%%MQ4!j$gGJyLs)!6s25zgiQe@Pv7KAuY!Ij2Mw zzZD-LIzoC3hv1Z_?agAyP9;LznQ#w)q2S1uH-^m)g%nU6g1tOl;RhlsYE6K6)mZMW z;m|qsP2}4gRw#S6<*DPYkA|8Q%%?wtujKA+X7Lx4E33j^ZRt-$zv? zu&DaqpKSWhi;RR33>gb|q1+~(R7X|Iy6NQGKosq8z^|E|!xH+TfU{NrYQ1=ybQKr6oZ&zl z&5q|`QyN#fepF!~T*QkCD!$HgrE^h6l`>b~-{D1cz>s>@{QHf5CZXa?ve$64zoLP; zgf2!rOcBr*8X2T*OnoxOW1?nJ>R2SXmmB@Q$jw_IWQ;|?w zebLy&Pm$kCk#BFP#nL-G_?>Q2g{`1(SDt!meP7KexhI5@!s(7 zpFU|!UB*?onMdWNL*714KDctib_TM6x+bf%LOL6S2J^)}Ko0ezPGh;?)C07!e0QhEyP z0`HT&6;-=*i}(Gbpb;9wwMDIz?EM_X;YKkSxW5pXy@xuYnME<(zXyY$=pk-k4O)LA z*8dfIly$rQ)e?RA(3E09BamqV`r=$*f;KTr)HomqRJh(7zb9GF}*x%i(PBL{TJ zQwc#_8;v|C$zqyD;zC2^Y6%I%FKpvWN@@83jS z&^~?N^HjaVqBx%s;>2~4crLaFIRL#mqW2-W!snu!aZgU5yAf;f&%dj-FLv9Vp0EDl zw5|Z1*gSsNZFetp9qjgfAvAzt`6ajWP|8B+MzLcBr#2bMW90Fq5RyUb zJRNH@mwi_V*m)q2lP^~jr_a8jv?wj@mL!^>I5JCRFfS(fXn8xrm2p-BtTA4HGh>_-OiH|8XVqP3hO_`>H}#jhhc+`zxVv(`KMs;=>&Di&uLe6 zem-_Fc3W>|flj<_i85z;hS(HqG-1gT29Ez|WRMz=NDX-S7HoC}@2SY7vLgL9A&-QN zFBp?MvB`^i*C*8-ei48cdF?^Bt}xuVXMNT^Fl7Cy7JDevpsidoZij|z(8Cf+PPy-UQXyzYbc#6=^}^&_jU83hR*S(>fIp$L#a!%M zlmiI6UJ+@or&wo`Dps;<=d=lnz4?upB9gWi-Llt1{B=pLjvRk%R+rp-)=z3s_AGm3p4Nc=Yz(t>GSXD(;xl~Bw z(AjteYQx`ywwqy56RcB`DHIC#Q=W2BK=NULCmh)!w_A3uVxa*I$J>e%8qd(gED{LU$K-$#KCo6QwSorJ>iI@M9xaR zz5;FI^bKvOe$1t}XM^l16IExcKQx>#Aux-K{QbcC)oh_>HieVo6m|431`y$Hin5Gb zTGeDFOn!dAnVd^MsD3QL9b0Ar$k+CwiKwmNvX^Z1{jb zgXTs4QuE>yR?9Pqe>R!6idS9gAgN+_*wIB?A z0M8@FW%sZ8*>=@#wLBVy1O+g9AKYkOlEEWln!KAV?s$n^c9reKfwiYeIj3a!gF`*z zFuuy5Kh)%DBvMY@x)GsGga>8CafbnX~i=Q5;88XmDA71LuXrx*sn2TjFaH#ebC z*)TgHk|JP&!n)5s_{rBo(Do8l+T|29c7GlJ1aBLBv9& zI~D1YhRxn*?BD-<=i*#==fhre#hhcjbosb1e8MY7&6W=Ja-h_RZB@Gpgg?VxrJOeTF}g5>J=mO3X;;PQ4QBO$KsVnzJ^tSnud z2#9+xB-U&7XBKG!QxAK2JwO}I-<^u&_;8JIe}%^YuVum!K162Q7nANP zIC0v~BF?^50HLRci2?O|=_JT=ad>4=+bC)<`f|g_@l(lX9H- zc}xZ5;#A_S_eJLieRc9}zXzP{!|9F-YCe`4f*(LOm`>n&Sxy*BRkp2xZaI)8k3V{0 zq;x|v@K#G))W%^O*pz_U%MDE4emMCGWXQUm)plIu4^hIe6RoNH&^GkR5Pe2(b*WJA z4tPsMfwLGNoW(yB{F~7gRJxD5NPgaV$S2s}nrq$1PoSF|10>4-8pls{p`nup)os6J z3)3bB9~xqMkaIm*3f8SEODw@kKtjtrG{bDK_O8Bv_ezj_>ChRuLFw1+bZX;s1)=E9 z7;8CInJ}$F-&XYyh?W&{6yp=v`Y`1`S2V^fnD}Mf{rAQ50W!j`kK)}e8V~9h8z)kF zTe4dM{V!OcW-XqP4n;G9?S^9yl?j?t_;m|+2yrJfYZdf&gdG{%{rgKXdOtV|U+(fe zd%fK}zfbP-F~r(lmSnB~XT5=F`b_jWaznf+XxoOnrnVg*y^V8HR-eW30W7*-UrPm9 z+Mi@-ue0W$sV13o6b_A_+)8sYl(=|rY3-s9qrgFr`bv@k)?@a9BMiUkHQL3bYkmFz zZh-A4FKrSoPYpQQv#~Rf1{d=QPk^J*Q0GdYxl|^TdYc56BjnT95eMzzH`Oa8(>KPS zJ*U>a)~Vn9Y@1jv=V`u_i6^drk#PLq;-OrsRwkM@`Z3KeM(~6Koc7$>S)_OWbkO_K zL&7gOK0e@&BxMFJ9wr$@G7BQDV@ca!y>?&aks_BcURLe1tv&?>Z`E+;2JiRhyFeZu z+EE$zOZJ0n;NqQ)R6&MT21BrRgR%7txIX@)`6|CqU(TF)`eHzRqbyp6z0zzAxGCZ< z+Ry4M5+yYbhp;x%QPk|^>4CZn8$U36P#DM#a@MkgBeUh1 z5Omy)$aCPX=g@|qNi#T|gQHsO7TYP|fj$lW>691B8!3fB>Hkb4Pc}Yc=}soqO4gcu z4C2RzG%-om_5!a=G?tvj`Q|hY({YiE$%AiT4%2+Ju%*dZ@^jRJ0Suh5Pr(EG6y~QN z_67}bdUgRJ&%Z~D>?%Yn60mfAm30c4u&nu?*LA*Sz?E0O9-9v?W`nbh*tyRO{sP-S zHG|h}Pvrbqc8uUGo3?9u2@-G*SBBDegmcI9Pr0$SD-nrem|q-CqkH#m#;IJqCitZF z2`UCZA)yoCfKd)+#gXy8* zyWIURCE1oG+W~CQ{aiajHu+>2>^R*4V#RPvor=et&)O6wK)xG(uNY2FYZtEeo(oG6 zG5|BU{#@T0m@>A}7=f8d27Gt3X8+AD-+{NUuGa*$^}uUI`O%Qzd!)Jqsy;ClsF(_= z(TfQcxPALCG`r3x&~RpxXxR^Zh4S$H7Ngi3W;JYs+$iQ^(*}ygSQ0Mu6I$G;&}JlT zlP)i~0@XZfK5>XT_`eCi;*=(WHJbJZ3GIe2*7{Aa|EAf(N%Zesfd;3o^u?6&L)+Wc;!bA^wp6H9E6%b z<8*bn5A67q2ijo+oja= z=VevZc{MXJ-FRr#lpy$p5@y>p^7t@u1Ze&-dsGD2eS#zn-Ea1n4#AlDuw@X((y}$# z6z`sIL37xc`y3H@owbJ^o?{4q6cnX7O$P#Ru;l7O0vS4BzHFA$U+k5n35L>fW_{}D z9xMuw^S|W@wO`+j4IvNhGAEn({1 zS^iV>1MY-$LdzSh8UDpGVO~%(z^#5`sD~H626Hw=R)=2tI`jA@4=Afl+E)SBC%(xZ z;sf4^?KN6$eJf~P=z)wH4cbJST(-ZjeEgFr78nYiEs=4*z^&!kcI~e+$%p5<2HY3N z{mkk=#DfNxCzp8PzP*=^EX#II`YWh*Waj?Sr-fO#h%9M_>|G^TU!hbfSCCufC| zUQ!Hs4$n`%pb9AtT54S>s!fCz;I1aaRUST;zoObrd5eJ1Vj?$g`qisMN#A&Dt1s~g z1Qk=>c#;wiY5x1cGk>jq%UXKCmBB@ zCtf%*)>Zuqvcj&B-Fbt(s!Hm76A}c-Aicr{#zZi+4t;+LOq!r zs2*Eb$XF%`l+e>M&#w0EToeG*rcKY=(z_`XUhh>miVoIbP2f}YTQ95z1+7KXO-j~4rf7$V3eih?|bh|Fx`9Sg9y79NNnS}i3tsmZfJMkG* zjzpDg=Q{nYIMgL1)6d1??LDH|1{fxlzXT~pEInEADf+KuFEqGEgIo$(wMjww__?s! zZ0t(N&S@>fB1IGt0l?WmhbAqsLHrq6Twvw*Z25k9bgQqD}`+c z%pa7!bEOo35tD5WRXMtcpB4}(^rdFzRE5Jhf(NdrzaLHVxYxb_xnE%Y#!cd7U95Wg zgiG*YRA~G=rOx;DepcP_3twr-&rc6r(T$vqOMzn3h|66dxK(;2-29K?Kq_h0?e6V; zzN}8UFBfC8%!0@%oJ215yb*2!R*Lqlpx)ohk`8BMdtYBNJLpT8{~bT5&8jGFr4p!9le97`B!Ro>w-rKri&ou+`)J6wNs`W`gar`A0&2 z?`&WAz{>>+kC#yv7ZJ`c+tNRmdv$5Al5>9jl@zutZDew`bRk%#oB6FmFky%0-wg^L zD=BbLWAZSTx|C(&6O;LG`T+<21za&|rZbx6^0}cJ+#)sDD=FkZRgI?+2aSB6IfryI zA`Y#kPyg*g0zy+VAoKy#N8sTYJ90Tqc7ogc^LrYu3|v{-{&U9<5%Atbi<4xXs{GHp z#!nS^o)MCS$XWDcP@9ec@%rq}Grri-q$@;gJY|d-zYB6+a59ZFp^4y;sv|y9re^|` zYqHZe^0!Giuj`*P%t~C{ulK1PA$$;U5z8tJ0ROVEwm85ua~t?D(~&fWGDGF!UHv%J z7oRbY>C$u|bvR=bUgGrtGmE?pc~0l^?J?sCySDag)-bzc0ty}8Cq2eNzk5mhN6RW0 zXa?}YUo`gbozj<-Ie}9Zfg>rc0I9t4eQJ5BE9GddS2pRp@Diux<0fvK&0e72?2abw z%dwD+ZCfg3#0Sh}E1XY9 zO+%kR68?BJXyS1y>Ai36sC#onetQenRPy+m-`x>0#Lqs_|JYdkB)cKP%#Ik)T~LZC z%sQS;t(O6caEhlTJyGuY3Qu6}@+>VeZel2?pE3xyWxUP`H1h96BrF|qT`C+SK*0am zx~TTt13Eblzt+g20T2D#p91&o1OD~RTvMQ?AtjHnLe3)N>2h3LXgfk72ZZ^8f9>Gf zk=1G&9RGgXh&iZ!VjMn|D{hS!8hLmfD@V`c?H4;EnW5{26^(%y?wP74Y-&|I> zH+(DZD%|WQ&(hinrR;B>#GT`CV_V4tge$P(cis!yndL)?qOT+fw#PsmiL%@mv~IEt zzEGJw#5L)zBmw%uH?I+imFABsh?$-c#u;i3iFf%mj(O2mMJgPA0X19}-~_9Js3297 zFpD~i?kPB^ADb>E@BTIMt)^oTUXvQl?@ujC2AB@bWGQ<1+FKO~>;o2I2H1z=LoF9) z;=slJ*qYOhFz~^rDy1;%F9tw${ZR65r4m1jLlf_54J%eu(h*Os`DvJ0k92YAXaOE3yg zSaiEX?vdV#$-51E=b%-AnYXdFEuQPsd7kJSVl-z(f=P5D>A!JW%P6_l~^n3 zDr>|gCY-T$tZP^E{*~SR#N`6eGP!FX$vIUu*6Vq{0^^w+t(@lfxQTeKppb`kT;?P<)cVuIveBQLN5659^97|h`pc=)-@vh<)cE$F7xkMu;p#N?j`Z@~2Y;K~AN0)_4NT->idyzRBMz z)GF5GGWQ)?ur|lM--f5{nu5Z3a##I7ZJs_0Q@-8pHG0K~cjg{dtM{5D4&_7f4)E_| zm@pG_96JHisk44CHoVZ%5%tJ$y8(i6O8obO$rp-1kbYeG7o$yEZM%M;^(2{IE$>Rn zhEw$Lh{)_teE(XShVnf0*kGFX<3~#OAo3HZ@NQ3cqAs`3;`;*AqDZj(g+w1fiq)@F zNss*c;K_%gi+en%%NmhVi-#1sJaLovI8;YoATu^LWf(B7L@B*{<=z3BvPGVmqW~Lu z(OQ!1a0p~`K+s&l%p@-^<&?+KX)f7+?^XIHSgQm)f>`s|NZ{iOI-UuF|Evx2L$RV~ zxKY4t_q$+iU5b#Q9_Tv%hfNAf@bibTEBM5ApYpOsFxE2R-XLC9LwyAQnLXD;8-|Wk z@O}aZm_DL5KWOitwt(08qPR@6TqwMsbtUi0+UNmL^=Oy?`yO%kIVcn=J+w&KY<&h_Ws*(y-ajqauPfOAN7NPbw@05|oTs&E?&5 zX_(t!NV#XCntTNEyeHj<`7%%$EYDCr{9VAT^{3PVAfBLcr>C={<(`V~@qi&m2wy|G z^%o0(r4cj_5*rd9xcN5AIq^%Z6$gFZK`u=fWw56_RXOZqFs^jkT>s|)ca%ZSv3?-g z+293DkjppdDh%tTWe&ofw&+g>;oi_O($HX4)FMb)K@z!+_C?F(!9l<0b|k9($ZvHYW8XYQ&|!34^7&c5rdk+-%O`5-&|VzKM0OAGBS_- z>&LptO6e<4g~deD&*}j)zSB&j5etNfY2)PTrV}0T{Qs$!48a@qL)-(c?_ZWoj91Eb z6k6MYz+ZDYKR-3ktFCU0!F|$P5qeM!KinL${0p-w|0xQdhW;CN?j7)6d3Esi^#XYD z6T3uszfyX1-Fanub}>_!0+Bm1chytgfhm^O9XXP#mcBz7uRBNiTCbiTf2NCG$a_qn&+=MD|4Y5(CInR;6oF86KUA`ux;&Xq`Z@rA~a)jJ^D^r zu^_F_Z57e|>es9gmD11Qb)J9@|Km@E&nJ>id1r;>M>E^D?L|;o z#L=_r32#b`O&&E|d2CEL6<40kwP-iiN4=tI8)+q?+`ad1-pr?)kQ4jU)~XpW+B0d< zGU0PdmRzt)HI7wMp6>oR|r{wg>X|ZbET2x&{+_A=IxXcOd$0FeIUT$Z~A{ z#N_^DO%@Jqa7UmZ_M{tje35DgriY=>`v}tGl@5Y%VPx;TP}}4k_*J-gL^lt0^ft=8XZ4Rsw3feSqx!mbSr}v+qW0| zrKYu$FCE>!t-ON-+u)!WkY6;dfu1C%m==ZcSnVx~ z_S7#%k$}#w<&Q+gWY2(AQtT5VxpiB_4g6}1U*%=0{9PXx6QwX&@v<} z&GrS8HnTxsv;-4Zw0?t`&XT>8RLj0-vIPi3&>LX!t^@3yTYpVzBs`bsc%0CO;0L^h zie9G83H<$`Wzr&I48B)ww^pH>!;aDuY#fME^G0$(VPIeO*G!o! zH_ zTYfGxL{>}5_Y)UI_b?D6*ODz#10Mpl{mb$U;E05jqdAWX>#@?BbI8I9q|q?e*Zd8_ zs+dy&6nmm&E$O)=4p$Ctq(&~ZibGrFrhY4blRfk#C1A2{Sxk!&TyJOm&%C~P(3NO9 zDQ$O}h2rQL4gnDHRk4~EZtaPa#sN#G!#4uC+b=`f1DnF3++3-40;l?)Mv;Iaz9h%_ zBzYZo`tEH`P7UIn+ekY_hF>R3LYSq)&cJFkJT@QS$Ji?dt*ypI_KN@eIv@pMu&B>e z>OI{*s;;MzO4V#D?*G}YhsSG9i$iK(EEwBSl-(~A5Ed|ltB%8-OT56KWn}zCHF75y zd{F|V5d?;$&t7*X>-v~Uehi|43i?Wt49>GI1YJ@|gc#x8Rd`bCQ{=HYK`&@=1)G=v z`IVOcxue6oOv0@51KhIff9JKHIY!Ss{7 zJNh|9L_U{W;hu9yC{#;9B21X+(?F7VC}dzVDb-`)@_O847BQr$PMZgwAfJkxaX#L$-0q%9b`gp{JoSB}l1Ugg1_`31n3_?YDd(Uku z%)Ip@M-$PH+?&@teSP5GyMu)@VDHm*WmC7Whfp6^uFSH4i*!sFry?#A^E$^GTtKj4 zm3%YN`F4*giC~+(80;ef(~FtQsYic61{?=k-6#m_$$7N!Cy5CO?Yj76KXQ3ZHRHDh zHrXjglZoNjD3I0Nt@SFCr$E8t1)#E6jGg|m!C?rCxw`sjEuKt2wdiE{_|;^w*TjZ> z!E}-2Mu%R^>&{C+0qn4t)MHC93Yrn+=k@RE!EfuL$UgMDy&#<+#$D*b@U*$_%ph}g zR5o^d;-vkf_t6xN99Qz%;10_cZ%SxTE;s=vCwFt8m)u_{3zf=X?C7;0yQQe)C7``_&~Teqe}nX zy0dUO$sid^0&UnzIFF+mRx9_QHH8y@q!Wh=w@Re;0*An?*j02sWB9D~lqea;R-DRd z^P$+u$u2cZ7AuAseJC15(1t!dPRdL+!k}K%4&Ea##fY-Z98b-X5RB;J?r0ttGQS16 z(o|jM6G`*WTSr{PoLvJBus7caS4HrWfJPv?A@kN<`q2MQOmeLPnWsCsDZhZu4>2Kr zH=c9@yLS1l7)TpDO!CWHM0We(`Pz!Ml&_dz4L$^vfmp*Ej3Mk0oR14K_TbfF-U$%h zhI7#jco6G3r1$jg2jZI6ZSx&r{f^l6JMdkr9%)Iul^h)cn%%POm1;Jj71C$>GgrCO zMM}2C`X6jyx)^a;TMo($e^j;ExACLSW)h7vTY}8?FzuU359Zz_Vzyll_QTsL*V=nV zU*KOK;lMmJ+Bu&&$`_!QKrVlqh1?+?gRq_>9Knpau;W^+JY%MXyD(jsxg%i?nw|tC z!Fk0KoFGa+RF%?QSwo*P{8#?4WM~F$4v_FTp=PjY9nQ+OpnRQ9T7*V+D$&p;#yP-o zk7~+q{2e%`51$j~685F-5P5^so9JAf z0W7n4yNgO*0@8eSlbw2BGjc6X6t`2OM>$&OxxJT7G=18;L(pjkXwk9yX}WE5`4HjR zJ>R=B$tDJ<_T$|cU2R8@%+Mph$~)EOd#h*|m3J0BQDxu+f5X51bkp@z zR;Qh0VmQVdy}Z8)<9&DQ0i#<~id>?p5|S`4D;e+KyAQWb=uX{xt!p{GJ=oolm_%Vu0Gy7{a_3Y*gRSN$QxaMpj+vxZk%gAVj4E{ZJtX79U%;Ea>OWE$tmX>D-?!a)WLZ2s1ekjOJL?()*lJLFHNrS zolU~+8^Nu}XPj$bx8c{H(%v@JfLi^5wNYVf&U}a3FoTh~`NLa+-B*HgHUX>TbndKi zX*|&yiXSnIahIQ)I{2v1U9d&%1@@dxU<+}^B)s7cHYLLiD-2yhbi>nY z%WlN^1|HiVzj)WwmH4+ehlPdZCAA3-iW&@D>(NyEE#T+!ZP73vlu*1aQjiPf2a#kS zD?b=}Fi?1k0&Km*b`Jr$@DmzDr!O8+N4j99_z1LJ%(kU zSjmfWJjv>7wbj?8eThIj$-b2jlA0WGp$Enrf2_&^1>Pk$P}Ng?e^dCiI`>Pp;$(G+ z9Qidl%ZxBOPHKCmO{sLdc3IbmS21G2EU(l_pGlFNm^h?TCL_{W?eKa=A@4orx-{oovg;MkR6X|(H(WC#(*IuCVb8hLYP91M$UsxugaN zxo0Xv@FA_vMo)a}&U9kli8a$jAFXM}&zzN)J9^F>_%dS)*_3?*q=P!$t{l{UERznp z+0b}u((mz@omNp{TzXh3(SlipGCh8=APU3)-GmX`2-@uNfx?+>}iXygp9Vo|R&M9ebfK z;X*6p$X{#c_V6JJjJ!m1D*AeXw?xxV8WqR=T;30@pC{~R)MLrQ8$;%jaZr@7_;_$7 zx-uHurx7DFj>!|&y5N5^BU+R2QCOk$j-nE^%z`xmVu%TsFrw}NQd9`5mq%Iex{jx( zpOZ+Eana>bTMW%0|O(9B8aXrE=osl=ItK$?`3a#j^m{~`=cUV zeCfp#g`teM2+Q`v&@j#q22?nbId;3u-Mjs<_l2J(oZSW!oKAB2QW4ZCesFBnq^#$g zfBxqy0vFf!I+8ZqX{RPmY5G0>5aK_+5fe5+LxnZ5n9n<1`UM=i+Gj^Arnmdn-$qpGkB{rx{~9O; zNk59Q+PkP@Z7yDBE^y#|M*Jb3u-*A{^x<%%Mh2xTJ+=Nh1bmn+b}J6?Xo){l)Yjl- z%9smTo`g@ip19`lc#TJ`sYMhU{ofyY8A~niBTt<4hoYYwN3J!`;mn*Zf1~#t`=PSd zCYNS%{b*z_PLJE8K)n8+*RQVU$GfF&Dk55^JZDeO9Fi>vwks{}e@qNo#XnHX6gPKH zC|iTOS<)D{H*fnbUB|PQpL(9~MR;NBO&mFD5nM{#j37O0%HXgW{F7=L=$JZw6eaRZ@6|{R+sN?&BZ^IOICNRwMS;3hn9?aE-_Fmvg_6)@I)k4#O9uv9X>2j@CGbUMwfG&C4`27h1CzQ zbG8pHqi={-vA(e{@P6e>g~+#&pT^lY*NvQckIrv&y64R|nvaC7#@-!_izT~@;z7W6 zCl;n!ua_cZJ&OlSy91BO3P_7Gjv7DmNzbm%4(%t$C5Y2UvE}^igk9FK1*RkI;Yt-?pZZc)ATGO0x&tpPq79hn5| z>+U|e8z$|iFj->zZB-Ss`VHe1)GbSx<;24hHWT7#z`ND0m1(58|2fvPq7QPgRG2kA zy7}#18J{Pl(y@7n8_ek#@>-tQaH96Q{S~ZiijtvLJ&(3M>W;%^cXG)BG6iDY))?(T+&kV?RaQeG=&jlqc zos)?D*i+zRCuQae*=B*b69o@ZVniANM=By}eUxpDrPGrun%uOs2D++@a-TDoF}%T< zgf~7d(dICFETqwBH|V68?hbVjhQWerz~hxzE|y`bxQH3f}Zu&1ubx zA}YUoJcPf)3Tv?654>Kb2usdWRFYoShF_zWjYO zLTsljQjcx&6yxae6qEeBarqiO2~|Hm_Nk@kl8aW%Az-jXPH^LaXgc=O*8P^`b79*w zWzX=;&=4K|#gIqjTZRAe-ZAVsiJSZ5XXDvJH>Hbdo`YHp9yVu)dFD|KDl=^JJXbax zW&?@FJlAk?6N+c&GtJQ9&JRTy7*MFMDVw$9E*E7cPNN@tujkko3g4yBypa?}+!9XN zZ#IWhiHe-O9A^A1A!1FrYd818IOWsjm$UO0zcYez(sDUUh-8CSi=FLznn$cI{&}UV z)EiQjRoH2LEKAW!hdor)>OS8o55~(P&B6`lxuC!&ha0iv_iD-KRg3Q@CW_j(kAeaN zZx1JiqczNeQZ}{Hf!Ebi%+(8ra(|i6AO|Tu$yJj_cQ@I?DT4)(pSW}4T?%D#^2%Dp z1M%FCBd^hi+v@Kwpx4NF^tvO>90ZBn*;WkS)43Z94y9^`(4S*xZMpBbuTsX(? zwhqBovx0{S_N6WOrG+vi(HCnfN-9ySZCqT-13fBUA;Ir3PAPnrmpNkc6#NQm@5BaF zWqJC|hD(h`p224wWA!6)n!Z}#&**0&G-=rpLMNW0CS$w&Z z!l$%7Ynk8{`SD=aszWBS7;!E7cqX)|&BClW!24vc6Kp-530O$Et~xv8XwSJ>YEb*l zsAWoT8VNsjTdvBGW%m29L=V-71T6?gB|{Qgw!Dj9s_`^8kJ<#$cbFsGRPyt#tCGnV z*#Gs*E|0&Z7yW&rTVi#n<~|&nAJZ4Wk`cRkB_Id$5D7rkF(_wN(r3G;?1$HzEirZ8 zkDN^lJ1;yH2sX~Hl1vIml?S!!8r!8&_cycP%PV%ypI-hUa zZ}J3>ftm8jGsnjL!;9$qE_=12Cr$WstzY{vULlzKg(n!9RLt6N$k(!pCgult*>NT+}e1ToZTZFivX13kUNOTx8A(+G*o8N1P-BNFsWl32uHb3#3=eVcg z>*cugg`F78j*uJAs}wwf-pz_O3Jg=7o@Kz2bBLE>46`<=*pWgiJ~N)n7Xs#o9{0Uk zKWbvU6ZD2rm67c82fUT93EH13Wsfb09`FR)%-+Ri5nH(sxMA?I@68-0Q1D~8|8}2m z31;SG?Ex;!kvm}!lkazYObjK`TU zcWu#E7>rB#*gHKNaV<)=74>h3Om~4YSQSb)CSnrean|!lxP+!>Q4E`fxO>1}I9eb^ zMtr;5M?``y%8p8&(-Oa<4-azeWG>9LBCl{1P$U~^_ut_Yadg(3HwDqTxRu3Jn19>~ zs^K|0O+{ZKG1b9DOuKcT@qjdsWzoV8N$E(uU|M3Kc05aeh+*i$G|q6|EoLm3r(A0Kc*jOBPd$4BklZkO6UpCnA5n9W}6z zm%*X6^HwhBb%Xe^4eZvB*I((0A05Xh!~g3tTdNkZ4t>)zS+zb}+bR^SgtLB7@-zdl zvbO?PnTY*^i)R@-j#(6#ENaByLOF_281%3Wq6>e#04+s?>He@m$}XAG;O)eWj<= z+fa3ldcJP(bl9$mOId1RYj<{|;>7!yXFNS^>d`=a_&<54JHFX_4wJKRUJU;|uJqYHi28K?C*7sgm4>-rVPf!)8A7 zes)&H9wMUY5^q+cGb8ia28+vuooLC5Ko@c;yebx&O ze}yj^-7ENp1=ia|;^|cwL0DxGZN)Y!tXD>SSM1}Q!QzDZko)3m?N6&WgC>zbGr3O~ zr`dGn>*+PWIg4@i?eG1+cezuE-X~Xb)5v*hcfv&=-MSE4r^T&@w>P=^E|z$89bXPk zfkTW!hl8_Mzx0KLMD3d&J^WBWZuZ6IUrfQCG^2$7BDf8{qm|D1kBo1GZHnJ*%Ghkw zwOPm${I9}MEf#fN*5O;2a2|4(x}!QSvZbF*tQ2dzXe8n$J)P|1x%2NES#-qyt>79& zb)5w0d5rQRJV{UI1UZs)TX)`@t=$sHJB=@Rl=9`gzTp}y?z(i5Z%neTrxiXl9Cdih zJCbAdy}KG@apav;xK5)+Z=5gAdMI42UD+xdPJb2uAl;D(b@VJJqbXZPT2R*6?%ul#~6RI4A$T4%%ZdsiNqmh76+=?Pg8cd&z- z7lXu!7C3NvepM(SN%hA*KCutN?jIn-5jtyI86?{(Nlp#; z_|fa?P?~7YJ(q=htz#(1)?Y`g!C&DKP6tp{Cmsa3EoeFYKC(#f`R3v4)~knSVFZ;f z&BD0t1MFTgj&|XzgOmia^i%F*Yah{WXxvr77(yNfSZmk`t6pqC4q z=w3*~)eKk~7~1|FV8J*(ayV?u?#4ztxQhDR{Yv{2XYfUAWBu#_gEXyt$E}5vH*}&& z)CP#hHSFi8hLc7AM7l!hgA$qOHa=+Z{(8z_Dpb|0fkUHEibJo>y zBt6^P_w=hKHujb3|9f%t5ZYGyU0)}8DSWgOpvAW`ERbn;FWG*uXy(&67BK+^UkJtUWci*&|1d?+Fop(+a?7AF)-CL$ zh;U`;z?UOhppWN7h0K!Qko{1*wBuKG>{Da!t)gYW(dKPPJfCtiKpfVWZ~yJn{`(p# zBnH=raL!F$Zs^HTMuEXXI&-^mnq<4sJLru!jnjO^hv{W$R8rkHhWvZ&np9T4YREqz z3N{0-@)x&7*$=to+YKkPjqv^3Gm2-26%dJd%R1Z%IU4tY7Rki1@wk(Pbx zyyB~DiaU2Sj0KLe1-+fWN}QgRM6RGetzdz={`R6Z0X8moe%jI15bjqYtTM#l6EuQ% zL%fGr^6JZAYWW*Q6VHzRUbAP^fgrIWXU%=~8NGBaS?l5T(x55Lr&O;M)h)hW$d6H? z{QPOyFrOorBNo@lk~O%HZJV0h{<`_R;<)%;K>CYwoA+T}54Rd|UNum%x5% zC7KQ{(#*QTi*!MY5TNCYTv?*c_S!|!1m=73wuy%u_f=Ai2Jy$mp81#kGU72S@>HNi zM5%CgO!thfIgcAx1S2!|O}C_i*|E?V_2p>Y!O26VQ2PD^U#sPQsQsq~&U$SnZc#-! zcn-wlr52$f?HR{sOm@$F~I3(q0Z{GdGz^%jQ7Vj_UnAk;qcJH4?MvlI+Yz~sv z54U=-2RrxP)9BTXOnhmqr=y@ZoT$i=;8xT$5OuBBw{Pc)s3zYvK|B>bPSyoXvupd+ zekVYbTEGP$Al!ein4EQQT4DW_V6oDN>3X5dYf-s2OUA9qDhNbEM=OqVj~cAX3w+;oHUo-?xg`KyQVx98AL3bu$>CYZ1%ih+=xxNWj{UycJxf;z(Q(P&TR}?wzsyn=RqU@V}UP#2F|4aWp-eV%F{@7(`>`%a00?Rtb2YdgV%ilBCT44Q-Sv%A#2 z%MP5qhB_G~-v<0IC3dHpnb-~Gau~A0JDPgShSkoU{mqTbdv9SBU0ZCgs>cc6-*!ka z5ito4m%&ydE+wTruDqY_E<;}>J)l&r&MOb8ap`*-WT^WT-NQGHgp#7=!z9%a9w#ImNr7T=3h zx;ih*uGsg6*}qi&mL8q|V;tULC-!Ipwwy~)X>q1naur*4ZQ1i19EzM?dV>3!k{q1= zML`D(k082wSkI&!wz?8}2cGDMCDt}9E7Kz9aE1|-q&C6DL&V?$I+*K`7He4BI}FKHJp4C(hS-fSc%&> zv)G(|ORsf!{UYByJuU-PlSscv!>aOI{@TMIWcp(7s;_4W83yGTCO+=4bVmm>ue-xPD5?;YZX4Hix*ey_5x zE$ORjEe9-y*YY^@`}U(&-5z;B1sl_;Zl&f~RQK7r;kdk(u54?*+~=@KU6Yg5_q&ew z%)iG~{@c3+e|O)nBr9cJIg)o4^Hlf`c%niH8prMB{xxz|Cw3fB-{3%`$Q}p=XFTA2 zIlD#@9NqXt@F6d>=DuV2l`pDD9+*%dtny*m$^%~vF0YXlm-F%zTaw)^6%n&{h{zXW zBXRfht!{8s*iT^Ue-nt?LHwE0Q=*+@PJv7W$F$Yr=EG^gZf^$I;}o>Hf0X%GJIdWX zzS`~KvQTj<>K#-Nq<46D!n}F1w&|IY?AEpN9(zg%mRA%`yl}APVPOf`25?+K@2_dG zXdr((`>txBP{6M!`ijd-+@s|TE%S+gxg(ryRj*k!)g~&gfFG8mD7yJ9`{E2@yGHIL_} z;kj^sK7Ue#3Yo9-%PgWP_`X}v=Dl+AXFf%3pzBz{5akb#AlHVsUI2^33BHzkw;p2# z8=)wx%A?z&E?#UwS%=&>#8-2RxsoUb$@&w-X}&AwTaGX9+kQ?LVfCY+^m1y{$&hUS z@QYKlAYV(sRNbrR;-T{oj1xd+-@;Z1?gElCt5<(l9@>4gNk$mh3}UO>-1e=^c+6#e z9wBEV;ZtoXnpSvSZ5A%WYs-f?+3fe465hCe{X&_kK%n#+q1d-10XoCOek^T#;u@kl z0>Y=HqN-Yt3H7$Lym~T_8*`aj>Ix+$h~IC_Q`i(uiRWv-K(_IT2{QIau;uZSd{&Fo zG@e0&VOV2=L=wQJ;n#Y_?_P?rF1`eHETBob_Nwo#xQCoILxg+W77T`e!tcyaI4h`f z%2SkE7bn^dqz|$hH@-{V_A4Kf?oqSNKe-khdzy!lMkqfT*)v8Ol7Y)dt?V*v-yQ?I zSI-zVkHRK;?61pFcCcTqWD`xFnJzWf8X@hy4Ts)9yc6bEDNGK>8JpiSs$#EA~Mi-hZ!&t+HFrMR|!>!P!5o`0GvH2D%u$NqU5^!JV zk&%-ER_zk1*W}A#OgejA*mBMSkNhZnU3>L~=HU1Ur-^j= zZ%=g_6r2GYPdPEkFIWDF8sw|?AU|+z@xc~t`DbHN?#X$hKz;p*1nIHnmuVE?|7O#f9ID&mXTN672;f5kLC!jrrwKbCZ@QmJesK zoh9w0@V`*D*uwyT^EFAY8mUeZrsq#ODC~n!<|1+q?}nJ6t=d2ZV$xdJwXLBsgf}kJ#qo(z!KAe1@z;~1wfyeE8t91^ORCe(V)q3fmf~%HnB9@xVy^$1 zi1E5UhE(bS6f@*ojbuPL{7gyD2WFEDUKzXLb;lcpX46vaHv)A8hiPc|%TVIi(1acS zfR%=^R4}KxoBN@U7B_2G`kcnZQA(}w5r&s9TlM}b{`kONqkNHF=*~0?e%(>;3nJvh zS*M&5RfQprHjyQCaJveqv{Sb6k3%sE-i}I7@~iUkWBg3rDtL9!ERg0}%j#hMrt&d2b;*+TgeR`Pj4XT%Z@!iJ2N+J^WDHOl{4| zEbe9!;tDLBBKV~KbBSS^}xyixP`Ex54_mSGe zi1N86-jw~n?}yuSZI5McrHP2B`ZnHU1r}%L?4xE@C^&xot_f445wbPbYdD9rk$E4e zrNNnsMF;oO!yJt!`ykZLHWWV{L7E%fn&5GX2Jq*tXPSe?F(?Ud^i4gFnN4f+4c~y1 zW~Hop>OGBOV!2{y$wl?|5+XnTifHgY z@>^L_mA~)$yDBZ zC;O{+m>$t71U0~gz*&ieKTne`UYxwJ@O*)x%pavc#mSou=9WhSIKOGrKWHMnAZ@@l zwYX!Q%fz2@4yGb=ZYXjnc!E#YBmbMf`}*7%wPTPK*ZaP_UbdLH-*m5r z1}9>z^sBD9S#GR9(G8$NjgGbN&rlrydDBic%QqEM+U|72%UqOy&ybEVgd0$oUZt#W z>)hXfen-bH8}8SwM!$Qj%@2lxGMB&CyWdBR}kqCCg&&ka1vobO9nKWcd9#DOIYwvF^bo)Mt#j8C9XP`Z>g!v3}= zczU2m9-2?PrKk}buJtl^rT3=66pAOEzKP}cFVTl925^5TQLZwF&UE{M>)WJlPRxe8vd+=>94q^+inw+*}VBJq`h$Al0}Ts(4?SS&wtQ`xc+BdFFv?wf_=JqCJoP-U8ll;S+AQ}3KPQ5R-5KSTurxk5U zPCr6R1o$T3WzII&lO>wscsQ1a>I0WT{>Z8cL!&{H4SDVUo^{5*z~&1f63PbW_R00H zETuU%M7(0p;z$+2>!^`IO#ukp*3@xeN36|n`yH&cMfSt2=yFJ<2q$c~8SFB8`8#== zkMyLxrr98r2=y%K$0b9~^WmCRtT?XNWkyrUC3lx+IAm&wg{W~!M=!>SBay4$0Nw@M z6n9CMr(47^nLL3x`8lGYvEm?i64X?jSiYrp9=bw@C=IDRwV@}JB8)8%9j1sijeQ*x8VIM<=PO(?#=iAdhH0HV#BSkvEADE zlZL-2#xw9`#q36swoGIZWWBS3$URt3X0+Zc{m@bJ`s9!u>(QvapZ*HVt;v^t>ERQ=(D13dS+yU~ zq^YB@i;vV7P8@$7DzF{MS4{350rU~Y(Sy$fK{o<3cZe4A;5pF$H9vCtd2&x0N|lD& zdukm=aNegcWZwGvimr2F5|co6WxWKB=?eP3(&VToslT72hBGJeX>!365gYI!Y8!I89k@KG48{ z(8N;3aG*%m$fr`TxLnR;hD)FJiVl>&ad&sqrp4(+6~<_A=huORVETKSE4J{6ts^h! zpW?W*xOyO0b-py5om`C0Cc9>t^Z`4_Q&Gv<&IpKX@B$UaMp`bCa9=JZ0504A3w|(m zQvKAS-n^9QFYdrzw{AWC1}DxZl3y7!24PQRoYBDfU6WT1u#ttNw;mS1-I5*G0eg+3 zfnnOf;(ASw{7l4Du175yLlsJYO$}|s<RddquG^ORaWv*!~m0<;8_1$#mc3X!P(XG~v^UaHYEBr7eY)pT^# zs&JBS=h|_V;MxLMth}I87=u1+AF(YwtjTb$T9!3s?TzB#sp@-9j0S>}F8iEjcl!Sp z59ce3{|U3%hYu?Sd@Nd<6g)MLF1lXdpu3@~{c}@yuJ5LopVzf=f_G7e-h1-sPXCai z=c!xEEz?1}hz@cBgg(Iwyo(?^Db5nod`25vt3{d~NqYfMwaL=&Qb(i>3%%M6{ z+W6`!;S?a<&bFiGkx8yg{Y6=zHF_&;%zaA}$)j!x30`39Ss!#`?U_L#9TawvR-`fJ z!{>KX_zej5O*=nV^sG(US9Jz`n9e)!FmLtyo$HS8wS*mEF|`x(EZC}LzkqHpSbFWc zFJMNG;DCLFe_F9VM;*+|M_2*|j-i{9yCQ9N)j3p*YBn@_*j-_MIzK|f^m#`%|z!MaE zA;HZaI`t~?83lI4*u?U-nmh)&gevmFdG;GqVgEd8=rPP&N{JSBVr3N)CVj&vqA zOpTu3JN!k^LQUSt(*9DAHObsY#1w)Hg-Po znp6Uqsn3yv5`!Hl_rP&&s=^$*oBk?G#P@)9-?6m8p%YR`BBEWz=R}N6vQ5&jdJK3v z<CqeS+teVQiz7VR=V649$IB{a02Pw_)5_XQAJStq-{ zV@#1ND-l%ueC4xwT!{}-go|N`g}##3=;JUPJ zt&n)kDh7la$SuT>RP&g$b`gmn1J;YgTw8NMk>JUHoA?dnTsN|kotG^{+rP%#4$YDX z?VPxcbRtLU?*2D8`x#f^V%Ey$TpdjACvPiNb2%Z+P8!Xiqk+7nK zBNEA&+N(y(I^xb3eK@3kWCbo!B(CF5$S#QmFk$?R=XYmm^B_J?I$qD3Iy#bb&5_Z& z$Skr-Awc?i>J?q>YLhQUb{|0EGA_Avu*gN&W%$lCH0F(I**=BNwT?%04tBpghB*d^ z&I(bnL{r0<%ss2ve@YgG)gw?7v$n=cr3%(ijXEOf562#E^Q(JN81l{$1ZI;R2_UakC4~6aCykDr62{Ts z7?1$&S{Hz)vDXBiS>K9|f0tX#Rr`$NX~CV}ls)&XZSoKE`2eKN)V_Pq@p!F(GMmiu zvFRav%r;Dq8@2eMjMe^)SOvhgL3#Xf*1HKah+O$&r457MIUzyh=HnMlpbZ>X(GsO- z`UD7k5zun;kBju$qwNnE<>a+2lKnl2JB5@JV*J)lb9$6)@6sV$3d1DvM9L2$FC^9l z%Ex^j8XDotifW7&G@)8XdBe3rkLH>Z?>jVVN-h90@cCS!3gjD3;?TyHUd8h`8PA<= zTk9`oQK0!nt1LZH=FsO>$uXF%uH zd3lSFVApSSS}e7f6@%^J`B;YCTge0j6;SSGPucf}vl(wcE{8_KkF)kJLdiV@IgAf1 zNz9VostVQ7zfmA?Zo8m8 z+3Ztre$>=i;!xM=6d||o&t|a`rVG|PjJILj^ba=J((;0uB&cdB$*8C(Z(Q#1H>H4m zwUE%*k+k{b0U~xZa5HmIZRS&0A-)PU9#A;ZQaujiZhs0gmfJOlZN71l)RZ=;p@dw0 zJ7`Axff*udp0Db(-A&3n-Q8m*DKlH9&lq5k-Km9VX;T&LrVFDFphPq!p?7^b!Ee@d_4Xgi&G>T2$F8E_|QZeD#x3&!UKK}LQ7BMS2Maf0+@O~ z2e=4uLcXDL4SkPcYLBO#e{zV~Bf$!he|cDIcOT9k7%mT;PIYKb9x&BAzC86_&*3Mg z3sYKmD8*O%VsFU7A!WdHhw{!#r5s*)oRz&c>TOzD%wFJNY<-gB{uk@DkulxkPgy23 zOB*10NIKbOA{DgTbwn;Jrls`mk=nz?$d7^1Nh~#50@d?jY~*nBP$0TxpnVq7<+b#NghsKjfm{<5jYLuImqjSnY$Hz2}#jY-S7G%$TxQa zx=peV0frJ#E^WR$4MT;Ab07Vl{=l}I^J$E&(yHCw_k_T~hktLC%P-xLQ_In#vVeE)ZGrTMf0#O3pq34a*(l`Gs5k7SuLH z*7MzT=9K}XU2(shs&r8>L%7w5XRiS#)NZ}UNNYF29@Vsuxr!M!{u4Q85pGC?9*+Og zbWsd@cS|+SHe2veSC*k=uB!MS!=md$e|NxZPzAy#Si}I?1_-7)B|~E>4(SI?h1tTv zizYXW#I8t}pdzespbTRUGNJ&5_!H3R*q8U% zd!4oxy=a-3@9ZAuERw@nbzGUPc%-0gD!MLIgKpc`pfZh{3Z4J5 zKP@2O&)k@9_tUT+d6ku{iZpF2{DMR!_a+TDHU%0XgqHbx8%uI<&Xv!sNa9~sBv+%2 z;k~%s;FnU~iwp{SF{Cgztb*3#c#sdbb4lqX~9qx6kj%sgj~q`h{rE9Uff!{UR^(LDGWoeR>$x6|py z&-LM4;zacN0d)&D3;N?iJr$AOBKY&7_{aCI?><(DSq?iq`HPt=ZvG)x#Hu&@S9nFz zT#rqYhPm9%#q*PPKZE@-Tv&kMt})2VAGeey7R-FV5yX+E`l***K{C2LCG<8Te&?*F z(j^qn$ZkhIx0F_ALaAn*c)ns2UDwpaGAPfmDs05us_Nksu?>iIluU@T%fO4BBRLx9 zR#FU;gKWajwKB*SO0M3ohWF!*=&i{V^w`WZG-wr?<>?}Wr#$vPT#qo145?_1R9~C? zG7KAj+gHQsf|q%4cC*hU=k$Fxc%X{R$?;RL@-b__h7I`DVB!v%@Aj>Q!JO2R&CIcldFOJa5u07QOE}C3j0fWtE*YLv{cN@_%r4-dSa*m zJBW?b?}u!UIAND`UjFXDX{AD$JPlgPvw`MEC{mM{?jeEBjx@}2rhAvkLbNy40si1d zg^Fjl@e!HOq8M$EeSs?`xIZ%Ou*0PY2VkV;Mn}m7lgWa&cg;VJx{7GJHz=JDBwHC^hXeB}&K*gf^p5&w zs%AbRp0V~P*VIY8Nv05Ud%P=P&DnANOb=U!7i5H9lO0WY31&HFJUtsu z=r}5;g_1ZengA+CPk|sZ6HwVG{tf=T^WH!ENN~pd(y!Ry{%2kDkKYu}c&e1^GlsJ; zm)NV~xqr_dKLuU!AZ!SiR<`NKU+{nNcdd?`HqZ=rkl3Aa~x zy!|@dz?Ls1l4hm#Vek}J6w6~Hw?gCA@5QE+3Y*4@8M*4!fBGN%DYI%R7%ZJ^{;_uP zxqgbJASvvg_$H)HzXaNr8GkslPg@W)wMvJ0f}vO9YsFVZ54pZL8<^y!$Q&MBNcEQL zqfwON)wtYZ#p{pMFY;~kqVKXo4{j3PdoM*~#{9?n)Y*Wu76YxOunz~hev3*GHg-xY zfM7lx8>fryw;oM}QVvmge=f&c@-54oHeCn%_~nrdZCc34Xoh#^;8@PYcS9=SyE#e+_WST(OPw!|T375{;Rm^ek>!16I8f;+C~%LbxdQ=Z3&kXxk#yY>b*nCJ z7ID8g%c{pDe;_zxm&RKv3P~_z)idwBUUqBncKKawgOs6!fk^z_@ygZT_iM=Bo)Tt! zm3Kf`rKL0)`il;zHaM|AQUxW2Y{?V`^U02G^C~JVpU*@koJ#X5bjqbrIWf)bzP@y_ zlRw2vL*27Ut7l1TI!F}r_E!Db>)ZFLx-8}~KQxk>T^we9*XwU=&piccGIdL7!2$SW zh`I_siOaEu(7e?Puuo+SsbRhx6d^$y&&t=w3Q#;=Y+aUF(HkVQbL9qz7`07icRc38 z%cl+BzNNWa6YiAD-vw1}noY~2KmE>zdJxM6<<6)yv&T93IQTI$%o1fT55Y!87wVhe zPN4o!&i2;U(r4*Hs?xC+p)J5!=VXb5p}&5?iVOsm90))30$qLZ>_2`>l;ul`#Ls;9-><rEcA;;;$)%WBL9HL^{Ay^1I!o?@pz-^~3HIVq6GR`{rSyf69pnPcfs zieFq3mmpW*R@jeY<^)6y#oIyIOaCpxjs?KM$Do6L)aib?Y|@1Ju^~q zh9m`b!{UI4{eB$#Gurr=+2fV#B_{S%CGJ>98@G)T@at)b34BIDb{;U>!GgidW>gRp z|K{~;SQ&MgplG6kHWTMqk?gdce%L|sd4v^=@^DL^+cUOp5NENAC|;$#ay3VCzu$K6 zoqzNXZepmMP!<1UVfU53aHJT)pOlq^*s$ONa0oxU+64}Dp>~!9y|Z4BzZ(a_tT$j# z@zefBIIOLr1m9|)Y1Z=aujQ-m-XrQ_wBXIZHNG`k`#yplga%8fml?FA51~Fa)V@u1 z;}i7Hj}*uh>P1O{KJgT`Sqh+Uvbl&2DiLm|W# zS@+MOi8LO1DT-ZCn)qEJnxMPZU_EV>G&J%*W9M0WBQSQ>2;DKXR442GZJq2yrLM$y zaPJiXQ{ubQGQG1r3Nj$Nb}fGUp1JqXZzUBwc%GK#J_nU6C=Rovmikc_3!mJUYE#W! z;>6e;+k>_K@vgdDNuNprNR%h7PHQm&M!Vkso;r!g@8bps$ht2B0=mEPi78p_1yU$A zbx82uew7x_iq#>8WEkXl`nG*uX>UTCmwpdHu6=ZG;$x6-V9N_HXWl?H52gZViTxY- za}}ke?We}A7b$IMaUP<@)Cb@#k|&+Nh@ER|dlO;*jvD0;(!H{~@u^Z9}Zt@{I z5mF>md0JfX)DslK1kpS93!vl}VKy@MF$f;!+*g4L9I&agzOzYOM3;80 z-;9uAxz@14+VlOC_Q7lGNWW|{t?ncq>Frp_eX<@-Yy!51 zq!%Eun*{^*)8M?k+E<<_V*bjM{6Dray&c-SDM`{V3`L3OI=_&?4Ozc;e9aG3eQ;e&-YXQSzb2+ zWM76^^Z=K8h*ba_$8ylOFK#b>>OO0g;yXjAZVoZjC2aUg{b>xMA%z^qE8Z|U$-2dl zlMA>lzG&j2MW*1C24wfxS1c-YjJ@lx4zeCGu`d3=N%dA|=}e!3b{DjA@Kz~um;_c( z5(FUSDrIGte5OncpBozfS4~BwP4Z1oQnJ5=B1kE=( zI?+u5z0=vt~et_^m#@4c)s&R6qc4ZtqbG6rH)f2EReJWSli>TQz}s3phWQR#_mi^4VI

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk 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

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable/background.png b/hems_application/android/app/src/main/res/drawable/background.png new file mode 100644 index 0000000000000000000000000000000000000000..e893872e38149c40d334a814221eecf3f630d087 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*6yBWG>pWnk`QJhg56 RonJt422WQ%mvv4FO#sm!5extT literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable/icon_transparent.png b/hems_application/android/app/src/main/res/drawable/icon_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a82f70f41c4d8c264c7a877b370b67388f0c99 GIT binary patch literal 106450 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh 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

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk zOs{RtT_{;YD5iVfT3?aoZjmIESw<2K9sBUeLZ zP(i@mEsN22CG~X37&QemJ}I8@ffNrZIQW9@S-D7WHSsR(u+Z-Lek&!7zWz2pGX3`G zbmmSIlvT)*BAR(hdq~s>xMhGVISpuHb}%_^c!6nVu`kj;+1K9_yHO715%80fKz~64 z-2=bK0Oec|UxINGfgCsKa~sk?WdE4J2{uQWt8#xSh>~ZZ{t{Zq`AmZg`oCPk)Dn1z(6k-u?#HSlbe}$lwV% zyY6`{v0$?(5RBlfpi4f243G_x?k~P8;m7cnsdcoY8%yyq6AsMT3T>q~xiwgW9$oDu ztIbT6f<7M3)StimofW&I*PsErxm$h6FI_NYpq`PQ4~iZ|jeu%qy(Ud%{Xd_;0Pz!S zFI`!ESKDHI;0vFo2w$bSL;klE`#b4t43@9l(oaDkWu1@rXc~6u0X*Hr!avgwZWcMX z0JHm3Mq7}1-`j(H$ru{F!~6NWUBg)D-KQ_~*TJUGk4ySnK@{)P zR$4>_5AZX8ipu8Zd=$C4@Ke0t|C&2+S_?|{th4wiaghC`z%?N^d)JZ{0+Cdv$hv%k zNwiW4&bYjEBIA3?)YmJZoPFY)5W8cO`{NK@xPf#T*m)${scpKfx7v2zkV1wj>-ZI( zpgntV#tO~f*cP3_a{UD0&jSF0M2{xw596z|p<@(EOF6+O7}!f?BZCV-^lDb* zncHRlt>5f_ApB3b=MUeF``!s;;O3y{CNsro}f+dgVKme{*U!uyVN1{=GY*GeKC0mg+ZRFz_L2xOQ>qAw62n2 zK!SVLH zX^DRGRWbMU0X=ABLSgf239P==_{bDk(QiMe=yYbuNT9Bv zFlEqM%`)ev#yco?cbBIKX@mT#K^KAk#$q50Dh^8!mBK*xK-J+8)>6cwqakT1DHE;l zcI6Jz#-o*iSPipam2H^ehn{-|t4^WGo4 zGGu>V@jT@v0O2x`TsmCZzi+%ky=R9tv}t|~5&W3+^+xH83fPQHv+~ZtpP}idQYHkp zCfx(x#0_r*L7|5=3tcZR(J_gkQpd70JxhFvB9aPp(;BUAa_{tjQ7IQse?5~9%Jz2H z=OM6Be(RDKEi3XFtV4iH_cO!%cLA>wowQ|Kc0ie)vrekdc>ZhJ8<%MAx{;}Fgmt>J zhNiEIWO*~(0{|0a zH)skQj*t9B4g$r4_7mnq&~ceUm`x@M&q)o|C9Yj9+W1uo<_yOG(j#X?oiuWD%?-EF z>V>04^s$Q@0iv6dGfeP~ZppF_QQCx&c)zlUINWayl{CMa!KM5Aok>`%6}a@7pV3D7 z6qE_Xh0iUGJkdga_!qe6dbd8C-5J~JHNxUgckTILB!=@BxH`2CT@EXZ`IxnSQ{wjb z%L;ULZuN^rddddF)T2$9J4=EU+ZFy*x=B`O{!jCHsHdcI;#RI_i4sl7&3&pRLE7zw zYVYO#O&$P2?)$N_sZ{Q65T;86-NU|6AR_}^Q2T*z!P7ye=X~Tklce8p=x|9yHPW|+ z?&^DFdY0-Hr%M`08d`>JwVn*?!P1vItts9Bm#XOT<#tD~YzFZS0s~*-we|pxnpRRe zB}!@I21TX?|Lr-e*TQncIlYz;@W3x3#o#g-h^>j8tSBt%vO@kr<%TH#-F740?SX>UTAnr_8eSY!gY%bBFS{B zQr-6oWdg2&-^%5;Y9|TgmV}Ci>>$!Rt2+U7wIfLEy&DTCi|UPSmGgc2?C53w|FR+HaJFx7K+8%ZkPXb9H}W3 zTY8euZCR<``-(#+3>5D*)n7-7cuPc~bmy!olXFgsIU-kGEq4?op1xy~Xv{`MkFB-V zhJZkvk>hm$?l-?0-sY_3Mc9#(ko)YJB2~xeRz4I@50A;?@ipM{`G?p^4Upx~2WI7I z4bST}-$0!Bu=WY!hi;!Eh55V1Z?AN$dR_s-H7D-X6MB+AfF!j) zaDG!!d$aMa)%${gsWiaf4PE?_R)1q(`#Vj`OKSY|LJ}}n=o(quwPDeMZ)PR~O@M^K zz-tbj`P;@hf{sCrA7Hw7+~6A>0%m-kXR%~JzHf{cAxEy4+^-L!IBJsjDs-IGBVrF{ zQ`SUtt5yF%I}C`fSiFiR(rEv&fm$#QSo(SCEouZRXZY)qh5K2l7Xgw(Nr$W}%g}A;8x$(yE zuh-|F`xNxGDb>!eSY*m*OC3wIpobhB$cw5N`P;T?LL9kc{>Q;#JSVG~k? z3I6vgN`BIhHig9!SHORy+oc&Mm>c&7g2XtY^cy7&ECmBMnUR`5`GouplUC&kd98HOr8lSszjNFE2~irn9hvbCS2H%2daEN@0b)#-fZ&7`5ZWfat|=v0 z(-}2lbdyb?sXUjF3w;dK%76V9sZagVHBGuAVQcR!T}7?G0OVUSu(aP; z$pT`d^??xoj<0Gm)b1N!T(hnMq2y5E49Sikxtf@LkkM~@vl()k%z{>oXEo zgw>_yLD!k592?JwbzeZL-u$0yU(=-pQo~S$cC746QmeHYaonz9`vMLe?~~6aknDIb$Jf%X(jFS|JxB)dzJGIN2m(Ggvhsd{ z!QT+9GiSvkr9YfCO3Yw8BD(pW;sBgT@`IVbcA2yvB^~iRn7&NyNB}~~8|3o?$Z^(P z@A^q`TspgMJxc+Q#+0`to9S^KBn|Cc>PLJb?}-J6r5e3~{2W%vBr!%Ne*V^$^!GGR zLUrMS+@mC`k{eUH`Y;+ozv`2`E@#xAOY!0DW|zMTTF+vuTYi|@n}XWJ5EQY2pQ_9C zNnL*sICliJKCo8|yIWt6Fe>t5v-_(1YBHN+{&AE;&rKY3RRx34$iG7p4Lxk}6(ncU z$ZtL5FzNn|Cy^o5(Rbm2E|0aamPt5THu*L!140W<@jOv_;Tqh-e9Egmj*;$rKP#4VYWzEuu7KkMWUDK#GC+x^9FYP!7j3+KOK}&l3l!Mz8XIo(Uz* ztVP$f$~LC-F0I&00L0#T z4kel#Zu+V6%w8JJ(-0h8fGUE3Q|*pP0>0oby@&<8kAbCktajV?thAP$9(GH>KfEQowJ zzECWPc!ci|LD1sfHk3dR2SN0K{q?$ZkRB+CBVlSu4vlN1Q+-@JZvbzX8ta=yCDcLA0eE^jZpoK*qvu6(b-&#jjn}F=2hBO zKVDLo!7ot+CKT@3WQvL9fNyo7p>;0BEw9CyHO*X2wdTq3|8;vVTUYP2E>3B7bwJm0 z%x&`J#qNqT@&Fd)L0fVF>eY$nvBW{OZLi&pUow_*eC5afziyA#w=l=**4#5YzNA$X zD+W@ca&Fs7zAf?!Q~4*q+G>L{|97u*CtkMnC4H0Uul~eUPF=-XR>e~IBh)pBiQAdj z@4MSWJSVp0mG(XKN?=xoq7ewbC6$ffKL#V_P}AK(NlfbQI71R8C@+P#fMIML}k{ zzCqS|EU@>OVS!0^v>Z$?JqA$eW%)`P3}hdk;Wjc^7mh15$+(_>oBO`^b8L za#Ri}-WI8$mFIOei7EoGv51NFn~O<2+BF?j7k93M@;xDn6#3Ve42(NXFW+kboRCdy zMvTQicB>0f9$oC8jWa`aQ(Xbh2mK1~GeSjes(tVfamN3v{Oz}lwPH9tz)?`OP}aUH zv53dqS-n9;SkxRWEXSG%Zn~uD6}l4I+O!#+7q3lx@!DQ6^h%zfGgE7)B zyXforE1^a%4MN== zJas*UzT}Q3ufuKh%LbS&w0VIAFZ-#!lCh5zfz<`77NC!#uw=1rL=_a^dAx|r2$Zg!@l^ZOTXs>dsKfxG{?5v};RYQrw z$&?=bst{0~9JHcvZE?|WKJ~b(14aAJeO|`GA5WYe)b;CS07QoatL=Qw{b@vz8M}H@ znnpe8hQjBWEjBaXK-KsP4#o^;#UFvq2>n@j4qy6Iv2KrgfHi3xq9ITThz(~@6zI-S zn@q)YHNV^zr2G({$0(f&0sRA7Wcfm_SVPP!7p=VzE_7Alefd-i5EIGRyW=VzX+-q+ zFflexK?kmHSi*NDgsJ$FtNRIAc{Y6s35SA$dqI_pR#cxK5|s zzELV19U^#0^?)b*>RuUTyE6IeB?Oa7O2q{edg!_C`MA1KT@WcUqQw}(kcEcFkF zSPkO(2MAR1iil2(wkQ2@;FXD%eF@=Z;$YH1flTo4NHpk6*j5|g;w+mmL{eU&q$2#Z zTe?rzdPrn@o*7D#eKW0_@DpVWF6ROkXOHn~s}vt1jNHagw#{R?i!8VgXJB$+6+oGu>n5L)GCCmM=Od zSeTv}+x`U$sF)^cz~tR^Ba8*c^{|4Zw9WzJ|L&ZDrF4779q!@++y%Gz_4&@Vk$+UC zp!-_`>a>YH|6rnJrCD#8JN|?3wAtN_j_$DqFq;lRUSP$+`~#k+Ek!O`LfMxGq}-eI z_{c;<-hub47JACbRu0_Mt`Dn_jF^9@B_((EmIO=SJFHq(1$9wWp#RoljjN^TspH&d zSQ{hkpXk?g;00FV;oT**F1O9$hVj_}ADKnNWwJO@!_ zkt}qGWrTxcYv585lw+bu0DY|svMB~`s>jG@%pt@Ot5X0VzZQh8!1+i}o9!F5<~XzK z#j@2)flc2e^-r!uUib?CI0)g(s5hl;L%u_v~VVB{+J=6W+tU(OudjA+Wd-xI+ zSlVt@b)9?<>muB$8z^C^A1SJ$0iWR$e~>!{h7&)l2o;Dd)!PBlNs~t-0o2BjCyUvK z^isgyv!1%m;tQH+v<&;7;m>8i2xNI!ev_je<;SIrP#;}w$jr z@>e#Y36`TCapul$y#-4`TZf5X9;n&12E=@RUbC%OIElGcTt6f4QGBH)d2fZT&#`j&$)P-}B5`9F4fEt=>D^V3`3tr687D4bq#Bf1lFJJpdovvs9?a95GbbgB8K8`kO9cWwPH>yJtRL z-rVMTmqDOBE`9nFg@dvXM*`Qm&w6NIzQ?P%!Roxmqt@f_dM1#_E-v z4R{zwy}!`3UQtE-Af0hXbvx*}80()~0ovQ|qEzhylG%L7Xp{|s7^bXcL%K($^-TX; zh@O0?QJ)s$rizKe(pW?l`#b~yB|13BL-T_fR`7)0!=``q; zA8*Af40U~N4fWuzy^qBFzn@2)rRmYj(9;d%;SmRIy+GDywDi1UCn+wD0a8ZWmr80q z0Zwp+pY&l#w9xUHl+!K%-qs2&w)0^ zyFMpXgherMf%h3ipM{plUi}DGR?y?Pik-Ch7Dmgfg2|zbq_p|i%UK)DA7){9v>og{ zsk7d8hjb~g7+wSMM|9#zvJa2OlUeGO*oNejeOLB&O*~Q|VSQ?bIX5GN?<4EQ>E>ry zA`pc~b#&3I-zDulj_&9=g15Cbki_jE*(^ehv~Q`kPt+TEq(P3v?#p+``S$c5x6`D6 zw3@$W7Z24!)#FarKaeJ*(;jUHmuF}>y&gdrpnoePJuKW(dZst0k0e^fL_+#(Gdf@v7KUD6JVNjrT6Qlz_=C@vgb8uGK@Nz4;DWeSo&RZ;x zGH0DkZNsU>NeE2+pl$|f1^xT!oQuAJ+lQ5Ccq!SnF0h~rj5GgH{%ojYrmPCHbU^oG zsSaqm;bn%QC2Zm`2Dsmv#gTpYKh+E*ugi6@b!wjymdm7~{#1{*4D?^t-IMjArHt1X zhu$?)2$+it8T{c6GYtD9Aw9~_(3Taajp#c?B3F*SwSQuuSFw-^KtXh3*TYMUagM$n zix^OiDO^LlNwj{Dx!Ln3{omBRTcK?5DRYlIj~!S#2Is{o=t8{dgo=Ivq>dYk>~VHf zO*|6Q>WsJv>ts2uhkNl2=(@ES=~%Xx6{sW%K|z3t9MA`hzxz}{A{ z?B~>SyS#aH^O1l{9+oAwA!c(hy~ zYB!L)wv|mvj@J^3OWABCwVd<)gXZslEFL^`_mtE@5a5ELoVLq#h0gMNaK@X9`~E2{ z>3f#=13_5ke8|LrE!T->g`sEZtntuy@4T)@j~L^aTrpQSN-!|tlRJx(_Mtbgv=KU~ z0pZ_)e3fDgnZ^TBn74GwN?hN<_8tWdBg;XYKs=&<2tO}KzW2Pq^{d>wz5KS7?y16}vgpJCo)no&DipA%7te)0TZXH;bI zl|a`1z?$e}KW!%90hQu`q>BMtbut+C~{7M_7>q zD#?UeKE4?REn_BTJd?5kNKmwW^e@vyAv#4)tcbQUt0tsh=o>cB?SG78!iC41Oj)rj z`RTFfRXo2Y8}S;wRXc}J$mX8)PG7w_m6*x(ZHZ7c#WCOY94g|jcj_xXCppUUjyRkG zfucGs8<_wS<#vkhSoMjJ47mbG8V6V8kfBk}^7XuVl{850C0uel+4ES5S%FqzN@HTN zs{?=id>^ZP(o9HF&p+Z+ink!8Mz5oGwoT1XXXeVkrES$^A0_de@;3zzo{bQQ5A(%P z8!aN-5G(R4`@>7JCL9~gWO=F%epAke4u~OK{#K~4AwXtykfnP8p2psrU5w=JZUGbH z?U%XSDCxdLjWRxRO&ru>`)w{t4~HhCKZWpSA5h6Pbv(aqWWrGwORe1=ZO)3Axh70q zLR~HBOXE6w-6z%R&N`6y0X?3VUm@V&gEvqVK&g<)5FYRn&b-i=)-VUv$*Gjb%LkA( zJF=r=)(MV!Q-77!mFA!L4g~izw{@j|2*KRT0BgWKC($D?F%D>(mS?hoSGU21s<%H3 zIqtgPlCMF-%Nuw=F>rbD-I1)ZB!uaY0kZk5tFC@K1rDR< z6M}~Gk<$G(M-=1^^$0_f?aw$P-?J~nv>xAGBncat1l4RO)Va{@0ko_vjSHm2*~1-C zSK-VTsuIi<)1dWFq39?$@f+wxE`r&K!)N?&FAOe!%bTdC0CN$yial}ptnjzB*<-q^ z{`b)+e-!i<6F3Qp%R-@N>1+-t$VzhyE2@z`^TX`?r)#ZpBg27JUIN%gfQ!=vyKSzR zPU%%ePK9#EU#xOf(l}54ma3MvF{oi}+$}~#bfh$vN4=`Q>SBpJw0m}+S3fN5KAHS- zfPx$IfmY!xbcF~1>k5-w6!@-p&n3dZzsn`+-h|2P(8edsX(t#ktbI<~?a4<>DQqam z>uuHtS#$zc>hFwvvK-;)9bB1LI_+chZ$11N4*rND#?bG7yw8NRml?9RRI2I4q^|x> z@3=E@t>Rap=Y$Ecz|e9xFZ3R7y2tn?skGRP_6jvqT*z9O!3zGewXEdpx$rl0X0Ohp z+`lAiV+yQ_e+oTXub@)YQ%J#oWe$A0`($}bAaSrhE#^&YXg3?@zIaIHlPkqf#`_rV z^aq7Bcj|wg_+Ut8ao(H!NzFaaGx9Gk{@A%f+=268ASfUKN)zU13>>Y7Mu;B5Oyb9h z-Egb_R~p0I{zh~4&X+K--Z4O}NJ0Hc1zPYz!GMeMap!+uSRfjVRIlCx=K5f*gJdoF z-Sr)lEWv7zUk;#P&Vl^a28d(r2FYgHYX{{Md>^amKq%W5a~Ckh<$Sk?+SmRO;J~+Z zN*ZX|Qbh@YG|E*hC*`)AkE`RN6h!~ES)G^I&7Ezsi%=6<^o^>5BGGS>w9EHh*TQ@X zb}>fh=`FjS^0^0~V|WM&T{eEb;M!*u9%+rE>f2U*i1#wC;9 zc48;)KqU%ifV6q!YV*uN=tpwpl>sjT$K-~n_CejvCW;G)Y|XX7p+R3!%$FJcA^)X_ zh;tjezn-6`;hgV_j7LMhfL(s_0>Y?NEUb+sjvp{*9S*hk6+&%e#bj#viTmN04?6n2 zd7r`d_d%TEsTzT(ywg4B*zJVlq41#tw=HuwJxF*%&{I(6u%)w%lc2C9cFW7TC5st3 z4?g{a3z|M_6+q;#-l|zFvTqZ8b@ow6)U4M&e}_9gUwGD^O$b7tY}9?lv2Kw*H$Iyr zKVvOd_v^|FeT8LlJemLmV& z@LNkuEFgHJs>empmI9@f2r%Z0FUt9lrE+woNUVm3}PDhT$BAtZ#E^ehRor+dd%NYP=t8e!ES>VOw{PrHekC_EUC)oZ?HpwW4emA9W(c@Fbe1S#IRoLn6tYITY;=VX`J zpYtIL5Hg0wg?5F*EAjD#m2ila1&Onro%-G0w3p}rIIKh~1e$eD1-D zAiLP=7m!HU0%sw?nMmAwIbY(QMK`d3;HRK!=Atv8X!cw&+g+PI17Z}gU~ZslQrHS( zjHee!o~s#&n7@Z`s(rgjW*~7=>dM;#Yp8kqHm(HRfWZ6q+ZUQgZDfFpF0raxDn6Ec zA}e^?lH^N(6LU^M8H$eAlnPZx521|@Slf)0oO+tYkeKd7kxx)Pl7 z3DI7?Y^_~ckcpv(W&}uH_u;NRhh4;`Q*IE8O!S}pS6o>-M4$2_$yc6C6Ep!Ez^Ah3 zU7!}pg@hVObs;t+{fZJ9*js+eD`y*>q5YBk@0=@l>$oj_Z;X-g)q%@0Q5-rv==#^N zSH#Wk#hA^f2k{kez9IQyl*%@e%>GyGf5FQUT6rqT-cM_V$qsMC{F?W-4zYdLBa_T) zC8#HX#;@!;o{%2a51a~q9Jbo{-yEMzT}}0alfGi+9=oOcT7vIkdyf7e6Hd`;jW(D= zOT%B87#5)L8!VY6qr+G}PH5xdA93|7?s|peiM~H}>f0AO{$S%6q$IM3|zki7)oi;q^An0@M_xhUi7j2OJ zs)AVwERL=G?i`U!05No5sleQ!{#!ai&>iOtH9Krw`FZ&``nJ7BH>JKe2Ym~2bWG$X z48pl10RnQ7(z&peWms&vuqO&i@-ne1?j!G|9hD0pd&?zusT$N3U+wv7I-y)S>KvJ3xR8=+B1ib7J#Tu5dW zQRX?b%9L5=ac^%bLrBOxmw8As4_k!HiEW<8$dK8#r?YnN`#sk=|H1j;JXhh`*Iv)_ ztb46>uX|dbkN#^wrcx;P8$xCp{TJlfS>yuZu2vb&0r=5PaydE~{ST&H%En~5Ne(UL z<7ZIaz~f-Z3S4(g`snfXKS$drUK0I=ajMSQy}SQKZ;8LpG!}yQkTGPxnqf&os5DBU z+1|L@n>iKa7UfqiaU9XNgolyl&$8D{y)TIiZEGNow!`ByL~>FFBHcl=6*4LfjKZQ# zC3VN3#(tPxb^xDMfJW`#qMlsF36;0yKP_rv1N3Ym#?vuV!q#&8jDx?~BOIigf~D=E zu#eoj+7P56fT58F*n`vCk$5{r6&rH;kZf57Q>?tazxg9hEv@5Jw(08m&b8X=B{QR= z5LRbfpV$_}nM(2Lc%uiH04I84b1!ZxsFH0lx3K#oO`U0y-u~v=Lvi=hE*w08+5HE( zO^Y{>Yl@iIfQ;aM#KC!p#Z@PZbu!aBM&dg6zs*l&R z(u$o^E>gu{F46j(Zd61_t;Z3PzE<68J%;)V&ju&5yVP=fM`xO>w}EC0xlr>jZaH*F z&xAS;AC#yn(ZT=#faIRIjZJ+b4frN$v0$bIkyQTkuyeB>9IZQC5QfkrxZi=02!`wj z!1xsx1haaYr|^K5_F8^+;gLUKKxSqGtM2jrTN*7nlt23RjBy@J!Ho?`;jOLD!o)}z znUw*S?L@({9hmQ#Z6FPDOXt;8Fvq=p0aB?x4Vhu5PNlaA;$XO05h_@69_`9sHCyS9 z7wn0H6=FS*DxmG>za{=LkYB_6LiyF}mhzZbwoBi%LBNqlSZMi2pCHbh8PUuvOFF%rsdSH2b&azBlZig>kfaFUc$xw6rhJ+@o zre4=S0*f{xLGt`xr*`1jLHa{a3`XBkM4-;u;nqaj?S68B8X40P8scAX+o~pJoPxOf z!hje8;hyLSPl>_*Im81zRE!8W<|^&Br4??p|Ff&)V>z&FN6Y6g9h6F*gfht}7E

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/drawable/launch_background.xml b/hems_application/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..f88598c --- /dev/null +++ b/hems_application/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/hems_application/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/hems_application/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..e94db78 --- /dev/null +++ b/hems_application/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/hems_application/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/hems_application/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b91a274d8c5c750048a6d2be360165fd8a3c3ab0 GIT binary patch literal 2974 zcmV;P3t{w$P)% zX;53&702JAeHS2*K!Ah*fe^cZ0EvS`?bxo9IAhmwoJ^Z$GMP-8X=c)X$k%@DGSitP z?R1hhT@p9rPE#k1iIXO_yxe#}fj}LMu?E{eODAd*9Xhy?5`q z_ndnneE4b)@V_X+f7^hAQVL)cCaFN0n zG&MCP1tzHBRdto}tMWhye6WmZZz#BA9u8n;% zd$^V-P;9W4XXQ8*ilP%=%&U4dL<*t)sY*#lF@-^Tus&DFn(s9@R$Xy^iOMDe0N}Ct z_RsiuiUC&DEiUgY1^^%w2;F^uTt99WwG=j=t0v!%goKcQHwd5rfef!LSX~?L*uMY* zl6Il&co~yN2LQlj@l1WCox8n^A_qGnqrq}YSPf5AV&4iu@BCqGMYY=UY)!?(C1IE# zqEnjng7vwE4xHoA(P4` z!$jD*?!Nu*sNa3RJAuLKV`cIal9={!g{)&oJ`$semWA4?x@60pkjp zd1csOuo@jp!^THnX@&_{pVZvZ&EM5O`bu+Q4G*trp52)5)vqsX4YOT7prnc4bhett zp`>I12!fJ!VNnfl?9-WrKEr;^@;hLXj__-qxxScN!p1RN7SG7XQw?XN_@6;vu>X>J zX~-DW3WG;$y->ri%1hf03XA;E^L3Jr;(<%*3~+X|4F&?m4SdXWe`smM*m^;ZL#nT7 z*aeKLqaxfT-u&(G>YU}i20)&4L3IZvX6H8INGVaMYJ8dRs=1qmcsB8*8ftse* zK>!ps6aWC=b@;XYD@R^#!q>j4p1CM0u8`S!QJ!1M*`x7v1Q8&vkd=8mVK9%?JN1<| zSIkyj)nHD1YjkM`4D?*8K!$ZN=Z1UgD{bU45|vPUx}xHd5`1pRLhX#P(SJ-wt_Lou zS$u}NM?=dAdxF`UOGqd@u1lKuit{oGlYHpbrl8ns#rb=B{KB^4yz%xRjYGlbL>hR+Jv|aaP176Vwxalt&wjHs^6_*e zsjB>RR(`TveyaT7x^Z$~C^qo6B6&Jag=fFo`-!OD}^1k*^K-Hrm(TUP7 zQTn#WRdQe;ma%bJJXV8!(_rTov5*iF*;}E-oxxEA9s6Vkzpi<_tWchBp50J>HV2@9 z^0T?}&f?f?^3qajdx@G!7V0py2mjNk*<%u~qqZ8i{4EjRN=c;4wxM!|SgZ=he;I*Q<&s zs)R}zj7TAL{YY{1ouPHD6##&xVIzv79WT^p$foT#^j}g(7L(e3!CW}41cr`Ou#mkT(RxUI0NTkNrV`#)4;3o#I+=cJiRO5ZEO zMEKzs8wNg_n7^yT`s9!?Z7{r7lj+2^=V~Ds;uf*$o~Z2qK!q2jw>y>5JO)Bw)ng*f zon_2NWpD}rA5I_)MI3CTSEH%SUAwgp6LjXmB3H;VO|5(FKGjuC%?XLe>Q!IUM2gaD zGb$a+>k4YWTdwNaLfWRH=TIMhv0?V+qHfIW zvHPeja&bdJ#gWn^w@$MH3;=-IQx%0W-rOCX&FCPIU_mvnR3W(i?nva2i)+KPuC*== zo4Q|bO=dZkEnoluI zi_b{dLY9I#*IW_5uez#HUDZU2>P}ZcNko9z2#yb`r4{TFs|L4zcvH1*W@6~iJUG zIIZnI$bR!TLr|jZ>h-qx;weigLk(724~Wz Ue8YB4zW@LL07*qoM6N<$g0j7^ssI20 literal 0 HcmV?d00001 diff --git a/hems_application/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/hems_application/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..944f0e6a1a890cb1f90a850d7dfb23fd8b70e01c GIT binary patch literal 1922 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 P00000NkvXXu0mjfFZ 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 + + + + + + diff --git a/hems_application/android/app/src/main/res/values-night/styles.xml b/hems_application/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..dbc9ea9 --- /dev/null +++ b/hems_application/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/hems_application/android/app/src/main/res/values-v31/styles.xml b/hems_application/android/app/src/main/res/values-v31/styles.xml new file mode 100644 index 0000000..53f7480 --- /dev/null +++ b/hems_application/android/app/src/main/res/values-v31/styles.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/hems_application/android/app/src/main/res/values/colors.xml b/hems_application/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..42f5748 --- /dev/null +++ b/hems_application/android/app/src/main/res/values/colors.xml @@ -0,0 +1,4 @@ + + + #a56ab6 + \ No newline at end of file diff --git a/hems_application/android/app/src/main/res/values/styles.xml b/hems_application/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..0d1fa8f --- /dev/null +++ b/hems_application/android/app/src/main/res/values/styles.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/hems_application/android/app/src/profile/AndroidManifest.xml b/hems_application/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/hems_application/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/hems_application/android/build.gradle.kts b/hems_application/android/build.gradle.kts new file mode 100644 index 0000000..89176ef --- /dev/null +++ b/hems_application/android/build.gradle.kts @@ -0,0 +1,21 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = rootProject.layout.buildDirectory.dir("../../build").get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/hems_application/android/gradle.properties b/hems_application/android/gradle.properties new file mode 100644 index 0000000..f018a61 --- /dev/null +++ b/hems_application/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/hems_application/android/gradle/wrapper/gradle-wrapper.properties b/hems_application/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..37f853b --- /dev/null +++ b/hems_application/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/hems_application/android/settings.gradle.kts b/hems_application/android/settings.gradle.kts new file mode 100644 index 0000000..30e3885 --- /dev/null +++ b/hems_application/android/settings.gradle.kts @@ -0,0 +1,28 @@ +pluginManagement { + val flutterSdkPath = run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.10.0" apply false + // START: FlutterFire Configuration + id("com.google.gms.google-services") version("4.3.15") apply false + // END: FlutterFire Configuration + id("org.jetbrains.kotlin.android") version "1.8.22" apply false +} + +include(":app") diff --git a/hems_application/assets/icons/icon.png b/hems_application/assets/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a1245497389284d9df5e1f868a18b1bb985c8f7a GIT binary patch literal 45111 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
E)7o4=ewwHVE>wLy@l?c>`-qbuF+mh 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

tLtTwS8is`UrDMRna@oUiu}6+es-nZ9dSk zOs{RtT_{;YD5iVfT3?aoZjmIESw<2K9sBUeLZ zP(i@mEsN22CG~X37&QemJ}I8@ffNrZIQW9@S-D7WHSsR(u+Z-Lek&!7zWz2pGX3`G zbmmSIlvT)*BAR(hdq~s>xMhGVISpuHb}%_^c!6nVu`kj;+1K9_yHO715%80fKz~64 z-2=bK0Oec|UxINGfgCsKa~sk?WdE4J2{uQWt8#xSh>~ZZ{t{Zq`AmZg`oCPk)Dn1z(6k-u?#HSlbe}$lwV% zyY6`{v0$?(5RBlfpi4f243G_x?k~P8;m7cnsdcoY8%yyq6AsMT3T>q~xiwgW9$oDu ztIbT6f<7M3)StimofW&I*PsErxm$h6FI_NYpq`PQ4~iZ|jeu%qy(Ud%{Xd_;0Pz!S zFI`!ESKDHI;0vFo2w$bSL;klE`#b4t43@9l(oaDkWu1@rXc~6u0X*Hr!avgwZWcMX z0JHm3Mq7}1-`j(H$ru{F!~6NWUBg)D-KQ_~*TJUGk4ySnK@{)P zR$4>_5AZX8ipu8Zd=$C4@Ke0t|C&2+S_?|{th4wiaghC`z%?N^d)JZ{0+Cdv$hv%k zNwiW4&bYjEBIA3?)YmJZoPFY)5W8cO`{NK@xPf#T*m)${scpKfx7v2zkV1wj>-ZI( zpgntV#tO~f*cP3_a{UD0&jSF0M2{xw596z|p<@(EOF6+O7}!f?BZCV-^lDb* zncHRlt>5f_ApB3b=MUeF``!s;;O3y{CNsro}f+dgVKme{*U!uyVN1{=GY*GeKC0mg+ZRFz_L2xOQ>qAw62n2 zK!SVLH zX^DRGRWbMU0X=ABLSgf239P==_{bDk(QiMe=yYbuNT9Bv zFlEqM%`)ev#yco?cbBIKX@mT#K^KAk#$q50Dh^8!mBK*xK-J+8)>6cwqakT1DHE;l zcI6Jz#-o*iSPipam2H^ehn{-|t4^WGo4 zGGu>V@jT@v0O2x`TsmCZzi+%ky=R9tv}t|~5&W3+^+xH83fPQHv+~ZtpP}idQYHkp zCfx(x#0_r*L7|5=3tcZR(J_gkQpd70JxhFvB9aPp(;BUAa_{tjQ7IQse?5~9%Jz2H z=OM6Be(RDKEi3XFtV4iH_cO!%cLA>wowQ|Kc0ie)vrekdc>ZhJ8<%MAx{;}Fgmt>J zhNiEIWO*~(0{|0a zH)skQj*t9B4g$r4_7mnq&~ceUm`x@M&q)o|C9Yj9+W1uo<_yOG(j#X?oiuWD%?-EF z>V>04^s$Q@0iv6dGfeP~ZppF_QQCx&c)zlUINWayl{CMa!KM5Aok>`%6}a@7pV3D7 z6qE_Xh0iUGJkdga_!qe6dbd8C-5J~JHNxUgckTILB!=@BxH`2CT@EXZ`IxnSQ{wjb z%L;ULZuN^rddddF)T2$9J4=EU+ZFy*x=B`O{!jCHsHdcI;#RI_i4sl7&3&pRLE7zw zYVYO#O&$P2?)$N_sZ{Q65T;86-NU|6AR_}^Q2T*z!P7ye=X~Tklce8p=x|9yHPW|+ z?&^DFdY0-Hr%M`08d`>JwVn*?!P1vItts9Bm#XOT<#tD~YzFZS0s~*-we|pxnpRRe zB}!@I21TX?|Lr-e*TQncIlYz;@W3x3#o#g-h^>j8tSBt%vO@kr<%TH#-F740?SX>UTAnr_8eSY!gY%bBFS{B zQr-6oWdg2&-^%5;Y9|TgmV}Ci>>$!Rt2+U7wIfLEy&DTCi|UPSmGgc2?C53w|FR+HaJFx7K+8%ZkPXb9H}W3 zTY8euZCR<``-(#+3>5D*)n7-7cuPc~bmy!olXFgsIU-kGEq4?op1xy~Xv{`MkFB-V zhJZkvk>hm$?l-?0-sY_3Mc9#(ko)YJB2~xeRz4I@50A;?@ipM{`G?p^4Upx~2WI7I z4bST}-$0!Bu=WY!hi;!Eh55V1Z?AN$dR_s-H7D-X6MB+AfF!j) zaDG!!d$aMa)%${gsWiaf4PE?_R)1q(`#Vj`OKSY|LJ}}n=o(quwPDeMZ)PR~O@M^K zz-tbj`P;@hf{sCrA7Hw7+~6A>0%m-kXR%~JzHf{cAxEy4+^-L!IBJsjDs-IGBVrF{ zQ`SUtt5yF%I}C`fSiFiR(rEv&fm$#QSo(SCEouZRXZY)qh5K2l7Xgw(Nr$W}%g}A;8x$(yE zuh-|F`xNxGDb>!eSY*m*OC3wIpobhB$cw5N`P;T?LL9kc{>Q;#JSVG~k? z3I6vgN`BIhHig9!SHORy+oc&Mm>c&7g2XtY^cy7&ECmBMnUR`5`GouplUC&kd98HOr8lSszjNFE2~irn9hvbCS2H%2daEN@0b)#-fZ&7`5ZWfat|=v0 z(-}2lbdyb?sXUjF3w;dK%76V9sZagVHBGuAVQcR!T}7?G0OVUSu(aP; z$pT`d^??xoj<0Gm)b1N!T(hnMq2y5E49Sikxtf@LkkM~@vl()k%z{>oXEo zgw>_yLD!k592?JwbzeZL-u$0yU(=-pQo~S$cC746QmeHYaonz9`vMLe?~~6aknDIb$Jf%X(jFS|JxB)dzJGIN2m(Ggvhsd{ z!QT+9GiSvkr9YfCO3Yw8BD(pW;sBgT@`IVbcA2yvB^~iRn7&NyNB}~~8|3o?$Z^(P z@A^q`TspgMJxc+Q#+0`to9S^KBn|Cc>PLJb?}-J6r5e3~{2W%vBr!%Ne*V^$^!GGR zLUrMS+@mC`k{eUH`Y;+ozv`2`E@#xAOY!0DW|zMTTF+vuTYi|@n}XWJ5EQY2pQ_9C zNnL*sICliJKCo8|yIWt6Fe>t5v-_(1YBHN+{&AE;&rKY3RRx34$iG7p4Lxk}6(ncU z$ZtL5FzNn|Cy^o5(Rbm2E|0aamPt5THu*L!140W<@jOv_;Tqh-e9Egmj*;$rKP#4VYWzEuu7KkMWUDK#GC+x^9FYP!7j3+KOK}&l3l!Mz8XIo(Uz* ztVP$f$~LC-F0I&00L0#T z4kel#Zu+V6%w8JJ(-0h8fGUE3Q|*pP0>0oby@&<8kAbCktajV?thAP$9(GH>KfEQowJ zzECWPc!ci|LD1sfHk3dR2SN0K{q?$ZkRB+CBVlSu4vlN1Q+-@JZvbzX8ta=yCDcLA0eE^jZpoK*qvu6(b-&#jjn}F=2hBO zKVDLo!7ot+CKT@3WQvL9fNyo7p>;0BEw9CyHO*X2wdTq3|8;vVTUYP2E>3B7bwJm0 z%x&`J#qNqT@&Fd)L0fVF>eY$nvBW{OZLi&pUow_*eC5afziyA#w=l=**4#5YzNA$X zD+W@ca&Fs7zAf?!Q~4*q+G>L{|97u*CtkMnC4H0Uul~eUPF=-XR>e~IBh)pBiQAdj z@4MSWJSVp0mG(XKN?=xoq7ewbC6$ffKL#V_P}AK(NlfbQI71R8C@+P#fMIML}k{ zzCqS|EU@>OVS!0^v>Z$?JqA$eW%)`P3}hdk;Wjc^7mh15$+(_>oBO`^b8L za#Ri}-WI8$mFIOei7EoGv51NFn~O<2+BF?j7k93M@;xDn6#3Ve42(NXFW+kboRCdy zMvTQicB>0f9$oC8jWa`aQ(Xbh2mK1~GeSjes(tVfamN3v{Oz}lwPH9tz)?`OP}aUH zv53dqS-n9;SkxRWEXSG%Zn~uD6}l4I+O!#+7q3lx@!DQ6^h%zfGgE7)B zyXforE1^a%4MN== zJas*UzT}Q3ufuKh%LbS&w0VIAFZ-#!lCh5zfz<`77NC!#uw=1rL=_a^dAx|r2$Zg!@l^ZOTXs>dsKfxG{?5v};RYQrw z$&?=bst{0~9JHcvZE?|WKJ~b(14aAJeO|`GA5WYe)b;CS07QoatL=Qw{b@vz8M}H@ znnpe8hQjBWEjBaXK-KsP4#o^;#UFvq2>n@j4qy6Iv2KrgfHi3xq9ITThz(~@6zI-S zn@q)YHNV^zr2G({$0(f&0sRA7Wcfm_SVPP!7p=VzE_7Alefd-i5EIGRyW=VzX+-q+ zFflexK?kmHSi*NDgsJ$FtNRIAc{Y6s35SA$dqI_pR#cxK5|s zzELV19U^#0^?)b*>RuUTyE6IeB?Oa7O2q{edg!_C`MA1KT@WcUqQw}(kcEcFkF zSPkO(2MAR1iil2(wkQ2@;FXD%eF@=Z;$YH1flTo4NHpk6*j5|g;w+mmL{eU&q$2#Z zTe?rzdPrn@o*7D#eKW0_@DpVWF6ROkXOHn~s}vt1jNHagw#{R?i!8VgXJB$+6+oGu>n5L)GCCmM=Od zSeTv}+x`U$sF)^cz~tR^Ba8*c^{|4Zw9WzJ|L&ZDrF4779q!@++y%Gz_4&@Vk$+UC zp!-_`>a>YH|6rnJrCD#8JN|?3wAtN_j_$DqFq;lRUSP$+`~#k+Ek!O`LfMxGq}-eI z_{c;<-hub47JACbRu0_Mt`Dn_jF^9@B_((EmIO=SJFHq(1$9wWp#RoljjN^TspH&d zSQ{hkpXk?g;00FV;oT**F1O9$hVj_}ADKnNWwJO@!_ zkt}qGWrTxcYv585lw+bu0DY|svMB~`s>jG@%pt@Ot5X0VzZQh8!1+i}o9!F5<~XzK z#j@2)flc2e^-r!uUib?CI0)g(s5hl;L%u_v~VVB{+J=6W+tU(OudjA+Wd-xI+ zSlVt@b)9?<>muB$8z^C^A1SJ$0iWR$e~>!{h7&)l2o;Dd)!PBlNs~t-0o2BjCyUvK z^isgyv!1%m;tQH+v<&;7;m>8i2xNI!ev_je<;SIrP#;}w$jr z@>e#Y36`TCapul$y#-4`TZf5X9;n&12E=@RUbC%OIElGcTt6f4QGBH)d2fZT&#`j&$)P-}B5`9F4fEt=>D^V3`3tr687D4bq#Bf1lFJJpdovvs9?a95GbbgB8K8`kO9cWwPH>yJtRL z-rVMTmqDOBE`9nFg@dvXM*`Qm&w6NIzQ?P%!Roxmqt@f_dM1#_E-v z4R{zwy}!`3UQtE-Af0hXbvx*}80()~0ovQ|qEzhylG%L7Xp{|s7^bXcL%K($^-TX; zh@O0?QJ)s$rizKe(pW?l`#b~yB|13BL-T_fR`7)0!=``q; zA8*Af40U~N4fWuzy^qBFzn@2)rRmYj(9;d%;SmRIy+GDywDi1UCn+wD0a8ZWmr80q z0Zwp+pY&l#w9xUHl+!K%-qs2&w)0^ zyFMpXgherMf%h3ipM{plUi}DGR?y?Pik-Ch7Dmgfg2|zbq_p|i%UK)DA7){9v>og{ zsk7d8hjb~g7+wSMM|9#zvJa2OlUeGO*oNejeOLB&O*~Q|VSQ?bIX5GN?<4EQ>E>ry zA`pc~b#&3I-zDulj_&9=g15Cbki_jE*(^ehv~Q`kPt+TEq(P3v?#p+``S$c5x6`D6 zw3@$W7Z24!)#FarKaeJ*(;jUHmuF}>y&gdrpnoePJuKW(dZst0k0e^fL_+#(Gdf@v7KUD6JVNjrT6Qlz_=C@vgb8uGK@Nz4;DWeSo&RZ;x zGH0DkZNsU>NeE2+pl$|f1^xT!oQuAJ+lQ5Ccq!SnF0h~rj5GgH{%ojYrmPCHbU^oG zsSaqm;bn%QC2Zm`2Dsmv#gTpYKh+E*ugi6@b!wjymdm7~{#1{*4D?^t-IMjArHt1X zhu$?)2$+it8T{c6GYtD9Aw9~_(3Taajp#c?B3F*SwSQuuSFw-^KtXh3*TYMUagM$n zix^OiDO^LlNwj{Dx!Ln3{omBRTcK?5DRYlIj~!S#2Is{o=t8{dgo=Ivq>dYk>~VHf zO*|6Q>WsJv>ts2uhkNl2=(@ES=~%Xx6{sW%K|z3t9MA`hzxz}{A{ z?B~>SyS#aH^O1l{9+oAwA!c(hy~ zYB!L)wv|mvj@J^3OWABCwVd<)gXZslEFL^`_mtE@5a5ELoVLq#h0gMNaK@X9`~E2{ z>3f#=13_5ke8|LrE!T->g`sEZtntuy@4T)@j~L^aTrpQSN-!|tlRJx(_Mtbgv=KU~ z0pZ_)e3fDgnZ^TBn74GwN?hN<_8tWdBg;XYKs=&<2tO}KzW2Pq^{d>wz5KS7?y16}vgpJCo)no&DipA%7te)0TZXH;bI zl|a`1z?$e}KW!%90hQu`q>BMtbut+C~{7M_7>q zD#?UeKE4?REn_BTJd?5kNKmwW^e@vyAv#4)tcbQUt0tsh=o>cB?SG78!iC41Oj)rj z`RTFfRXo2Y8}S;wRXc}J$mX8)PG7w_m6*x(ZHZ7c#WCOY94g|jcj_xXCppUUjyRkG zfucGs8<_wS<#vkhSoMjJ47mbG8V6V8kfBk}^7XuVl{850C0uel+4ES5S%FqzN@HTN zs{?=id>^ZP(o9HF&p+Z+ink!8Mz5oGwoT1XXXeVkrES$^A0_de@;3zzo{bQQ5A(%P z8!aN-5G(R4`@>7JCL9~gWO=F%epAke4u~OK{#K~4AwXtykfnP8p2psrU5w=JZUGbH z?U%XSDCxdLjWRxRO&ru>`)w{t4~HhCKZWpSA5h6Pbv(aqWWrGwORe1=ZO)3Axh70q zLR~HBOXE6w-6z%R&N`6y0X?3VUm@V&gEvqVK&g<)5FYRn&b-i=)-VUv$*Gjb%LkA( zJF=r=)(MV!Q-77!mFA!L4g~izw{@j|2*KRT0BgWKC($D?F%D>(mS?hoSGU21s<%H3 zIqtgPlCMF-%Nuw=F>rbD-I1)ZB!uaY0kZk5tFC@K1rDR< z6M}~Gk<$G(M-=1^^$0_f?aw$P-?J~nv>xAGBncat1l4RO)Va{@0ko_vjSHm2*~1-C zSK-VTsuIi<)1dWFq39?$@f+wxE`r&K!)N?&FAOe!%bTdC0CN$yial}ptnjzB*<-q^ z{`b)+e-!i<6F3Qp%R-@N>1+-t$VzhyE2@z`^TX`?r)#ZpBg27JUIN%gfQ!=vyKSzR zPU%%ePK9#EU#xOf(l}54ma3MvF{oi}+$}~#bfh$vN4=`Q>SBpJw0m}+S3fN5KAHS- zfPx$IfmY!xbcF~1>k5-w6!@-p&n3dZzsn`+-h|2P(8edsX(t#ktbI<~?a4<>DQqam z>uuHtS#$zc>hFwvvK-;)9bB1LI_+chZ$11N4*rND#?bG7yw8NRml?9RRI2I4q^|x> z@3=E@t>Rap=Y$Ecz|e9xFZ3R7y2tn?skGRP_6jvqT*z9O!3zGewXEdpx$rl0X0Ohp z+`lAiV+yQ_e+oTXub@)YQ%J#oWe$A0`($}bAaSrhE#^&YXg3?@zIaIHlPkqf#`_rV z^aq7Bcj|wg_+Ut8ao(H!NzFaaGx9Gk{@A%f+=268ASfUKN)zU13>>Y7Mu;B5Oyb9h z-Egb_R~p0I{zh~4&X+K--Z4O}NJ0Hc1zPYz!GMeMap!+uSRfjVRIlCx=K5f*gJdoF z-Sr)lEWv7zUk;#P&Vl^a28d(r2FYgHYX{{Md>^amKq%W5a~Ckh<$Sk?+SmRO;J~+Z zN*ZX|Qbh@YG|E*hC*`)AkE`RN6h!~ES)G^I&7Ezsi%=6<^o^>5BGGS>w9EHh*TQ@X zb}>fh=`FjS^0^0~V|WM&T{eEb;M!*u9%+rE>f2U*i1#wC;9 zc48;)KqU%ifV6q!YV*uN=tpwpl>sjT$K-~n_CejvCW;G)Y|XX7p+R3!%$FJcA^)X_ zh;tjezn-6`;hgV_j7LMhfL(s_0>Y?NEUb+sjvp{*9S*hk6+&%e#bj#viTmN04?6n2 zd7r`d_d%TEsTzT(ywg4B*zJVlq41#tw=HuwJxF*%&{I(6u%)w%lc2C9cFW7TC5st3 z4?g{a3z|M_6+q;#-l|zFvTqZ8b@ow6)U4M&e}_9gUwGD^O$b7tY}9?lv2Kw*H$Iyr zKVvOd_v^|FeT8LlJemLmV& z@LNkuEFgHJs>empmI9@f2r%Z0FUt9lrE+woNUVm3}PDhT$BAtZ#E^ehRor+dd%NYP=t8e!ES>VOw{PrHekC_EUC)oZ?HpwW4emA9W(c@Fbe1S#IRoLn6tYITY;=VX`J zpYtIL5Hg0wg?5F*EAjD#m2ila1&Onro%-G0w3p}rIIKh~1e$eD1-D zAiLP=7m!HU0%sw?nMmAwIbY(QMK`d3;HRK!=Atv8X!cw&+g+PI17Z}gU~ZslQrHS( zjHee!o~s#&n7@Z`s(rgjW*~7=>dM;#Yp8kqHm(HRfWZ6q+ZUQgZDfFpF0raxDn6Ec zA}e^?lH^N(6LU^M8H$eAlnPZx521|@Slf)0oO+tYkeKd7kxx)Pl7 z3DI7?Y^_~ckcpv(W&}uH_u;NRhh4;`Q*IE8O!S}pS6o>-M4$2_$yc6C6Ep!Ez^Ah3 zU7!}pg@hVObs;t+{fZJ9*js+eD`y*>q5YBk@0=@l>$oj_Z;X-g)q%@0Q5-rv==#^N zSH#Wk#hA^f2k{kez9IQyl*%@e%>GyGf5FQUT6rqT-cM_V$qsMC{F?W-4zYdLBa_T) zC8#HX#;@!;o{%2a51a~q9Jbo{-yEMzT}}0alfGi+9=oOcT7vIkdyf7e6Hd`;jW(D= zOT%B87#5)L8!VY6qr+G}PH5xdA93|7?s|peiM~H}>f0AO{$S%6q$IM3|zki7)oi;q^An0@M_xhUi7j2OJ zs)AVwERL=G?i`U!05No5sleQ!{#!ai&>iOtH9Krw`FZ&``nJ7BH>JKe2Ym~2bWG$X z48pl10RnQ7(z&peWms&vuqO&i@-ne1?j!G|9hD0pd&?zusT$N3U+wv7I-y)S>KvJ3xR8=+B1ib7J#Tu5dW zQRX?b%9L5=ac^%bLrBOxmw8As4_k!HiEW<8$dK8#r?YnN`#sk=|H1j;JXhh`*Iv)_ ztb46>uX|dbkN#^wrcx;P8$xCp{TJlfS>yuZu2vb&0r=5PaydE~{ST&H%En~5Ne(UL z<7ZIaz~f-Z3S4(g`snfXKS$drUK0I=ajMSQy}SQKZ;8LpG!}yQkTGPxnqf&os5DBU z+1|L@n>iKa7UfqiaU9XNgolyl&$8D{y)TIiZEGNow!`ByL~>FFBHcl=6*4LfjKZQ# zC3VN3#(tPxb^xDMfJW`#qMlsF36;0yKP_rv1N3Ym#?vuV!q#&8jDx?~BOIigf~D=E zu#eoj+7P56fT58F*n`vCk$5{r6&rH;kZf57Q>?tazxg9hEv@5Jw(08m&b8X=B{QR= z5LRbfpV$_}nM(2Lc%uiH04I84b1!ZxsFH0lx3K#oO`U0y-u~v=Lvi=hE*w08+5HE( zO^Y{>Yl@iIfQ;aM#KC!p#Z@PZbu!aBM&dg6zs*l&R z(u$o^E>gu{F46j(Zd61_t;Z3PzE<68J%;)V&ju&5yVP=fM`xO>w}EC0xlr>jZaH*F z&xAS;AC#yn(ZT=#faIRIjZJ+b4frN$v0$bIkyQTkuyeB>9IZQC5QfkrxZi=02!`wj z!1xsx1haaYr|^K5_F8^+;gLUKKxSqGtM2jrTN*7nlt23RjBy@J!Ho?`;jOLD!o)}z znUw*S?L@({9hmQ#Z6FPDOXt;8Fvq=p0aB?x4Vhu5PNlaA;$XO05h_@69_`9sHCyS9 z7wn0H6=FS*DxmG>za{=LkYB_6LiyF}mhzZbwoBi%LBNqlSZMi2pCHbh8PUuvOFF%rsdSH2b&azBlZig>kfaFUc$xw6rhJ+@o zre4=S0*f{xLGt`xr*`1jLHa{a3`XBkM4-;u;nqaj?S68B8X40P8scAX+o~pJoPxOf z!hje8;hyLSPl>_*Im81zRE!8W<|^&Br4??p|Ff&)V>z&FN6Y6g9h6F*gfht}7E

ja^#(wJc9?0)_rWx-0et9 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 literal 0 HcmV?d00001 diff --git a/hems_application/dart_test.yaml b/hems_application/dart_test.yaml new file mode 100644 index 0000000..a6404d8 --- /dev/null +++ b/hems_application/dart_test.yaml @@ -0,0 +1,2 @@ +tags: + integration: diff --git a/hems_application/devtools_options.yaml b/hems_application/devtools_options.yaml new file mode 100644 index 0000000..fa0b357 --- /dev/null +++ b/hems_application/devtools_options.yaml @@ -0,0 +1,3 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: diff --git a/hems_application/firebase.json b/hems_application/firebase.json new file mode 100644 index 0000000..56deac1 --- /dev/null +++ b/hems_application/firebase.json @@ -0,0 +1,25 @@ +{ + "flutter": { + "platforms": { + "android": { + "default": { + "projectId": "hems-03d", + "appId": "1:382446275425:android:d69ffb43d319aab4edd320", + "fileOutput": "android/app/google-services.json" + } + }, + "dart": { + "lib/firebase/firebase_options.dart": { + "projectId": "hems-03d", + "configurations": { + "android": "1:382446275425:android:d69ffb43d319aab4edd320", + "ios": "1:382446275425:ios:b9d9d77211d63334edd320", + "macos": "1:382446275425:ios:b9d9d77211d63334edd320", + "web": "1:382446275425:web:634098b4d35d2f89edd320", + "windows": "1:382446275425:web:c95a35f0b8d24f33edd320" + } + } + } + } + } +} \ No newline at end of file diff --git a/hems_application/ios/.gitignore b/hems_application/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/hems_application/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/hems_application/ios/Flutter/AppFrameworkInfo.plist b/hems_application/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..7c56964 --- /dev/null +++ b/hems_application/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/hems_application/ios/Flutter/Debug.xcconfig b/hems_application/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/hems_application/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/hems_application/ios/Flutter/Release.xcconfig b/hems_application/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..592ceee --- /dev/null +++ b/hems_application/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/hems_application/ios/Runner.xcodeproj/project.pbxproj b/hems_application/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..49ce231 --- /dev/null +++ b/hems_application/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/hems_application/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/hems_application/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/hems_application/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/hems_application/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/hems_application/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/hems_application/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..15cada4 --- /dev/null +++ b/hems_application/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hems_application/ios/Runner.xcworkspace/contents.xcworkspacedata b/hems_application/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/hems_application/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/hems_application/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/hems_application/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/hems_application/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/hems_application/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/hems_application/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/hems_application/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/hems_application/ios/Runner/AppDelegate.swift b/hems_application/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..f7f38bb --- /dev/null +++ b/hems_application/ios/Runner/AppDelegate.swift @@ -0,0 +1,20 @@ +import Flutter +import UIKit +import flutter_local_notifications + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + FlutterLocalNotificationsPlugin.setPluginRegistrantCallback { (registry) in + GeneratedPluginRegistrant.register(with: registry) +​ } + GeneratedPluginRegistrant.register(with: self) + if #available(iOS 10.0, *) { + UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate + } + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d0d98aa --- /dev/null +++ b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1 @@ +{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}} \ No newline at end of file diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..40f9a8f4512f01da0547ec8e7d815d18bd68eb8e GIT binary patch literal 48634 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 literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9a03bcc05ada2bdc1d3bf31286f6223f75ddc149 GIT binary patch literal 1540 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 SR4sD=0000j?3C9&SjwJ)EG6(c)&=l?&y z|L^xbv>!kC1LO-vAXaq+OoQV)iFgYCX@XVU2m#P19p4w~gkpBA5bu5se}w6gnz6cc-G+p%z>VjHDq5fo9s zAgxymHs-d>!?t9cpvG(DJcI@V07!y#FZv6)3^scDb*1sw`Swd{hjGI>jdjcs)zm7omw{xxHYAjAF`N5Go8wNSxEpMCdqjf{8j z&Cr>&17_26u}~ZUuwqz;5lGb|(e-N(I&v^{zhD^34YPaJ$ao!nYOav|e~Fa32Xux( zi+jPB$7N&8j>{?v8ghpdQJmk%&AqO&s;oKIen~ZY&A8(UXSusuQOk(^?AtBN57!?4 zWQGw~+*+&e*XFLoV@V=GR8%rbq38azQ_#Xb1^_ILyINmU2o?O>pN(~1R%a6JnsGn) z&P3vbx>u%sSzh+|g5bKt#R`tK~u+Kckqle{}${iAtF2Ek=gRLE_4 zUu~w2RRA622JoWdtQv^=5yn1T?3&{jA{KYtgK)c?E z?3o4%TA<>+DAv~M`ZeRh$J1UoQVa55T zsoxfaN=*Nj_SUEOd@I2xz@>zsh{x)m{AG?LNcLXdo&eWt-<};=YG@VGP~^f#XA0{5 z@Z5#JR)h*ne??o=_KuJTGM(j8UYg|+IC1zrC_<7f!gbAf3^yz&i%x~nVA@1xZd)_f z<+1w1{%Gbm9N5^Q`LZD%O*$WK7U8Cdly%gR4fk5YGP0EU(#IpiOOM07$M481uZ;c$ XcW9W;*uV_C00000NkvXXu0mjfFhnSa literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..58d4b3b5c6d9e1b37dea5ff2381cdd42f62f9fc9 GIT binary patch literal 2410 zcmV-w36=JVP)c#8ri`@IQavMFb;Ti5IV=xMC$*|3XEfUIsx>v@k-DBtar<7)IboI0DG+ z!u*dCE9tb?r^}9aj)Jm3db#29!M@j(z)**ZMdk+*9dC$JxmXjZE zxGWBmlP5@st2W40y9yu(EEt{ELHics%8JGHr}Pj6&GavH|K-8%Z&jA>D}o@1Bq{sY zl4E??W5gba1ur{gIV9@8c6!v}^eyZd_r= zA0E9jO;PFLHoja1Be2Ke>p4Ht{Ax`}gAxE>GcEOB93=@-vs+QNS1pwCVHQ07)m$tt z1VfdFORJBUBP=*}z&vg4(Vw=CUNw(=HboNurQnIUbb+pp9ndhWqn*>nPIK+aon@_R#%dX98XtQ zgpK%DgG2uqJM`urkz5!d$e|C%CU4EgT9u~0u;HajUQWFIB@+Ze+9s81SHZyFO?K1L zrf`cJ6c7Y?96qlTD_%2$2cJyt*r$=GMHEThes^eocrn^XAmKHN4*)PbU@vY^A}l!I3C%rlocKi>{k*SRqO1@MRUFb*A1`Ndkj&;|#JtJO zaR)vy%?~fmk2n>28A*^6H)jjVq#Qmw93+gNPcv;KMWUuxc1epwn*rUV9^r-q#KU_I zW~p_Y>7+=C&0|e}_0Tcl3I_=m7pZwpr)w*Q;dPeOHsQvKBIyMc4iY`*M*sjtwetE? z6+$UL8+h?br<3D1XPK8A zrv$jUs+^|pR?A8yjl}`-eyG-wdly%mc9<- z)a{3{ooe7{nkM{5h8L`BDF!j4f_M;3Yfd+-8Nrbc|5Mm>ULS( zc_rc~uBB(b=Wip?z(H0be(LoGu8_0UxWk`LK3={~Xz5+Vy8k*%krZFdMe_yD>6PUf z_rN7n>uZJ-y(p4$S>1Smkf?LgcPi4+I=I#$JI$KQd*-cu96o#UmbI_LXdSdQy;6;^ z6Q9GbhweLnzVCHl%%QD6SW@LWP4wLfjCB zcb)5JTtt`!lLTqHX5k3fOz^kmxVb9Y>2^-J%-wSmwdnrG6SO~+%j2SnZP(JX5c1(1 z0sHXT=A3*%Ux#t}&fNITnaU%j>-xk`09R92Xu4)uo%eRXHykZAoX{nk+v}ulpkRko zT!;cdpEc8W=7JtPf=5`~bTdYo<05S2(3^V(J}}MnEdT)cVmihuX;da_kLJ<)iF10z zvxuQGzPWoI0Ki2#$mSf*ba9!5vcqYcB2Yy(8=TG+nt09K9tW{loEY&)j z{Li96pP~pnL9#GiTvW>UI{lMhT15(UXIpXV#s~{$o)f}O<$HJ>zB_-sM^OOb!0l(6 zWg2m`YH`YS?KeG{=_ZP&TJ5EdS|IEwr5>f_~^ZA^}dWlQe@?hlI<=R5bIEQRJr7AcYvNO*_OwjeCHsIIWM3rN{I~Vlf61AxEaOv1JOEinh=Ck(ypssLdUW!4s50}aHRvj&i`o6svMi^E! zUl4GI!U5v;yF<^t-ImNd-EQ1iMF`T;L;Gv>r}X-RTFe!={HxozpRf+uckI_B>y<{907*qoM6N<$g0Qfkp#T5? literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a27a57979c1414861ddd5c260bcc3a76dd83b823 GIT binary patch literal 3708 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 AQ2+n{ literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..22565c3b7f1eb6a220767736a0e8d88a9bcd9277 GIT binary patch literal 4243 zcmV;E5Nz*>P)c3YecuxRaf1W_;vfm|zCe)_K~l15Nu*^}l5NFtV%3h4X__X}Xl%LD>2xMDnf6or zAswgnbW}TSGEU{h8M&?OC?m&~EQyjRiIhl+H^DAiLdxy@Vu_1)~s5gCQ6U_;4TQ5BLJfz5niF zTVx@0SX7iLEZ_@dT#ksv6fh7POs(Mc_}mtcNoVQ0IE*>H+wScyBN4I?I-FOVlUFAZ zmt?{y9HAykM^F*M5wUz8|AS8kx6#k10`ZXrqfq&a%Cc4^Ed!0~LX?pX!ZD6#kXB}^ z|GbiwnXy#`pU3C2Vt%hb;KyMULTE6ZO+#p~)9fDnaw16`-c7_r76gO)zg1DxoC|^= zwLIVtEKaN#G)AM=Y?-rp9ATsqOoIbnKaMA_%e#l@WYL&t^N;Gp#hKJX>!M@)wodzS z-ebpz5;OzJQt()r8N_G;Au!+zU@qUX&SIXkrL6xuiYR2!*=Xy#jeIGGEb-W}N1u;Q zcFY2+gGH$1=hfxplnHqfcF4FRfa7@E`7Zs4G5LMpaYP~uroo5Ls;NvFr&jL#ve#vH z0{|dXiBuo~zs`lWYrf+`f54Bkh0Mn9 zREbNnVr;{twZu}5#zZS#Dp07UOg;ku0JqgM-D4QO`q*Xh#Mn@(u_al>&3Sos67qEH z_H@^$!vGE_8>IE8D>thGnA5v5W3?HbE{ogi^5HlDArMN3S7xmoD;s5< zpA0TfM;W0o3Z49EGh4`v+Nf#T^3~7o#oN{JWYxW1Mvfhq#nbtl0RR9h|E#e3^iH8gW^xQmEu_UJdj2OH9)i&Go6xtq5|tP2W`s zWZW1#3PND%VTH6ZyYsh$i{s1jJmXe(jQff(WYwH1B_CVYW0)IQ}i(wx#(HjqV%b{xm&2Nwl$jzGS)v|}#s#N8QIRz^XSjI7`DeF5r#{Tzb4gSCTB+NHb^p&WSq{@6)rsP= z76my&(-rY4K4Z70$J=#O~%meRB^N*uQuo5#UcH0OwOm6oUHp!l@vX< z6I;BU2V2NIe71hNTmR^iCaN1L3R%hqY3=Lf42shw{Xkd~WmTfS%VT4=r-7|4J(0+& zJXW~x)shGm(g`R7sehw_D`o{fep?_CS?M_Kq5zEO7KlXF;Fpgl?#+T=(BWEjyeLc! z959R-C)#I>lV-2Shtd&2E?3zo%dHXbEde*$rX9XI8T9*EBZ;jjGRwVsaajKv9>5=7 z9GYmKAxpe2pVRD~8(0(-XEy(+j=pzn4_>!FmLP$|jpC0!(@>eBVsU)A{g;ng-cj$Z z@f8&bl4YDSYi?+%B{U|AxxD03vM_3z>YOWRk|*3V%;gREaXJ%?EJt<{36iC`vF>Ef zQt%FZZy#68a#`G6pAM5@AR}K-B|w(T;vT*_Io)F*BmhiHmYcBso8!`Vadb`W&iEFd1A2GK7>XFyAE+YMyf3|O7wr`>8 zM3L%5(eBRcgvi1HkA2NW$l%fmrU<|YB#?7mmL=lUW5;4AYh~7Y`xo6??bHUpn4mGy zGKyPZ=aHa^2BE`5G>gaK^}4+1lSpqI$8AeavSJ(&-8k^@;t-W7R%QmmfP>znCvvdw z_oIsa62|V?g%X^G*@XgP^BM33IzJg~I-^49NWdTHzcOxHTyv%~`3$BYR#(`{yp8nw zK?wBx4{Bs85eS0TMMvBDF1yi5I8d}*`m&Z?8(ayJRs2Fexl`Bm7z`RCH;3&oxv1Jo zadTemBF3a$_m37d%H&U?2)H6v&8d?1U-fRTw)04kELl~yOeLBdSR_s{r!T}C%n>n5 z;~4^8*Ls`;N3_AB&k?c6W6ZUiQMn0{1%lwgzu4FIL05=Fi~v)>IP};1Lz12%gT`Dp zY=n5Z&GR-&wcXqmB(A}u45a0qhKW16ksDJElWTRx;b;b0dMH1b+!NJXZTEk>Jb`KGwqy5y-KQTh;y4a&ZFmA#)tAVDrcY638%M-C^0xZU zfA(xP0Dus3d-LS?`fq>OZJaU_?{bZ=umFM8e-pK5?L34E{>h&<5B_mty@nQbB*1-_an5gPxvF3)BNI?Ks^|i#9(p;aS z8jhuI(%(17z45T=9VT`ZoL2C$UAB}Yu9{2My163F7^u$#_QcU@mS?Ot&v&)Ft=<_O(qgdB4=uTE7zBen2|F{Fcl*N) z){BBBS@}_A#Cybq#gA_u*d%x}@V{DeEE!Y0Ff znw9{9d>NsNP3V2j^p<)^hL;a z1wjzaK$?G8izF{oA<3$PxFoCPTtnOWF7h!vHtg1i-LL%P3&{+9@g<2}F z7P+h*%?+)?w6?9Gv(V&*Bqm=e6)N~g|F-ew`7SbR%VBa&w9k}KvVyh`U5|l0E^AfP zeY2c6&fhQn;-A|IXNTSBGSAt_Q2y;BB^o?W!fAcC@!EU$-8PKS!YzjIxdjQsO1UBR zH841|+T;$!=ZNExuczF0Oj0iN*s-y;X}5LF1jZIJ zle-G*x(0^6cvu78m{ zEjg55dN?0KAZ^!t|K%}43A4=G4H~1QB0H`-ry*HX5hkk^)xS|e99O(wNGlB;0|a>|5g210nYoh$Au|J1HfOCT81^%xvaJoq383#-p226tNEk-h?z?SR?5To2?}jWC+oB`twRYorUJf3>V{FT9 z!=@h2>$>$Zb}SA7KR>jzIn*^0D7iy3J^GnPhG-W&xo)Fw`RKFJr~{gMiO1pn>R;~1 z(a)IiY&DDnDI|;fwxi`+gGXDO`CGZsyBS|}ME{B`LVR0A`fmjF+ctWmu4~di8jJHmSSRn*O zbz*sIp|~Q4&1FShH4d3?zcaGUcw@LKL<TwbT2#bGkoD1nn9Uzos%9cG0n>^j*bt<47j z%xV^fKAIpfqO840*B;)dHI=MyI*^K+BxIiE>>BCxO}e+0H8jvn;x8h>gVk_G64X< z=L$>@&f6X?dThRM07FnD7nin6h0?4H zK8wJ~+kYLgOxPoRB~`htFV^t$GS}W3L15JZxvW8a@BQ()QR~`E%Fg1va^Xgr8MS3r zW8K&u&05i2oSB^w4q*2_c(D6BwE_t*9K>$?@g9Wm@N1ns(K?PSF_&g#^H@#Cs^qPO z5XRUNlw%fh_MK`rsVzevj{BE3a~*MRvW^u(P_e%R0HE(Nib{pDdNE0oeeY^A`0Twe z)gvf^hjEkIvY=n|IsI4&w?A?L0Lu1A8^2k((e-Xraic_1m3#kFy`k3xQhkA}vPx7U zu8>3Egucgk;B+g!93HFh&@c8NDB_rQ-Fj!l>+naq@$mj=1CjHApm5hy<<*DEP$rtf zc%o9_)4%M%!>Rb@Rn~9-BS~`V?yR&<3;n4#zaLHCdU=hHq4scSz%%p)}}A zKM-7|9GiX0b^WbD0KnpmJLC(SCu{(Kl9qzzW2%fS_D)gKiW|ES81bloj+@Kb|Kpaz zU3uxHimkY;5P?-s$ZHQP8LU*!P->D?<<5^;i8x_#Y}VWoLEDKMp)_lo*`ig^T_Uc? z9XLB?d+6MFHJX*dM(e*`QPEuzGc-wq1QOnpKixffXLjThZOFGS zH~NC!a8!FVD;_3%&H#z8zE{G2?8+N`9;=uBIeB}=qP0K$YDY3LK*}Ns(&r3pY~Li0 z)!#IFtX>8iZ9G~9Ayl8&dL4f4f2Ql7tBBVn;0fw`OwO4lW+t<=t*AgHdK~;ou-c}m z^Qh=7R(2NCLHF3DhxVx$hm@Av>b?5AzDT@0JuqK)L|OBUA|0%>bM-CysXz__I@C(w zafdz_54b~YF0*Wp)HUZZPuMjV4YCHYpn$*ati??QreTXoZMphpKSbby&OtZEG{!N) zvSQHw-MXThe3Bq9y?$%SygWZ{PY0{4L9Fa5HuRdThDExiti4FyRv6owq(nthbS?=2 z?W9TK@swvaVTBO3zF3`GBDnkBC;(*Z3)RZ*;&`DJ%0%j#9zUK+0;LY-e*n6RM&pr?{fvz=d^T-Vy`TxSP;*i zz=^&yqtk=)BtfpdGrc}hV_2_ncXipvoe_x zn`MVjb3wncZ&Iuff%{Ii-2C&9MeCRwwchyCQ1{DCk=j<0B5-2(W3Az)ab+t~Sw2Ak zHjlagN9#ZnDB1BCY;@nL=38%%%#B(XbdKw94eo!Xg~dr~3|g8C27Ql__Gkn~kR*lM zb+VDarfm9nSZSBkb+Ym9yBgy?vwg}n_St09(W)f-5*VSsNrBcpqo_TsSkP0mUBTT# zl)SZdL{OyTd-d)GuhX=&WL{3bV_-Q%C+=l?q!59UDiKeV>9P5!mv+*@!j^p&L?Anp zNj;FQ~DEv9Tcj@88~u6t--W&Z}?sKl@r|20w0sls;BkY%YskN-g)Dzum{f zgrI=e@%?%%i1+?wIN%8xdQG*5mGSzfn>8Z0g<5)LS210MC}}Rx-7qHhEjz|aSI5i~ zc15R*zzFL~@gi}Cyko3fA%_Iy+^F@FUtK3K>Vp|XU|Ia2Y{ys)y(YRCPXdxoBpGaU z_lX)|QKG8U4zL=B%!BV!Wq585r|XA}-bFt|V7@Y!&D|ur*a6movtxjyBCG?aTLlsx zU6f8nJHQ(DQ}uq;lVw}24KC9Omcr2BY)Z}-?{uCOUb@-!+ zjF;HLB0h+N(j?s=3oQCaw^$VW z#{$7NO&X-#ZLvYxB+cE%@#d%_N3k8-lB~nJt&1{sQldoh6wi4JYHV^yNfb{lE&68! z$PC}SH}lh*?|tvPhW^e^Kd0SBvO)j1KqN{%kDn&pO-BL zd*VZ6zpv&%dTHS<~AP9(J2pvNiY>dIi004&3rIB;j6T9tn zM+~$gbfoThMd_Ud0D$$sn&)lvL&n7klWE#&UvdyWxV{ZQXefqyUB1Nb`4&L5wBlUG zUC-2si*v%xyX@}q@1`d%Plqi*0MM9x9Op3TIEo;E@IjB$>sWDmR=vr)`Se9pw6e1C zBQI#PWL)Y=kJCGNX5!k}Nw53H?BfVoib}Cqm6MZ~#TBzrIuh0oB;d8y$*zxwlXw4V zimhqIxs3Ik&h#&|zuUiRc9FuNut8C>FJD;5-%vgT01!}dxJcJFW16-mmimXNs~h&Slg-R9>i6 zAZSpYKnSOL3|*fLIhLI<4ZWR+L~DMHRJAWZa0m$);8dXzH~nb$hI*^Z?p_@C>jO5U zebwypta>2<5juh~>0Y;Qal%B~Ku6dBMUA<24_Dw^M%Z}(KtZicUMcE3J$kKm5)#oq zDvd_V&gJnWoJex&ChVrwrAc!PU58>*S{WRy;Y1ZxR$l#VgydAUFTdeL6@rA^p3mdc zwa-pmnl?_ZL`mFc;7Qop6B=o`FhUy)r`H`<7d9x`-|b(XvP9FZyi#=V*?NFP!>a$C zXnVVF;_^(?cO8OFY2E!`8Iy+x4ySt!q&zKd%+;O@p&Jr#?BZ14=}{+XKmjySQMRO1 z;MWI4EG7@9<98H_XvI?R0v0YS7?WWa>Z(dy-_lrwr z7Nh)NVR2(Fi@(7NhI1JEpRWD%m#v%4Ww9zpd$KB43j?yIUF6ruI^G|c?O%-4G+Ign z?PI+lh>dBjexQ{4hwc7k*kyCGvzbj#)*xu`{PL8!^^H!a#f8w3s(Xsn&Bc)|SnM1o z9YfboD~v_2eW+ZuFF&$=76BXq>)^BX`mVVv9}YP!uJ}4hA~v8kOUB8okp>Qz^k!X~ z|6R~NreRVR5YvpM<<)l2s+T8b@BeXaPHxtggH2yGtmm|#PPXU!l`KBK$we`spiVAR zi+Vo2Hg;huLHV8_HlVfqU?FwZ^nNx%qtOZ*6pAWw;H1;)YJH>Av+5Nn`G?hmGfY%*1g!c;D|0oHBt8#=g=tS{inO`y@AjMLY)R}nCWO;U z$I(KqB5=4oWtkf^B6MW;gJpq}5WLx`8jpe4bcTup}Y;sg!%<80Ar~eKSd;(MtE{Q!RnI z%QN#sMh2UH;F&#CP6;2;|Hatg86Dw`^dy3UEbU_&K|VjJ4-yW9j%e;xDeGkI?+qBP zEv0m<^;k!1eQ>I}9UgtxoPTB=E()CVxV$}|`VIT_k5q9*Y-;0k|JAuL7HJ1X$Ig5XIwhhJ#Wwa<2cJhVL{k_e#{=VFplLEuo|J@4}n`886mFgR65TCY2; zZdrv;SuYQq^tyfDyxtL6C(Yd@sehz0vi&<1000#4&CRV6+l-EF8#IJgxmrw}NBXrr zRq-8pfipfYajn&F*sp!Kg1W3l*7I3>e9sRm3ueTGO;-Q@2L^!gB$^qYCY1m`{^q`pbVUW1nl}`W3x10!QFdOBUT~1i zfCQvUNl3smue236=F(_j;?gu++q#&hEyBWVQh_BkFe>C~QNxK4B_RW`wKndydxl#= zxV!K_J$sI;S$ur-f}S+8kYMr{b;s4pdU@Pi`yGRLHaYgC)pP&d6?Rh9lvndmInLR> z)i#}xguP>yl%qYVp(?z$kr1tZd*I#0mG`LD`>rz_@zW|P$!R#L;fFf9cM_tBe%$oh zIIdx^vD$~ri|@$W*-KMFt?bSp*IxNxFoG#=GsH}*vR=ODxSE-j1gmrUBfmx_D;M^h z8W}yWkI60`1Fak(OM9Y9UMY^E?al$l!Wtf}BJJWUv(X0QL`ADV$mdAmuKP<95jVFq zL`B*6{=8|ZMc4m%RCe*LX%#B@+Q&3h+e&5vL6NGvRRy*3j`#ZKhqthcZ$T?h!an*^ zBXV1Rx(S|`edzgymfy5(VX)t#8vtTR;$7OzyE%o3~#AER!X&9g~8+U z>MqaB4lMfB5kO;SGi4RRqP@90#?rbxW$yfNh;%P)>C@d>wpte))&;-2!e!eunQE$M zzT>?CCnej;G-a9TTj=|IY|r=AMcUjLA0Zv#S@lxwN|BKSo51KfeaHI)8~)_BdoI1z z>o7U1?olN^&@F^SX*KFru6#Hcxy{v6BZ7h~xjKUs-b88b{$v;u!Tkr$#S~Q%fPmS7 zMQSWm*GI$m|3Z|=W*0)ZGHo@@SUgTI#-s}h_*Ar6AYl7D8;9?jrY+yR-l4fqwd;Y>bepyb(Hf>3Waoy2 zrg8)<79S6oeTlw=&YYbsA^Srz3g0rCebeIVBUKHEeqJeLmLkNL650Hh5-&YL&=V#1>{vqtS-X z>ZphLwX*7CrCCyr#bEFHXlQQDyY3ehUSjl|zV_jYI3FVgNQhQZVKzI5=`h_$kV zW(OB{4y^zIntN64e+ljdrg{uhJ%;ry)y+j@Vn+0ETHPLJFhRCxuY$TRp%_|NujoBJ zN*>x4w=Zlh8YHT>s`lm24jQMgZa`%Kk`h5>b8*aF!w_@)`T!Y#hGg5s+0U!&LooIhLP-5va)jF*-x(Q6unC}a zIwAJY^NahDWR79>VSLeEn+M z4MhzA2w?<~<^KgjKe=0pwX~*{3{F4#&y78Q^JlPyE%zvfR2(VVb$?0RQM81QIRD4) zfbts^00>i2HblD9N?L6i9<3@npgjGnb89o$KVvYQ{@||;GI{X_C_)IYd@vYmZc*gv z96$3j6pgB^|-uL5m|n?uylVx zaz{`8lEs&En_t}9@>+YqU`S@YfBoyrhhEU;1ujRS6nr}d31M%~K#pS*4#AQk&H zVig*3T?#CUDbWOY63)?=8qdDgZl&1koK|xC3>Vv!Qu#5%`f?-fq6C)(o;f6`Q{a4(hoh?(E7%eh0(x^ z3F1g{h!SD;t*~r+W)?0f6$I)!*_KmPt8hDP0(1tds1zASmcW`NmIk)ZK?2vAMX1H| zQWvwaeWn&tRa|?J6h@$gr7%x+%t=dwF}V)Y>cVKyw!%qSXu&OD!HNkummyH{mv1JS zkAFAC{IJZiYp#0x~w31rg!RH!=TXaKT z>%t-xrDejp;}tju`|9OOrs>eauaLGlX8Lxlvq-Dh`@>y{q)qKiTFEej%A>^pt@TcAFmFCc1g>GDApGUCNt03tc#BLOz#;-EA=BOYyp#6DG>mmK3YVL(KFB4 zZqphS2w!lQ#pE)=-f=v%7A>`LOvpG|sS5wftj%e4Q{xR5$3uJy%y_FkW*n{5&w3DE z;?i4J_dQiZ<~y&m%yEo%#m8(Te9wU(TJU3)K^~-O?svNJ|w=lX) z4f9ggE8?y(opH2|U6^uO-H-+Yg%aEjk6%3q1%r)MA1jS}l+2=avSao};xqLB+e{~= zxSWfIr&+4JYJohSUf|f(7G_TeBqDX zRM80ls6JN86|oH?ORHuV0DvQ6(%e@x?qo59AKo~TLn_aricR$7o+ zfMN)WrMy~N#?ZRG^)WJr*6qb@T2q4Cw59~NX-x@k)0z^*K&yK-QeOCuN7z0sGGd^0 zs(Zd9;k5l*7m*96gdql6=Z1{qm!?&euaadBX8IR4tD3SQVw0_HZ}%-tu9O{6@+6#? z_J3hP(SA#3j74iUimQ$@syq4%A%ym&)v=4y!!5cf(%plIdC3~PFcp^A92EljWozjC zV34fb8$$=7LELVK_b)Ge8OODb6<72Z#*N#WKuWMpw1&+!7*GB{GWysqY};&2lmdT( z48`@7W`#w=u}!qD6^~i_w^r;VK64UTPUPnQr!}wJC|d#TrfWWKM$(+jApQ?pEi5ML SMYQGs0000LyNt2v3&E~|-%fTkb*apnQydM@XA%T!3q4!&J_lR-CXb^f!2IQZ=Xofp? z?)-e`-v4_@e}3)@!hNJ3qDk(}d&`4Z#qL&&bMU(6gyjCWS;L!Xy}i2#6PW zJwCVH;_i7S&j^QtWwkFYZk1JN)EmOmz`JS^Hgk$qldc}%Ms z(Q2l24wEa{gWL^>mS~s+x1Db)sKKwuK96szb7AVzyvyprHs*@h93hL9$7FD56egKO zCKCJ-9^$rptUAX`*P>1DNa}-ZcSJ=rOoR?UE5or20GPX>8oqGbX}&v!nLN5kCJ;*V zc;ajlCEP|QY7%_@A6LCDUt)vbNr-}Ih;Z;9_7qC*R{8XS7-F-Ay>q%f2dL@ z&p)o zH$5gHQNwkD_z;)PRZ!^Uz)2RLkzd8D zd$4@!(){?vIdnYR8R0l$gJ86 zWvgw?K>+cOk0WI5d#avWoE>`f6r%KWg}Aw(_q|cAVlAegOIn2aRlKO)LqM?Hu}^l) zA-?#ZBplIAkJn=5WvkwC<$wCUZXZm74?iozt=a?v!DVwRt}V@7SK*cg5|xMw9smJ$ zqccid5{XKzf4H*xs2CBeYU1^~g(*q4f! zF2Q0;q6=zriyQL;hX8;Z?+iOFZU}}BKZ9o(AYkUo;_!u;fFO}u#u3)#7pC(oE^Y538UyxAn<-28R~qV?Yp8zQ3rrF~9$#iG`cX5!m^u(CK@6_O^?@L&nUW=?ySF?^0Sh{`XH9Adi#w(jog{_|CLN9RU9fVKTyox;z=kB z@`0xt|L@-~gDs{tgF}3roTy7iasE0mp)P_roEZ%JiQh$Nyn)b>?=uvm7c8oTMmfr1+T>3`#n zeW{rEW*#63><>vrXrd+UCD_B^&t}|qFP%eeIVZ(Vv^BN)(#w5ryN66C?fYp1cBu)2 z#r~DeEOUfe%}>5)_s0y2rljvr(VxN3*|4iq?@ZWCVbNMd>(bdO-rt?(i0s#_dy*QQu09u7%zDK=0p$jPJA;B-tX?~(Mr-&VDMZ;> zNyVY!M2y-|g2iXFoo`YOX>NWvhBbbr6L_MFKqouqon}`SpHcf@Irduhn6~SUK@e7bVsL0J=cL$|CY_)%$t^#YmbDfcmeRdL z1`$nRl5#HX6G}p`tI_Wf1NFA%*Ps+7y6bx4sUK52Wy@N25cS-4&* z@i@Gff8R%@k-RQ1Sl{a0cF%mT8Z|~cEw1U#1#Ei=hN_N=8y=}7hjj>K8lvUG;|!X! zJ@1Y#-CCt)QB)(VZrg?mz$s+yf2tvMn%>Su{F4r+(UNH->FJ89qvB{H95WEfdAkd0 za$C+xnOu5OdfSyqlxTW3Rd!Y)PAm>D6Oa(mT|J1)8?Eh#2b=t*>n2Cl-u=G@U?TIot^ESPlBKGlLw<@}qhCZG0 zI%D%B#74A0!fX0rZFWHjXG(?uf}qO7B4HiB|D%bRJPFYfO`;L^K2cZNS{UyLcNLgi zy5Ey9xYGa8gwqmLBuP|6i{t{?8OeR=4F{3DVBM22Gka|*;wBlHXzA(lhDWNBHoDyf zY8IvCC(@i^_RSB*!?%n~bhaRKSL7&x^O}Z4WTFQ@nbIrGs5&A$BMINwVRorUwWbxT z&*LLeNgQETp)@aINXKvV~-aPz_tf(QX(BbqWQKJ3nRv1v|_zr2ok_N7Ql<+t_SN|{+ zJ^>W?`~j|~etU3x+Po4a8mEjHm#rdsPy^gPNoB^Pyo_I*!=*ISSQNG(%c{5AF<~b@ z4>EjV=Ey(FL-lcwktor;5)K4IfeeP}Zx@R9Uh%c2M*yp;(ZdgyU@zy96zvVBEa ze1=W$nCnqt6~)|A4vQaiI+RiE7cc^c;--R{P!b2a0QsmnLG=<`lAM zY>Lx-*JGp{)C_Va(SUZZ+c)#=;`Egb)f6Vd0!jS!v{Hv;hGekvn0tOu?f2{WnfJ2{ zK~VGKHQ~!2L)8fWOzl-GpDkBLQ1#Y`1e9k)JMF1c~ zA2pPc*cbHfNsL{pexPJwVA-_1QF#LKBAbf^k?ExRM=BG%muh5n>`R3~X(mJ_5)c4H zi0&zOMvxJSLOk-U{F|400t-lpHdJEUKQ(3X5?Y`a2Uf1Vbt`Zfp6a_ZDY}WhGl)jl zrBlB>c=N;YkkJ%eadyj3qzUH8XcdMV?~H65-;Dr^Kw{(;>)0_wqp5Rk=bKihbeDhM zht4OkPQ?DF8%kS*39eKQle7B|Lx?w3b!k&hw0_Z)UzJSjB~O$c;1vDA6K5yLve)hF zdUFUD3Iig>YWSCE5aq3tOf=2|3kaa|)&7tL^R^EF0N39h#u>k8Z0gAu_tV*1n!tP> zQU_W$}_3nU(yd zWABgZzWUvDr^SVCC+L6v)i(zZJl%-X=$pl+;6F*Y28FC6)?a#M#ywvN$By0f$-27nN>+;pKm!{&TTLKWqFV2o! zn8EIC00D+2vth~XS6>MmE3LS>pzc)pRy`$xR7oA#1*{VhV#=#we0(<^K!|NEcUO2VHw3bvw+T_9eP$qB&RB7A+>TelS@DOFZ()Q?Ki4}oaIxO7X0<4 zzL(l)V1R&;zXe&ziDXzP&7-j>2Bk^AfGybpiRA)XDuXdouCUOvX~$n^?RtGst1w{C zPh6Z6Hx)z^@ESL?3WHU*@iJxc8STGpVXg~p0D$>kbSGe1tJ-)JyAwskk?e^-an6GRnEB zRxab%FZOo5F%YIwrl2PGz|R_O2FKK;`K4Q{fv+<#a%du%p!!%zQr7NWPBdC)_QBsA z=y`7xn|pu)Cc(8QN~NbOl!KbS_s4L>mhEd!G_IlLoU|S5k#ZliL*EBET$Dp|3?!M zt^|aeACB`%IEfVH${?acV(_n1*pGg|M5w4SpOHhi>Fuf!Z6NL&0K(|!iX%UdKg2zw ziMAV^{($4}K&Fw}pKsxc?#}uxdO4?-ft*+N!feO|K46J;FH`bFcF z*9LGISL}Rd+xaFclfp__j$+0UJ@D})j^!*q8NV^j=SCmn- z+CXeXD~B|rU)+|SPE$JOw#Dsk|vB$;2f!7M{LY#C3@Z8y#8;!)LGo3%Xjs`2q^E{el`>C#TvaqOd|B`Jn{1X Y0nZtrG3-8gB>(^b07*qoM6N<$f zcW@)ueaErrg#btZ1POw@_fFjL#M5=1e6nPnitUpv%W;)0+ld?}GqLkel1V(1jH9^8 zwrnYm)vRXg)UW9ZudyC`?<7coBmklkbzcSq52CPdL6ltp_LB5|R_L4gY;4hmc-aZunAPjN8W3{kouDOHdp<#9zEj)28YVlz2R zIuoHY=?H?L9@OJPJx-6y;c-};4vTZ$y9K_VE$x$e69haSzyDhU&$_=FgVBT2^3tVzqLkjV=rbOt@j(bzoJfhX%f_>ZgR zWg9^gq<}!KIG7wpZevESDkHTZC9;bI9t;*EyIwK)(IkOmQUpMjI1oBgaxkaj-U5z* zP0~lOI1G|Trtm?$I1oCL+mum$Prf)kiSWUi84{i$j{5tU6VZk|`o~SS*v* z=hgkoWPi#X4q@Uz=t$Lx!iwVs2tACo1pvUZYFk^hSamkrn!{#TcdffUZq(!Q`1ZOC zHiOA#a0G0wh{F|n|3zrDna;(zZVgd0r@(_4aqz^PyS`p4FOY=tVwc0cGGWk;>2xz| z2DRC>?j~do6of;7IMPd{%}>RpzOb(p>S@MGpXAO>Lg-TpDYgb=y6JeAZ4RJaMpi%){ST@slC<1%QIS_r?d$ zeBudXau}*pmAOqBM9gy&)Pr`tIc!-Wz!{rWn^yZ^sW6p~eF{O4luS`drl|Bt?!ZTr z6RmT2`>fqfc;cvipakz4(D(kQl)+Eo9(t-ttO(%{I ziyt1+9Px=Cw+x+~8u@s7>sl&e1QK4=XNx46A|%qt7652=vt#7K%;Mlm^z*?ZRB_Om z^gUmyf-W_dhF98N9`OG+SCz5nOH~YJu)o`8SRcDQH`}#j)yMAVn5-149;=k)CP(mI z7MEG`KyiL^X2+igqmMv4_}vDvLKx*BG@4LeDEaWG*NjV+sE2|RsyK@FXG3o&mQ`Ep z?{A^*&EHdcnXLKo>L9+ib)%#2y|L*wHS{jd7O+y3LSd?aFX3{99Oj1C4Ml;|=9=qX z(u_p74)t!A?k%i1o*!ipnlP1r=zEPb?TcM+4moWRx`g;CTq2Y~+xWZaX~mK_i-XN) zRUFU99tSA6`C`A@vALd?=89XsR*R<$)Ps(<&h@<)Xcprnv6NM5X+;ugUa~Nik7tQ5 z*q1qWdA93~;ZP>L6aoh?3}Vg)f*^T&lxZc>&ew+)dbJUZ5d4}NF44za1|cMI z)IU|}CC^ITkL-`94 z1SvU~yF9L+?+Nvku=%X&`-_TNvcrlZ2nBvJ_wH}iFZ5}<-x{{8?%IXw_Tos+5ay{M z+tGESz5o4j-(xzHzVB~p@RXq$)m{Eg=hmg1yfCHdixm-EUFF5n5XF&Io2GiKlDr^A z8jY4&ou(*H?L9p@^6?CLpAtv57f0E#JnW?&0MPdGfd7V4cM^AtJKe5se|5mG41tta z`?-?ry7b6?&8Ta8lN49PsXJMc+mu0UNHY`$lV1ODSw^M2>y07u?)~v%8*wB_c{vRV z?D6>?t$!1xtdbWW$br6nGg7YqCw*o>xA70{{17`~Xh_wnkyJ<4nU+q(-~cfrJw z-<%0O@uL?v*I%ME0raNhaiiD&*z0j_t}|3$stT?Qx5K?SxH8wRS)S0_&Cam?fFLfC zc#&2tz3(S2{U1*3bf*liI1q$Zb|epbTsx{;ncNK2sCl3mx(mJam*Lgv&7>05sfvQ; zOuSEVt-A)#PK~$DMG$5zl=D@mD$|Ok;l42jaFW=KkCqqSmDT?0!0L|8ufY{ZYM~@a z2KhM-p564Jq-2RQYaqU>U-?lwL%96 zDCjvoI(&XQf*D8SB8fe|w9t%-R6?9GF$OLU1c8fV>W13)ASF|%tde72u+Xd3&1_yp z_kOvG#f6OTaiiB>=!wAg%;YdCKT}u=+dw5an@*XI#h$lE<2{!!fQv(tBj#fBPylVV zd&&2(uq7M1DIK`&xK~!mp{oIag4W-6FAjw5XihJc?tQ#EELVF%;dRQWlvy=tBNu1m zJ(o~{ivzm3FsMzwfEPLgfnHaZMpk`EB?#hOt3pTad1o|SWo)=eii=vZ2zQah9wvub zd2d0yXAvrJaio{Xum|UFZCWQYD&-tZRsjH@_x3fjaDO(`7_~UKGJGzKbq0cX6CkQS zTg2u;cGMJP0~ZIK1-Yp&4sWifptgl4*! zMTxjmy+eSDV|iRJ%@%JxV%4qtP1lMt$aTf<^~kPE$6i-xG+O_A;~|D&#>+)Q5dd5q zgC9*Q%4GgqgWKV0d!^r>(uhqzK|Sbf*P`!n5zGl^)L4cugmgnul*#HIE=?vVR*E7T z;No!FTxb6CdS*?USRr(n9kbm_cGD+T?WK{`%unxQ7kaf0i_2GwL7F4R4mfmn3ZUB< zlKCmzrY}@LcgPfR0oMrTaiO!FOElUN_NiNM4a*Bt{ENhOqr-3bVzB7gEw01rn(bT+ zK99ndth$q>P`e04yolsvm{)8c{QK4XJxYO;XIi#RUY~bbH%rD^b?de@dw?}!rUM>M z>_e0;P@Srj7lu^$g(8+j_)E1J>;teej{wlxUm0lmMxB2xsh>0Uzdr#Tgu$Yh-?NcJ zOK8k31yK-x8DAV+dGBAZlpe|Bi#eJx-Q=|e=xQUiAf@?<>Lh6bx!NfLAmtu!GuXS| z#LXdKahX;36&4@NrSE);=k6xf3&6sbteX3ap@tBOL?d?M;EFhVAFs+N-#%E7B0-3S zIJ_|phjOb<6jD3YodxMua?|2eP~09M;bfT)vlJ zad;CRPgPP2&ln>wklgd5=DzpFht5r5>j6g$VP{d4E~tN~ER?i13NoNG=(V3K$*EU# zy*aczVF=+J+e3gjC>KfMkdh@j@^^bCuP^kzGv=^_mph0hT5;qwD(X&_?%bg8-3Njo zg?DA;G$;l>m>9V@vuzkn5F!@`o5xf=R+(K7i6^CqJ1j1K8hZh@<(5>O`n_KoJTI7NhD!k)ka1{4+Ph zP5BR79Nt#3gjTGkhyk*^WO<=PGa6p4&alPdaiPw2HwRX?gCb!8D6p-CUCkhDaR3xt z`E6IppHrui2 zFUAx)k(`N@NrS(Bi!Xjhb*eJ-w*vsCZY&I*ox(OhU~(AQb?N2D@ZV zh>7*jba8N{`>kO-6}ugtshjGVjzw>Z?0rR)89u(m?%M|d416%r{{cJ_eJiL3jC?#Z z-=p3C%{oaoBt?oMHpEUGJ#U9s%Ezi-|M-_3pZTY|wr$NpK@u?%$8@_of+9~&o9pWH zJ;#2yXUCQD*&W0}9Cov_>y4qv-m9Bg>wR~u?!jQ)Ybi(~7UGz=I)~Stgvnu~6-!w> z=9=2PwWq>XMlQ^h9L$ZGZ_lE$t*OmUn+u^MJP{`)Q*_6A2}lCSR~07V=Rl z4#R@U3~T1t^u>z8yFL|rEXfideR|KipWQSs2X1s1`n2SU!|n78d^j9GeTS)zh{kg~?yB=+9NtIqxGX25a7ya`1C8R?V8 zCG(Z%y3Nbm_ab##U7fEFtxOvBK3+vs_v8eJba9whA>Vs?nGEmumztl#6>$Qp%A+3O zusC_x>X*@BH#&%(AG@PyEYC%lOP zaP!5!2>O+3hFAOE8^+t#MoCZY% z?#7)3>EaN=s_Ux~7Z}>3>^Frcjh7z`9{OUmvvSY!$}~ z{QZ7brVMQ__hbF|-ad@5-W}1f(7%j5D9%W_=SR(~EdeET20ed|GD*U_@bk8S&Ria+ zM?0z`d}0X&>EiGfgx{;|Jv|n1902c~d-T$*ELV&$=<92CJU>1{M+gsDH7r0f2P=*j zuwbD^@*;_{It|OmD8Xw zYAgdGMEY!nEnu~Ly^aiX6P-!N>LbVk6T5-(M*Z)0S4->`+tnwE7)*NayJI1yfeWO( z{okx3DbhzE;bA>E>i%WCtP3@40V|N~@+8n0?!*x9icgv&?s{`LcxP{K1K$JL)%O=e zmxqKP%N1kA(Q|rKUL?V;Z{}_-LCs~-9nxnmVq(2bPcN07_({vs&}z@yqXxBUs~rpg zKtqs&oKHVNzj@@RkfB4gD^$(TiG%9@eGP~J1c4cw0Tg zDC46Zu(o7|`i5vUT5gk)0rL#(CgN=1^Itb&93(+!(CZ&5yY@VM1Ld^3bXH@qw=?Ob zM{-G<-6yOY?K2&VMvXPxN(#m$%f|05s&92STYrO-Q?JkruTEZHh~T|-Crik#+U{C+ zcfK(+)3FFp05+_%8z(x9lkHW8Pf?L7K>w+q?jH*JNQ1gwQth0U{H~9W4$9i*e|wrmHXXERRFN)u2=yFQ~r1h}4@P zKtcN}1Ab+Ea-4?HBDhl^8={J6zIU`Zd==S`{H@AcMC;u!dF zqV{BI9Q*Y6FAw4F4x+?vc3l2VCvE^`xciQc*8?OHJ^6{7IPgyY@P%oY!=pM?ap$Cm z_;P11{<;&I;N$Zr9C)%JwIC(*0Y@**_Psk6jWXgX4q=)Ad(daMnY=d7WHag?h6kDM zJ^=7;PYm<8mCNfN4tpWYU=r}v#Z4Ufdz6D`CLLyYmEF;cGgh6g`KvYL`Q8$Tfe$BV zI&k~$7Tuj)axfOwSS)e->e+mj>QrUxbKSoGZWwqzwTWNoTW)=>``~vP>ASjW_S`K^ z|NFRc@bV%_!y{#}ozW-6^LLq5lh*k8^3Kh-#qYS!;UMj4ggr_)ee3%smEDNNOQ%O6&qe*VXlaM;5!XLA{S#o{O{=b zdo!7A#+ z*AZIF*J~3Y%q$_qu@U>9df?mjSDx$kxZwJ*>ekQv*Y$(nZA|bCRm-aF(zBf*Dq|C5 z!(4S+A9W9wC@bY8PBCN>MI1C5O;MhD=zC39e%FOpBWm5~xbXA#gHJWe65v+_#btM2 z{B>spnfsep4L~d0pH+4wpNzRhKmv(lqo<_g*bke}|4$oUmm#Okb@7)S$NqkAa)vPG zv)i7Lk7uxP%OQg#X9^o1Esvqeej5@?96rzZ;UB0j{<7VUV;^(b-L21cf9A(6iMGE* z-RSt0S?E)20V_|Hk&-C}02t;?GaZXiABuC`MQpx!lq8%uyt&s(;nAn}UV66E0;>wN zQT5$6cxJNZ{^FQVEf|YKD^Niz%4E$?RC9&5%MvwvBZjWM(6c-d7-3}7+qGl5^io+Y zrW*o@C=PG0$uz<7e`r4UOdGbippT)mQ>BM;6RHTL7FPXCC>PxQWJ5q}M4p&)@Ttc4 z|E<-k4{WeSi6bO9N$kTvX!`gU9Z-Fs9#lVXQj{gi_vouVhdo$&I2YP9lgVZjAI!P+ zmyy6hG!ZXZh$nHyL8H<5V(!tW_gwx>r_WyG#}{cELDMo)!DhjDYuDiW+0%+3Wo@v< z(Beo!i^ErZGN(bYI&Jiui0~XS@dsw$4YI(5IuxVn^hr30E)E|XL3_Y&K}sT##VWs@6k@)SSV-?EZ01GX$G3PpPCm&EFjrX;vfuVrMv?f#I8KrUh3D)u9Y9n z_j#2~%hsW@Q&X_a6gmS@ke?S5I+QpFgP+39u1lZm)?lBSXq}&Eo%dD(0szmmxRJS^ z!A&H~4J8gDsr_8Z;^2zg0k0JnyoMN?&#F!^n=d5}B1w|*_k6huud+ih5N{Lstpn0p?p%&u3U9(4HJ^x&CEH|*}S zZgfoDR8QShOLN6_Crjn9qTz%?iGvjKR7!b~r2Un_rJ-Pr8I;v>)fX#yVvgP7y!33R zK4{FT58aIM!q3~Azfz4?_>e#-agc=|g?H$w#?|Sy`5ujSTyI=5dz`4xhri!toejkC~=UBEHByDgTd<(x}6LiP($(B3q7GL zWAj}oXnU!j&1YqiS$v%mM~v_a0%rLizcROkDdH0%U9S&il*`C#I7f*io;a*7Z%Jny zI6^j0#6jJtdD#k0`m(LrC$BG%SD=g%M?9HsQ$v#&l4ShGFO(~8w@I|E*$2-|j`O=+Q%oBW}js0qK6VkJW-U&u;N%A*I)W=*S;+olmLLKo9d2N2e2b>MVw?MSvlpD zIO0jJDr4ZINo=l)W_b18f4P!blO{;vxt*S+p%uKwXSq!oAnm{1sX-0L}s;vAJ zZvNiPqW#%CF^TJptx)2K9ViOgU+$m6--8Gwyu&|G@sqi3r$;|$w5-}ZE)=07Y(6VF zBS|P1#JIiyC63t9dwMj8GMF5Ozlt}L&5##LVv~Om1WFt+VsUU~_&jd&HWrV0=&2_1 zY@Lxoi6ce~o(T-%^21=$4}Pc77o?t0P~wOY`Z;*Q5}kqU|3-Z*lN>{b5=V@HhV~%d z8u)cF=v5mTlsMuB05oNlJd@0m0G&W$|ipnY7l<*N4a$Tt9C%L_IQjP)0BcTqto+;Iae6fp@jXugJI)K58eh1H=(C zkT8p6?0R;BIDA3dpFU+9i&VnTA_Co2+_7re0phrw>9Iv0r2W1(b$I);ycd#<&Prr_ zR^qb*#6i3LllCP7AvAc)BceWOQxzL>B>A%vogE^MKv9r<#*iJ8T0$!S4@t0LR@h(^b literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..b91a274d8c5c750048a6d2be360165fd8a3c3ab0 GIT binary patch literal 2974 zcmV;P3t{w$P)% zX;53&702JAeHS2*K!Ah*fe^cZ0EvS`?bxo9IAhmwoJ^Z$GMP-8X=c)X$k%@DGSitP z?R1hhT@p9rPE#k1iIXO_yxe#}fj}LMu?E{eODAd*9Xhy?5`q z_ndnneE4b)@V_X+f7^hAQVL)cCaFN0n zG&MCP1tzHBRdto}tMWhye6WmZZz#BA9u8n;% zd$^V-P;9W4XXQ8*ilP%=%&U4dL<*t)sY*#lF@-^Tus&DFn(s9@R$Xy^iOMDe0N}Ct z_RsiuiUC&DEiUgY1^^%w2;F^uTt99WwG=j=t0v!%goKcQHwd5rfef!LSX~?L*uMY* zl6Il&co~yN2LQlj@l1WCox8n^A_qGnqrq}YSPf5AV&4iu@BCqGMYY=UY)!?(C1IE# zqEnjng7vwE4xHoA(P4` z!$jD*?!Nu*sNa3RJAuLKV`cIal9={!g{)&oJ`$semWA4?x@60pkjp zd1csOuo@jp!^THnX@&_{pVZvZ&EM5O`bu+Q4G*trp52)5)vqsX4YOT7prnc4bhett zp`>I12!fJ!VNnfl?9-WrKEr;^@;hLXj__-qxxScN!p1RN7SG7XQw?XN_@6;vu>X>J zX~-DW3WG;$y->ri%1hf03XA;E^L3Jr;(<%*3~+X|4F&?m4SdXWe`smM*m^;ZL#nT7 z*aeKLqaxfT-u&(G>YU}i20)&4L3IZvX6H8INGVaMYJ8dRs=1qmcsB8*8ftse* zK>!ps6aWC=b@;XYD@R^#!q>j4p1CM0u8`S!QJ!1M*`x7v1Q8&vkd=8mVK9%?JN1<| zSIkyj)nHD1YjkM`4D?*8K!$ZN=Z1UgD{bU45|vPUx}xHd5`1pRLhX#P(SJ-wt_Lou zS$u}NM?=dAdxF`UOGqd@u1lKuit{oGlYHpbrl8ns#rb=B{KB^4yz%xRjYGlbL>hR+Jv|aaP176Vwxalt&wjHs^6_*e zsjB>RR(`TveyaT7x^Z$~C^qo6B6&Jag=fFo`-!OD}^1k*^K-Hrm(TUP7 zQTn#WRdQe;ma%bJJXV8!(_rTov5*iF*;}E-oxxEA9s6Vkzpi<_tWchBp50J>HV2@9 z^0T?}&f?f?^3qajdx@G!7V0py2mjNk*<%u~qqZ8i{4EjRN=c;4wxM!|SgZ=he;I*Q<&s zs)R}zj7TAL{YY{1ouPHD6##&xVIzv79WT^p$foT#^j}g(7L(e3!CW}41cr`Ou#mkT(RxUI0NTkNrV`#)4;3o#I+=cJiRO5ZEO zMEKzs8wNg_n7^yT`s9!?Z7{r7lj+2^=V~Ds;uf*$o~Z2qK!q2jw>y>5JO)Bw)ng*f zon_2NWpD}rA5I_)MI3CTSEH%SUAwgp6LjXmB3H;VO|5(FKGjuC%?XLe>Q!IUM2gaD zGb$a+>k4YWTdwNaLfWRH=TIMhv0?V+qHfIW zvHPeja&bdJ#gWn^w@$MH3;=-IQx%0W-rOCX&FCPIU_mvnR3W(i?nva2i)+KPuC*== zo4Q|bO=dZkEnoluI zi_b{dLY9I#*IW_5uez#HUDZU2>P}ZcNko9z2#yb`r4{TFs|L4zcvH1*W@6~iJUG zIIZnI$bR!TLr|jZ>h-qx;weigLk(724~Wz Ue8YB4zW@LL07*qoM6N<$g0j7^ssI20 literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ffed439c0f30ea5e6c1504d9c6c6aee5ff211f GIT binary patch literal 6076 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 literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/hems_application/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b55b3218873afde3c0efadf8866c94f9af0c1774 GIT binary patch literal 6396 zcmV0ssI2m!P+H000=nNkl zcW@imoyYMOy%CK7K@hB9?@c5{iYm66V_R`tVmo%6VmmIEjFoZI`P{HRXaJeE5N62Qf5QK#Q1fX8j z=S6)kpUducTHVe?mwnFRw7R#hZQGyd3Mr8BR5@~$P9{s0NRmY?4l~FLA%v#e6W8DC zK)q;GTexG0ijWCvVPHQBl#JyZAi5 z-gAT0-g5^Nk&plZCEv&{Je-9vkxftbx_t{~t95#5Y2N9yx|~+G&x@j76hg>iGZ8kz z;xf5H4o}44iZ~vp*LZbgeq=F{=G{|-FC?4KYJ8zWou9bzX>%isBdrtTy)*M8ix7oj zKaOT&!W2@b6*vB9cY<}wK5%o)bbG=&W#9N#009625QVhNkr0lMsvP;gm#f%3 z@@p+)){f(b(T+*RT3rwpkf%u$X%ewYC{hZ9GCo(#;qY0j!!ksnYsurVIL%$t`jbYV zhn_)(K*&NS(0)`=VMb$H#r)gw}kxbSdRT2(TFggmFrsMa)n zpr<=!@Pr_wC{eKgpLP*PREWaP;|Beg{i{b3)WY&(c`2o;@RtPu127RrWI}SqoWxA2 zK*EC%y6m3WLCccG8OaUfnP7!va+rHxs^lkdamU?Do-2Q9o#>s#{zO0tN#J;r!_0ov(%mo5mPB&aMhp$X!nsN;P8KL6_Zq z{82_h);qNGPy7@t5%CUi2BgWe`sA*QCq6o z^Lz!u+NdMC?C$ZNnVA90{OIDsgw1XDM9^{)vKvz?9?4(NoL(g{LwfY*_1&ij^e2s| zFZ{lV*>P-cuv>mBgFGK$BE=76Ys-_GKG4q$Si*QBPs};`^LpaD zCP=dPq@Di7br`|V2*>6^Ry|%IRta$jJ5L&io5!(#=N-tXd@P^Tu5m89^k4S(Umx`a zShEZUgCk(ev|^D`$WQPu$gwy~go*gP==|tn|FzMO_8^&Tr0}q=@NgD$!@+vhH}BkiB}xtBs49yCSDuvPTGhSDW+ZNlvELfCh}v5AoKv;@d zbLVLLB=#o&jFi%(+`VZ@LF`kemaA1c^3_3m-F9=Cr4Q%k?n@72l1hXtN z>R?S-27@6<7HuqKdUbO7BY8p@KlpoY3IHIZTB9jccAhXAE)7Rw1jU4nge*Rqjq5;; zMOWu>17mr@zUTQ0;+VEDVLSiZCdY!yzdgcZRXtIVRfiv$HwH!FWZ&$1pN4AGgbGK% zu6n#c*PspC2#OW!3Mp0!k_+)$R2^URc^v+Ex^A~tou|NkYM*nQ`}Iw1Xc8*;_x)s- zSc$iiHbsBJusA`oVFD0Pcqp^@f$Yd%PMhL4f?liZJ~Pm9+(4mW8CBL5Qnx1+*Buw9 z>;pH(u&!2iEEjh^>O-%--G-?sRtfI^=URc3x8BVmgx0C0`O!t&?2^Oc^16Mf4@D4Q zF!}DKobI0=YBG;>OuB-zDcC$#$wN6*88xAjkR;syYV~l- zcN$wiwI^(v~K5o$Bv7GZ42%5V?@q4XL;zL$}7Td3ttZ8g3g4 zLfHIK54H?l_uUd{3VulzLfCU=u>Fg^;C%qNV$Sa8N;QRen>kjnILxw#b5qNbuD;b~ zonDG{b4VZ&Qmhil)9`O2tULOL+y?xRJKQ`zXY#L5WbD$UmaB1}qCWJ-pF4+^FAoNQ z09}K&^ub)7IF=oe6nUEDfq!r4K0DZRHtyW}NQ6u+SL4hai`j}fv}HGF1(G$xrpM{M z{Yekzi&gn(KJHc!`j=!^7xOk{>y4UFVR2cd59VamrOXV**W`pmNNs5n?#OVRX z^Qzze%%COEg~H?XV(&jywj8Ii&*SSpvyojVPnXm@9oI(9wu5{gIXh^XC0J#>=Z7>! zN@bSJFO?U){$2;R*GTk^9BG?$E|RZ2v$e{PKo6SHYL^ zri^p;SqFA}$~fn=x>gtMRxKbR>U_nnr;3R~G)?4$=xGia6L;`?OkS7o;+rjX&y`Bl zBIly3{U3(ue*8KdFM(U}t-Op~8rrCd64V5`&JHge|If>8J`3CA!jV;%QuRdPrp|3N zkwE2_OH@%H<5hpVkhsD?LpjmvB}_Jwe}87-p)9&1ZVgfSmY0p1qA=V8Xu^hKA(?EX z;#>JSd(&v6W{aUx$kg(r%EtCJX=qa`&dES7|!F=rdd~g=z$aCZs5lU-?)8ZPY{$u8_U!siKS;P0PpKq`ung z5rUAKVrAnCl}t*5!DvWPX338HtiJi9Zo?(=eIz0w2$_E%gI00N000yn)c0M7hq-&Y?%5K0J{lp>64EkmJ@@OTU~*Xx zH;=n)?tQOR)5B~eL`6u{hhBTDJ@|~|6TP#yKk3=^WKlF4bB_=eA&pl@EauP>gc&ZG zGHX((&24{ALA{U=g*|5m@JE3^tRQ2ThAZM&r|ib7BgA;_u2cQ{UJlk04xWVxo9XuW z?C`?Uyc6}IY#vLZ7HNuAnj&TJ1!dwN>V=#cve@U=WYYvpu=mBv)iMN9jaXZj)bepp z-^Jm;)68AdZik1%XH(S@+pMGI<8GoII6Jg3aAS-s<`f;y%G;l@E#kj6g?b@phwy2+ zvT9Rs#Uua#6_4hRv`qvC=0gYj<=vbt}7(mQ3G-}8KV zgh@%`0qTWZns?xi5VJ1%ccfWJYI#!M#WhP%R3*kWcTZpXeGBT{d zEewb@bMX-!?)L!@Q1eugSwH1<-AxDVvbk;3OT-kz+l8pC?36v6W7bdMtRA1+w?R@j zzLb}LKR%&W7}yCmGch$HmIX2?M?SW8fL*dUX(87jNfs9#(dkbFTZ|PTpy3B))GP%M zI{JE<)``c_?OdEITDu=54`jRT9^BduDS!#;pDU#*1uI8@|1~U(+lb*r5QTGunuc8A zHcm?sEg=B{s=r;Bm?>@ksCxq+YN3K(|GhG$PDa&pW!i+HTWiv#=}#Jy3leeroyIF8 ztD*B42n$4RGslqV`uS(<(rAj5hRddo;|A1=uG%sX`ZL}YAJwH-B~!bloKm7{{abI~ zkvY@i*&ShZl>Bbi-C|@+!e`)OahXJ#qm*rWmo3R-yzj7Fi?rYeALi#)9!#Qq;Cm8Qu zo|tprk9QICT1JS`AC6;K{SyEHVJOo0-#?)ZT{}}q0Q@$yJWbO2Y3~L$vnoek_iRZd zg?vaE(@)*{ziz_eka`&)nGtWu&J+^UQny>HEmieh816XXAL0USW~EMA_HeE$M^5<* z+hVp}eY>43EoKN0T6t53Ld=BRnk?^JAtz^Fdgt;Q)AC@&z-;E^0wq@NG|JLhqc}u>5FQ~SS7`QRoeVX9P%V4m0%mY8JktE{_p+ti%5)whc zzL%=b{PM=agpIgzp+8~tIK1nXg^d#&3$CGN^X!ntz5I^g@L7pjva|}d%jRzSOBd-S zwa=7nnIF*B89Q7N=f0oToc~=DX)(GxUk&*@zFkii#i3iGb=s~!VH|21$5pN~-JWRu zq=(I8p&lR6JjuU5BfWB~Ot~$#S_M+x!GEc}_+|@fZDHe;5wFWv_uZ1Xau*(IHs5?- zkE;>A3WN-|!|!+r)=nu(GBGMTx?OACzx>>iyV!SqKwp{88ogciTtWCW)U;8Rx!w zqj~?U)$G`52~pVmaZhO1EO*Do7b{|tmM>=C6pQ2Um$yIZz4O%&@zZJJeCwyZHBT4E zqG^6cJEs;21!x3PUg6;^%rRxkIM;o8fLI-Ly*e4uCYHk&0HE@*d^V4%KS{E8*nfRA z??6VZG8UQ$?&>0?;PAiRU7(R^6H+VG=YDk)S59)cWt=oVBHG0GJp=$KeJB_8LE?lO z^`fKgld%$Vb{L<-qWqhAxCI)4gje&OVw^VusX@L4#KksN*|A&}ml?Pdy9|ghg=r+< zVs+OG4pimHxgt(rwgjpo14AV)gaiN-AI&yi9>4LG!BppveM&H3M zcqGXpT=CsIUkz0~QHVRO>r_9k3nr*z3(2fa+1i$_KnqEZP|nxw z)*7#j;Ep>it})BHdH-@6(_&RAnig_h%8unu_RU(SmV!8!fxT8s9?Zu6?en76Njo+b zVR4yKjhGlFMlH0E>%tXs4!%}*;f>~bLI55SMTT_$D^(mmduGVedv4I&H60jX0)T(U zsjE*-t5ip6la3a0Blrp2L$BAheB9lCZFGava`vWGKAI0v*z|$kcojbyW80RKeRGq2 zb6uzU>%U(n(^6ktnig^sSR7{UGbOqE(tFMhnp!6UGXXK#NJ@#S;9#aAUFvpt&i$ro z)4sbfZae$yn}=SnlWHh-^UiB;x83*C8VVOcXdxrT>+|nGL9gI31rr$lpR}>qEMZmSoL_ptq<3@zfKzFD9p7*3mGYklXy4X z!b4fa({%OP_AmO}_Pc%8YjZgXl=pydX?ODB}kT>A%)P?k*b! zw2+ZPT&Z!{-K0@F9v5D6+G>p>_!7KkBW;t!Siw2df^Dsv7C?YNO4(GB7BW&)*>cnE ziNGW6pWTtCCMYuQmcDRWUDx01z+I@wkWlDQPYW3-%M}y41GAR89p2NwxRJL%J*_gC z$w6iYES)EeM1R-Ray5m`poNSSo`@q%6ySzUh{E3UL%ruoe6KM$LUvXim0QrXkP!h< zcEi4L>Ju2!LWW8A>4E;MYj&Ggq9m91DSaN20w(G_Mae@s zO0xZv$f1P{2jdk}+h_QUuULmG`(|!#W7@=>+1cS`H#_LxnwDrpDa9(GoFBa=(L#ny z|Fw~(56QDX6dcSfI;_K{7SzrzHiZ^4H0DeTH$TvmCj85)ODTUOW_6ipAwy%}<`}7p zsTJy)XG&ri@<0n28nzh{H&=B*V*U5awmxq_AheK?!WD5EU#y6ErEglukXfEBu4M0m z5VCp97$&V)CH5`YcKBa}@aw#Y{+D80gaXn+hDCUl0HO&kO-n(jR}h)YfwDv?^P z?j=v>aYN^ELlEa~2E-Tl>ODKydv0B4?O^Xpwms2t+=!L1i~MfZX~%~@`7-?WQ3O5x z*dfqD?hxWgNaCnPQ5I#=+r%_Oa})l=_k?ozJm|9 z**?UPkXWVfmFkj|CN}>%Dg& zcW@imoyV~N7L_1K00c+^tY8CsCq+_Sc5ElI6}iZE>?H0bah&AlX6|xxxw*T{+|12f za!DM=mX$cMV=MN>PGnoL6*-bgQfdz8|4f-;YFIbpW8Tcp!ttpfl-o1^`0{?1Y_m z$Z2)L5EALu?M=e1dYoJ!P7?}~1u+s{jF`(2u-SYNpaa-XA_(HJI4ydcdCh8AF^ylF zTbt8|xwU(haHt+5;mV6;vTRX;GM>$6`FR!q04yHJ;(@}%m?V`%S(noEYKMAYmE^|m z3rJL5m>iQ{nXD+0#me{qfYX};g2AL$Jy`I;j~fYU-M)qt)sylis^b~5Tyf}PZzV>| zW3m`dJ4E0$_a_9aF3l2^+>?`#8BgqGQ4A|)N^(LVOm(i1U2&f(r7V%y{_O@qkee5V z$++@9gc#K`YUCC7t5{sn&(FgUY|>f`%VzVs)vC8y4K}A8hMh1B!3>bWV9}W%1LT67 z7#3T=;s{taqkW`lW@%VMNNXuVRUH6ml@AnTA4=WvlQ0CYPOPg3SC&S!Yjb+Y0f%^N zil7Neb&$(E_+(jPp2Wvz5CmBo)=ai8%=a$a&5lrRM?n<9tImt#9Q|&UFe%2{2OtML zeq(m%%9L@%jDK$qGgitINcsGDE?3BA@j)hwL1)kr1c4#MX@~4ayK&V#)3s6c7f5AsD^WqnFUbuwSX4fJ*_E?E0W@r56M z7DQ7ia0ys-fs}XjJC(SSBQVl?akTH!IBmTN+^ zfnqCxsSa|Oho7s&wWZrFj%&Z^Ru6t@C+7%QWvBDftCB-s!8@!@n~8u&JA=hg6iJg* z5`mNta+nUA)1u~I(vxJ7Tf`pdTU1%vxYVxIWGH%que zHW7`a4PBi=LfdtvGwJ!aW#%4BXY;lh6%sPz(<_sm_WZHtnZA$5_sJ?F0M(NV6O?rd z>~X8X_UX@B49lAja)1GpoXk<3$Ox#5JMEBFZ*$rp7=md4jn1Hh945$R+D(q(#_8cJ zQ~qBHi!@tQ{ZK)y%mMsk zDUr3F?+?Ax0{~4?A`>PFf_uI>?a)l;qDkwy2qFZ3Rj+-dh$HYEt`Qiy@kY<`=;oR# zJ|(u{$ufb2=j|d0f~W^qr`r}523ARu`AYy=dS!C)$?O=h*Y@C&TAn1!7585nA8DL{ zoxvLr>mM&oEl&#ibQ+CTcxTq%f8L^Nn7FV&TG3VD$fd%WkP5%+i~$&5Sp-D)PA zfqMl6MkZS32QN=}tmsg9@f=}N3@@I`5wJiulfj}R2+d(}s0UV8C)We~i(JGd3#uP3 zlw`yOajt7%=^49fV=6|zH=9GyF7)F`ww10h}q%g(BU9A?SgIoRWi zL#zFlCeYV$a>0@3D!oa*Jg)6{chJNCi7(b_n-@mR>sIu2 z<(UFp)2!X%XnM8N{nSU7bLFR1adLtG?E^VXQL1q3MQ~w&^rEk3=N(HAy^CXE$FLfn zESqXu=zK5WP9L4@pnCp^3?|$2Gum0*X!GW%n_iWiR)O;Xb6A~?FL$g=tfBwq2w0V8 z3Q|gCL0D{dw9h1|BvlU<#CV@YhK{S#SGziW*Pn+cZp@K)qwwHMbrv7YYDn=oh#*Mk zdqe1m%@MFF?pI+?gdA|w*-p3QiFx9>Z9vedFf?1?=ejm~r~qOZ%oo~t^M>Ere=1Z!t>+8MoeR&UgpE$cSO4na-`000<9 zyxGRZ>2a0!tHkL+F3duQ0WylemYq?P-1(=$`M#A%H6v)es-9Yr#Knxs>cQ2uIRk3* zD!&(JY@h93?EhpOeO+`{mJi8|tLBlWnW@(KfIKFcY)0|PoZQ1{q3qxhg&=`{__@lN zPIdeL4eqY}K(DGR58#;GC%>3SU*sH0#qN~b&5pKrHcbkNx#EI5vv99$w>Ww)j*T=< zBXD5Dqr6C3`9OXUJM^TITAq}cC+WU0Ja%oCwoAr)eARhzoCKw(PrKdXnCo$^S?LTw zbs__MR`-Qr^e4}WWz{`aO2_Mt+8JHb*-rDCHK10y+^+A>$9jlA{k zKAqa@+%tN>S3S8f0Xr+6Zdap@t!b6XT%qRzUB74?zrMMosd>1FBfv4YEsts&U+r*M zoB=ctaLorx?#}Vw?K)B2S6^<20tsH>3fZ-f7AL8E`QSzsbSAy}%MY&}=J(`Z4Z8Uv*0UA?75xq5BWLA;l*>R z&J^H2ASeg~NA;DlHM_;JwYzI)_3QJlWx6;`h}}b+>s>-NRxFtZ6j~-SAjaTNK^|VeYs|W^Fp#f$l&+ z4j4fYk6Fynm1!UM7N-lVA1d6{v$kDIz&&hrV*P`EYZRvm0Xnccx$gESwCZikV_I4E zm!q_K-8$Rt`McS?D~C~XGB@W?YBZSB_aVWItFRMZ8DGO5zyA8oh9}BUQ?AuuyY|~| zTpv?KiLCO0d~cDF6k&kKr>R9}yZqBH1X3OYWat)+*k~2Lm|K3YDy2k5;7uulfcQC- zVHqb{oz4LAZ_6yWL&*S%aUP`zg>cNA6O{4Q4;A{zZ$J@d$W8U(ror3D((FyUYr&T1C->0IwI3c7}BjZsfMvc7ubRIi~>f+%hDNl0OzcloH zJU00E$>5SS1*5tkfmiiVVPY=j1Q9WqEJo=)x#^Y3t>^oKNaqo->UqaAN={}|=JaSF zPA<6ZhqWV3Go9}Z2DG#bOm#_ST>0s|z?(-w7A|L`BWc`wv> z=MGGD_2BCGjXCL-5I6x|s!88CZBC=cf~J}QxlDnCM`x0fb7v1@)R^7#IQ^1oJizoB zfvJwbNXs93w;p-;S9kh<`tqoD=*r~6!0J{X8#)6>$P(oqNs|}Js0E;(eEPpFW^M51 znlO2$nzWX-KlU&5;{^D_kgHh4(y&IFEvkC3K$u8v!;?-pR9_y`x+0!-O3J)Es=f5z z*XzDrq9~?ZtjL9Q)mJ9guD;afXKf#+4f_1Gu7gjNQNoi7xvJZY_U3b40hMz?VC4Gm zZr=5y22wML?Q_Ugz5BwjMHg_w7N-qre|O->^OfW@ih@kljT*B%(ZN=@LUu;AJU%6s z&H&ct^pmX%*rGrS{VU6(T5K3SfvnBx)q|`0C6nD`N05y*WCBmB6eVQElaZh@svuGI z+3qE*nJ`WvIPv`&x3wpwG%^2nW%Ic%?DT%@+AK+`FOO<(emH^~$btHXlzlxfxHOo% z1rk-q-4!_SXt9TZkI7=xKVJIbzc*U-+ftA%jSyd-6L!L#?+=YM`ij0YX)Mj>x)jCI z1K%tL_oywB%n=?_yib&dlidVOcaTz==;172(b*gpCxIDCASc}PYKMAY)sN58=6aSd z|E%Tsi`Cw;nD1&xRNZ0o%rzAw@tP_Q*RpH3IEYdmL1?XS_xUL~%KE&a>DA8TFIMlp z$2^IuV;_q?TmW$6APJ0ko$X!>XjcklWqfV$(@EU4E4vyJRcFVrJYwElkds0S0}bh9!5JYl^#yZ$@`*&)@54AdJ3hTySlvt92GVb^%6<%H!AoyH{HpwVch_vCC% zZVYmmIfv8Yk_Dgsyu~9O>`a%MQr%w?^CVm$+tW6O(9lXSt`JwmWy!G_adu@GAYECD zlfF1Ov@<%7BOsTVeF&$ri8NazFObgnZ5w#j=MAtE-b+pZB&yC}(u=>A-SSo+_ARFk z(oA_Ou@%*cjNocV;DU`DkSayq0yYw|;yqMH5SrC!-%H6g$hE^~9#G75EvW|r%bOps z5D+_U#y&n6-YaI|CRq%noL>||uIc~))IVNw^_Oj$XQMm;IZ#j-*}_Pos7^23Cj3}C(8(rhmDo-J$`nYsdb&&AWZVC zF$OtdY~C!8%VdSUx(um=<0lMqmf$&;-M9>+~uYtM%}q`4Jm#E~75Z&)!ImdywfK=2A= zhYIcXM-92>?K#ofn{OKC=SXf4``XPRb5FQ_*~` z%jriU5`Yd=Jy?)c?^&>vD3-^xH{R&kW=L@99$<$DHYY}b-hCgbj&2Ry@z3=wf9Un* zK7|r1<5xdiD9s|vYtOJ^YC78)LCeqnQr)Gflz-v}HS>KdJs*s$E$Fv(6a-<#uu4wm zDC-pDc~aQTj>cCyyu^frX??iwR7anoiXy3YTDLZ@M{aq4Y)qknczJC0L7a*fL;*u^ z^KZKJi{9!vBY_GZ+(a`fR9~H3Bij!e7wj66R1g@s@kY<$5WW{EiwELv0pMaa*kK6X zXmc>l4!7#Kf0*6ky!vwck>@J*cIlVCkH@Cl)wpko(}c&rU*mt?w!i%A)m;$N>c(67 zY{(9M_Hz5dr^@$gl0x<1O5Z2=1syrD>_g91gfmrNxK&Tg6N^$~x28!%AE=u}WnS&5 zd#p5StMCSmPHkvD*Nx!L*#TPJw~E7@fHmBz0{~F>?UKtsZLu0`sG-3%i@x=2f+6JE zZ@Zn}D9j|zktUoVFygdB2!b#{hTHeXYOsCw>kf~tUN@zuauf5yU5GXUv$ROZxtO$; zvF6#a<{6iz6>p6t%Mn$bDTv4(Zp2n@0txT-f2eIb+v&}L?&gINlh#sse}2@4o|rV2 zrq?>xW__n}cFF3pn{Hos%q{_=`2T0j(%wpU*n2(1C9iN1;=L zQDeFMKR5i0&PUttHnYbh@QyxT8NoDe5w_AWS&V~EmtTMVrnh>3Q*8?X1E~2%5g9%< zL4%su0!_$(+5lO6*3suHBb$FW^0qk!lV1NsY4f=*Z;o}7U(7pgQ2k>i(KFPKG)`;% z_W%46z_nUA_*8iiN&1K-@~XR>7wAC!V_8%dmIEg%)`%CxVI8AYvl!BQ8vEPfepKvY?)8UjHgAEXiOq_VsrJz#kKH4#kbU^Mii`i*WH)cK&)}XOW}-;- z4L>z{?W4s^7SrWNyB!2Uc3LBa37y*LaU@p8SKt+&<;JozYZXIRrnVk5ZRF4;)jM=Y zqDysjkyCjlA7B6@SEtt9gkv*$4)1Ytfw#4#C=JK$&StVR**6+VE$-GLvG7P2`uI`m#b6f*|H~E98IyfW{H9!2j(41SDnaYfb`+3QyqUA^nFbjLIyvbTo_n6_ChszjS~2iI(|}_jZunjc&o%_)5o#K;j|-f>NCT0059G zMN*~Lh%L>uuJx^6S|Hm9+G$;Xw{)zISG@{X|jjo)#ghHuKE)J`6c~t9hFitLTIm2&p{saIZvsQtY zH1qiILjMY-`Yyw;V#a0^%RQQo>+h?qOS$>Mh(|=6PL1<)2oXwka&h7XHHuPjN*FL8T7A ztcH}z2T06IPpM7{+F5<$uR9>ewq+Qa1D@tH9k@WsFFTcs8!Jg5lPsSP*5 z901Uy+2WdS6wUW8Ee>n+izcTX0_Xroz>=iLDN1FDIpQ!x!BMIcj74wz?APtsxL1_K zJn_M&%Rx3X?^s6Ou?S?EL!neB637W(eW}e`B5+AY+~H>{h%HbU9F*!rGTpv_>o()c zU=YV?c(N=SB&Sp-n3Xa7!Xj)wc5Dusyz`@@6+r8>cQ z)M-KxTF&7#aTa2yOnoKZIs*}L> zlsZuerTTt^Qhh%{slFefRNs$Ks_#cA)%PQm>idyURYzbX;<<45BcTOGg{rzvZH$u( zLc9n?Ksaqq3!d}5|AeagRNF$SJU7IPPz1zu=OQ*eZ9s&o`f%fP_Tf}M3Go>exHzoN z-ixClUL;i2Av@H3uKVbBBUzJf{{Tbq7jO2M*MhISjzYj3UNg1+@qb+_KbEDxmUu^C!S`!d9w@LNPD mQLOrAP7iXGh-z0>()fQLpPmQzU)6E|0000pWnk`QJhg56 RonJt422WQ%mvv4FO#sm!5extT literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..00cabce --- /dev/null +++ b/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "LaunchImage.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "LaunchImage@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "LaunchImage@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..e815fd621f1968ac104bc8b687d1d19a818d00a8 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*6y6B81EJP`)gU+UiV PKo*0itDnm{r-UW|n)?mj literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e815fd621f1968ac104bc8b687d1d19a818d00a8 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*6y6B81EJP`)gU+UiV PKo*0itDnm{r-UW|n)?mj literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e815fd621f1968ac104bc8b687d1d19a818d00a8 GIT binary patch literal 69 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryJf1F&Ar*6y6B81EJP`)gU+UiV PKo*0itDnm{r-UW|n)?mj literal 0 HcmV?d00001 diff --git a/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/hems_application/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/hems_application/ios/Runner/Base.lproj/LaunchScreen.storyboard b/hems_application/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..55c0cae --- /dev/null +++ b/hems_application/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hems_application/ios/Runner/Base.lproj/Main.storyboard b/hems_application/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/hems_application/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hems_application/ios/Runner/Info.plist b/hems_application/ios/Runner/Info.plist new file mode 100644 index 0000000..51673bb --- /dev/null +++ b/hems_application/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Hems App + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + hems_app + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + UIStatusBarHidden + + + diff --git a/hems_application/ios/Runner/Runner-Bridging-Header.h b/hems_application/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/hems_application/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/hems_application/ios/RunnerTests/RunnerTests.swift b/hems_application/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/hems_application/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/hems_application/l10n.yaml b/hems_application/l10n.yaml new file mode 100644 index 0000000..842d29c --- /dev/null +++ b/hems_application/l10n.yaml @@ -0,0 +1,4 @@ +arb-dir: lib/l10n +template-arb-file: app_en.arb +output-localization-file: app_localizations.dart + diff --git a/hems_application/lib/app_navigation.dart b/hems_application/lib/app_navigation.dart new file mode 100644 index 0000000..46ca76c --- /dev/null +++ b/hems_application/lib/app_navigation.dart @@ -0,0 +1,72 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/widget/page/devices_page.dart'; +import 'package:hems_app/widget/page/home_page.dart'; +import 'package:hems_app/widget/page/schedules_page.dart'; +import 'package:hems_app/widget/page/settings_page.dart'; + +/// "Page" that acts as navigation between the different pages available in the app (bottom bar). +/// +/// Any new potential pages or addition to the bottom bar shall be added to pages array. +class AppNavigation extends StatefulWidget { + const AppNavigation({super.key}); + @override + State createState() { + return _AppNavigationState(); + } +} + +class _AppNavigationState extends State { + int selectedIndex = 0; + + static const List _pages = [ + HomePage(), + SchedulesPage(), + DevicesPage(), + SettingsPage(), + ]; + @override + Widget build(BuildContext context) { + List pageNames = [ + context.l10n.home, + context.l10n.schedulesPage, + context.l10n.yourDevices, + context.l10n.settings, + ]; + + return Scaffold( + body: _pages[selectedIndex], + appBar: AppBar( + title: Text( + pageNames[selectedIndex], + style: Theme.of(context).appBarTheme.titleTextStyle, + ), + ), + bottomNavigationBar: NavigationBar( + selectedIndex: selectedIndex, + onDestinationSelected: + (newIndex) => setState(() { + selectedIndex = newIndex; + }), + destinations: [ + NavigationDestination( + icon: Icon(Icons.home), + label: context.l10n.home, + ), + NavigationDestination( + icon: Icon(Icons.calendar_month), + label: context.l10n.schedulesPage, + ), + NavigationDestination( + icon: Icon(Icons.account_tree), + label: context.l10n.devices, + ), + NavigationDestination( + icon: Icon(Icons.settings), + label: context.l10n.settings, + ), + ], + ), + ); + } +} diff --git a/hems_application/lib/extensions.dart b/hems_application/lib/extensions.dart new file mode 100644 index 0000000..18a5154 --- /dev/null +++ b/hems_application/lib/extensions.dart @@ -0,0 +1,6 @@ +import 'package:flutter/widgets.dart'; +import 'package:hems_app/l10n/app_localizations.dart'; + +extension L10nExtension on BuildContext { + AppLocalizations get l10n => AppLocalizations.of(this)!; +} diff --git a/hems_application/lib/firebase/firebase_msg.dart b/hems_application/lib/firebase/firebase_msg.dart new file mode 100644 index 0000000..71eaeed --- /dev/null +++ b/hems_application/lib/firebase/firebase_msg.dart @@ -0,0 +1,15 @@ +import 'package:firebase_messaging/firebase_messaging.dart'; + +/// Firebase service class for handling push notifications using [FirebaseMessaging] instance. +class FirebaseMsg { + final msgService = FirebaseMessaging.instance; + + initFCM() async { + await msgService.requestPermission(); + + FirebaseMessaging.onBackgroundMessage(handleNotification); + FirebaseMessaging.onMessage.listen(handleNotification); + } +} + +Future handleNotification(RemoteMessage msg) async {} diff --git a/hems_application/lib/firebase/firebase_options.dart b/hems_application/lib/firebase/firebase_options.dart new file mode 100644 index 0000000..51cc0f3 --- /dev/null +++ b/hems_application/lib/firebase/firebase_options.dart @@ -0,0 +1,88 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + return macos; + case TargetPlatform.windows: + return windows; + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyD9gjuZ9XZww8YR74eS7TlSQqnR0B5SYjI', + appId: '1:382446275425:web:634098b4d35d2f89edd320', + messagingSenderId: '382446275425', + projectId: 'hems-03d', + authDomain: 'hems-03d.firebaseapp.com', + storageBucket: 'hems-03d.firebasestorage.app', + measurementId: 'G-TNSVRFG8S4', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyCi3oCRZf_3tgP2zWHngSXNusCGVlUCi-E', + appId: '1:382446275425:android:d69ffb43d319aab4edd320', + messagingSenderId: '382446275425', + projectId: 'hems-03d', + storageBucket: 'hems-03d.firebasestorage.app', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDscYB31jEJepcTcEu-WD2HDHErb5CvTik', + appId: '1:382446275425:ios:b9d9d77211d63334edd320', + messagingSenderId: '382446275425', + projectId: 'hems-03d', + storageBucket: 'hems-03d.firebasestorage.app', + iosBundleId: 'com.example.hemsApp', + ); + + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyDscYB31jEJepcTcEu-WD2HDHErb5CvTik', + appId: '1:382446275425:ios:b9d9d77211d63334edd320', + messagingSenderId: '382446275425', + projectId: 'hems-03d', + storageBucket: 'hems-03d.firebasestorage.app', + iosBundleId: 'com.example.hemsApp', + ); + + static const FirebaseOptions windows = FirebaseOptions( + apiKey: 'AIzaSyD9gjuZ9XZww8YR74eS7TlSQqnR0B5SYjI', + appId: '1:382446275425:web:c95a35f0b8d24f33edd320', + messagingSenderId: '382446275425', + projectId: 'hems-03d', + authDomain: 'hems-03d.firebaseapp.com', + storageBucket: 'hems-03d.firebasestorage.app', + measurementId: 'G-4CTRN7HP9B', + ); +} diff --git a/hems_application/lib/l10n/app_en.arb b/hems_application/lib/l10n/app_en.arb new file mode 100644 index 0000000..93698ce --- /dev/null +++ b/hems_application/lib/l10n/app_en.arb @@ -0,0 +1,122 @@ +{ + "homeEnergyManagement" : "Home Energy Management", + "home": "Home", + "schedules": "Schedules", + "yourDevices": "Your Devices", + "devices": "Devices", + "settings": "Settings", + "yourRooms": "Your Rooms", + "yourFavorites": "Your Favorites", + "temperature": "Temperature", + "solarPanel": "Solar Panel", + "thermalDevice": "Thermal Device", + "consumerDevice": "Consumer Device", + "meterDevice": "Meter Device", + "battery": "Battery", + "onOffDevice": "On/Off Device", + "deviceAnalytics": "Power Analytics", + "consumption": "Total Consumption (W)", + "seconds": "Seconds Ago", + "powerFlow": "Power Flow", + "createNewRoom": "Create new room", + "chooseRoomType": "Choose room type", + "enterRoomName": "Enter room name", + "create": "Create", + "cancel": "Cancel", + "automation": "Automation", + "others": "Others", + "activeUntil": "Active Until", + "cancelJob": "Cancel job", + "resetTarget": "Reset target", + "meterInfo": "Meter info", + "darkMode": "Dark mode", + "failedToGetStatusOf": "Failed to get status of", + "cancelingJob": "Canceling job", + "jobCancelledSuccessfully": "Job cancelled successfully", + "failedToCancelJob": "Failed to cancel job", + "comingUp": "Coming up", + "noUpcomingJobs": "No upcoming jobs", + "suggestedChanges": "Suggested changes", + "exampleDevice": "Example Device", + "moveTo": "Move to", + "ifMoveRuleFromToMoreUseOf": "If you move this rule from {oldTime} to {newTime}, you will make more use of your {device}", + "solarPanels": "solar panels", + "schedulingJob": "Scheduling job", + "jobScheduledSuccessfully": "Job scheduled successfully", + "failedToScheduleJob": "Failed to schedule job", + "noDevicesAddedToThisRoomYet": "No devices added to this room yet", + "confirmDeletion": "Confirm deletion", + "areYouSureYouWantToDeleteThisRoom": "Are you sure you want to delete this room", + "delete": "Delete", + "type": "Type", + "name": "Name", + "device": "Device", + "saveChanges": "Save changes", + "noDevicesAddedYet": "No devices added yet", + "addOrRemoveManagedDevices": "Add or remove managed devices", + "done": "Done", + "actionFor": "Action for", + "unknown": "Unknown", + "selectAnAction": "Select an action", + "createNewJob": "Create new job", + "errorFetchingDeviceStatus": "Error fetching device status", + "selectADevice": "Select a device", + "date": "Date", + "selectADate": "Select a date", + "startTime": "Start Time", + "selectATime": "Select a time", + "durationMustBeAtleast": "Duration must be at least", + "hourS": "hour(s)", + "and": "and", + "minutes": "minutes", + "duration": "Duration", + "selectADuration": "Select a duration", + "startTimeCantBeInThePast": "Start time can't be in the past", + "durationMustBeAtleast": "", + "scheduleReminder": "Schedule reminder", + "yourDeviceWillStartInTenMinutes": "Your {device} will start in 10 minutes", + "yourDeviceWillStopInTenMinutes": "Your {device} will stop in 10 minutes", + "createJob": "Create job", + "thereAreNoScheduledJobsForThisDevice": "There are no jobs scheduled for this device", + "nextScheduledActionStartsIn": "Next scheduled action starts in: {hours} hour(s), {minutes} minute(s)", + "durationHoursMinutes": "Duration: {hours} hour(s), {minutes} minute(s)", + "jobCurrentlyActive": "Job currently active", + "timeLeftHoursMinutes": "Time left: {hours} hour(s), {minutes} minute(s)", + "production": "Production", + "bedroom": "Bedroom", + "kitchen": "Kitchen", + "livingRoom": "Living room", + "bathroom": "Bathroom", + "garden": "Garden", + "washingRoom": "Washing room", + "editRoom": "Edit {room}", + "currentExport": "Current export", + "currentImport": "Current import", + "totalExport": "Total export", + "totalImport": "Total import", + "batteryIsIdle": "Battery is idle", + "batteryIsDischarging": "Battery is discharging", + "estimatedTimeTillEmpty": "estimated {time} till empty", + "batteryIsCharging": "Battery is charging", + "estimatedTimeTillFullCharge": "estimated {time} till full charge", + "target": "Target", + "durationAtLeastHoursMinutes": "Duration must be at least {hours} hour(s) and {minutes} minute(s)", + "exportData": "Export home configuration", + "importData": "Import home configuration", + "importSuccess": "Configuration successfully imported", + "importFail": "Invalid configuration", + "exportSuccess": "Configuration copied to clipboard", + "exportFail": "Copying to clipboard failed", + "transferTitle": "Transfer configuration to/from clipboard", + "schedulesPage": "Schedules", + "selectDeviceFirst": "Select a device first", + "newJob": "New job", + "manageDevices": "Manage devices", + "cantFindYourDevice": "Can't find your device? Make sure the device is managed by the app.", + "editRoomDevices": "Edit room", + "scheduleAJob": "Schedule a job", + "viewSchedule": "View schedule", + "scheduleForDevice": "Schedule for {device}", + "nowActiveUntil": "Now active until {time}", + "tryCreatingARoom": "Try creating rooms to organize your devices!" +} diff --git a/hems_application/lib/l10n/app_nl.arb b/hems_application/lib/l10n/app_nl.arb new file mode 100644 index 0000000..0f12947 --- /dev/null +++ b/hems_application/lib/l10n/app_nl.arb @@ -0,0 +1,121 @@ +{ + "homeEnergyManagement": "Energiebeheer Thuis", + "home": "Home", + "schedules": "Schema's", + "yourDevices": "Jouw apparaten", + "devices": "Apparaten", + "settings": "Instellingen", + "yourRooms": "Jouw kamers", + "yourFavorites": "Jouw favorieten", + "temperature": "Temperatuur", + "solarPanel": "Zonnepaneel", + "thermalDevice": "Thermisch apparaat", + "consumerDevice": "Verbruiksapparaat", + "meterDevice": "Meterapparaat", + "battery": "Batterij", + "onOffDevice": "Aan/Uit-apparaat", + "deviceAnalytics": "Energieanalyse", + "consumption": "Totaal verbruik (W)", + "seconds": "seconden geleden", + "powerFlow": "Energiedoorstroming", + "createNewRoom": "Nieuwe kamer aanmaken", + "chooseRoomType": "Kies kamertype", + "enterRoomName": "Voer kamernaam in", + "create": "Aanmaken", + "cancel": "Annuleren", + "automation": "Automatisering", + "others": "Overige", + "activeUntil": "Actief tot", + "cancelJob": "Taak annuleren", + "resetTarget": "Doel resetten", + "meterInfo": "Meterinformatie", + "darkMode": "Donkere modus", + "failedToGetStatusOf": "Status ophalen mislukt voor", + "cancelingJob": "Taak wordt geannuleerd", + "jobCancelledSuccessfully": "Taak succesvol geannuleerd", + "failedToCancelJob": "Taak annuleren mislukt", + "comingUp": "Binnenkort", + "noUpcomingJobs": "Geen aankomende taken", + "suggestedChanges": "Voorgestelde wijzigingen", + "exampleDevice": "Voorbeeldapparaat", + "moveTo": "Verplaatsen naar", + "ifMoveRuleFromToMoreUseOf": "Als je deze regel verplaatst van {oldTime} naar {newTime}, maak je meer gebruik van je {device}", + "solarPanels": "zonnepanelen", + "schedulingJob": "Taak wordt ingepland", + "jobScheduledSuccessfully": "Taak succesvol ingepland", + "failedToScheduleJob": "Inplannen van taak mislukt", + "noDevicesAddedToThisRoomYet": "Nog geen apparaten aan deze kamer toegevoegd", + "confirmDeletion": "Verwijdering bevestigen", + "areYouSureYouWantToDeleteThisRoom": "Weet je zeker dat je deze kamer wilt verwijderen?", + "delete": "Verwijderen", + "type": "Type", + "name": "Naam", + "device": "Apparaat", + "saveChanges": "Wijzigingen opslaan", + "noDevicesAddedYet": "Nog geen apparaten toegevoegd", + "addOrRemoveManagedDevices": "Beheerde apparaten toevoegen of verwijderen", + "done": "Gereed", + "actionFor": "Actie voor", + "unknown": "Onbekend", + "selectAnAction": "Selecteer een actie", + "createNewJob": "Nieuwe taak aanmaken", + "errorFetchingDeviceStatus": "Fout bij ophalen van apparaatstatus", + "selectADevice": "Selecteer een apparaat", + "date": "Datum", + "selectADate": "Selecteer een datum", + "startTime": "Starttijd", + "selectATime": "Selecteer een tijd", + "durationMustBeAtleast": "Duur moet minimaal zijn", + "hourS": "uur", + "and": "en", + "minutes": "minuten", + "duration": "Duur", + "selectADuration": "Selecteer een duur", + "startTimeCantBeInThePast": "Starttijd mag niet in het verleden liggen", + "scheduleReminder": "Schemaherinnering", + "yourDeviceWillStartInTenMinutes": "Je {device} start over 10 minuten", + "yourDeviceWillStopInTenMinutes": "TODO", + "createJob": "Taak aanmaken", + "thereAreNoScheduledJobsForThisDevice": "Er zijn geen geplande taken voor dit apparaat", + "nextScheduledActionStartsIn": "Volgende actie begint over: {hours} uur, {minutes} minuten", + "durationHoursMinutes": "Duur: {hours} uur, {minutes} minuten", + "jobCurrentlyActive": "Taak is momenteel actief", + "timeLeftHoursMinutes": "Resterende tijd: {hours} uur, {minutes} minuten", + "production": "Productie", + "bedroom": "Slaapkamer", + "kitchen": "Keuken", + "livingRoom": "Woonkamer", + "bathroom": "Badkamer", + "garden": "Tuin", + "washingRoom": "Wasruimte", + "editRoom": "Bewerk {room}", + "currentExport": "Huidige export", + "currentImport": "Huidige import", + "totalExport": "Totale export", + "totalImport": "Totale import", + "batteryIsIdle": "Batterij is inactief", + "batteryIsDischarging": "Batterij is aan het ontladen", + "estimatedTimeTillEmpty": "geschat nog {time} tot leeg", + "batteryIsCharging": "Batterij is aan het opladen", + "estimatedTimeTillFullCharge": "geschat nog {time} tot volle lading", + "target": "Doel", + "durationAtLeastHoursMinutes": "Duur moet minimaal {hours} uur en {minutes} minuten zijn", + "exportData": "Exporteer huisconfiguratie", + "importData": "Importeer huisconfiguratie", + "importSuccess": "Configuratie successvol geïmporteerd", + "importFail": "Incorrecte configuratie", + "exportSuccess": "Configuratie gekopieerd naar klemboord", + "exportFail": "Kopiëren naar klemboord gefaald", + "transferTitle": "Kopieer configuratie van/naar klemboord", + "schedulesPage": "Taken", + "selectDeviceFirst": "Selecteer eerst een apparaat", + "newJob": "Nieuwe taak", + "manageDevices": "Apparaten beheren", + "cantFindYourDevice": "Kan je jouw apparaat niet vinden? Controleer of het apparaat beheerd wordt door de app.", + "editRoomDevices": "Kamer bewerken", + "scheduleAJob": "Plan een taak in", + "viewSchedule": "Bekijk taken", + "scheduleForDevice": "Ingeplande taken voor {device}", + "nowActiveUntil": "Nu actief tot {time}", + "tryCreatingARoom": "Probeer kamers te creëren om je apparaten te organiseren!" +} diff --git a/hems_application/lib/main.dart b/hems_application/lib/main.dart new file mode 100644 index 0000000..6a021d2 --- /dev/null +++ b/hems_application/lib/main.dart @@ -0,0 +1,82 @@ +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart' show defaultTargetPlatform; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:hems_app/app_navigation.dart'; +import 'package:hems_app/firebase/firebase_msg.dart'; +import 'package:hems_app/firebase/firebase_options.dart'; +import 'package:hems_app/l10n/app_localizations.dart'; +import 'package:hems_app/material/themes.dart' as themes; +import 'package:hems_app/service/local_notifications_service.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/state/locale_notifier.dart'; +import 'package:hems_app/state/stat_collector.dart'; +import 'package:hems_app/state/theme_notifier.dart'; +import 'package:provider/provider.dart'; + +/// The entry point of the HEMS (Home Energy Management System) app. +/// +/// Initializes Flutter bindings, conditionally sets up Firebase (on supported platforms), and starts the app by running [HEMSApp]. +/// Additionally, sets up [ThemeNotifier] and [LocaleNotifier] for quickly changing language and theme, using a [MultiProvider] for local persistence. +/// [StatCollector] is used for measuring devices consumption. +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + + if (defaultTargetPlatform != TargetPlatform.windows && + defaultTargetPlatform != TargetPlatform.linux) { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + await FirebaseMsg().initFCM(); + } + + await LocalNotificationsService().init(); + + await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + + ThemeNotifier themeNotifier = await ThemeNotifier.create(); + LocaleNotifier localeNotifier = await LocaleNotifier.create(); + StatCollector().startPolling(); + await AppState().initFromFile(); + + runApp( + MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => themeNotifier), + ChangeNotifierProvider(create: (_) => localeNotifier), + ], + child: const HEMSApp(), + ), + ); +} + +/// The root widget of the HEMS application. +/// +/// Configures localization, theming, and sets [AppNavigation] as the home screen. +class HEMSApp extends StatelessWidget { + const HEMSApp({super.key}); + + @override + Widget build(BuildContext context) { + final themeNotifier = Provider.of(context); + final localeNotifier = Provider.of(context); + + return MaterialApp( + localizationsDelegates: [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + supportedLocales: [Locale('en'), Locale('nl')], + locale: localeNotifier.locale, + debugShowCheckedModeBanner: false, + title: "Home Energy Management", + theme: themes.lightTheme, + darkTheme: themes.darkTheme, + home: AppNavigation(), + themeMode: themeNotifier.currentTheme, + ); + } +} diff --git a/hems_application/lib/material/themes.dart b/hems_application/lib/material/themes.dart new file mode 100644 index 0000000..7ce14c8 --- /dev/null +++ b/hems_application/lib/material/themes.dart @@ -0,0 +1,144 @@ +import 'package:flutter/material.dart'; + +/// Light theme color scheme +const lightColorScheme = ColorScheme( + brightness: Brightness.light, + primary: Color(0xff68548e), + surfaceTint: Color(0xff68548e), + onPrimary: Color(0xffffffff), + primaryContainer: Color(0xffebddff), + onPrimaryContainer: Color(0xff4f3d74), + secondary: Color(0xff635b70), + onSecondary: Color(0xffffffff), + secondaryContainer: Color(0xffe9def8), + onSecondaryContainer: Color(0xff4b4358), + tertiary: Color(0xff7e525d), + onTertiary: Color(0xffffffff), + tertiaryContainer: Color(0xffffd9e1), + onTertiaryContainer: Color(0xff643b46), + error: Color(0xffba1a1a), + onError: Color(0xffffffff), + errorContainer: Color(0xffffdad6), + onErrorContainer: Color(0xff93000a), + surface: Color(0xfffef7ff), + onSurface: Color(0xff1d1b20), + onSurfaceVariant: Color(0xff49454e), + outline: Color(0xff7a757f), + outlineVariant: Color(0xffcbc4cf), + shadow: Color(0xff000000), + scrim: Color(0xff000000), + inverseSurface: Color(0xff322f35), + inversePrimary: Color(0xffd3bcfd), + primaryFixed: Color(0xffebddff), + onPrimaryFixed: Color(0xff230f46), + primaryFixedDim: Color(0xffd3bcfd), + onPrimaryFixedVariant: Color(0xff4f3d74), + secondaryFixed: Color(0xffe9def8), + onSecondaryFixed: Color(0xff1f182b), + secondaryFixedDim: Color(0xffcdc2db), + onSecondaryFixedVariant: Color(0xff4b4358), + tertiaryFixed: Color(0xffffd9e1), + onTertiaryFixed: Color(0xff31101b), + tertiaryFixedDim: Color(0xfff0b7c5), + onTertiaryFixedVariant: Color(0xff643b46), + surfaceDim: Color(0xffded8e0), + surfaceBright: Color(0xfffef7ff), + surfaceContainerLowest: Color(0xffffffff), + surfaceContainerLow: Color(0xfff8f1fa), + surfaceContainer: Color(0xfff2ecf4), + surfaceContainerHigh: Color(0xffede6ee), + surfaceContainerHighest: Color(0xffe7e0e8), +); + +/// Dark theme color scheme +const darkColorScheme = ColorScheme( + brightness: Brightness.dark, + primary: Color(0xffd3bcfd), + surfaceTint: Color(0xffd3bcfd), + onPrimary: Color(0xff38265c), + primaryContainer: Color(0xff4f3d74), + onPrimaryContainer: Color(0xffebddff), + secondary: Color(0xffcdc2db), + onSecondary: Color(0xff342d40), + secondaryContainer: Color(0xff4b4358), + onSecondaryContainer: Color(0xffe9def8), + tertiary: Color(0xfff0b7c5), + onTertiary: Color(0xff4a2530), + tertiaryContainer: Color(0xff643b46), + onTertiaryContainer: Color(0xffffd9e1), + error: Color(0xffffb4ab), + onError: Color(0xff690005), + errorContainer: Color(0xff93000a), + onErrorContainer: Color(0xffffdad6), + surface: Color(0xff151218), + onSurface: Color(0xffe7e0e8), + onSurfaceVariant: Color(0xffcbc4cf), + outline: Color(0xff948f99), + outlineVariant: Color(0xff49454e), + shadow: Color(0xff000000), + scrim: Color(0xff000000), + inverseSurface: Color(0xffe7e0e8), + inversePrimary: Color(0xff68548e), + primaryFixed: Color(0xffebddff), + onPrimaryFixed: Color(0xff230f46), + primaryFixedDim: Color(0xffd3bcfd), + onPrimaryFixedVariant: Color(0xff4f3d74), + secondaryFixed: Color(0xffe9def8), + onSecondaryFixed: Color(0xff1f182b), + secondaryFixedDim: Color(0xffcdc2db), + onSecondaryFixedVariant: Color(0xff4b4358), + tertiaryFixed: Color(0xffffd9e1), + onTertiaryFixed: Color(0xff31101b), + tertiaryFixedDim: Color(0xfff0b7c5), + onTertiaryFixedVariant: Color(0xff643b46), + surfaceDim: Color(0xff151218), + surfaceBright: Color(0xff3b383e), + surfaceContainerLowest: Color(0xff0f0d13), + surfaceContainerLow: Color(0xff1d1b20), + surfaceContainer: Color(0xff211f24), + surfaceContainerHigh: Color(0xff2c292f), + surfaceContainerHighest: Color(0xff36343a), +); + +/// Light theme +final lightTheme = ThemeData( + colorScheme: lightColorScheme, + useMaterial3: true, + brightness: Brightness.light, + scaffoldBackgroundColor: lightColorScheme.surface, + appBarTheme: AppBarTheme( + backgroundColor: lightColorScheme.primaryContainer, + foregroundColor: lightColorScheme.onPrimaryContainer, + shadowColor: lightColorScheme.shadow, + elevation: 3, + titleTextStyle: TextStyle( + color: lightColorScheme.onSurface, + fontSize: 30, + fontWeight: FontWeight.normal, + ), + ), + canvasColor: lightColorScheme.surfaceDim, + cardTheme: CardThemeData( + color: lightColorScheme.surfaceContainerHigh, + ), + ); + +/// Dark theme +final darkTheme = ThemeData( + colorScheme: darkColorScheme, + useMaterial3: true, + brightness: Brightness.dark, + scaffoldBackgroundColor: darkColorScheme.surface, + appBarTheme: AppBarTheme( + backgroundColor: darkColorScheme.surface, + foregroundColor: darkColorScheme.onSurface, + shadowColor: const Color.fromARGB(190, 22, 22, 22), + elevation: 3, + titleTextStyle: TextStyle( + color: darkColorScheme.onSurface, + fontSize: 30, + fontWeight: FontWeight.normal, + ), + ), + canvasColor: darkColorScheme.surfaceDim + ); diff --git a/hems_application/lib/model/api/battery_info.dart b/hems_application/lib/model/api/battery_info.dart new file mode 100644 index 0000000..eefdb24 --- /dev/null +++ b/hems_application/lib/model/api/battery_info.dart @@ -0,0 +1,62 @@ +import 'battery_status.dart'; + +/// Data wrapper class for handling backend requests. +class BatteryInfo { + double capacity = 0; + double consumption = 0; + double maxCharge = 0; + double maxDischarge = 0; + double stateOfCharge = 0; + BatteryStatus status = BatteryStatus.idle; + double? targetSoc; + + BatteryInfo( + this.capacity, + this.consumption, + this.maxCharge, + this.maxDischarge, + this.stateOfCharge, + this.status, [ + this.targetSoc, + ]); + + BatteryInfo.fromJson(Map json) { + capacity = (json['capacity'] as num).toDouble(); + consumption = (json['consumption'] as num).toDouble(); + maxCharge = (json['max_charge'] as num).toDouble(); + maxDischarge = (json['max_discharge'] as num).toDouble(); + stateOfCharge = (json['state_of_charge'] as num).toDouble(); + + status = switch (json['status']) { + 'Charging' => BatteryStatus.charging, + 'Discharging' => BatteryStatus.discharging, + 'Idle' => BatteryStatus.idle, + _ => throw FormatException('Invalid battery status'), + }; + + targetSoc = (json['target_soc'] as num?)?.toDouble(); + } + + @override + int get hashCode => Object.hash( + capacity, + consumption, + maxCharge, + maxDischarge, + stateOfCharge, + status, + targetSoc, + ); + + @override + bool operator ==(Object other) { + return other is BatteryInfo && + other.capacity == capacity && + other.consumption == consumption && + other.maxCharge == maxCharge && + other.maxDischarge == maxDischarge && + other.stateOfCharge == stateOfCharge && + other.status == status && + other.targetSoc == targetSoc; + } +} diff --git a/hems_application/lib/model/api/battery_status.dart b/hems_application/lib/model/api/battery_status.dart new file mode 100644 index 0000000..2e3b148 --- /dev/null +++ b/hems_application/lib/model/api/battery_status.dart @@ -0,0 +1,2 @@ +/// States the battery can be in. +enum BatteryStatus { charging, discharging, idle } diff --git a/hems_application/lib/model/api/device_status.dart b/hems_application/lib/model/api/device_status.dart new file mode 100644 index 0000000..fa62f4b --- /dev/null +++ b/hems_application/lib/model/api/device_status.dart @@ -0,0 +1,96 @@ +import 'package:complex/complex.dart'; +import 'package:flutter/foundation.dart'; + +import 'job.dart'; +import 'measurement.dart'; + +/// Data wrapper class for handling backend requests. +class DeviceStatus { + int houseId = 0; + String entityName = ''; + bool isActive = false; + double progress = 0.0; + int activeJobIdx = -1; + List scheduledJobs = []; + Measurement consumption = Measurement(0.0, ''); + List profile = []; + Job? activeJob; + + DeviceStatus( + this.houseId, + this.entityName, + this.isActive, + this.progress, + this.activeJobIdx, + this.scheduledJobs, + this.consumption, + this.profile, [ + this.activeJob, + ]); + + DeviceStatus.fromJson(Map json) { + houseId = json['house_id'] as int; + entityName = json['entity_name'] as String; + isActive = json['is_active'] as bool; + progress = (json['progress'] as num).toDouble(); + activeJobIdx = json['active_job_idx'] as int; + + scheduledJobs = + (json['scheduled_jobs'] as List) + .map((e) => Job.fromJson(e as Map)) + .toList(); + + consumption = Measurement.fromJson( + json['consumption'] as Map, + ); + + profile = + (json['profile'] as List).map((e) { + final map = e as Map; + return Complex( + (map['re'] as num).toDouble(), + (map['im'] as num).toDouble(), + ); + }).toList(); + + activeJob = + json['active_job'] != null + ? Job.fromJson(json['active_job'] as Map) + : null; + } + + /// The minimum duration for a job that the backend will currently accept. + Duration get minimumJobDuration { + return Duration( + seconds: profile.length, + ); + } + + @override + int get hashCode => Object.hash( + houseId, + entityName, + isActive, + progress, + activeJobIdx, + Object.hashAll(scheduledJobs), + consumption, + Object.hashAll(profile), + activeJob, + ); + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other is DeviceStatus && + other.houseId == houseId && + other.entityName == entityName && + other.isActive == isActive && + other.progress == progress && + other.activeJobIdx == activeJobIdx && + listEquals(other.scheduledJobs, scheduledJobs) && + other.consumption == consumption && + listEquals(other.profile, profile) && + other.activeJob == activeJob); + } +} diff --git a/hems_application/lib/model/api/entity_request.dart b/hems_application/lib/model/api/entity_request.dart new file mode 100644 index 0000000..26039cc --- /dev/null +++ b/hems_application/lib/model/api/entity_request.dart @@ -0,0 +1,22 @@ +/// Data wrapper class for handling backend requests. +class EntityRequest { + String entityId = ''; + String consumption = ''; + + EntityRequest(this.entityId, this.consumption); + + EntityRequest.fromJson(Map json) { + entityId = json['entity_id'] as String; + consumption = json['consumption'] as String; + } + + @override + int get hashCode => Object.hash(entityId, consumption); + + @override + bool operator ==(Object other) { + return other is EntityRequest && + other.entityId == entityId && + other.consumption == consumption; + } +} diff --git a/hems_application/lib/model/api/job.dart b/hems_application/lib/model/api/job.dart new file mode 100644 index 0000000..c78fd1d --- /dev/null +++ b/hems_application/lib/model/api/job.dart @@ -0,0 +1,21 @@ +/// Data wrapper class for handling backend requests. +class Job { + int startTime; + int endTime; + + Job(this.startTime, this.endTime); + + Job.fromJson(Map json) + : startTime = json['startTime'] as int, + endTime = json['endTime'] as int; + + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Job && + other.startTime == startTime && + other.endTime == endTime); + + @override + int get hashCode => Object.hash(startTime, endTime); +} diff --git a/hems_application/lib/model/api/measurement.dart b/hems_application/lib/model/api/measurement.dart new file mode 100644 index 0000000..1b37282 --- /dev/null +++ b/hems_application/lib/model/api/measurement.dart @@ -0,0 +1,19 @@ +/// Data wrapper class for handling backend requests. +class Measurement { + double value; + String unit; + + Measurement(this.value, this.unit); + + Measurement.fromJson(Map json) + : value = (json['value'] as num).toDouble(), + unit = json['unit'] as String; + + @override + bool operator ==(Object other) => + identical(this, other) || + (other is Measurement && other.value == value && other.unit == unit); + + @override + int get hashCode => Object.hash(value, unit); +} diff --git a/hems_application/lib/model/api/meter_info.dart b/hems_application/lib/model/api/meter_info.dart new file mode 100644 index 0000000..63f2232 --- /dev/null +++ b/hems_application/lib/model/api/meter_info.dart @@ -0,0 +1,48 @@ +/// Data wrapper class for handling backend requests. +class MeterInfo { + double? currentExport; + double? currentImport; + int houseId = 0; + int meterId = 0; + double totalExport = 0; + double totalImport = 0; + + MeterInfo( + this.currentExport, + this.currentImport, + this.houseId, + this.meterId, + this.totalExport, + this.totalImport, + ); + + MeterInfo.fromJson(Map json) { + currentExport = (json['current_export'] as num?)?.toDouble(); + currentImport = (json['current_import'] as num?)?.toDouble(); + houseId = json['house_id'] as int; + meterId = json['meter_id'] as int; + totalExport = (json['total_export'] as num).toDouble(); + totalImport = (json['total_import'] as num).toDouble(); + } + + @override + int get hashCode => Object.hash( + currentExport, + currentImport, + houseId, + meterId, + totalExport, + totalImport, + ); + + @override + bool operator ==(Object other) { + return other is MeterInfo && + other.currentExport == currentExport && + other.currentImport == currentImport && + other.houseId == houseId && + other.meterId == meterId && + other.totalExport == totalExport && + other.totalImport == totalImport; + } +} diff --git a/hems_application/lib/model/api/schedule_job.dart b/hems_application/lib/model/api/schedule_job.dart new file mode 100644 index 0000000..3a18e1e --- /dev/null +++ b/hems_application/lib/model/api/schedule_job.dart @@ -0,0 +1,19 @@ +/// Data wrapper class for handling backend requests. +class ScheduleJob { + int delay; + int duration; + + ScheduleJob(this.delay, this.duration); + + Map toJson() => {'delay': delay, 'duration': duration}; + + @override + bool operator ==(Object other) => + identical(this, other) || + (other is ScheduleJob && + other.delay == delay && + other.duration == duration); + + @override + int get hashCode => Object.hash(delay, duration); +} diff --git a/hems_application/lib/model/api/solar_info.dart b/hems_application/lib/model/api/solar_info.dart new file mode 100644 index 0000000..07d2f9a --- /dev/null +++ b/hems_application/lib/model/api/solar_info.dart @@ -0,0 +1,18 @@ +/// Data wrapper class for handling backend requests. +class SolarInfo { + double consumption = 0; + + SolarInfo(this.consumption); + + SolarInfo.fromJson(Map json) { + consumption = (json['consumption'] as num).toDouble(); + } + + @override + int get hashCode => consumption.hashCode; + + @override + bool operator ==(Object other) { + return other is SolarInfo && other.consumption == consumption; + } +} diff --git a/hems_application/lib/model/api/thermal_info.dart b/hems_application/lib/model/api/thermal_info.dart new file mode 100644 index 0000000..337d140 --- /dev/null +++ b/hems_application/lib/model/api/thermal_info.dart @@ -0,0 +1,38 @@ +/// Data wrapper class for handling backend requests. +class ThermalInfo { + double consumption = 0; + double currentTemperature = 0; + double heatingPower = 0; + double targetTemperature = 0; + + ThermalInfo( + this.consumption, + this.currentTemperature, + this.heatingPower, + this.targetTemperature, + ); + + ThermalInfo.fromJson(Map json) { + consumption = (json['consumption'] as num).toDouble(); + currentTemperature = (json['current_temperature'] as num).toDouble(); + heatingPower = (json['heating_power'] as num).toDouble(); + targetTemperature = (json['target_temperature'] as num).toDouble(); + } + + @override + int get hashCode => Object.hash( + consumption, + currentTemperature, + heatingPower, + targetTemperature, + ); + + @override + bool operator ==(Object other) { + return other is ThermalInfo && + other.consumption == consumption && + other.currentTemperature == currentTemperature && + other.heatingPower == heatingPower && + other.targetTemperature == targetTemperature; + } +} diff --git a/hems_application/lib/model/internal/device.dart b/hems_application/lib/model/internal/device.dart new file mode 100644 index 0000000..bfaf465 --- /dev/null +++ b/hems_application/lib/model/internal/device.dart @@ -0,0 +1,99 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/l10n/app_localizations.dart'; +import 'package:hems_app/widget/device/battery_info_card.dart'; +import 'package:hems_app/widget/device/ha_entity_info_card.dart'; +import 'package:hems_app/widget/device/meter_info_card.dart'; +import 'package:hems_app/widget/device/solar_info_card.dart'; +import 'package:hems_app/widget/device/thermal_info_card.dart'; +import 'package:hems_app/widget/device/timeshifter_card.dart'; + +/// Types of devices currently available in the backend. +enum DeviceType { solar, thermal, timeshifter, meter, battery, haEntity } + +extension DeviceTypeExtension on DeviceType { + /// Returns the name [String] for this device type. + String localizedName(AppLocalizations l10n) { + return switch (this) { + DeviceType.solar => l10n.solarPanel, + DeviceType.thermal => l10n.thermalDevice, + DeviceType.timeshifter => l10n.consumerDevice, + DeviceType.meter => l10n.meterDevice, + DeviceType.battery => l10n.battery, + DeviceType.haEntity => l10n.onOffDevice, + }; + } + + /// Returns the [IconData] for this device type. + IconData get iconData { + return switch (this) { + DeviceType.solar => Icons.solar_power_outlined, + DeviceType.thermal => Icons.thermostat_outlined, + DeviceType.timeshifter => Icons.power, + DeviceType.meter => Icons.speed, + DeviceType.battery => Icons.battery_full_outlined, + DeviceType.haEntity => Icons.toggle_on, + }; + } +} + +class Device { + int houseId; + String deviceId; + DeviceType type; + + /// Creates a new [Device] + /// + /// The device is in a house with [houseId]. + /// The device's id in the house is [deviceId] + /// [type] The type of the device + Device({required this.houseId, required this.deviceId, required this.type}); + + @override + int get hashCode => Object.hash(houseId, deviceId, type); + + @override + bool operator ==(Object other) { + return other is Device && + other.houseId == houseId && + other.deviceId == deviceId && + other.type == type; + } + + /// Returns the [StatefulWidget] for this device type. + StatefulWidget get widget { + return switch (type) { + DeviceType.solar => SolarInfoCard(solarPanel: this), + DeviceType.thermal => ThermalInfoCard(thermostat: this), + DeviceType.meter => MeterInfoCard(meter: this), + DeviceType.battery => BatteryInfoCard(battery: this), + DeviceType.timeshifter => TimeshifterCard(deviceId), + DeviceType.haEntity => HaEntityInfoCard(entity: this), + }; + } + + Device.fromJson(Map json) : + houseId = json['house_id'] as int, + deviceId = json['device_id'] as String, + type = switch(json['type']) { + 'solar' => DeviceType.solar, + 'thermal' => DeviceType.thermal, + 'timeshifter' => DeviceType.timeshifter, + 'meter' => DeviceType.meter, + 'battery' => DeviceType.battery, + 'haEntity' => DeviceType.haEntity, + _ => throw FormatException('Invalid device type'), + }; + + Map toJson() => { + 'house_id': houseId, + 'device_id': deviceId, + 'type': switch(type) { + DeviceType.solar => 'solar', + DeviceType.thermal => 'thermal', + DeviceType.timeshifter=> 'timeshifter', + DeviceType.meter => 'meter', + DeviceType.battery => 'battery', + DeviceType.haEntity => 'haEntity', + } + }; +} diff --git a/hems_application/lib/model/internal/room.dart b/hems_application/lib/model/internal/room.dart new file mode 100644 index 0000000..03cdb6e --- /dev/null +++ b/hems_application/lib/model/internal/room.dart @@ -0,0 +1,108 @@ +import 'package:collection/collection.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/l10n/app_localizations.dart'; + +import 'device.dart'; + +/// Room types, denote which names and icons should be used on the home page. +enum RoomType { + bedroom, + kitchen, + livingRoom, + bathroom, + garden, + washingRoom, + others, +} + +extension RoomTypeExtension on RoomType { + String localizedName(AppLocalizations l10n) { + return switch (this) { + RoomType.bedroom => l10n.bedroom, + RoomType.kitchen => l10n.kitchen, + RoomType.livingRoom => l10n.livingRoom, + RoomType.bathroom => l10n.bathroom, + RoomType.garden => l10n.garden, + RoomType.washingRoom => l10n.washingRoom, + RoomType.others => l10n.others, + }; + } +} + +class Room { + RoomType type; + String name; + List devices; + + /// Constructs a new [Room]. + /// + /// [name] is what the room is called throughout the app. + /// The room's icon and color are based on its [type]. + /// [devices] are the devices the user has assigned to this room. + Room({required this.type, required this.name, required this.devices}); + + IconData icon() { + return switch (type) { + RoomType.bedroom => Icons.bed_outlined, + RoomType.kitchen => Icons.kitchen_outlined, + RoomType.livingRoom => Icons.weekend_outlined, + RoomType.bathroom => Icons.bathtub_outlined, + RoomType.garden => Icons.park_outlined, + RoomType.washingRoom => Icons.local_laundry_service_outlined, + RoomType.others => Icons.devices_outlined, + }; + } + + Color color() { + return switch (type) { + RoomType.bedroom => Colors.deepPurple, + RoomType.kitchen => Colors.blueGrey, + RoomType.livingRoom => Colors.orange, + RoomType.bathroom => Colors.blue, + RoomType.garden => Colors.green, + RoomType.washingRoom => Colors.red, + RoomType.others => Colors.grey, + }; + } + + @override + int get hashCode => Object.hash(type, name, ListEquality().hash(devices)); + + @override + bool operator ==(Object other) { + return other is Room && + other.type == type && + other.name == name && + ListEquality().equals(other.devices, devices); + } + + Room.fromJson(Map json) : + name = json['name'] as String, + devices = (json['devices'] as List).map( + (j) => Device.fromJson(j as Map), + ).toList(), + type = switch(json['type']) { + 'bedroom' => RoomType.bedroom, + 'kitchen' => RoomType.kitchen, + 'livingRoom' => RoomType.livingRoom, + 'bathroom' => RoomType.bathroom, + 'garden' => RoomType.garden, + 'washingRoom' => RoomType.washingRoom, + 'others' => RoomType.others, + _ => throw FormatException('Invalid room type'), + }; + + Map toJson() => { + 'name': name, + 'devices': devices.map((d) => d.toJson()).toList(), + 'type': switch (type) { + RoomType.bedroom => 'bedroom', + RoomType.kitchen => 'kitchen', + RoomType.livingRoom => 'livingRoom', + RoomType.bathroom => 'bathroom', + RoomType.garden => 'garden', + RoomType.washingRoom => 'washingRoom', + RoomType.others => 'others', + }, + }; +} diff --git a/hems_application/lib/service/battery_service.dart b/hems_application/lib/service/battery_service.dart new file mode 100644 index 0000000..d1a9fe1 --- /dev/null +++ b/hems_application/lib/service/battery_service.dart @@ -0,0 +1,73 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/api/battery_info.dart'; +import 'package:hems_app/util/hems_backend_util.dart'; + +/// Service for handling battery requests. +class BatteryService { + static final BatteryService _instance = BatteryService._(); + final HemsBackendUtil _hemsBackendUtil = HemsBackendUtil(); + + factory BatteryService() { + return _instance; + } + + BatteryService._(); + + /// Returns the [BatteryInfo] for the battery with id [batteryId] in the house with id [houseId]. + /// + /// If successful returns a Left containing the revalant [BatteryInfo]. + /// Otherwise returns a Right containing an error message. + /// [batteryId] is currently ignored by the backend so its actual value does not matter. + Future> getBatteryInfo( + int houseId, + int batteryId, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/battery/$batteryId', + ); + return response.thenLeft((v) => jsonToBatteryInfo(v)); + } + + /// Converts the [json] to an [BatteryInfo] object. + /// + /// Returns a Left containing the result if [json] is a valid [BatteryInfo] json. + /// Otherwise returns a Right containing an error message. + Either jsonToBatteryInfo(Map json) { + try { + return Left(BatteryInfo.fromJson(json)); + } catch (_) { + return Right('Not a valid battery info JSON'); + } + } + + /// Sets the target state of charge for the battery with id [batteryId] in the house with id [houseId] to [soc]. + /// + /// If successful returns a Left containing the updated [BatteryInfo]. + /// Otherwise returns a Right containing an error message. + /// [batteryId] is currently ignored by the backend so its actual value does not matter. + Future> setTargetSOC( + int houseId, + int batteryId, + int soc, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/battery/$batteryId/target/$soc', + ); + return response.thenLeft((v) => jsonToBatteryInfo(v)); + } + + /// Unsets the target state of charge for the battery with id [batteryId] in the house with id [houseId]. + /// + /// If successful returns a Left containing the updated [BatteryInfo]. + /// Otherwise returns a Right containing an error message. + /// [batteryId] is currently ignored by the backend so its actual value does not matter. + Future> unsetTargetSOC( + int houseId, + int batteryId, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/battery/$batteryId/target', + ); + return response.thenLeft((v) => jsonToBatteryInfo(v)); + } +} diff --git a/hems_application/lib/service/device_service.dart b/hems_application/lib/service/device_service.dart new file mode 100644 index 0000000..3344052 --- /dev/null +++ b/hems_application/lib/service/device_service.dart @@ -0,0 +1,39 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/util/hems_backend_util.dart'; + +/// Service for handling devices available in the house (backend), currently mocked. +class DeviceService { + static final DeviceService _instance = DeviceService._(); + // ignore: unused_field + final HemsBackendUtil _hemsBackendUtil = HemsBackendUtil(); + + factory DeviceService() { + return _instance; + } + + DeviceService._(); + + /// MOCK VERSION, Returns all the devices in the backend. + /// + /// When this functionality becomes available this will be replaced with a real network request. + Future, String>> getDevices() async { + return Left([ + Device(deviceId: "0", houseId: 0, type: DeviceType.battery), + Device(deviceId: "0", houseId: 0, type: DeviceType.meter), + Device(deviceId: "0", houseId: 0, type: DeviceType.solar), + Device(deviceId: "0", houseId: 0, type: DeviceType.thermal), + Device(deviceId: "DishWasher", houseId: 0, type: DeviceType.timeshifter), + Device( + deviceId: "WashingMachine", + houseId: 0, + type: DeviceType.timeshifter, + ), + Device( + deviceId: "light.bed_light", + houseId: 0, + type: DeviceType.haEntity, + ), + ]); + } +} diff --git a/hems_application/lib/service/entity_service.dart b/hems_application/lib/service/entity_service.dart new file mode 100644 index 0000000..7525101 --- /dev/null +++ b/hems_application/lib/service/entity_service.dart @@ -0,0 +1,71 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/api/entity_request.dart'; +import 'package:hems_app/util/hems_backend_util.dart'; + +/// Service for handling consumption of devices. +class EntityService { + static final EntityService _instance = EntityService._(); + final HemsBackendUtil _hemsBackendUtil = HemsBackendUtil(); + + factory EntityService() { + return _instance; + } + + EntityService._(); + + /// Returns the [EntityRequest] for the entity with id [entityId] in the house with id [houseId]. + /// + /// If successful returns a Left containing the relevant [EntityRequest]. + /// Otherwise returns a Right containing an error message. + Future> getEntityConsumption( + int houseId, + String entityId, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/entity/$entityId/consumption', + ); + return response.thenLeft((v) => jsonToEntityRequest(v)); + } + + /// Returns the state for the entity with id [entityId] in the house with id [houseId]. + /// + /// If successful returns a Left containing the revalant json. + /// Otherwise returns a Right containing an error message. + Future, String>> getEntityState( + int houseId, + String entityId, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/entity/$entityId/state', + ); + return response.mapLeft((v) => v); + } + + /// Sets the state for the entity with id [entityId] in the house with id [houseId] to [newState]. + /// + /// If successful returns a Left containing the response of the server. + /// Otherwise returns a Right containing an error message. + Future> setEntityState( + int houseId, + String entityId, + bool newState, + ) async { + + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/entity/$entityId/toggle/$newState', + ); + return response.mapLeft((v) => v); + } + + /// Converts the [json] to an [EntityRequest] object. + /// + /// Returns a Left containing the result if [json] is a valid [EntityRequest] json. + /// Otherwise returns a Right containing an error message. + Either jsonToEntityRequest(Map json) { + try { + return Left(EntityRequest.fromJson(json)); + } catch (_) { + return Right('Not a valid entity request JSON'); + } + } +} diff --git a/hems_application/lib/service/local_notifications_service.dart b/hems_application/lib/service/local_notifications_service.dart new file mode 100644 index 0000000..1cb0532 --- /dev/null +++ b/hems_application/lib/service/local_notifications_service.dart @@ -0,0 +1,104 @@ +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, TargetPlatform; +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +import 'package:timezone/data/latest.dart'; +import 'package:timezone/timezone.dart'; + +/// Service class for sending instant notifications and scheduled notification. +class LocalNotificationsService { + final FlutterLocalNotificationsPlugin notificationsPlugin = + FlutterLocalNotificationsPlugin(); + + /// Used to initialize settings for all supported platforms, as well as the icon for Android. + Future init() async { + initializeTimeZones(); + + setLocalLocation(getLocation('Europe/Brussels')); + + const AndroidInitializationSettings androidSettings = + AndroidInitializationSettings('icon_transparent'); + const DarwinInitializationSettings darwinSettings = + DarwinInitializationSettings(); + const LinuxInitializationSettings linuxSettings = + LinuxInitializationSettings(defaultActionName: 'Open notification'); + const WindowsInitializationSettings windowsSettings = + WindowsInitializationSettings( + appName: 'Flutter Local Notifications Example', + appUserModelId: 'Com.Dexterous.FlutterLocalNotificationsExample', + // Search online for GUID generators to make your own + guid: 'd49b0314-ee7a-4626-bf79-97cdb8a991bb', + ); + const InitializationSettings initializationSettings = + InitializationSettings( + android: androidSettings, + iOS: darwinSettings, + macOS: darwinSettings, + linux: linuxSettings, + windows: windowsSettings, + ); + + await notificationsPlugin.initialize(initializationSettings); + } + + /// Sends instant notification to the device. + /// + /// Ids are unique for all notifications, on overlapping ids the latest takes priority. + Future showInstantNotification({ + required int id, + required String title, + required String body, + }) async { + await notificationsPlugin.show( + id, + title, + body, + const NotificationDetails( + android: AndroidNotificationDetails( + 'instant_notification_channel_id', + 'Instant Notifications', + channelDescription: 'Instant notification channel', + importance: Importance.max, + priority: Priority.high, + ), + iOS: DarwinNotificationDetails(), + ), + ); + } + + /// Sends scheduled notification to the device. + /// + /// Ids are unique for all notifications, on overlapping ids the latest takes priority. + Future scheduleReminder({ + required int id, + required String title, + String? body, + required Duration delay, + }) async { + if (defaultTargetPlatform == TargetPlatform.linux) return; + TZDateTime now = TZDateTime.now(local); + TZDateTime scheduledDate = now.add(delay); + await notificationsPlugin.zonedSchedule( + id, + title, + body, + scheduledDate, + const NotificationDetails( + android: AndroidNotificationDetails( + 'delay_notification_channel_id', + 'Delay Notifications', + channelDescription: 'Delay notification channel', + importance: Importance.max, + priority: Priority.high, + ), + iOS: DarwinNotificationDetails(), + ), + androidScheduleMode: AndroidScheduleMode.inexactAllowWhileIdle, + matchDateTimeComponents: DateTimeComponents.dayOfWeekAndTime, + ); + } + + /// Cancels the notification with the specified id. + Future cancelNotification(int id) async { + await notificationsPlugin.cancel(id); + } +} diff --git a/hems_application/lib/service/meter_service.dart b/hems_application/lib/service/meter_service.dart new file mode 100644 index 0000000..06888fa --- /dev/null +++ b/hems_application/lib/service/meter_service.dart @@ -0,0 +1,41 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/api/meter_info.dart'; +import 'package:hems_app/util/hems_backend_util.dart'; + +/// Service for handling meter requests. +class MeterService { + static final MeterService _instance = MeterService._(); + final HemsBackendUtil _hemsBackendUtil = HemsBackendUtil(); + + factory MeterService() { + return _instance; + } + + MeterService._(); + + /// Returns the [MeterInfo] for the meter with id [meterId] in the house with id [houseId]. + /// + /// If successful returns a Left containing the revalant [MeterInfo]. + /// Otherwise returns a Right containing an error message. + Future> getMeterInfo( + int houseId, + int meterId, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/meters/$meterId', + ); + return response.thenLeft((v) => jsonToMeterInfo(v)); + } + + /// Converts the [json] to a [MeterInfo] object. + /// + /// Returns a Left containing the result if [json] is a valid [MeterInfo] json. + /// Otherwise returns a Right containing an error message. + Either jsonToMeterInfo(Map json) { + try { + return Left(MeterInfo.fromJson(json)); + } catch (_) { + return Right('Not a valid meter info JSON'); + } + } +} diff --git a/hems_application/lib/service/solar_service.dart b/hems_application/lib/service/solar_service.dart new file mode 100644 index 0000000..b300aaf --- /dev/null +++ b/hems_application/lib/service/solar_service.dart @@ -0,0 +1,58 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/api/solar_info.dart'; +import 'package:hems_app/util/hems_backend_util.dart'; + +/// Service for handling solar devices requests. +class SolarService { + static final SolarService _instance = SolarService._(); + final HemsBackendUtil _hemsBackendUtil = HemsBackendUtil(); + + factory SolarService() { + return _instance; + } + + SolarService._(); + + /// Returns the [SolarInfo] for the solar panel with id [solarId] in the house with id [houseId]. + /// + /// If successful returns a Left containing the [SolarInfo] object. + /// Otherwise returns a Right containing an error message. + /// [houseId] is currently ignored by the backend so its actual value does not matter. Instead [solarId] + /// is used as the house id by the backend. + Future> getSolarInfo( + int houseId, + int solarId, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/solar/$solarId', + ); + return response.thenLeft((v) => jsonToSolarInfo(v)); + } + + /// Converts the [json] to a [SolarInfo] object. + /// + /// Returns a Left containing the result if [json] is a valid [SolarInfo] json. + /// Otherwise returns a Right containing an error message. + Either jsonToSolarInfo(Map json) { + try { + return Left(SolarInfo.fromJson(json)); + } catch (_) { + return Right('Not a valid solar info JSON'); + } + } + + /// Sets the state of the solar panel with id [solarId] in the house with id [houseId] to [state]. + /// + /// If successful returns a Left containing the result sent by the server. + /// Otherwise returns a Right containing an error message. + /// [solarId] is currently ignored by the backend so its actual value does not matter. + Future> setState( + int houseId, + int solarId, + bool state, + ) { + return _hemsBackendUtil.getPlain( + 'houses/$houseId/solar/$solarId/toggle/$state', + ); + } +} diff --git a/hems_application/lib/service/thermal_service.dart b/hems_application/lib/service/thermal_service.dart new file mode 100644 index 0000000..4e19655 --- /dev/null +++ b/hems_application/lib/service/thermal_service.dart @@ -0,0 +1,71 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/api/thermal_info.dart'; +import 'package:hems_app/util/hems_backend_util.dart'; + +/// Service for handling thermal requests. +class ThermalService { + static final ThermalService _instance = ThermalService._(); + final HemsBackendUtil _hemsBackendUtil = HemsBackendUtil(); + + factory ThermalService() { + return _instance; + } + + ThermalService._(); + + /// Returns the [ThermalInfo] for the thermal deivce with id [thermalId] in the house with id [houseId]. + /// + /// If successful returns a Left containing the revalant [ThermalInfo]. + /// Otherwise returns a Right containing an error message. + /// [houseId] is currently ignored by the backend so its actual value does not matter. Instead [thermalId] + /// is used as the house id by the backend. + Future> getThermalInfo( + int houseId, + int thermalId, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/thermal/$thermalId', + ); + return response.thenLeft((v) => jsonToThermalInfo(v)); + } + + /// Converts the [json] to a [ThermalInfo] object. + /// + /// Returns a Left containing the result if [json] is a valid [ThermalInfo] json. + /// Otherwise returns a Right containing an error message. + Either jsonToThermalInfo(Map json) { + try { + return Left(ThermalInfo.fromJson(json)); + } catch (_) { + return Right('Not a valid thermal info JSON'); + } + } + + /// Sets the target temperature for the thermal device with id [thermalId] in the house with id [houseId] to [temp]. + /// + /// If successful returns a Left containing the updated target temperature. + /// Otherwise returns a Right containing an error message. + /// [thermalId] is currently ignored by the backend so its actual value does not matter. + Future> setTargetTemperature( + int houseId, + int thermalId, + double temp, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/thermal/$thermalId/target/$temp', + ); + return response.thenLeft((v) => jsonToTemperature(v)); + } + + /// Converts the [json] to a double. + /// + /// Returns a Left containing the result if [json] is a valid json containing the target temperature. + /// Otherwise returns a Right containing an error message. + Either jsonToTemperature(Map json) { + try { + return Left((json['target_temperature'] as num).toDouble()); + } catch (_) { + return Right('Not a valid JSON with a target temperature'); + } + } +} diff --git a/hems_application/lib/service/timeshifter_service.dart b/hems_application/lib/service/timeshifter_service.dart new file mode 100644 index 0000000..1be3dbc --- /dev/null +++ b/hems_application/lib/service/timeshifter_service.dart @@ -0,0 +1,112 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/api/job.dart'; +import 'package:hems_app/model/api/schedule_job.dart'; +import 'package:hems_app/util/hems_backend_util.dart'; + +/// Service for handling timeshifter devices requests. +class TimeshifterService { + static final TimeshifterService _instance = TimeshifterService._(); + final HemsBackendUtil _hemsBackendUtil = HemsBackendUtil(); + + factory TimeshifterService() { + return _instance; + } + + TimeshifterService._(); + + /// Returns the [DeviceStatus] for the timeshifter with name [entityName] in the house with id [houseId]. + /// + /// If successful returns a Left containing the revalant [DeviceStatus]. + /// Otherwise returns a Right containing an error message. + Future> getTimeshifterProperties( + int houseId, + String entityName, + ) async { + final response = await _hemsBackendUtil.getJson( + 'houses/$houseId/timeshifters/$entityName', + ); + return response.thenLeft((v) => jsonToDeviceStatus(v)); + } + + /// Converts the [json] to a [DeviceStatus] object. + /// + /// Returns a Left containing the result if [json] is a valid [DeviceStatus] json. + /// Otherwise returns a Right containing an error message. + /// [DeviceStatus] is analogous with Timeshifter. + Either jsonToDeviceStatus(Map json) { + try { + return Left(DeviceStatus.fromJson(json)); + } catch (_) { + return Right('Not a valid device status JSON'); + } + } + + /// Posts a job [ScheduleJob] for an entity [entityName] in house with id [houseId] + /// + /// If successful returns a Left containing the revalant [Job]. + /// Otherwise returns a Right containing an error message. + Future> scheduleJob( + int houseId, + String entityName, + ScheduleJob job, + ) async { + final response = await _hemsBackendUtil.postJSON( + 'houses/$houseId/timeshifters/$entityName/job', + job.toJson(), + ); + return response.thenLeft((v) => jsonToJobMap(v)); + } + + /// Converts the [json] to a [Job] object. + /// + /// Returns a Left containing the result if [json] is a valid [Job] json. + /// Otherwise returns a Right containing an error message. + Either jsonToJobMap(Map json) { + try { + return Left(Job.fromJson(json)); + } catch (_) { + return Right('Not a valid job JSON'); + } + } + + /// Attempts to shutdown entity with name [entityName] from house with id [houseId] + /// + /// If successful returns a String confirming the shutdown + /// Otherwise returns a Right containing an error message. + Future> shutdownTimeshifter( + int houseId, + String entityName, + ) async { + final response = await _hemsBackendUtil.getPlain( + 'houses/$houseId/timeshifters/$entityName/shutdown', + ); + return response; + } + + /// Attempts to cancel job with id [jobId] entity with name [entityName] from house with id [houseId] + /// + /// If successful returns a String confirming the shutdown + /// Otherwise returns a Right containing an error message. + Future> cancelJob( + int houseId, + String entityName, + int jobId, + ) async { + final response = await _hemsBackendUtil.deletePlain( + 'houses/$houseId/timeshifters/$entityName/job/$jobId', + ); + return response; + } + + /// Attempts to get the current time of house with id [houseId]. + /// + /// That time might be different from the current time of the device if there's a desync or the house is a simulation. + /// + /// If successful returns a String of the current time in seconds since epoch. (You'll probably want to parse it as an int first) + /// Otherwise returns a Right containing an error message. + Future> getCurrentHouseTime(int houseId) { + final response = _hemsBackendUtil.getPlain('houses/$houseId/time'); + return response; + } +} diff --git a/hems_application/lib/state/app_state.dart b/hems_application/lib/state/app_state.dart new file mode 100644 index 0000000..5ce6c72 --- /dev/null +++ b/hems_application/lib/state/app_state.dart @@ -0,0 +1,198 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/service/device_service.dart'; +import 'package:path_provider/path_provider.dart'; + +/// A singleton class that manages the global application state for rooms, devices. +/// +/// It extends [ChangeNotifier] to allow widgets to listen for changes in the state and update +/// accordingly. +class AppState extends ChangeNotifier { + static final AppState _instance = AppState._internal(); + + final _deviceService = DeviceService(); + + List _rooms = []; + List _devices = []; + bool _isSolarEnabled = true; + + AppState._internal(); + + /// A singleton class that manages the global application state for rooms and devices. + /// + /// It extends [ChangeNotifier] to allow widgets to listen for changes in the state and update + /// accordingly. + factory AppState() { + return _instance; + } + + /// Initializes app state from the persistence file. + /// + /// The file that is used for persistence is app_state.json inside + /// platform specific app documents directory. + /// Returns a future that can be awaited to ensure initialization is finished + Future initFromFile() async { + try { + final appDocumentsDir = await getApplicationDocumentsDirectory(); + final file = File('${appDocumentsDir.path}/app_state.json'); + final contents = await file.readAsString(); + + await initFromJson(jsonDecode(contents)); + } catch (_) {} + } + + /// Writes the app state json to the persistence file + /// + /// The file that is used for persistence is app_state.json inside + /// platform specific app documents directory. + /// Returns a future that can be awaited to ensure writing is finished + Future dumpStateToFile() async { + try { + final appDocumentsDir = await getApplicationDocumentsDirectory(); + final file = File('${appDocumentsDir.path}/app_state.json'); + + await file.writeAsString(jsonEncode(toJson())); + } catch (_) {} + } + + /// Initializes the app state from a [json]. + /// + /// The [json] that is used for initialization has the same format + /// as [toJson] generates. + /// This method ignores devices that are not present in the current backend + /// Returns a future that can be awaited to ensure initlization is finished + Future initFromJson(Map json) async { + final availableDevices = (await _deviceService.getDevices()).fold( + (left) => left, + (right) => [], + ); + _devices = + (json['devices'] as List) + .map((j) => Device.fromJson(j as Map)) + .where((d) => availableDevices.contains(d)) + .toList(); + _rooms = + (json['rooms'] as List) + .map((j) => Room.fromJson(j as Map)) + .toList(); + + for (Room room in _rooms) { + room.devices = room.devices.where((d) => _devices.contains(d)).toList(); + } + + _isSolarEnabled = json['is_solar_enabled'] as bool; + + notifyListeners(); + } + + /// Creates a json that can be used to restore the current state using [initFromJson] + Map toJson() => { + 'rooms': _rooms.map((r) => r.toJson()).toList(), + 'devices': _devices.map((d) => d.toJson()).toList(), + 'is_solar_enabled': _isSolarEnabled, + }; + + /// Returns the rooms the user has created. + List get rooms => List.unmodifiable(_rooms); + + /// Returns the devices the user is actively managing in the app. + List get devices => List.unmodifiable(_devices); + + /// Returns whether solar is enabled + bool get isSolarEnabled => _isSolarEnabled; + + /// Adds a room to the list of rooms. + /// + /// Also notifies the listeners and saves the new state. + void addRoom(Room r) { + _rooms.add(r); + notifyListeners(); + dumpStateToFile(); + } + + /// Removes a room from the list of rooms. + /// + /// Also notifies the listeners and saves the new state. + void removeRoom(Room r) { + _rooms.remove(r); + notifyListeners(); + dumpStateToFile(); + } + + /// Changes the details of a room + /// + /// Also notifies the listeners and saves the new state. + void editRoom(Room r, String name, RoomType roomType, List devices) { + r.name = name; + r.type = roomType; + r.devices = devices; + notifyListeners(); + dumpStateToFile(); + } + + /// Adds a device to the list of devices. + /// + /// Also notifies the listeners and saves the new state. + void addDevice(Device d) { + _devices.add(d); + notifyListeners(); + dumpStateToFile(); + } + + /// Removes a device from the list of devices. + /// + /// Also notifies the listeners and saves the new state. + void removeDevice(Device d) { + _devices.remove(d); + notifyListeners(); + dumpStateToFile(); + } + + /// Sets the list of rooms + /// + /// Also notifies the listeners and saves the new state. + set rooms(List rooms) { + _rooms = rooms; + notifyListeners(); + dumpStateToFile(); + } + + /// Sets the list of devices + /// + /// Also notifies the listeners and saves the new state. + set devices(List devices) { + _devices = devices; + notifyListeners(); + dumpStateToFile(); + } + + /// Sets whether solar is enabled. + /// + /// Also notifies the listeners and saves the new state. + set isSolarEnabled(bool newEnabled) { + _isSolarEnabled = newEnabled; + notifyListeners(); + dumpStateToFile(); + } + + /// Returns a [Room] with all the [Device]'s that are not assigned to any room. + Room othersRoom(BuildContext context) { + List listedDevices = []; + for (final room in rooms) { + listedDevices.addAll(room.devices); + } + return Room( + name: context.l10n.others, + type: RoomType.others, + devices: + AppState().devices + .where((device) => !listedDevices.contains(device)) + .toList(), + ); + } +} diff --git a/hems_application/lib/state/locale_notifier.dart b/hems_application/lib/state/locale_notifier.dart new file mode 100644 index 0000000..82ad969 --- /dev/null +++ b/hems_application/lib/state/locale_notifier.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +/// Notifier for handling language quick switching. +class LocaleNotifier extends ChangeNotifier { + static const localePrefKey = 'appLocale'; + Locale _locale = const Locale('en'); + + Locale get locale => _locale; + + LocaleNotifier._(); + + /// Initialize the notifier. + static Future create() async { + final notifier = LocaleNotifier._(); + await notifier._loadLocale(); + return notifier; + } + + /// Method for changing the locale. + Future setLocale(Locale newLocale) async { + _locale = newLocale; + notifyListeners(); + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(localePrefKey, newLocale.languageCode); + } + + /// Method for loading the locale on startup. + Future _loadLocale() async { + final prefs = await SharedPreferences.getInstance(); + final code = prefs.getString(localePrefKey) ?? 'en'; + _locale = Locale(code); + } +} diff --git a/hems_application/lib/state/stat_collector.dart b/hems_application/lib/state/stat_collector.dart new file mode 100644 index 0000000..9c89750 --- /dev/null +++ b/hems_application/lib/state/stat_collector.dart @@ -0,0 +1,103 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:hems_app/model/api/battery_info.dart'; +import 'package:hems_app/model/api/battery_status.dart'; +import 'package:hems_app/model/api/measurement.dart'; +import 'package:hems_app/model/api/meter_info.dart'; +import 'package:hems_app/model/api/solar_info.dart'; +import 'package:hems_app/service/battery_service.dart'; +import 'package:hems_app/service/meter_service.dart'; +import 'package:hems_app/service/solar_service.dart'; +import 'package:hems_app/widget/analytics/power_flow_painter.dart'; + +/// A singleton class that collects and manages statistics. +/// +/// It extends [ChangeNotifier] to allow widgets to listen for changes in the state and update +/// accordingly. +class StatCollector extends ChangeNotifier { + static final StatCollector _instance = StatCollector._internal(); + + List> consumptionData = []; + List consumers = []; + List producers = []; + + final MeterService _meterService = MeterService(); + final BatteryService _batteryService = BatteryService(); + final SolarService _solarService = SolarService(); + + StatCollector._internal(); + + /// Starts a timer to poll consumption every 5 seconds + /// + /// Should be called in main before the application starts + void startPolling() { + Timer.periodic( + const Duration(seconds: 5), + (Timer t) => pollConsumption(), + ); + } + + /// A singleton class that collects and manages statistics. + /// + /// It extends [ChangeNotifier] to allow widgets to listen for changes in the state and update + /// accordingly. + factory StatCollector() { + return _instance; + } + + /// Gets the power consumption in Watts of all of the devices in the configuration every 5 seconds. + /// + /// The list consumptionData holds the last 12 power consumption values, i.e. the values + /// from the past minute. + void pollConsumption() async { + final meterInfo = await _meterService.getMeterInfo(0, 0); + final solarInfo = await _solarService.getSolarInfo(0, 0); + final batteryInfo = await _batteryService.getBatteryInfo(0, 0); + if (meterInfo.isRight || solarInfo.isRight || batteryInfo.isRight) return; + + MeterInfo mi = meterInfo.left; + SolarInfo si = solarInfo.left; + BatteryInfo bi = batteryInfo.left; + + consumers = []; + producers = []; + + double batteryConsumption = 0; + if (bi.status == BatteryStatus.charging) { + batteryConsumption = -bi.consumption; + consumers.add(PowerSink.battery); + } else if (bi.status == BatteryStatus.discharging) { + batteryConsumption = bi.consumption; + producers.add(PowerSink.battery); + } + + if (si.consumption > 0) { + producers.add(PowerSink.solar); + } + + if ((mi.currentExport ?? 0) > 0) { + consumers.add(PowerSink.net); + } else if ((mi.currentImport ?? 0) > 0) { + producers.add(PowerSink.net); + } + + double deviceConsumption = + (mi.currentImport ?? 0) - + (mi.currentExport ?? 0) + + si.consumption + + batteryConsumption; + + if (deviceConsumption > 0) { + consumers.add(PowerSink.devices); + } + + DateTime now = DateTime.now(); + if (consumptionData.length == 12) { + consumptionData.remove(consumptionData.first); + } + + consumptionData.add(MapEntry(Measurement(deviceConsumption, "W"), now)); + notifyListeners(); + } +} diff --git a/hems_application/lib/state/theme_notifier.dart b/hems_application/lib/state/theme_notifier.dart new file mode 100644 index 0000000..602512a --- /dev/null +++ b/hems_application/lib/state/theme_notifier.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +/// Notifier for handling theme quick switching. +class ThemeNotifier extends ChangeNotifier { + static const themePrefKey = 'isDarkMode'; + bool _isDarkMode = false; + + bool get isDarkMode => _isDarkMode; + ThemeMode get currentTheme => _isDarkMode ? ThemeMode.dark : ThemeMode.light; + + ThemeNotifier._(); + + /// Initialize the notifier. + static Future create() async { + final themeNotifier = ThemeNotifier._(); + await themeNotifier._loadThemePreference(); + return themeNotifier; + } + + /// Method for changing the theme. + void toggleTheme(bool isOn) async { + _isDarkMode = isOn; + notifyListeners(); + final prefs = await SharedPreferences.getInstance(); + await prefs.setBool(themePrefKey, _isDarkMode); + } + + /// Method for loading the theme on startup. + Future _loadThemePreference() async { + final prefs = await SharedPreferences.getInstance(); + _isDarkMode = prefs.getBool(themePrefKey) ?? false; + notifyListeners(); + } +} diff --git a/hems_application/lib/util/hems_backend_util.dart b/hems_application/lib/util/hems_backend_util.dart new file mode 100644 index 0000000..3ab3e83 --- /dev/null +++ b/hems_application/lib/util/hems_backend_util.dart @@ -0,0 +1,133 @@ +import 'dart:convert'; + +import 'package:either_dart/either.dart'; +import 'package:http/http.dart' as http; + +class HemsBackendUtil { + static final HemsBackendUtil _instance = HemsBackendUtil._(); + String? baseUrl; + + /// Returns the singleton instance for the class. + factory HemsBackendUtil() { + return _instance; + } + + /// Initiliaze the [baseUrl] from the environment. + /// + /// This is a temporary constructor that initilizes this class from the HEMS_URL environment variable. + /// It should be replaced with a different mechanism to get the hems server url in the future. + HemsBackendUtil._() + : baseUrl = + const bool.hasEnvironment('HEMS_URL') + ? const String.fromEnvironment('HEMS_URL') + : null; + + /// Gets the given [path] as a JSON object from the HEMS server + /// + /// If the request is successful returns a Left containing the decoded result. + /// Returns a Right containing an error message otherwise. + Future> getJson(String path) async { + switch (baseUrl) { + case String baseUrl?: + try { + final response = await http.get(Uri.parse("$baseUrl/$path")); + return responseToJson(response); + } catch (e) { + return Right("$e"); + } + default: + return Right("Hems Core URL not set"); + } + } + + /// Gets the given [path] as a plain string from the HEMS server. + /// + /// If the request is successful returns a Left containing the result. + /// Returns a Right containing an error message otherwise. + Future> getPlain(String path) async { + switch (baseUrl) { + case String baseUrl?: + try { + final response = await http.get(Uri.parse("$baseUrl/$path")); + return responseToString(response); + } catch (e) { + return Right('$e'); + } + default: + return Right("Hems Core URL not set"); + } + } + + /// Converts [response] to the revelant result. + /// + /// Returns a Left containing the decoded result if the request succeeds with a 200 OK + /// and the response is valid JSON. + /// Otherwsie returns a Right containg an error message. + Either responseToJson(http.Response response) { + if (response.statusCode != 200) { + return Right('HTTP ${response.statusCode}: ${response.body}'); + } + + try { + return Left(jsonDecode(response.body)); + } catch (_) { + return Right("Server response is not valid JSON"); + } + } + + /// Converts [response] to the revelant result. + /// + /// Returns a Left containing the result if the request succeeds with a 200 OK + /// Otherwsie returns a Right containg an error message. + Either responseToString(http.Response response) { + if (response.statusCode != 200) { + return Right('HTTP ${response.statusCode}: ${response.body}'); + } + + return Left(response.body); + } + + /// Posts to the given [path] using [json] as the body to the HEMS server. + /// + /// If the request is successful returns a Left containing a decoded result. + /// Returns a Right containing an error message otherwise. + Future> postJSON( + String path, + Map json, + ) async { + switch (baseUrl) { + case String baseUrl?: + var headers = {'Content-Type': 'application/json'}; + try { + final response = await http.post( + Uri.parse("$baseUrl/$path"), + headers: headers, + body: jsonEncode(json), + ); + return responseToJson(response); + } catch (e) { + return Right("$e"); + } + default: + return Right("Hems Core URL not set"); + } + } + + /// Deletes entity present in the [path] from HEMS server. + /// + /// If the request is successful returns a Left containing a response message. + /// Returns a Right containing an error message otherwise. + Future> deletePlain(String path) async { + switch (baseUrl) { + case String baseUrl?: + try { + final response = await http.delete(Uri.parse("$baseUrl/$path")); + return responseToString(response); + } catch (e) { + return Right("$e"); + } + default: + return Right("Hems Core URL not set"); + } + } +} diff --git a/hems_application/lib/util/timeshifter_util.dart b/hems_application/lib/util/timeshifter_util.dart new file mode 100644 index 0000000..2eecdae --- /dev/null +++ b/hems_application/lib/util/timeshifter_util.dart @@ -0,0 +1,275 @@ +// ignore_for_file: use_build_context_synchronously + +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/api/schedule_job.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/service/local_notifications_service.dart'; +import 'package:hems_app/service/timeshifter_service.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/schedule_view.dart'; + +/// Utility class for managing timeshifter jobs. +class TimeshifterUtil { + /// Loads all jobs for timeshifter device, optionally filtered by [deviceId]. + /// + /// Jobs that have already ended are removed from the list. + /// This is determined by the current time, but that time can be overridden by passing [now]. + /// Jobs are also sorted by their starting time. + /// + /// If any request to the backend fails, an error message is shown in a SnackBar of the given [BuildContext]. + /// If [context] is null, no SnackBar is shown. + Future?> loadJobs( + BuildContext? context, { + String? deviceId, + DateTime? now, + }) async { + List newJobs = []; + int timeDelay = 0; + + now ??= DateTime.now(); + + var timeshifters = + AppState().devices + .where((device) => device.type == DeviceType.timeshifter) + .where((device) => deviceId == null || device.deviceId == deviceId) + .toList(); + if (timeshifters.isEmpty) { + return []; + } + + final currentTime = await TimeshifterService().getCurrentHouseTime(0); + if (currentTime.isLeft) { + timeDelay = + int.parse(currentTime.left) - + DateTime.now().millisecondsSinceEpoch ~/ 1000; + } else { + timeDelay = 0; + } + + for (Device device in timeshifters) { + Either deviceStatusResult = + await TimeshifterService().getTimeshifterProperties( + device.houseId, + device.deviceId, + ); + + if (deviceStatusResult.isRight) { + if (context?.mounted ?? false) { + ScaffoldMessenger.of(context!).showSnackBar( + SnackBar( + content: Text( + "${context.l10n.failedToGetStatusOf} ${device.deviceId}: ${deviceStatusResult.right}", + ), + ), + ); + } + continue; + } + + DeviceStatus deviceStatus = deviceStatusResult.left; + Room? deviceRoom = AppState().rooms.firstWhere( + (room) => room.devices.contains(device), + orElse: + () => + context != null + ? AppState().othersRoom(context) + : Room(type: RoomType.others, name: "Others", devices: []), + ); + + for (int i = 0; i < deviceStatus.scheduledJobs.length; i++) { + var job = deviceStatus.scheduledJobs[i]; + DateTime startTime = DateTime.fromMillisecondsSinceEpoch( + job.startTime * 1000 - timeDelay * 1000, + ); + DateTime endTime = DateTime.fromMillisecondsSinceEpoch( + job.endTime * 1000 - timeDelay * 1000, + ); + newJobs.add( + DisplayJob( + id: i, + room: deviceRoom, + device: device, + startTime: startTime, + duration: endTime.difference(startTime), + ), + ); + } + } + + newJobs.sort((a, b) => a.startTime.compareTo(b.startTime)); + newJobs.removeWhere( + (job) => job.startTime.add(job.duration).isBefore(now!), + ); + + return newJobs; + } + + /// Cancels a job with the given [jobId] and [startTime] for the specified [device]. + /// + /// If the cancellation is successful, a success message is shown in a SnackBar of the given [BuildContext]. + /// If the cancellation fails, an error message is shown instead. + /// If [context] is null, no SnackBar is shown. + /// + /// This also cancels the corresponding notification for the job. + /// The notification ID is derived from the device ID and the job's start time. + /// If [context] is null, the notification is not cancelled. The value of [startTime] also becomes irrelevant in this case. + Future cancelJob( + BuildContext? context, + int jobId, + DateTime startTime, + Device device, + ) async { + if (context?.mounted ?? false) { + ScaffoldMessenger.of( + context!, + ).showSnackBar(SnackBar(content: Text(context.l10n.cancelingJob))); + } + + final result = await TimeshifterService().cancelJob( + device.houseId, + device.deviceId, + jobId, + ); + + // Cancel notification + if (context != null) { + int notificationId = + device.deviceId.hashCode + startTime.toUtc().millisecondsSinceEpoch; + // Notification IDs have to be 32-bit so let's size it down + notificationId = + ((notificationId >>> 32) ^ notificationId) & ((1 << 31) - 1); + LocalNotificationsService().cancelNotification(notificationId); + LocalNotificationsService().cancelNotification(~notificationId); + } + + if (context?.mounted ?? false) { + ScaffoldMessenger.of(context!).removeCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + result.isLeft + ? "${context.l10n.jobCancelledSuccessfully}!" + : "${context.l10n.failedToCancelJob}: ${result.right}", + ), + ), + ); + } + } + + /// Schedules a job for a timeshifter device. Job parameters are taken from [job]. + /// + /// All properties of [DisplayJob] are relevant, except for [DisplayJob.id] and [DisplayJob.room]. + /// If [context] is not null, SnackBars are shown that indicate the state of the scheduling. + /// + /// If the job is scheduled successfully, and [context] is not null, a reminder notification is scheduled for 10 minutes before the job starts. + /// The notification is not set if the job's start time is less than 10 minutes away from the current time. + /// The notification ID is derived from the device ID and the job's start time. + Future scheduleJob(BuildContext? context, DisplayJob job) async { + // Send job to the backend + if (context?.mounted ?? false) { + ScaffoldMessenger.of(context!).showSnackBar( + SnackBar(content: Text("${context.l10n.schedulingJob}...")), + ); + } + + ScheduleJob scheduleJob = ScheduleJob( + job.startTime.difference(DateTime.now()).inSeconds, + job.duration.inSeconds, + ); + + final result = await TimeshifterService().scheduleJob( + job.device.houseId, + job.device.deviceId, + scheduleJob, + ); + + if (result.isLeft) { + /// Precise start/end times in milliseconds from backend + int startTimeMilliseconds = result.left.startTime; + int endTimeMilliseconds = result.left.endTime; + + /// Calculate timeDelay between simulation and actual time + int timeDelay = 0; + final currentTime = await TimeshifterService().getCurrentHouseTime(0); + if (currentTime.isLeft) { + timeDelay = + int.parse(currentTime.left) - + DateTime.now().millisecondsSinceEpoch ~/ 1000; + } else { + timeDelay = 0; + } + + /// Calculate precise start time and end time date + DateTime preciseStartTime = DateTime.fromMillisecondsSinceEpoch( + startTimeMilliseconds * 1000 - timeDelay * 1000, + ); + DateTime preciseEndTime = DateTime.fromMillisecondsSinceEpoch( + endTimeMilliseconds * 1000 - timeDelay * 1000, + ); + + // Check if the delay is more than 10 minutes. If so, schedule a reminder + if ((context?.mounted ?? false) && + !preciseStartTime + .add(Duration(minutes: -10)) + .isBefore(DateTime.now())) { + String name = job.device.deviceId; + final reminderTime = preciseStartTime.subtract(Duration(minutes: 10)); + + // Schedule a reminder for 10 minutes before the device starts + int notificationId = + name.hashCode + preciseStartTime.toUtc().millisecondsSinceEpoch; + + // Notification IDs have to be 32-bit so let's size it down + notificationId = + ((notificationId >>> 32) ^ notificationId) & ((1 << 31) - 1); + LocalNotificationsService().scheduleReminder( + id: notificationId, + title: context!.l10n.scheduleReminder, + body: context.l10n.yourDeviceWillStartInTenMinutes(name), + delay: reminderTime.difference(DateTime.now()), + ); + } + + // Check if the delay is more than 10 minutes. If so, schedule a reminder + if ((context?.mounted ?? false) && + !preciseEndTime + .add(Duration(minutes: -10)) + .isBefore(DateTime.now())) { + String name = job.device.deviceId; + final reminderTime = preciseEndTime.subtract(Duration(minutes: 10)); + + // Schedule a reminder for 10 minutes before the device stops + int notificationId = + name.hashCode + preciseStartTime.toUtc().millisecondsSinceEpoch; + + // Notification IDs have to be 32-bit so let's size it down + notificationId = + ((notificationId >>> 32) ^ notificationId) & ((1 << 31) - 1); + + LocalNotificationsService().scheduleReminder( + id: ~notificationId, + title: context!.l10n.scheduleReminder, + body: context.l10n.yourDeviceWillStopInTenMinutes(name), + delay: reminderTime.difference(DateTime.now()), + ); + } + + if (context?.mounted ?? false) { + ScaffoldMessenger.of(context!).removeCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + result.isLeft + ? "${context.l10n.jobScheduledSuccessfully}!" + : "${context.l10n.failedToScheduleJob}: ${result.right}", + ), + ), + ); + } + } + } +} diff --git a/hems_application/lib/widget/analytics/animated_power_flow.dart b/hems_application/lib/widget/analytics/animated_power_flow.dart new file mode 100644 index 0000000..0178c78 --- /dev/null +++ b/hems_application/lib/widget/analytics/animated_power_flow.dart @@ -0,0 +1,114 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/state/stat_collector.dart'; +import 'package:hems_app/widget/analytics/power_flow_painter.dart'; +import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; + +class AnimatedPowerFlow extends StatefulWidget { + const AnimatedPowerFlow({super.key}); + + @override + State createState() { + return AnimatedPowerFlowState(); + } +} + +class AnimatedPowerFlowState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _animation; + final _statCollector = StatCollector(); + + /// Initializes the [AnimationController]. + /// + /// The animation progressed by a value that cycles from 0.0 to 1.0, and doesn't go in the reverse direction when it reaches 1.0. + @override + void initState() { + super.initState(); + _controller = AnimationController( + duration: Duration(seconds: 2), + vsync: this, + )..repeat(reverse: false); + + _animation = Tween(begin: 0.0, end: 1.0).animate(_controller); + } + + /// Builds the widget + /// + /// Uses an [AnimatedBuilder] to get access to a value that ticks at the correct framerate. + /// The tick value is used to animate the [CustomPainter] that creates lines and moving thunderbolts between devices.context + /// Uses [StatCollector] to get access to the current consumers and producers in the home. + /// The consumers and producers lists dictate where and in what direction the animation goes. + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: _statCollector, + builder: (context, _) { + return Align( + child: SizedBox( + width: MediaQuery.of(context).size.width * 0.85, + height: MediaQuery.of(context).size.width * 0.85, + child: Stack( + alignment: Alignment.center, + children: [ + AnimatedBuilder( + animation: _animation, + builder: + (_, __) => CustomPaint( + painter: PowerFlowPainter( + progress: _animation.value, + consumers: _statCollector.consumers, + producers: _statCollector.producers, + ), + size: Size( + MediaQuery.of(context).size.width, + MediaQuery.of(context).size.width, + ), + ), + ), + Positioned( + right: 10, + child: Card( + child: Icon( + Icons.solar_power_rounded, + size: 60, + color: Colors.amber, + ), + ), + ), + Positioned( + left: 10, + child: Card( + child: Icon(Icons.battery_full, size: 60, color: Colors.green), + ), + ), + Positioned( + bottom: 10, + child: Card( + child: Icon( + MdiIcons.transmissionTower, + size: 60, + color: Colors.blue, + ), + ), + ), + Positioned( + top: 10, + child: Card( + child: Icon(Icons.home_rounded, size: 60, color: Colors.grey), + ), + ), + ], + ), + ), + ); + }, + ); + } + + /// Disposes the animation controller since otherwise it would keep ticking. + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } +} diff --git a/hems_application/lib/widget/analytics/consumption_chart.dart b/hems_application/lib/widget/analytics/consumption_chart.dart new file mode 100644 index 0000000..49896ca --- /dev/null +++ b/hems_application/lib/widget/analytics/consumption_chart.dart @@ -0,0 +1,79 @@ +import 'package:collection/collection.dart'; +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/state/stat_collector.dart'; + +class ConsumptionChart extends StatelessWidget { + const ConsumptionChart({super.key}); + + /// Builds the widget. + /// + /// [StatCollector] collects and stores consumption data in a list. + /// The last 60 seconds of data are stored and displayed in the bar chart. + /// On the y axis is the total consumption of the devices in the house. + /// On the x axis is the last 60 seconds. + @override + Widget build(BuildContext context) { + final statCollector = StatCollector(); + return ListenableBuilder( + listenable: statCollector, + builder: (context, _) { + return SizedBox( + height: MediaQuery.of(context).size.width / 1.4, + width: MediaQuery.of(context).size.width, + child: BarChart( + BarChartData( + maxY: + (statCollector.consumptionData.isEmpty + ? 0.0 + : statCollector.consumptionData + .map((e) => e.key.value) + .max) * + 1.30, + barGroups: + statCollector.consumptionData.isEmpty + ? [] + : List.generate(statCollector.consumptionData.length, ( + i, + ) { + return BarChartGroupData( + x: + (statCollector.consumptionData.length * 5) - + (i * 5), + barRods: [ + BarChartRodData( + toY: statCollector.consumptionData[i].key.value, + width: 12, + borderRadius: BorderRadius.zero, + ), + ], + ); + }), + titlesData: FlTitlesData( + leftTitles: AxisTitles( + axisNameWidget: Transform.translate( + offset: Offset(40, 0), + child: Text(context.l10n.consumption), + ), + sideTitles: SideTitles(showTitles: true, reservedSize: 55), + ), + bottomTitles: AxisTitles( + axisNameWidget: Text(context.l10n.seconds), + axisNameSize: 40, + sideTitles: SideTitles(showTitles: true, reservedSize: 40), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + topTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + ), + ), + ), + ); + }, + ); + } +} diff --git a/hems_application/lib/widget/analytics/power_flow_painter.dart b/hems_application/lib/widget/analytics/power_flow_painter.dart new file mode 100644 index 0000000..719f677 --- /dev/null +++ b/hems_application/lib/widget/analytics/power_flow_painter.dart @@ -0,0 +1,91 @@ +import 'package:flutter/material.dart'; + +/// Defines the 4 supported sources and consumers of power. +enum PowerSink { devices, solar, battery, net } + +extension PowerSinkExtension on PowerSink { + /// Returns the [Offset] of the given [PowerSink] in the diagram. + /// + /// Each is on one of the corners of a "square diamond" shape. + /// The modifications with value 50 make the points at the center of their icons. + Offset offset(Size size) { + return switch (this) { + PowerSink.solar => Offset(size.width - 50, size.height / 2), + PowerSink.battery => Offset(50, size.height / 2), + PowerSink.devices => Offset(size.width / 2, 50), + PowerSink.net => Offset(size.width / 2, size.height - 50), + }; + } + + /// Returns the [Color] associated with this [PowerSink]. + Color color() { + return switch (this) { + PowerSink.solar => Colors.amber, + PowerSink.battery => Colors.green, + PowerSink.devices => Colors.grey, + PowerSink.net => Colors.blue, + }; + } +} + +class PowerFlowPainter extends CustomPainter { + double progress; + List producers; + List consumers; + + /// Lines and traveling thunderbolt icons between the four corners of a diamond shape. + /// + /// [progress] indicates how far along the path the thunderbolts are. + /// [producers] indicates from what points the thunderbolts and lines should originate. + /// The lines and thunderbolts end at the [consumers]. + PowerFlowPainter({ + required this.progress, + required this.consumers, + required this.producers, + }); + + @override + void paint(Canvas canvas, Size size) { + Paint boltPaint = + Paint() + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round + ..strokeWidth = 8.0; + Paint linePaint = + Paint() + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round + ..strokeWidth = 2.0 + ..color = const Color.fromARGB(160, 158, 158, 158); + for (PowerSink prod in producers) { + for (PowerSink con in consumers) { + Offset path = con.offset(size) - prod.offset(size); + boltPaint.color = Color.lerp(prod.color(), con.color(), progress)!; + + final icon = Icons.bolt; + + final textPainter = TextPainter( + text: TextSpan( + text: String.fromCharCode(icon.codePoint), + style: TextStyle( + fontSize: 48.0, + fontFamily: icon.fontFamily, + package: icon.fontPackage, + color: Color.lerp(prod.color(), con.color(), progress), + ), + ), + textDirection: TextDirection.ltr, + )..layout(); + canvas.drawLine(prod.offset(size), con.offset(size), linePaint); + + final position = prod.offset(size) + path * progress; + final offset = + position - Offset(textPainter.width / 2, textPainter.height / 2); + textPainter.paint(canvas, offset); + } + } + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => true; +} diff --git a/hems_application/lib/widget/device/battery_info_card.dart b/hems_application/lib/widget/device/battery_info_card.dart new file mode 100644 index 0000000..4b370a1 --- /dev/null +++ b/hems_application/lib/widget/device/battery_info_card.dart @@ -0,0 +1,316 @@ +import 'dart:async'; +import 'dart:math' as math; + +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/api/battery_info.dart'; +import 'package:hems_app/model/api/battery_status.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/service/battery_service.dart'; + +import 'battery_ring_painter.dart'; + +class BatteryInfoCard extends StatefulWidget { + final Device battery; + const BatteryInfoCard({required this.battery, super.key}); + + @override + State createState() => BatteryState(); +} + +class BatteryState extends State { + Either? batInfo; + Timer? timer; + final _batteryService = BatteryService(); + double? _dragTargetRatio; + bool _isDragging = false; + + /// Initializes the battery info card widget. + /// + /// In addition, starts a timer to refresh the widget every second. + @override + void initState() { + super.initState(); + loadBattery(); + timer = Timer.periodic(Duration(seconds: 1), (Timer t) => loadBattery()); + } + + /// Updates the widget with new battery information. + Future loadBattery() async { + final info = await _batteryService.getBatteryInfo( + widget.battery.houseId, + int.parse(widget.battery.deviceId), + ); + if (!mounted) return; + setState(() { + batInfo = info; + }); + } + + /// Disposes the widget. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + /// Builds the widget. + /// + /// If [batInfo] is not loaded yet it shows a progress indicator. + /// If there was an error during loading [batInfo] it shows the relevant error message. + /// Otherwise displays a circular indicator showing battery charge state and target state of charge. + /// The indicator sets or clears the target state of charge when clicked at the relevant places. + /// Also displays the status of the battery with time estimates as required. + /// The widget is both draggable and clickable. + @override + Widget build(BuildContext context) { + if (batInfo == null) return Center(child: CircularProgressIndicator()); + if (batInfo!.isRight) return Center(child: Text(batInfo!.right)); + BatteryInfo bi = batInfo!.left; + + return Card( + child: Padding( + padding: const EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + context.l10n.battery, + style: Theme.of(context).textTheme.headlineSmall, + ), + SizedBox(height: 10), + Center( + child: GestureDetector( + onTapUp: (details) async { + final localPos = details.localPosition; + final center = Offset(100, 100); + final dx = localPos.dx - center.dx; + final dy = localPos.dy - center.dy; + + final distanceFromCenter = math.sqrt(dx * dx + dy * dy); + const deadZoneRadius = 40.0; + if (distanceFromCenter < deadZoneRadius) return; + + const startAngle = 0.75 * math.pi; + const sweep = 1.5 * math.pi; + + double angle = math.atan2(dy, dx); + if (angle < 0) angle += 2 * math.pi; + + double normalizedAngle = angle - startAngle; + if (normalizedAngle < 0) normalizedAngle += 2 * math.pi; + + if (normalizedAngle > sweep) return; + + double ratio = normalizedAngle / sweep; + + // If close to 100%, round it to avoid float inaccuracies + if (ratio > 0.995) ratio = 1.0; + ratio = ratio.clamp(0.0, 1.0); + + final target = (ratio * bi.capacity).toInt(); + + final info = await _batteryService.setTargetSOC( + widget.battery.houseId, + int.parse(widget.battery.deviceId), + target, + ); + + if (!mounted) return; + setState(() { + batInfo = info; + _dragTargetRatio = null; + _isDragging = false; + }); + }, + onPanStart: (_) { + if (bi.targetSoc != null) { + _dragTargetRatio = bi.targetSoc! / bi.capacity; + } else { + _dragTargetRatio = bi.stateOfCharge / bi.capacity; + } + _isDragging = true; + }, + onPanUpdate: (details) { + final localPos = details.localPosition; + final center = Offset(100, 100); + final dx = localPos.dx - center.dx; + final dy = localPos.dy - center.dy; + + final distanceFromCenter = math.sqrt(dx * dx + dy * dy); + const deadZoneRadius = 40.0; + if (distanceFromCenter < deadZoneRadius) return; + + const startAngle = 0.75 * math.pi; + const sweep = 1.5 * math.pi; + + double angle = math.atan2(dy, dx); + if (angle < 0) angle += 2 * math.pi; + + double normalizedAngle = angle - startAngle; + if (normalizedAngle < 0) normalizedAngle += 2 * math.pi; + + if (normalizedAngle > sweep) return; + + double ratio = normalizedAngle / sweep; + + // If close to 100%, round it to avoid float inaccuracies + if (ratio > 0.995) ratio = 1.0; + ratio = ratio.clamp(0.0, 1.0); + + setState(() { + _dragTargetRatio = ratio; + }); + }, + onPanEnd: (_) async { + if (_dragTargetRatio == null) return; + + final target = (_dragTargetRatio! * bi.capacity).toInt(); + final info = await _batteryService.setTargetSOC( + widget.battery.houseId, + int.parse(widget.battery.deviceId), + target, + ); + + if (!mounted) return; + setState(() { + batInfo = info; + _isDragging = false; + _dragTargetRatio = null; + }); + }, + child: Listener( + onPointerUp: (puEvent) async { + final dx = puEvent.localPosition.dx - 100; + final dy = puEvent.localPosition.dy - 170; + final angle = 0.75 * math.pi - math.atan2(-dx, -dy); + + if (angle < 0 || angle > 1.50 * math.pi) { + final info = await _batteryService.unsetTargetSOC(0, 0); + if (!mounted) return; + + setState(() { + batInfo = info; + }); + } + }, + child: Stack( + alignment: Alignment.center, + children: [ + Icon( + Icons.battery_full, + size: 150, + color: Theme.of(context).colorScheme.primaryFixedDim, + ), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '${(100 * bi.stateOfCharge / bi.capacity).toInt()}%', + style: Theme.of( + context, + ).textTheme.titleMedium?.copyWith(fontSize: 25, color: Theme.of(context).colorScheme.onPrimaryFixed), + ), + if (_isDragging && _dragTargetRatio != null) + Text( + '${context.l10n.target}:\n${(100 * _dragTargetRatio!).toInt()}%', + style: Theme.of(context).textTheme.titleMedium?.copyWith(color: Theme.of(context).colorScheme.onPrimaryFixed), + textAlign: TextAlign.center, + ) + else if (bi.targetSoc != null) + Text( + '${context.l10n.target}:\n${(100 * bi.targetSoc! / bi.capacity).toInt()}%', + style: Theme.of(context).textTheme.titleMedium?.copyWith(color: Theme.of(context).colorScheme.onPrimaryFixed), + textAlign: TextAlign.center, + ), + ], + ), + CustomPaint( + size: Size(200, 200), + painter: BatteryRingPainter( + context, + bi.stateOfCharge / bi.capacity, + _dragTargetRatio ?? + (bi.targetSoc != null + ? bi.targetSoc! / bi.capacity + : null), + ), + ), + ], + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.all(10), + child: Row( + children: [ + Icon(Icons.bolt), + Flexible(child: Text(batteryStatusString(bi))), + ], + ), + ), + ], + ), + ), + ); + } + + /// Returns the relevant status string for the battery. + /// + /// The status string specifies whether the battery is charging, discharging, or idle. + /// If there is no target set it also displays a rough estimate of time till the battery if empty/full. + /// No estimate is calculated if a target is set as the battery behaviour is too unpredictable. + String batteryStatusString(BatteryInfo batInfo) { + switch (batInfo.status) { + case BatteryStatus.idle: + return '${context.l10n.batteryIsIdle}.'; + case BatteryStatus.discharging: + if (batInfo.targetSoc != null) { + return '${context.l10n.batteryIsDischarging}.'; + } + + int time = + (3600 * (batInfo.stateOfCharge) / batInfo.consumption).toInt(); + String timeString = '${time % 60} s'; + + if (time >= 60) { + time ~/= 60; + timeString = '${time % 60} m $timeString'; + } + + if (time >= 60) { + time ~/= 60; + timeString = '${time % 60} h $timeString'; + } + + return '${context.l10n.batteryIsDischarging}, ${context.l10n.estimatedTimeTillEmpty(timeString)}.'; + case BatteryStatus.charging: + if (batInfo.targetSoc != null) { + return context.l10n.batteryIsCharging; + } + + int time = + (3600 * + (batInfo.capacity - batInfo.stateOfCharge) / + batInfo.consumption) + .toInt(); + String timeString = '${time % 60} s'; + + if (time >= 60) { + time ~/= 60; + timeString = '${time % 60} m $timeString'; + } + + if (time >= 60) { + time ~/= 60; + timeString = '${time % 60} h $timeString'; + } + + return '${context.l10n.batteryIsCharging}, ${context.l10n.estimatedTimeTillFullCharge(timeString)}.'; + } + } +} diff --git a/hems_application/lib/widget/device/battery_ring_painter.dart b/hems_application/lib/widget/device/battery_ring_painter.dart new file mode 100644 index 0000000..d7bb927 --- /dev/null +++ b/hems_application/lib/widget/device/battery_ring_painter.dart @@ -0,0 +1,120 @@ +import 'dart:math'; +import 'dart:ui' as ui; + +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; + +class BatteryRingPainter extends CustomPainter { + final BuildContext context; + final double chargeLevel; + final double? targetLevel; + + /// Constructs a new [BatteryRingPainter]. + /// + /// [chargeLevel] is in range \[0, 1\] , determines how much of the circle should be filled. + /// [targetLevel] should be in range \[0, 1\] if present. Determines the target state of charge for the battery. + BatteryRingPainter(this.context, this.chargeLevel, [this.targetLevel]); + + /// Paints a circle showing battery charge and target if present. + /// + /// [chargeLevel] determines how much of the circle is filled. + /// The filled portion of the circle is red if [chargeLevel] is less than 0.2 and green otherwise. + /// If [targetLevel] is set an arrow is drawn above the circle showing the target. + /// In addition cancel target button is drawn below the circle. + @override + void paint(Canvas canvas, Size size) { + double strokeWidth = 8.0; + Offset center = Offset(size.width / 2, size.height / 2); + double radius = (size.width - 2.5 * strokeWidth) / 2; + + Paint baseCircle = + Paint() + ..color = const Color.fromARGB(81, 181, 181, 181) + ..style = PaintingStyle.stroke + ..strokeWidth = strokeWidth; + + Paint progressCircle = + Paint() + ..color = chargeLevel < 0.2 ? Colors.red : Colors.green + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round + ..strokeWidth = strokeWidth; + + Paint targetArrow = + Paint() + ..color = Theme.of(context).colorScheme.primary + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round + ..strokeWidth = strokeWidth; + + Paint cancelText = + Paint()..color = Theme.of(context).colorScheme.error; + + canvas.drawArc( + Rect.fromCircle(center: center, radius: radius), + 0.75 * pi, + 1.5 * pi, + false, + baseCircle, + ); + + double sweepAngle = 1.5 * pi * chargeLevel; + canvas.drawArc( + Rect.fromCircle(center: center, radius: radius), + 0.75 * pi, + sweepAngle, + false, + progressCircle, + ); + + if (targetLevel == null) { + return; + } + + double targetAngle = 1.5 * pi * targetLevel!; + + canvas.save(); + canvas.translate(size.width / 2, size.height / 2); + canvas.rotate(0.25 * pi + targetAngle); + canvas.translate(0, size.height / 2); + + canvas.drawLine( + Offset(0, 0.5 * strokeWidth), + Offset(-strokeWidth, 1.5 * strokeWidth), + targetArrow, + ); + canvas.drawLine( + Offset(0, 0.5 * strokeWidth), + Offset(strokeWidth, 1.5 * strokeWidth), + targetArrow, + ); + + canvas.restore(); + + final cancelIcon = Icons.clear; + final pbuilder = ui.ParagraphBuilder( + ui.ParagraphStyle(textAlign: TextAlign.center), + ); + + pbuilder.pushStyle( + ui.TextStyle(foreground: cancelText, fontWeight: FontWeight.bold), + ); + pbuilder.addText("${context.l10n.resetTarget}\n"); + pbuilder.pushStyle( + ui.TextStyle( + fontSize: 25, + fontFamily: cancelIcon.fontFamily, + fontWeight: FontWeight.bold, + ), + ); + pbuilder.addText(String.fromCharCode(cancelIcon.codePoint)); + + canvas.drawParagraph( + pbuilder.build()..layout(ui.ParagraphConstraints(width: 100)), + Offset(size.width / 2 - 50, size.height - 35), + ); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => true; +} diff --git a/hems_application/lib/widget/device/ha_entity_info_card.dart b/hems_application/lib/widget/device/ha_entity_info_card.dart new file mode 100644 index 0000000..12913f6 --- /dev/null +++ b/hems_application/lib/widget/device/ha_entity_info_card.dart @@ -0,0 +1,124 @@ +import 'dart:async'; + +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/service/entity_service.dart'; + +class HaEntityInfoCard extends StatefulWidget { + final Device entity; + const HaEntityInfoCard({required this.entity, super.key}); + + @override + State createState() => HaEntityInfoCardState(); +} + +class HaEntityInfoCardState extends State { + Either, String>? entityState; + Timer? timer; + final _entityService = EntityService(); + + /// Initialzes the home assistant entity info card widget. + /// + /// In addition, starts a timer to refresh the widget every 0.25 seconds. + @override + void initState() { + super.initState(); + loadEntity(); + timer = Timer.periodic( + Duration(milliseconds: 250), + (Timer t) => loadEntity(), + ); + } + + /// Updates the widget with new device information. + Future loadEntity() async { + final info = await _entityService.getEntityState( + widget.entity.houseId, + widget.entity.deviceId, + ); + if (!mounted) return; + setState(() { + entityState = info; + }); + } + + /// Disposes the widget. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + /// Builds the widget. + /// + /// If [entityState] is not loaded yet it shows a progress indicator. + /// If there was an error during loading [entityState] it shows the relevant error message. + /// If there are no errors it displays a switch that toggles the entity on and off. + @override + Widget build(BuildContext context) { + if (entityState == null) return Center(child: CircularProgressIndicator()); + if (entityState!.isRight) return Center(child: Text(entityState!.right)); + Map es = entityState!.left; + bool enabled = es["state"] == "on" ? true : false; + return Card( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Text( + es["attributes"]["friendly_name"], + style: Theme.of(context).textTheme.headlineSmall, + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox(width: MediaQuery.of(context).size.width * 0.08), + Switch( + value: enabled, + activeColor: Colors.green, + onChanged: (bool newEnabled) async { + final result = await _entityService.setEntityState( + widget.entity.houseId, + widget.entity.deviceId, + newEnabled, + ); + + if (!result.isLeft) { + return; + } + + Map? newState = + (result.left as List).firstWhere( + (s) => s["entity_id"] == widget.entity.deviceId, + orElse: () => null, + ); + + if (newState == null) { + return; + } + + setState(() { + if (!mounted) return; + entityState = Left(newState); + }); + }, + ), + ], + ), + ], + ), + ], + ), + ), + ); + } +} diff --git a/hems_application/lib/widget/device/meter_info_card.dart b/hems_application/lib/widget/device/meter_info_card.dart new file mode 100644 index 0000000..7586473 --- /dev/null +++ b/hems_application/lib/widget/device/meter_info_card.dart @@ -0,0 +1,114 @@ +import 'dart:async'; + +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/api/meter_info.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/service/meter_service.dart'; +import 'package:hems_app/widget/util/value_row.dart'; + +class MeterInfoCard extends StatefulWidget { + final Device meter; + const MeterInfoCard({required this.meter, super.key}); + + @override + State createState() => MeterInfoState(); +} + +class MeterInfoState extends State { + Either? meterInfo; + Timer? timer; + final _meterService = MeterService(); + + /// Initializes the meter info card widget. + /// + /// In addition, starts a timer to refresh the widget every 5 seconds. + @override + void initState() { + super.initState(); + loadMeter(); + timer = Timer.periodic(Duration(seconds: 5), (Timer t) => loadMeter()); + } + + /// Updates the widget with new meter information. + Future loadMeter() async { + final info = await _meterService.getMeterInfo( + widget.meter.houseId, + int.parse(widget.meter.deviceId), + ); + if (!mounted) return; + setState(() { + meterInfo = info; + }); + } + + /// Disposes the widget. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + /// Builds the widget. + /// + /// If [meterInfo] is not loaded yet it shows a progress indicator. + /// If there was an error during loading [meterInfo] it shows the relevant error message. + /// Otherwise it displays the current import/export in W and total import and export in Wh. + @override + Widget build(BuildContext context) { + if (meterInfo == null) return Center(child: CircularProgressIndicator()); + if (meterInfo!.isRight) return Center(child: Text(meterInfo!.right)); + MeterInfo mi = meterInfo!.left; + return Card( + child: Padding( + padding: const EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + context.l10n.meterInfo, + style: Theme.of(context).textTheme.headlineSmall, + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 10), + if (mi.currentExport != null && mi.currentExport! > 0) + ValueRow( + description: '${context.l10n.currentExport}:', + value: '${mi.currentExport!.toStringAsFixed(2)} W', + icon: Icons.bolt, + ) + else + ValueRow( + description: '${context.l10n.currentImport}:', + value: '${(mi.currentImport ?? 0).toStringAsFixed(2)} W', + icon: Icons.bolt, + ), + Divider(), + ValueRow( + description: '${context.l10n.totalExport}:', + value: '${mi.totalExport.toStringAsFixed(2)} Wh', + icon: Icons.bolt, + ), + + Divider(), + ValueRow( + description: '${context.l10n.totalImport}:', + value: '${mi.totalImport.toStringAsFixed(2)} Wh', + icon: Icons.bolt, + ), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/hems_application/lib/widget/device/solar_info_card.dart b/hems_application/lib/widget/device/solar_info_card.dart new file mode 100644 index 0000000..ba88a70 --- /dev/null +++ b/hems_application/lib/widget/device/solar_info_card.dart @@ -0,0 +1,105 @@ +import 'dart:async'; + +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/api/solar_info.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/service/solar_service.dart'; +import 'package:hems_app/widget/util/value_row.dart'; + +import 'solar_toggle_switch.dart'; + +class SolarInfoCard extends StatefulWidget { + final Device solarPanel; + const SolarInfoCard({required this.solarPanel, super.key}); + + @override + State createState() => SolarInfoState(); +} + +class SolarInfoState extends State { + Either? solarInfo; + Timer? timer; + final _solarService = SolarService(); + + /// Initialzes the solar info card widget. + /// + /// In addition, starts a timer to refresh the widget every 5 seconds. + @override + void initState() { + super.initState(); + loadSolar(); + timer = Timer.periodic(Duration(seconds: 5), (Timer t) => loadSolar()); + } + + /// Updates the widget with new solar information. + Future loadSolar() async { + final info = await _solarService.getSolarInfo( + widget.solarPanel.houseId, + int.parse(widget.solarPanel.deviceId), + ); + if (!mounted) return; + setState(() { + solarInfo = info; + }); + } + + /// Disposes the widget. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + /// Builds the widget. + /// + /// If [solarInfo] is not loaded yet it shows a progress indicator. + /// If there was an error during loading [solarInfo] it shows the relevant error message. + /// Otherwise it displays the production of the solar panel in W. + @override + Widget build(BuildContext context) { + if (solarInfo == null) return Center(child: CircularProgressIndicator()); + if (solarInfo!.isRight) return Center(child: Text(solarInfo!.right)); + SolarInfo si = solarInfo!.left; + return Card( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Text( + context.l10n.solarPanel, + style: Theme.of(context).textTheme.headlineSmall, + ), + ), + Flexible(child: SizedBox(width: 8)), + SolarToggleSwitch(solarPanel: widget.solarPanel), + ], + ), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 10), + ValueRow( + description: '${context.l10n.production}: ', + value: '${si.consumption.toStringAsFixed(2)} W', + icon: Icons.bolt, + ), + ], + ), + ), + ], + ), + ), + ); + } +} diff --git a/hems_application/lib/widget/device/solar_toggle_switch.dart b/hems_application/lib/widget/device/solar_toggle_switch.dart new file mode 100644 index 0000000..585d4d6 --- /dev/null +++ b/hems_application/lib/widget/device/solar_toggle_switch.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/service/solar_service.dart'; +import 'package:hems_app/state/app_state.dart'; + +class SolarToggleSwitch extends StatelessWidget { + final Device solarPanel; + SolarToggleSwitch({required this.solarPanel, super.key}); + + final _appState = AppState(); + final _solarService = SolarService(); + + /// Builds the widget. + /// + /// When the switch is toggled, the state of the solar panels is updated to match. + /// The switch only toggles visually if the backend responds with success on toggling the solar panel. + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: _appState, + builder: (context, _) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox(width: 4), + Switch( + value: _appState.isSolarEnabled, + activeColor: Colors.green, + onChanged: (bool newEnabled) async { + final result = await _solarService.setState(0, 0, newEnabled); + + if (result.isLeft) { + _appState.isSolarEnabled = newEnabled; + } + }, + ), + ], + ); + }, + ); + } +} diff --git a/hems_application/lib/widget/device/thermal_info_card.dart b/hems_application/lib/widget/device/thermal_info_card.dart new file mode 100644 index 0000000..4084bb4 --- /dev/null +++ b/hems_application/lib/widget/device/thermal_info_card.dart @@ -0,0 +1,150 @@ +import 'dart:async'; + +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/api/thermal_info.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/service/thermal_service.dart'; + +import 'thermometer_painter.dart'; + +class ThermalInfoCard extends StatefulWidget { + final Device thermostat; + const ThermalInfoCard({required this.thermostat, super.key}); + + @override + State createState() => ThermalInfoState(); +} + +class ThermalInfoState extends State { + Either? thermalInfo; + Timer? timer; + final _thermalService = ThermalService(); + + /// Initializes the thermal info card widget. + /// + /// In addition, starts a timer to refresh the widget every second. + @override + void initState() { + super.initState(); + loadThermal(); + timer = Timer.periodic(Duration(seconds: 1), (Timer t) => loadThermal()); + } + + /// Updates the widget with new thermal information. + Future loadThermal() async { + final info = await _thermalService.getThermalInfo( + widget.thermostat.houseId, + int.parse(widget.thermostat.deviceId), + ); + if (!mounted) return; + setState(() { + thermalInfo = info; + }); + } + + /// Disposes the widget. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + /// Builds the widget. + /// + /// If [thermalInfo] is not loaded yet it shows a progress indicator. + /// If there was an error during loading [thermalInfo] it shows the relevant error message. + /// Otherwise displays a thermometer showing temperature and target temperature. + /// Also sets target temperature when clicked. + @override + Widget build(BuildContext context) { + if (thermalInfo == null) return Center(child: CircularProgressIndicator()); + if (thermalInfo!.isRight) return Center(child: Text(thermalInfo!.right)); + + double width = 50; + double height = 200; + + ThermalInfo ti = thermalInfo!.left; + return Card( + child: Padding( + padding: const EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + context.l10n.temperature, + style: Theme.of(context).textTheme.headlineSmall, + ), + SizedBox(height: 10), + Center( + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onVerticalDragStart: (details) { + _updateTemperature(details.localPosition); + }, + onVerticalDragUpdate: (details) { + _updateTemperature(details.localPosition); + }, + onVerticalDragEnd: (details) { + _commitTemperature(); + }, + onTapUp: (details) { + _updateTemperature(details.localPosition); + _commitTemperature(); + }, + child: CustomPaint( + size: Size(width, height), + painter: ThermometerPainter( + context, + ti.currentTemperature, + ti.targetTemperature, + ), + ), + ), + ), + ], + ), + ), + ); + } + + /// Calculates where the temperature should be based on [localPos]. + /// + /// The range is between 1 and 34 degrees. + void _updateTemperature(Offset localPos) { + final columnTop = 50 / 4; + final columnHeight = 200 - 50 / 4 - 50; + + double ratio = (localPos.dy - columnTop) / columnHeight; + double temp = 35 * (1 - ratio); + temp = temp.clamp(1, 34); + + if (thermalInfo != null && thermalInfo!.isLeft) { + setState(() { + thermalInfo!.left.targetTemperature = temp; + }); + } + } + + /// Async method for setting target temperature for a [thermalInfo] device using [ThermalService] service class. + Future _commitTemperature() async { + if (thermalInfo == null || !thermalInfo!.isLeft) return; + final temp = thermalInfo!.left.targetTemperature; + + final newTarget = await _thermalService.setTargetTemperature( + widget.thermostat.houseId, + int.parse(widget.thermostat.deviceId), + temp, + ); + + if (!mounted) return; + setState(() { + if (newTarget.isLeft) { + thermalInfo!.left.targetTemperature = newTarget.left; + } + }); + } +} diff --git a/hems_application/lib/widget/device/thermometer_painter.dart b/hems_application/lib/widget/device/thermometer_painter.dart new file mode 100644 index 0000000..413ae31 --- /dev/null +++ b/hems_application/lib/widget/device/thermometer_painter.dart @@ -0,0 +1,126 @@ +import 'dart:math' as math; +import 'dart:ui' as ui; + +import 'package:flutter/material.dart'; + +class ThermometerPainter extends CustomPainter { + final BuildContext context; + final double temperature; + final double targetTemperature; + + /// Constructs a new [ThermometerPainter]. + /// + /// [temperature] should be in range (0, 35) + /// [targetTemperature] should be in range (0, 35) + ThermometerPainter(this.context, this.temperature, this.targetTemperature); + + /// Paints a thermometer using [temperature] and [targetTemperature]. + /// + /// The thermometer is filled up to [temperature], with it being written on the left. + /// The color of the liquid is blue if [temperature] below 20.0 and red otherwise. + /// An arrow showing the [targetTemperature] is also drawn, with ti being written on the right. + @override + void paint(Canvas canvas, Size size) { + double border = 4.0; + double strokeWidth = 4.0; + double bulbRadius = size.width / 2; + double columnWidth = bulbRadius / 2; + Offset bulbCenter = Offset(size.width / 2, size.height - bulbRadius); + Offset topCenter = Offset(size.width / 2, columnWidth); + + double columnHeight = bulbCenter.dy - bulbRadius - topCenter.dy; + + Paint thermometerBody = + Paint()..color = Theme.of(context).colorScheme.secondaryFixedDim; + + Paint thermometerLiquid = + Paint()..color = temperature < 20 ? Theme.of(context).colorScheme.onSecondaryFixedVariant : Theme.of(context).colorScheme.error; + + Paint targetArrow = + Paint() + ..color = Theme.of(context).colorScheme.secondary + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round + ..strokeWidth = strokeWidth; + + Paint text = Paint()..color = Theme.of(context).colorScheme.secondary; + + canvas.drawCircle(bulbCenter, bulbRadius, thermometerBody); + canvas.drawCircle(topCenter, columnWidth, thermometerBody); + canvas.drawRect( + Rect.fromLTRB( + size.width / 2 - columnWidth, + topCenter.dy, + size.width / 2 + columnWidth, + bulbCenter.dy, + ), + thermometerBody, + ); + + canvas.drawCircle(bulbCenter, bulbRadius - border, thermometerLiquid); + + double tempy = + topCenter.dy + + columnHeight * math.max(math.min(1 - temperature / 35, 1), 0); + double targety = + topCenter.dy + + columnHeight * math.max(math.min(1 - targetTemperature / 35, 1), 0); + double targetx = bulbCenter.dx + bulbRadius + strokeWidth; + + canvas.drawRect( + Rect.fromLTRB( + size.width / 2 - columnWidth + border, + tempy, + size.width / 2 + columnWidth - border, + bulbCenter.dy, + ), + thermometerLiquid, + ); + + canvas.drawLine( + Offset(targetx, targety), + Offset(targetx + strokeWidth, targety + strokeWidth), + targetArrow, + ); + canvas.drawLine( + Offset(targetx, targety), + Offset(targetx + strokeWidth, targety - strokeWidth), + targetArrow, + ); + + final pbuilderTarget = ui.ParagraphBuilder( + ui.ParagraphStyle(textAlign: TextAlign.left), + ); + pbuilderTarget.pushStyle( + ui.TextStyle(foreground: text, fontWeight: FontWeight.bold), + ); + pbuilderTarget.addText("${targetTemperature.toStringAsFixed(1)}°C"); + final targetParagraph = + pbuilderTarget.build()..layout(ui.ParagraphConstraints(width: 100)); + + final pbuilderCur = ui.ParagraphBuilder( + ui.ParagraphStyle(textAlign: TextAlign.right), + ); + pbuilderCur.pushStyle( + ui.TextStyle(foreground: text, fontWeight: FontWeight.bold), + ); + pbuilderCur.addText("${temperature.toStringAsFixed(1)}°C"); + final curParagraph = + pbuilderCur.build()..layout(ui.ParagraphConstraints(width: 200)); + + canvas.drawParagraph( + targetParagraph, + Offset(targetx + 2.5 * strokeWidth, targety - targetParagraph.height / 2), + ); + canvas.drawParagraph( + curParagraph, + Offset( + bulbCenter.dx - bulbRadius - curParagraph.width, + tempy - targetParagraph.height / 2, + ), + ); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => true; +} diff --git a/hems_application/lib/widget/device/timeshifter_card.dart b/hems_application/lib/widget/device/timeshifter_card.dart new file mode 100644 index 0000000..9214c9a --- /dev/null +++ b/hems_application/lib/widget/device/timeshifter_card.dart @@ -0,0 +1,233 @@ +import 'dart:async'; + +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/api/job.dart'; +import 'package:hems_app/service/timeshifter_service.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/page/create_job.dart'; +import 'package:hems_app/widget/page/device_schedule_page.dart'; + +class TimeshifterCard extends StatefulWidget { + final String deviceId; + + const TimeshifterCard(this.deviceId, {super.key}); + + @override + // ignore: no_logic_in_create_state + State createState() => TimeshifterState(deviceId); +} + +class TimeshifterState extends State { + Either? deviceStatus; + Timer? timer; + final _timeshifterService = TimeshifterService(); + final String deviceId; + // The delay between the current time and the time of the house. + // Can be different from 0 if we're out of sync or if the house is a simulation. + int timeDelay = 0; + + TimeshifterState(this.deviceId); + + /// Initializes the time shifter card widget. + /// + /// In addition, starts a timer to refresh the widget every 5 seconds. + @override + void initState() { + super.initState(); + loadTimeShifter(); + timer = Timer.periodic( + Duration(seconds: 5), + (Timer t) => loadTimeShifter(), + ); + } + + /// Updates the widget with new meter information. + Future loadTimeShifter() async { + final status = await _timeshifterService.getTimeshifterProperties( + 0, + deviceId, + ); + + final currentTime = await _timeshifterService.getCurrentHouseTime(0); + if (currentTime.isLeft) { + timeDelay = + int.parse(currentTime.left) - + DateTime.now().millisecondsSinceEpoch ~/ 1000; + } else { + timeDelay = 0; // Default to 0 if we can't get the current time. + } + + if (!mounted) return; + setState(() { + deviceStatus = status; + }); + } + + /// Disposes the widget. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + /// Builds the widget. + /// + /// If [deviceStatus] is not loaded yet it shows a progress indicator. + /// If there was an error during loading [deviceStatus] it shows the relevant error message. + /// Otherwise it displays the date of the schedule and the amount of time it will run. + @override + Widget build(BuildContext context) { + if (deviceStatus == null) return Center(child: CircularProgressIndicator()); + if (deviceStatus!.isRight) return Center(child: Text(deviceStatus!.right)); + DeviceStatus ds = deviceStatus!.left; + + if (ds.scheduledJobs.isEmpty) { + return noScheduledDevice(ds, context); + } + + Job nextJob = ds.scheduledJobs[0]; + + // Calculate the time now in seconds. + DateTime startTime = DateTime.fromMillisecondsSinceEpoch( + nextJob.startTime * 1000 - timeDelay * 1000, + ); + DateTime endTime = DateTime.fromMillisecondsSinceEpoch( + nextJob.endTime * 1000 - timeDelay * 1000, + ); + Duration untilJob = startTime.difference(DateTime.now()); + Duration duration = Duration(seconds: nextJob.endTime - nextJob.startTime); + Duration timeLeft = endTime.difference(DateTime.now()); + + if (timeLeft.isNegative) { + return noScheduledDevice(ds, context); + } + + return Card( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + deviceId, + style: Theme.of(context).textTheme.headlineSmall, + ), + SizedBox(height: 10), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (startTime.isAfter(DateTime.now())) Icon(Icons.event, size: 65) + else Icon(Icons.timer_sharp, size: 65), + SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: + ((startTime.isAfter(DateTime.now())) + ? [ + Text( + context.l10n.nextScheduledActionStartsIn( + untilJob.inHours, + untilJob.inMinutes - untilJob.inHours * 60, + ), + ), + SizedBox(height: 5), + Text( + context.l10n.durationHoursMinutes( + duration.inHours, + duration.inMinutes - duration.inHours * 60, + ), + ), + ] + : [ + Text(context.l10n.jobCurrentlyActive), + SizedBox(height: 5), + Text( + context.l10n.timeLeftHoursMinutes( + timeLeft.inHours, + timeLeft.inMinutes - timeLeft.inHours * 60, + ), + ), + ]) + + [ + SizedBox(height: 10), + OutlinedButton( + child: Text(context.l10n.viewSchedule), + onPressed: () { + showModalBottomSheet( + context: context, + showDragHandle: true, + builder: (context) { + return DeviceSchedulePage(deviceId: deviceId); + } + ).then((_) { + // Refresh the device status + loadTimeShifter(); + }); + } + ) + ], + ), + ), + ], + ), + ], + ), + ), + ); + } + + /// Card used to display Timeshifter without a scheduled job. + Card noScheduledDevice(DeviceStatus ds, BuildContext context) { + return Card( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + deviceId, + style: Theme.of(context).textTheme.headlineSmall, + ), + SizedBox(height: 10), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.calendar_today, size: 65), + SizedBox(width: 10), + Expanded( + child: Column(crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "${context.l10n.thereAreNoScheduledJobsForThisDevice}.", + ), + SizedBox(height: 10), + OutlinedButton(child: Text(context.l10n.scheduleAJob), onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CreateJob(initialDevice: AppState().devices.firstWhere( + (d) => d.deviceId == deviceId, + ), + ), + ), + ).then((newJob) { + loadTimeShifter(); + }); + }) + ], + ), + ), + ], + ), + ], + ), + ), + ); + } +} diff --git a/hems_application/lib/widget/page/create_job.dart b/hems_application/lib/widget/page/create_job.dart new file mode 100644 index 0000000..272eeb5 --- /dev/null +++ b/hems_application/lib/widget/page/create_job.dart @@ -0,0 +1,404 @@ +// ignore_for_file: use_build_context_synchronously + +import 'package:duration_picker/duration_picker.dart'; +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/service/timeshifter_service.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/util/timeshifter_util.dart'; +import 'package:hems_app/widget/page/device_selection_page.dart'; +import 'package:hems_app/widget/schedule_view.dart'; + +/// Page for creating(scheduling) jobs for timeshifter devices. +/// +/// The minimum duration field currently acts as a way to avoid request errors from the backend, +/// since some devices can only be scheduled for a minimum time. +/// [initialDevice] can optionally be set to pre-select a device. +class CreateJob extends StatefulWidget { + const CreateJob({super.key, this.initialDevice}); + + final Device? initialDevice; + + @override + State createState() => CreateJobState(); +} + +class CreateJobState extends State { + Device? device; + Room? _room; + DateTime? _date; + TimeOfDay? _time; + Duration? _duration; + Duration? minimumDuration; + + /// Fetch the minimum job duration and room for the initial device, if it is set. + @override + void initState() { + super.initState(); + device = widget.initialDevice; + if (device != null) { + minimumDuration = Duration(seconds: 30); + TimeshifterService().getTimeshifterProperties( + device!.houseId, + device!.deviceId, + ).then((status) { + if (status.isLeft) { + setState(() { + minimumDuration = status.left.minimumJobDuration; + }); + } else { + if (context.mounted) { + ScaffoldMessenger.of( + context, + ).removeCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + "${context.l10n.errorFetchingDeviceStatus}: ${status.right}", + ), + ), + ); + } + } + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(context.l10n.createNewJob)), + body: SingleChildScrollView( + child: Center( + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + children: [ + FilledButton.tonal( + onPressed: () async { + var data = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => DeviceSelectionPage(), + ), + ); + if (data == null) return; + var selectedDevice = data["device"]; + var room = data["room"]; + if (selectedDevice != null) { + setState(() { + device = selectedDevice; + _room = room; + // Reset minimum duration until we've fetched the new minimum. + minimumDuration = null; + }); + } + // Get device status + Either status = + await TimeshifterService().getTimeshifterProperties( + device!.houseId, + device!.deviceId, + ); + if (status.isLeft) { + setState(() { + minimumDuration = status.left.minimumJobDuration; + }); + } else { + if (context.mounted) { + ScaffoldMessenger.of( + context, + ).removeCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + "${context.l10n.errorFetchingDeviceStatus}: ${status.right}", + ), + ), + ); + } + } + }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 20.0, + ), + child: + device == null + ? Column( + children: [ + Text( + context.l10n.device, + style: + Theme.of( + context, + ).textTheme.titleLarge, + textAlign: TextAlign.center, + ), + Center( + child: Text( + context.l10n.selectADevice, + textAlign: TextAlign.center, + ), + ), + ], + ) + : Column( + children: [ + Text( + context.l10n.device, + style: + Theme.of( + context, + ).textTheme.titleLarge, + textAlign: TextAlign.center, + ), + Center( + child: Text( + device!.deviceId, + textAlign: TextAlign.center, + style: TextStyle(color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold), + ), + ), + ], + ), + ), + ), + SizedBox(height: 20), + Row( + children: [ + Expanded( + child: FilledButton.tonal( + onPressed: () { + final DateTime firstDate = DateTime.now(); + final DateTime lastDate = DateTime.now().add( + Duration(days: 365), + ); + showDatePicker( + context: context, + firstDate: firstDate, + lastDate: lastDate, + initialDate: _date ?? DateTime.now(), + ).then( + (date) => setState(() { + _date = date; + }), + ); + }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 20.0, + ), + child: Column( + children: [ + Text( + context.l10n.date, + style: + Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.center, + ), + Center( + child: Text( + _date?.toLocal().toString().split( + ' ', + )[0] ?? + context.l10n.selectADate, + textAlign: TextAlign.center, + style: _date == null ? null : TextStyle(color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold), + ), + ), + ], + ), + ), + ), + ), + SizedBox(width: 10), + Expanded( + child: FilledButton.tonal( + onPressed: () { + showTimePicker( + context: context, + initialTime: _time ?? TimeOfDay.now(), + ).then( + (time) => setState(() { + _time = time; + }), + ); + }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 20.0, + ), + child: Column( + children: [ + Text( + context.l10n.startTime, + style: + Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.center, + ), + Center( + child: Text( + _time?.format(context) ?? + context.l10n.selectATime, + textAlign: TextAlign.center, + style: _time == null ? null : TextStyle(color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold), + ), + ), + ], + ), + ), + ), + ), + ], + ), + SizedBox(height: 20), + FilledButton.tonal( + onPressed: + device == null || minimumDuration == null + ? null + : () { + showDurationPicker( + context: context, + initialTime: _duration ?? minimumDuration!, + lowerBound: minimumDuration!, + baseUnit: BaseUnit.minute, + ).then( + (duration) => setState(() { + if (duration == null || + duration.isNegative || + duration.inMinutes == 0) { + return; + } + if (duration < minimumDuration!) { + ScaffoldMessenger.of( + context, + ).removeCurrentSnackBar(); + ScaffoldMessenger.of( + context, + ).showSnackBar( + SnackBar( + content: Text( + "${context.l10n.durationAtLeastHoursMinutes(minimumDuration!.inHours, minimumDuration!.inMinutes.remainder(60))}.", + ), + ), + ); + return; + } + _duration = duration; + }), + ); + }, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8.0, + vertical: 20.0, + ), + child: Column( + children: [ + Text( + context.l10n.duration, + style: Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.center, + ), + Center( + child: Text( + _duration == null + ? (device == null ? context.l10n.selectDeviceFirst : context.l10n.selectADuration) + : "${_duration!.inHours}h ${_duration!.inMinutes.remainder(60)}m", + style: device == null ? TextStyle(color: Theme.of(context).colorScheme.error) : (_duration == null ? null : TextStyle(color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.bold)), + textAlign: TextAlign.center, + ), + ), + ], + ), + ), + ), + ], + ), + ), + FilledButton( + onPressed: + (device == null || + _date == null || + _time == null || + _duration == null) + ? null + : () async { + _room ??= AppState().rooms.firstWhere( + (r) => r.devices.any((d) => d.deviceId == device?.deviceId), + orElse: () => AppState().othersRoom(context), + ); + + DateTime startTime = DateTime( + _date!.year, + _date!.month, + _date!.day, + _time!.hour, + _time!.minute, + ); + // Make sure the start time is not in the past + // Subtract 1 minute from the start time to avoid issues when the start time is in the same minute as the current time + if (startTime + .add(Duration(minutes: -1)) + .isBefore(DateTime.now())) { + ScaffoldMessenger.of( + context, + ).removeCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + context.l10n.startTimeCantBeInThePast, + ), + ), + ); + return; + } + if (_duration! < minimumDuration!) { + ScaffoldMessenger.of( + context, + ).removeCurrentSnackBar(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + "${context.l10n.durationAtLeastHoursMinutes(minimumDuration!.inHours, minimumDuration!.inMinutes.remainder(60))}.", + ), + ), + ); + return; + } + + DisplayJob newJob = DisplayJob( + id: -1, + room: _room!, + device: device!, + startTime: startTime, + duration: _duration!, + ); + + await TimeshifterUtil().scheduleJob(context, newJob); + + if (context.mounted) { + Navigator.pop( + context, + newJob, + ); + } + }, + child: Text(context.l10n.createJob), + ), + ], + ), + ), + ), + ); + } +} diff --git a/hems_application/lib/widget/page/device_schedule_page.dart b/hems_application/lib/widget/page/device_schedule_page.dart new file mode 100644 index 0000000..64db2bb --- /dev/null +++ b/hems_application/lib/widget/page/device_schedule_page.dart @@ -0,0 +1,103 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/util/timeshifter_util.dart'; +import 'package:hems_app/widget/page/create_job.dart'; +import 'package:hems_app/widget/schedule_view.dart'; + +/// Page where the user can view the job schedule for a specific timeshifter device only. +/// +/// Jobs are fetched periodically (every 5 seconds) from the backend using [TimeshifterUtil]. +class DeviceSchedulePage extends StatefulWidget { + const DeviceSchedulePage({super.key, required this.deviceId}); + + final String deviceId; + + @override + State createState() => DeviceSchedulePageState(); +} + +class DeviceSchedulePageState extends State { + Timer? timer; + + List jobs = []; + + /// Initializes the widget state and starts a periodic timer to refresh the schedule list. + @override + void initState() { + super.initState(); + loadTimeShifter(); + timer = Timer.periodic( + Duration(seconds: 5), + (Timer t) => loadTimeShifter(), + ); + } + + /// Fetches the current house time and all scheduled jobs for timeshifter devices, and updates the display list. + Future loadTimeShifter() async { + List newJobs = []; + + newJobs = await TimeshifterUtil().loadJobs(context, deviceId: widget.deviceId) ?? []; + + if (!mounted) return; + setState(() { + jobs = newJobs; + }); + } + + /// Disposes the page. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + void cancelJob(int jobId, DateTime startTime, Device device) async { + await TimeshifterUtil().cancelJob(context, jobId, startTime, device); + + // Reload jobs + loadTimeShifter(); + } + + @override + Widget build(BuildContext context) { + return Column( + mainAxisSize: MainAxisSize.max, + children: [ + SizedBox(height: 10), + Text(context.l10n.scheduleForDevice(widget.deviceId), + style: Theme.of(context).textTheme.headlineSmall, + textAlign: TextAlign.center), + SizedBox(height: 10), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: ScheduleView( + jobs: jobs, + onCancelJob: cancelJob, + ), + ), + ), + SizedBox(height: 10), + FilledButton(onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CreateJob(initialDevice: AppState().devices.firstWhere( + (d) => d.deviceId == widget.deviceId, + ), + ), + ), + ).then((newJob) { + loadTimeShifter(); + }); + }, child: Text(context.l10n.createNewJob)), + SizedBox(height: 10), + ], + ); + } +} \ No newline at end of file diff --git a/hems_application/lib/widget/page/device_selection_page.dart b/hems_application/lib/widget/page/device_selection_page.dart new file mode 100644 index 0000000..9e5af59 --- /dev/null +++ b/hems_application/lib/widget/page/device_selection_page.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/state/app_state.dart'; + + +/// Page for selecting a timeshifter device to schedule. +/// +/// The devices are accompanied by their respective room icon +class DeviceSelectionPage extends StatelessWidget { + DeviceSelectionPage({super.key}); + + final rooms = AppState().rooms; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(context.l10n.selectADevice)), + body: Center( + child: ListView( + padding: const EdgeInsets.all(10), + children: + (rooms + [AppState().othersRoom(context)]).map((room) { + return Column( + children: + [ + Row( + children: [ + Icon(room.icon(), size: 24, color: room.color()), + SizedBox(width: 5), + Flexible( + child: Text( + room.name, + style: Theme.of(context).textTheme.labelLarge + ?.apply(color: room.color()), + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ] + + room.devices + .where( + (device) => device.type == DeviceType.timeshifter, + ) + .map((device) { + return ListTile( + leading: Icon(device.type.iconData, size: 24), + title: Text(device.deviceId), + onTap: () { + Navigator.pop(context, { + "device": device, + "room": room, + }); + }, + ); + }) + .toList() + + [Divider()], + ); + }).toList(), + ), + ), + ); + } +} diff --git a/hems_application/lib/widget/page/devices_page.dart b/hems_application/lib/widget/page/devices_page.dart new file mode 100644 index 0000000..20b2353 --- /dev/null +++ b/hems_application/lib/widget/page/devices_page.dart @@ -0,0 +1,213 @@ +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/service/device_service.dart'; +import 'package:hems_app/state/app_state.dart'; + +/// A widget that displays all of the [Device]s that the user has added to the app. +/// +/// Each device is displayed using their associated [Widget]. +class DevicesPage extends StatefulWidget { + const DevicesPage({super.key}); + + @override + State createState() => DevicesPageState(); +} + +class DevicesPageState extends State { + /// Builds the widget tree. + /// + /// If there are no [Device]s present in the [AppState], a centered message is displayed informing + /// the user of this fact. Otherwise, a [ListView] of the corresponding [Widget] for each device + /// is displayed. + /// + /// A [FloatingActionButton] is always positioned at the bottom right corner of the screen. + /// When pressed, it calls the [addDeviceDialog] method to allow adding new devices. + /// + /// A [Stack] is used to overlay the button above either the centered message or the scrollable + /// device list. + @override + Widget build(BuildContext context) { + return AppState().devices.isEmpty + ? Stack( + children: [ + Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "${context.l10n.noDevicesAddedYet}!", + style: Theme.of(context).textTheme.bodyLarge, + ), + const SizedBox(height: 10), + FilledButton.tonal(onPressed: () async => {await addDeviceDialog(context), setState(() {}),}, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 10), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [Icon(Icons.add), SizedBox(width: 10,), Text(context.l10n.manageDevices)], + ), + )) + ], + ), + ), + Positioned( + right: 10, + bottom: 10, + child: FloatingActionButton.extended( + onPressed: () async => { + await addDeviceDialog(context), + setState(() {}), + }, + icon: Icon(Icons.assignment), + label: Text(context.l10n.manageDevices), + ), + ), + ], + ) + : Stack( + children: [ + ListView( + padding: const EdgeInsets.all(10), + children: [ + ...AppState().devices.asMap().entries.expand((e) { + final isLast = e.key == AppState().devices.length - 1; + return [ + e.value.widget, + if (!isLast) const SizedBox(height: 16), + ]; + }), + SizedBox(height: 64), + ], + ), + Positioned( + right: 10, + bottom: 10, + child: FloatingActionButton.extended( + onPressed: () async => { + await addDeviceDialog(context), + setState(() {}), + }, + icon: Icon(Icons.assignment), + label: Text(context.l10n.manageDevices), + ), + ), + ], + ); + } + + +} + + /// Shows a [AlertDialog] containing the [Device]s available in the backend. + /// + /// Devices can be marked to be available as managed devices in the app. + /// Currently the endpoint to get all devices is mocked in the [DeviceService] class. + Future addDeviceDialog(BuildContext context) async { + List availableDevices = await DeviceService().getDevices().fold( + (left) => left, + (right) => [], + ); + List managed = List.filled(availableDevices.length, false); + for (int i = 0; i < availableDevices.length; i++) { + if (AppState().devices.contains(availableDevices[i])) { + managed[i] = true; + } + } + ScrollController scrollController = ScrollController(); + bool choice = false; + + if (context.mounted) { + choice = + await showDialog( + context: context, + builder: (context) { + return StatefulBuilder( + builder: (context, setState) { + return AlertDialog( + title: Text(context.l10n.addOrRemoveManagedDevices), + content: SizedBox( + height: MediaQuery.of(context).size.height / 2, + width: MediaQuery.of(context).size.width, + child: Scrollbar( + thumbVisibility: true, + controller: scrollController, + child: ListView.builder( + controller: scrollController, + itemCount: availableDevices.length, + itemBuilder: (context, index) { + Device d = availableDevices[index]; + return CheckboxListTile( + title: Text( + d.type.localizedName(context.l10n), + style: Theme.of(context).textTheme.bodyLarge + ?.copyWith(fontWeight: FontWeight.bold), + ), + subtitle: Text( + "${context.l10n.device} ID: ${d.deviceId}", + style: Theme.of(context).textTheme.bodySmall, + ), + secondary: Column( + children: [ + SizedBox(height: 20), + Icon(d.type.iconData), + ], + ), + isThreeLine: true, + value: managed[index], + onChanged: (value) { + setState(() { + if (value != null) { + managed[index] = value; + } + }); + }, + ); + }, + ), + ), + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(false); + }, + child: Text(context.l10n.cancel), + ), + FilledButton( + onPressed: () { + Navigator.of(context).pop(true); + }, + child: Text(context.l10n.done), + ), + ], + ); + }, + ); + }, + ) ?? + false; + } + + if (choice) { + AppState().devices = + availableDevices + .asMap() + .entries + .where((entry) => managed[entry.key]) + .map((entry) => entry.value) + .toList(); + + List currentDevices = AppState().devices; + for (Room r in AppState().rooms) { + List roomDevices = r.devices; + List newRoomDevices = []; + for (Device d in roomDevices) { + if (currentDevices.contains(d)) newRoomDevices.add(d); + } + AppState().editRoom(r, r.name, r.type, newRoomDevices); + } + } + } \ No newline at end of file diff --git a/hems_application/lib/widget/page/edit_room.dart b/hems_application/lib/widget/page/edit_room.dart new file mode 100644 index 0000000..eaaf2f7 --- /dev/null +++ b/hems_application/lib/widget/page/edit_room.dart @@ -0,0 +1,434 @@ +import 'package:collection/collection.dart'; +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/page/devices_page.dart'; + +/// A widget that displays the name and the list of devices of a [Room]. +/// +/// The devices are all displayed using their associated [Widget]s. +class EditRoom extends StatefulWidget { + final Room room; + + const EditRoom({super.key, required this.room}); + + @override + State createState() => _EditRoomState(); +} + +class _EditRoomState extends State { + /// Builds the widget tree for displaying the [Room]. + /// + /// The method constructs a [Scaffold] which contains: + /// - An [AppBar] displaying the name of the room. + /// - A [ListView] displaying all the [Device]s assigned to the room with their associated [Widget]s. + /// If the room has no [Device]s, it displays a centered message informing the user of this fact. + /// - A [FloatingActionButton] that opens a dialog to confirm that the user intends to delete the room. + /// If confirmed, the room is removed from the [AppState]'s list of rooms. + /// - A [FloatingActionButton] that opens a dialog that allows the user to edit the room's details. + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(widget.room.name)), + body: + widget.room.devices.isEmpty + ? Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + "${context.l10n.noDevicesAddedToThisRoomYet}!", + style: Theme.of(context).textTheme.bodyLarge, + ), + const SizedBox(height: 10), + FilledButton.tonal(onPressed: editRoomDialog, child: Padding( + padding: const EdgeInsets.symmetric(vertical: 10), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [Icon(Icons.add), SizedBox(width: 10,), Text(context.l10n.editRoomDevices)], + ), + )) + ], + ), + ) + : Stack( + children: [ + ListenableBuilder( + listenable: AppState(), + builder: (context, child) => ListView( + padding: const EdgeInsets.all(10), + children: + widget.room.devices.asMap().entries.expand((e) { + final isLast = e.key == AppState().devices.length - 1; + return [ + e.value.widget, + if (!isLast) + SizedBox(height: 16) + else + SizedBox( + height: + MediaQuery.of(context).size.height * 0.1, + ), + ]; + }).toList(), + ), + ), + ], + ), + floatingActionButton: Row( + mainAxisSize: MainAxisSize.min, + children: widget.room == AppState().othersRoom(context) ? [] : [ + FloatingActionButton( + heroTag: 'deleteButton', + onPressed: () async { + final confirm = await deleteRoomDialog(); + if (confirm) AppState().removeRoom(widget.room); + }, + backgroundColor: Theme.of(context).colorScheme.errorContainer, + child: Icon(Icons.delete, color: Theme.of(context).colorScheme.onErrorContainer), + ), + SizedBox(width: 16), + Flexible( + child: FloatingActionButton.extended( + heroTag: 'editButton', + onPressed: () { + editRoomDialog(); + }, + label: Text(context.l10n.editRoomDevices, overflow: TextOverflow.ellipsis,), + icon: Icon(Icons.edit), + + ), + ), + ], + ), + ); + } + + /// Displays an [AlertDialog] asking the user to confirm their decision to delete the current [Room]. + /// + /// The [AlertDialog] contains 'Cancel' and 'Delete' [TextButton]s. If the user selects 'Delete', the + /// method returns 'true', and navigates back to the home screen. If the user selects 'Cancel' or they + /// dismiss the dialog, the method returns 'false'. + Future deleteRoomDialog() async { + return await showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: Text(context.l10n.confirmDeletion), + content: Text( + "${context.l10n.areYouSureYouWantToDeleteThisRoom}?", + ), + actions: [ + TextButton( + onPressed: () { + Navigator.pop(context, false); + }, + child: Text(context.l10n.cancel), + ), + FilledButton( + onPressed: () { + Navigator.pop(context, true); + Navigator.pop(context); + }, + style: FilledButton.styleFrom( + backgroundColor: + Theme.of( + context, + ).colorScheme.errorContainer, + foregroundColor: + Theme.of( + context, + ).colorScheme.onErrorContainer, + ), + child: Text( + context.l10n.delete, + ), + ), + ], + ); + }, + ) ?? + false; + } + + /// Displays a dialog that allows the user to edit the [Room]'s properties. + /// + /// The dialog includes widgets to modify: + /// - The room's name via a [TextField]. + /// - The room's type via a [DropdownButton] listing all [RoomType]s. + /// - The [Device]s in the room via a scrollable [ListView] of [CheckboxListTile] widgets. + /// - A 'Save Changes' [TextButton] which updates the room's name, type and [Device]s + /// using the [editRoom] method from [AppState] if they have changed and then closes the dialog. + /// - A 'Cancel' [TextButton] which makes no changes and closes the dialog. + void editRoomDialog() async { + String newName = ""; + RoomType? newType = widget.room.type; + List newDevices = widget.room.devices; + List availableDevices = AppState().devices; + List managed = List.filled(availableDevices.length, false); + for (int i = 0; i < availableDevices.length; i++) { + if (widget.room.devices.contains(availableDevices[i])) { + managed[i] = true; + } + } + final TextEditingController nameController = TextEditingController( + text: widget.room.name, + ); + + ScrollController scrollController = ScrollController(); + final editedRoom = + await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return StatefulBuilder( + builder: (context, setState) { + return Dialog( + insetPadding: const EdgeInsets.all(16), + child: SafeArea( + child: LayoutBuilder( + builder: (context, constraints) { + return SizedBox( + width: MediaQuery.of(context).size.width * 0.9, + child: SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.l10n.editRoom(widget.room.name), + style: Theme.of(context).textTheme.titleMedium + ?.copyWith(fontSize: 25), + overflow: TextOverflow.ellipsis, + ), + SizedBox( + height: + MediaQuery.of(context).size.width / 16, + ), + Row( + children: [ + Text( + context.l10n.type, + style: + Theme.of( + context, + ).textTheme.titleMedium, + ), + SizedBox( + width: + MediaQuery.of(context).size.width / + 12, + ), + Expanded( + child: DropdownButton( + dropdownColor: + Theme.of(context).cardTheme.color, + isExpanded: true, + items: + RoomType.values.map((e) { + return DropdownMenuItem( + value: e, + child: Text( + e.localizedName(context.l10n), + ), + ); + }).toList(), + onChanged: (value) { + setState(() { + newType = value; + }); + }, + value: newType, + ), + ), + ], + ), + Row( + children: [ + Text( + context.l10n.name, + style: + Theme.of( + context, + ).textTheme.titleMedium, + ), + SizedBox( + width: + MediaQuery.of(context).size.width / + 16, + ), + Expanded( + child: TextField( + controller: nameController, + ), + ), + ], + ), + SizedBox(height: 16), + Text( + context.l10n.devices, + style: + Theme.of(context).textTheme.titleMedium, + ), + SizedBox(height: 10), + SizedBox( + height: + MediaQuery.of(context).size.height / 4, + width: MediaQuery.of(context).size.width, + child: Scrollbar( + thumbVisibility: true, + controller: scrollController, + child: ListView.builder( + controller: scrollController, + itemCount: availableDevices.length + 1, + itemBuilder: (context, index) { + if (index == availableDevices.length) { + return Column( + children: [ + SizedBox(height: 20), + Text(context.l10n.cantFindYourDevice), + SizedBox(height: 10), + OutlinedButton( + onPressed: () async { + await addDeviceDialog(context); + if (context.mounted) { + Navigator.of(context).pop(); + editRoomDialog(); + } + }, + child: Text(context.l10n.manageDevices), + ), + ], + ); + } + final d = availableDevices[index]; + return CheckboxListTile( + title: Text( + d.type.localizedName(context.l10n), + style: Theme.of( + context, + ).textTheme.bodyLarge?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + subtitle: Text( + "${context.l10n.device} ID: ${d.deviceId}", + style: + Theme.of( + context, + ).textTheme.bodySmall, + ), + secondary: Column( + children: [ + SizedBox(height: 20), + Icon(d.type.iconData), + ], + ), + value: managed[index], + onChanged: (value) { + setState(() { + if (value != null) { + managed[index] = value; + } + }); + }, + ); + }, + ), + ), + ), + SizedBox(height: 32), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: TextButton( + onPressed: () { + Navigator.of( + context, + ).pop(widget.room); + }, + child: Text(context.l10n.cancel), + ), + ), + SizedBox(width: 8), + Flexible( + child: FilledButton( + onPressed: () { + newName = nameController.text.trim(); + if (newType != null && + newName.isNotEmpty) { + newDevices = + availableDevices + .asMap() + .entries + .where( + (entry) => + managed[entry.key], + ) + .map((entry) => entry.value) + .toList(); + Navigator.of(context).pop( + Room( + name: newName, + type: newType!, + devices: newDevices, + ), + ); + } + }, + child: Text(context.l10n.saveChanges), + ), + ), + ], + ), + ], + ), + ), + ); + }, + ), + ), + ); + }, + ); + }, + ) ?? + widget.room; + + if (editedRoom != widget.room) { + if (newName.isNotEmpty) { + setState(() { + AppState().editRoom( + widget.room, + newName, + widget.room.type, + widget.room.devices, + ); + }); + } + if (newType != null) { + setState(() { + AppState().editRoom( + widget.room, + widget.room.name, + newType!, + widget.room.devices, + ); + }); + } + if (!ListEquality().equals(newDevices, widget.room.devices)) { + setState(() { + AppState().editRoom( + widget.room, + widget.room.name, + widget.room.type, + newDevices, + ); + }); + } + } + } +} diff --git a/hems_application/lib/widget/page/home_page.dart b/hems_application/lib/widget/page/home_page.dart new file mode 100644 index 0000000..6e6840d --- /dev/null +++ b/hems_application/lib/widget/page/home_page.dart @@ -0,0 +1,196 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/analytics/animated_power_flow.dart'; +import 'package:hems_app/widget/analytics/consumption_chart.dart'; +import 'package:hems_app/widget/room_card.dart'; + +/// Home Page which is displayed on startup. +/// +/// A widget that displays: +/// - The [Room]s created by the user. +/// - A network diagram displaying the flow of power from producer devices to consumer +/// devices. +/// - A bar chart displaying the power consumption of all of the user's devices over +/// the past minute. +class HomePage extends StatefulWidget { + const HomePage({super.key}); + + @override + State createState() { + return HomePageState(); + } +} + +class HomePageState extends State { + /// Builds the widget tree. + /// + /// The method constructs a [ListenableBuilder] which contains: + /// - [AnimatedPowerFlow] which is the network diagram of power flow. + /// - A grid view of rooms created by the user displayed using their associated [RoomCard]s. + /// - [ConsumptionChart] which is the bar chart of the power consumption of all of the user's + /// devices over the past minute. + @override + Widget build(BuildContext context) { + return ListenableBuilder( + listenable: AppState(), + builder: (context, child) { + return ListView( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(10, 10, 10, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Flexible( + child: Text( + context.l10n.yourRooms, + style: Theme.of(context).textTheme.headlineSmall, + ), + ), + SizedBox(width: 5), + Flexible( + child: IconButton( + icon: Icon(Icons.add), + onPressed: newRoomDialog, + ), + ), + ], + ), + AppState().rooms.isEmpty + ? Row( + mainAxisSize: MainAxisSize.max, + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.all(2), + child: Card( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(context.l10n.tryCreatingARoom, style: Theme.of(context).textTheme.bodyLarge), + SizedBox(height: 8), + OutlinedButton(onPressed: newRoomDialog, child: Text(context.l10n.createNewRoom)), + ], + ), + ), + )), + ), + ], + ) + : GridView.count( + shrinkWrap: true, + childAspectRatio: 1.5, + crossAxisCount: 3, + physics: NeverScrollableScrollPhysics(), + children: (AppState().rooms + [AppState().othersRoom(context)]).map((e) { + return RoomCard(e); + }).toList(), + ), + SizedBox(height: 16), + Text( + context.l10n.powerFlow, + style: Theme.of(context).textTheme.headlineSmall, + ), + AnimatedPowerFlow(), + SizedBox(height: 16), + Text( + context.l10n.deviceAnalytics, + style: Theme.of(context).textTheme.headlineSmall, + ), + SizedBox(height: 16), + ConsumptionChart(), + ], + ), + ), + ], + ); + }, + ); + } + + /// Dialog for creating a new room on the home page. + /// + /// Can choose from a dropdown of predefined rooms and prompts the user to enter the name of the room. + void newRoomDialog() async { + final newRoom = await showDialog( + context: context, + builder: (context) { + String name = ""; + RoomType? type; + + return StatefulBuilder( + builder: (context, setState) { + return AlertDialog( + title: Text(context.l10n.createNewRoom), + content: ConstrainedBox( + constraints: BoxConstraints( + maxHeight: MediaQuery.of(context).size.height * 0.5, + ), + child: SingleChildScrollView( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + DropdownButton( + dropdownColor: Theme.of(context).cardTheme.color, + items: + RoomType.values.map((e) { + return DropdownMenuItem( + value: e, + child: Text(e.localizedName(context.l10n)), + ); + }).toList(), + onChanged: (value) { + setState(() { + type = value; + }); + }, + value: type, + hint: Text(context.l10n.chooseRoomType), + ), + TextField( + onChanged: (value) { + name = value; + }, + decoration: InputDecoration( + hintText: context.l10n.enterRoomName, + ), + ), + ], + ), + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: Text(context.l10n.cancel), + ), + FilledButton( + onPressed: () { + if (type != null && name.isNotEmpty) { + Navigator.of( + context, + ).pop(Room(type: type!, name: name, devices: [])); + } + }, + child: Text(context.l10n.create), + ), + ], + ); + }, + ); + }, + ); + + if (newRoom != null) { + setState(() { + AppState().addRoom(newRoom); + }); + } + } +} diff --git a/hems_application/lib/widget/page/schedules_page.dart b/hems_application/lib/widget/page/schedules_page.dart new file mode 100644 index 0000000..895c91b --- /dev/null +++ b/hems_application/lib/widget/page/schedules_page.dart @@ -0,0 +1,174 @@ +// ignore_for_file: use_build_context_synchronously + +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/util/timeshifter_util.dart'; +import 'package:hems_app/widget/page/create_job.dart'; +import 'package:hems_app/widget/scheduled_job.dart'; +import 'package:hems_app/widget/schedule_view.dart'; + +/// A widget that displays upcoming scheduled jobs for timeshifter devices. +/// +/// This widget shows a list of jobs associated with devices that can be scheduled, +/// grouped by date. It also shows suggestions for better scheduling (e.g., based on solar usage). +/// +/// A [FloatingActionButton] allows users to create and schedule new jobs. Jobs are fetched +/// periodically (every 5 seconds) from the backend using [TimeshifterUtil]. +class SchedulesPage extends StatefulWidget { + const SchedulesPage({super.key}); + + @override + State createState() => SchedulesPageState(); +} + +class SchedulesPageState extends State { + Timer? timer; + List jobs = []; + + + /// Initializes the widget state and starts a periodic timer to refresh the schedule list. + @override + void initState() { + super.initState(); + loadTimeShifter(); + timer = Timer.periodic( + Duration(seconds: 5), + (Timer t) => loadTimeShifter(), + ); + } + + /// Fetches the current house time and all scheduled jobs for timeshifter devices, and updates the display list. + Future loadTimeShifter() async { + List newJobs = []; + + newJobs = await TimeshifterUtil().loadJobs(context) ?? []; + + if (!mounted) return; + setState(() { + jobs = newJobs; + }); + } + + /// Disposes the page. + /// + /// In addition cancels the refresh timer. + @override + void dispose() { + timer?.cancel(); + super.dispose(); + } + + void cancelJob(int jobId, DateTime startTime, Device device) async { + await TimeshifterUtil().cancelJob(context, jobId, startTime, device); + + // Reload jobs + loadTimeShifter(); + } + + /// Builds the widget tree. + /// + /// Displays: + /// - A list of upcoming jobs grouped by date. + /// - Suggested changes for improving efficiency. + /// - A [FloatingActionButton] to add a new job, which opens [CreateJob]. + /// + /// If a job is created, it's immediately scheduled and the list is refreshed. + @override + Widget build(BuildContext context) { + return Stack( + children: [ + ListView( + padding: const EdgeInsets.all(10), + children: [ + Text( + context.l10n.comingUp, + style: Theme.of(context).textTheme.headlineSmall, + ), + ScheduleView(jobs: jobs, onCancelJob: cancelJob, height: 300), + // Suggested optimization card + Card( + color: Theme.of(context).colorScheme.tertiaryContainer, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + context.l10n.suggestedChanges, + style: Theme.of(context).textTheme.headlineSmall, + ), + Text( + "${context.l10n.ifMoveRuleFromToMoreUseOf(context.l10n.solarPanels, "18:00", "16:00")}.", + style: Theme.of(context).textTheme.bodyMedium, + ), + SizedBox(height: 5), + Center( + child: ScheduledJob( + id: -1, + onCancelJob: (id, startTime, device) {}, + device: AppState().devices.firstWhere( + (device) => device.type == DeviceType.timeshifter, + orElse: + () => Device( + deviceId: context.l10n.exampleDevice, + houseId: 0, + type: DeviceType.timeshifter, + ), + ), + room: AppState().othersRoom(context), + startTime: DateTime.now().add( + Duration(days: 1, hours: 2, minutes: 30), + ), + endTime: DateTime.now().add( + Duration(days: 1, hours: 3, minutes: 30), + ), + displayTimeLeft: false, + ), + ), + SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: FilledButton( + child: Text("${context.l10n.moveTo} 16:00"), + onPressed: () {}, + ), + ), + ], + ), + ], + ), + ), + ), + SizedBox(height: 60), + ], + ), + + Positioned( + right: 10, + bottom: 10, + child: FloatingActionButton.extended( + label: Text(context.l10n.newJob), + icon: Icon(Icons.add), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => CreateJob()), + ).then((newJob) async { + if (newJob != null && newJob is DisplayJob) { + // Reload jobs + loadTimeShifter(); + } + }); + }, + ), + ), + ], + ); + } +} diff --git a/hems_application/lib/widget/page/settings_page.dart b/hems_application/lib/widget/page/settings_page.dart new file mode 100644 index 0000000..1ba035b --- /dev/null +++ b/hems_application/lib/widget/page/settings_page.dart @@ -0,0 +1,223 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/state/locale_notifier.dart'; +import 'package:hems_app/state/theme_notifier.dart'; +import 'package:provider/provider.dart'; + +/// Settings Page for the mobile application. +/// +/// Contains a [Switch] for Dark Mode, a [DropdownButton] for language choice, [TextButton] for importing and exporting home configuration. +class SettingsPage extends StatefulWidget { + const SettingsPage({super.key}); + + @override + State createState() => _SettingsPageState(); +} + +class _SettingsPageState extends State { + @override + Widget build(BuildContext context) { + final themeNotifier = Provider.of(context); + final localeNotifier = Provider.of(context); + bool isDarkMode = themeNotifier.isDarkMode; + final appState = AppState(); + + return Scaffold( + body: ListView( + padding: const EdgeInsets.all(16), + children: [ + Card( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Text( + context.l10n.darkMode, + style: Theme.of(context).textTheme.headlineSmall, + ), + ), + SizedBox(width: MediaQuery.of(context).size.width * 0.08), + Switch( + value: isDarkMode, + activeColor: Colors.green, + onChanged: (value) async { + themeNotifier.toggleTheme(value); + }, + ), + ], + ), + ], + ), + ), + ), + Card( + child: Padding( + padding: const EdgeInsets.all(10), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Text( + 'Language', + style: Theme.of(context).textTheme.headlineSmall, + ), + ), + Flexible( + child: ConstrainedBox( + constraints: BoxConstraints(maxWidth: 200), + child: DropdownButtonHideUnderline( + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 12), + decoration: BoxDecoration( + color: Theme.of(context).cardTheme.color, + borderRadius: BorderRadius.circular(15), + border: Border.all( + color: Theme.of(context).colorScheme.onSurface, + width: 2, + ), + ), + child: DropdownButton( + value: localeNotifier.locale, + isExpanded: true, + alignment: Alignment.center, + icon: const Icon(Icons.arrow_drop_down), + dropdownColor: Theme.of(context).cardTheme.color, + borderRadius: const BorderRadius.all( + Radius.circular(15), + ), + style: Theme.of( + context, + ).textTheme.headlineSmall?.copyWith(fontSize: 20), + items: const [ + DropdownMenuItem( + value: Locale('en'), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('🇺🇸'), + SizedBox(width: 8), + Flexible(child: Text('English', style: TextStyle(fontSize: 15),)), + ], + ), + ), + DropdownMenuItem( + value: Locale('nl'), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('🇳🇱'), + SizedBox(width: 8), + Flexible(child: Text('Nederlands', style: TextStyle(fontSize: 15))), + ], + ), + ), + ], + onChanged: (locale) { + if (locale != null) { + localeNotifier.setLocale(locale); + } + }, + ), + ), + ), + ), + ), + ], + ), + ), + ), + Card( + child: Padding( + padding: EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 10, + children: [ + Text( + context.l10n.transferTitle, + style: Theme.of(context).textTheme.headlineSmall, + ), + TextButton.icon( + onPressed: () async { + bool success = true; + + try { + String encodedString = base64Encode( + utf8.encode(jsonEncode(appState.toJson())), + ); + await Clipboard.setData( + ClipboardData(text: encodedString), + ); + } catch (_) { + success = false; + } + + if (!context.mounted) return; + + ScaffoldMessenger.of(context).removeCurrentSnackBar(); + ScaffoldMessenger.of( + context, + ).showSnackBar( + SnackBar( + content: Text( + success + ? context.l10n.exportSuccess + : context.l10n.exportFail, + ), + ), + ); + }, + label: Text(context.l10n.exportData), + icon: Icon(Icons.file_upload), + ), + TextButton.icon( + onPressed: () async { + bool success = true; + + try { + ClipboardData data = + (await Clipboard.getData('text/plain'))!; + String jsonString = utf8.decode( + base64.decode(data.text!), + ); + appState.initFromJson(jsonDecode(jsonString)); + } catch (_) { + success = false; + } + + if (!context.mounted) return; + + ScaffoldMessenger.of(context).removeCurrentSnackBar(); + ScaffoldMessenger.of( + context, + ).showSnackBar( + SnackBar( + content: Text( + success + ? context.l10n.importSuccess + : context.l10n.importFail, + ), + ), + ); + }, + label: Text(context.l10n.importData), + icon: Icon(Icons.file_download), + ), + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/hems_application/lib/widget/room_card.dart b/hems_application/lib/widget/room_card.dart new file mode 100644 index 0000000..ca63a47 --- /dev/null +++ b/hems_application/lib/widget/room_card.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/widget/page/edit_room.dart'; + +/// Room Card widget on the home screen. +class RoomCard extends StatefulWidget { + final Room room; + + const RoomCard(this.room, {super.key}); + + @override + State createState() { + return RoomCardState(); + } +} + +class RoomCardState extends State { + /// Builds the widget. + /// + /// The widget displays a [Card] containing the [Room]'s icon and name. + /// The [Card] is wrapped in an [InkWell] which when tapped, navigates to [EditRoom] to + /// allow the user to edit the selected room. + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () async { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => EditRoom(room: widget.room)), + ); + }, + borderRadius: BorderRadius.circular(12), + child: Card( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Flexible( + child: Icon( + size: 45, + widget.room.icon(), + color: widget.room.color(), + ), + ), + Text( + widget.room.name, + style: Theme.of( + context, + ).textTheme.labelLarge?.apply(color: widget.room.color()), + overflow: TextOverflow.ellipsis, + ), + ], + ), + ), + ); + } +} diff --git a/hems_application/lib/widget/schedule_view.dart b/hems_application/lib/widget/schedule_view.dart new file mode 100644 index 0000000..32855f7 --- /dev/null +++ b/hems_application/lib/widget/schedule_view.dart @@ -0,0 +1,119 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/widget/scheduled_job.dart'; +import 'package:intl/intl.dart'; + +/// A model representing a job that is scheduled for display purposes. +class DisplayJob { + final int id; + final Room room; + final Device device; + final DateTime startTime; + final Duration duration; + + DisplayJob({ + required this.id, + required this.room, + required this.device, + required this.startTime, + required this.duration, + }); +} + +/// A widget that displays a schedule for jobs, optionally filtered by a specific device. +/// +/// The widget shows a list of [DisplayJob]s, each represented by a [ScheduledJob] widget. +/// If [height] is set, the widget will be fixed to that height. +/// [onCancelJob] is called when the user pressed the 'cancel' button on a job. +/// See [ScheduledJob] for more details on how each job is displayed. +class ScheduleView extends StatelessWidget { + final List jobs; + final Function(int id, DateTime startTime, Device device) onCancelJob; + final double? height; + + const ScheduleView({ + super.key, + required this.jobs, + required this.onCancelJob, + this.height, + }); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 2, + child: SizedBox( + height: height, + child: + jobs.isEmpty + ? Center(child: Text(context.l10n.noUpcomingJobs)) + : ListView.separated( + shrinkWrap: true, + scrollDirection: Axis.vertical, + itemCount: jobs.length + 1, + itemBuilder: (context, index) { + if (index == 0) { + return Column( + children: [ + SizedBox(height: 10), + (jobs[0].startTime.day == DateTime.now().day && jobs[0].startTime.month == DateTime.now().month && jobs[0].startTime.year == DateTime.now().year) + ? SizedBox.shrink() : separator(jobs[0].startTime, context) + ], + ); + } + var job = jobs[index - 1]; + return ScheduledJob( + id: job.id, + onCancelJob: + (id, startTime, device) => + onCancelJob(id, startTime, device), + device: job.device, + room: job.room, + startTime: job.startTime, + endTime: job.startTime.add(job.duration), + displayTimeLeft: true, + ); + }, + separatorBuilder: (context, index) { + if (index == 0) return SizedBox.shrink(); + bool isNewDay = + jobs[index - 1].startTime.day != + jobs[index].startTime.day || + jobs[index - 1].startTime.month != + jobs[index].startTime.month; + return isNewDay + ? separator(jobs[index].startTime, context) + : SizedBox.shrink(); + }, + ), + ), + ); + } + + Widget separator(DateTime startTime, BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric( + vertical: 8.0, + horizontal: 10.0, + ), + child: Row( + children: [ + Text( + DateFormat( + "dd MMMM", + ).format(startTime), + ), + SizedBox(width: 10.0), + Expanded( + child: Divider( + thickness: 1, + color: Theme.of(context).dividerColor, + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/hems_application/lib/widget/scheduled_job.dart b/hems_application/lib/widget/scheduled_job.dart new file mode 100644 index 0000000..5e7d08c --- /dev/null +++ b/hems_application/lib/widget/scheduled_job.dart @@ -0,0 +1,191 @@ +import 'package:flutter/material.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:intl/intl.dart'; + +/// A widget that visually represents a scheduled job for a [Device] in a [Room]. +/// +/// The widget displays key information such as: +/// - The room the device belongs to, including its icon and color. +/// - The job's start and end times in the form of dates. +/// - The device ID and its icon. +/// - Whether the job is currently (supposed to be) running or not. +/// +/// If [displayTimeLeft] is true, the start time is displayed to the left of the main card. +class ScheduledJob extends StatefulWidget { + final int id; + final Device device; + final Room room; + final DateTime startTime; + final DateTime endTime; + final bool displayTimeLeft; + final Function(int id, DateTime startTime, Device device) onCancelJob; + + const ScheduledJob({ + super.key, + required this.id, + required this.device, + required this.room, + required this.startTime, + required this.endTime, + required this.displayTimeLeft, + required this.onCancelJob, + }); + + @override + State createState() => _ScheduledJobState(); +} + +class _ScheduledJobState extends State { + bool expanded = false; + + @override + Widget build(BuildContext context) { + bool happening = widget.startTime.isBefore(DateTime.now()) && + widget.endTime.isAfter(DateTime.now()); + + var box = ConstrainedBox( + constraints: BoxConstraints(maxWidth: 270), + child: AnimatedSize( + curve: Curves.easeOut, + duration: Duration(milliseconds: 100), + child: Card( + color: happening ? Theme.of(context).colorScheme.tertiaryContainer : Theme.of(context).colorScheme.primaryContainer, + elevation: 2, + child: InkWell( + onTap: + widget.id == -1 + ? null + : () { + setState(() { + expanded = !expanded; + }); + }, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: + [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Row( + children: [ + Flexible( + child: Icon( + widget.room.icon(), + size: 24, + color: widget.room.color(), + ), + ), + SizedBox(width: 5), + Flexible( + child: Text( + widget.room.name, + style: Theme.of(context) + .textTheme + .labelLarge + ?.apply(color: widget.room.color()), + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ), + ], + ), + ), + Flexible( + child: Text( + DateFormat( + "HH:mm - dd MMMM", + ).format(widget.startTime), + style: Theme.of(context).textTheme.labelMedium, + textAlign: TextAlign.right, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + happening ? Container(width: 16, height: 16, decoration: BoxDecoration(color: Theme.of(context).colorScheme.error, shape: BoxShape.circle)) : SizedBox.shrink(), + happening ? SizedBox(width: 8) : SizedBox.shrink(), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.device.deviceId, + style: Theme.of(context).textTheme.titleLarge, + ), + Text( + happening ? context.l10n.nowActiveUntil(DateFormat("HH:mm").format(widget.endTime)) : "${context.l10n.activeUntil} ${DateFormat("HH:mm").format(widget.endTime)}", + style: happening ? Theme.of(context).textTheme.bodySmall?.copyWith(fontWeight: FontWeight.bold, color: Theme.of(context).colorScheme.onTertiaryContainer) : Theme.of(context).textTheme.bodySmall, + ), + ], + ), + ), + Icon(widget.device.type.iconData, size: 24), + ], + ), + ] + + (expanded + ? [ + SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: FilledButton( + onPressed: () { + widget.onCancelJob( + widget.id, + widget.startTime, + widget.device, + ); + }, + style: FilledButton.styleFrom( + backgroundColor: + Theme.of( + context, + ).colorScheme.errorContainer, + foregroundColor: + Theme.of( + context, + ).colorScheme.onErrorContainer, + ), + child: Text(context.l10n.cancelJob), + ), + ), + ], + ), + ] + : []), + ), + ), + ), + ), + ), + ); + + return widget.displayTimeLeft + ? Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SizedBox(width: 5), + Text( + DateFormat("HH:mm").format(widget.startTime), + style: Theme.of(context).textTheme.labelMedium, + textAlign: TextAlign.right, + ), + SizedBox(width: 10), + Flexible(child: box), + ], + ) + : box; + } +} diff --git a/hems_application/lib/widget/util/value_row.dart b/hems_application/lib/widget/util/value_row.dart new file mode 100644 index 0000000..4e088bb --- /dev/null +++ b/hems_application/lib/widget/util/value_row.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; + +/// Custom Row widget containing a value and a description. +/// +/// Optionally, can also have an icon. +class ValueRow extends StatelessWidget { + final String description; + final String value; + final IconData? icon; + const ValueRow({ + super.key, + required this.description, + required this.value, + this.icon, + }); + + @override + /// Builds the widget. + /// + /// The widget displays [value] on the right with a [description] on the left. + /// Optionally an [icon] can be specified before the [description]. + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible( + child: Row( + children: [ + if (icon != null) Icon(icon), + Flexible( + child: Text(description, overflow: TextOverflow.ellipsis), + ), + ], + ), + ), + Flexible(child: Text(value)), + ], + ); + } +} diff --git a/hems_application/linux/.gitignore b/hems_application/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/hems_application/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/hems_application/linux/CMakeLists.txt b/hems_application/linux/CMakeLists.txt new file mode 100644 index 0000000..c97a24f --- /dev/null +++ b/hems_application/linux/CMakeLists.txt @@ -0,0 +1,128 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "hems_app") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.hems_app") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/hems_application/linux/flutter/CMakeLists.txt b/hems_application/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/hems_application/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/hems_application/linux/runner/CMakeLists.txt b/hems_application/linux/runner/CMakeLists.txt new file mode 100644 index 0000000..e97dabc --- /dev/null +++ b/hems_application/linux/runner/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.13) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the application ID. +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") diff --git a/hems_application/linux/runner/main.cc b/hems_application/linux/runner/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/hems_application/linux/runner/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/hems_application/linux/runner/my_application.cc b/hems_application/linux/runner/my_application.cc new file mode 100644 index 0000000..2f6b083 --- /dev/null +++ b/hems_application/linux/runner/my_application.cc @@ -0,0 +1,130 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "hems_app"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "hems_app"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + // Set the program name to the application ID, which helps various systems + // like GTK and desktop environments map this running application to its + // corresponding .desktop file. This ensures better integration by allowing + // the application to be recognized beyond its binary name. + g_set_prgname(APPLICATION_ID); + + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/hems_application/linux/runner/my_application.h b/hems_application/linux/runner/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/hems_application/linux/runner/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/hems_application/macos/.gitignore b/hems_application/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/hems_application/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/hems_application/macos/Flutter/Flutter-Debug.xcconfig b/hems_application/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/hems_application/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/hems_application/macos/Flutter/Flutter-Release.xcconfig b/hems_application/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..c2efd0b --- /dev/null +++ b/hems_application/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/hems_application/macos/Runner.xcodeproj/project.pbxproj b/hems_application/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..dcf9e0f --- /dev/null +++ b/hems_application/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,705 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* hems_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "hems_app.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* hems_app.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* hems_app.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/hems_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/hems_app"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/hems_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/hems_app"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/hems_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/hems_app"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/hems_application/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/hems_application/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/hems_application/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/hems_application/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/hems_application/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..22d6931 --- /dev/null +++ b/hems_application/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hems_application/macos/Runner.xcworkspace/contents.xcworkspacedata b/hems_application/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1d526a1 --- /dev/null +++ b/hems_application/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/hems_application/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/hems_application/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/hems_application/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/hems_application/macos/Runner/AppDelegate.swift b/hems_application/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..b3c1761 --- /dev/null +++ b/hems_application/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 zcmeEugo5nb1G~3xi~y`}h6XHx5j$(L*3|5S2UfkG$|UCNI>}4f?MfqZ+HW-sRW5RKHEm z^unW*Xx{AH_X3Xdvb%C(Bh6POqg==@d9j=5*}oEny_IS;M3==J`P0R!eD6s~N<36C z*%-OGYqd0AdWClO!Z!}Y1@@RkfeiQ$Ib_ z&fk%T;K9h`{`cX3Hu#?({4WgtmkR!u3ICS~|NqH^fdNz>51-9)OF{|bRLy*RBv#&1 z3Oi_gk=Y5;>`KbHf~w!`u}!&O%ou*Jzf|Sf?J&*f*K8cftMOKswn6|nb1*|!;qSrlw= zr-@X;zGRKs&T$y8ENnFU@_Z~puu(4~Ir)>rbYp{zxcF*!EPS6{(&J}qYpWeqrPWW< zfaApz%<-=KqxrqLLFeV3w0-a0rEaz9&vv^0ZfU%gt9xJ8?=byvNSb%3hF^X_n7`(fMA;C&~( zM$cQvQ|g9X)1AqFvbp^B{JEX$o;4iPi?+v(!wYrN{L}l%e#5y{j+1NMiT-8=2VrCP zmFX9=IZyAYA5c2!QO96Ea-6;v6*$#ZKM-`%JCJtrA3d~6h{u+5oaTaGE)q2b+HvdZ zvHlY&9H&QJ5|uG@wDt1h99>DdHy5hsx)bN`&G@BpxAHh$17yWDyw_jQhhjSqZ=e_k z_|r3=_|`q~uA47y;hv=6-o6z~)gO}ZM9AqDJsR$KCHKH;QIULT)(d;oKTSPDJ}Jx~G#w-(^r<{GcBC*~4bNjfwHBumoPbU}M)O za6Hc2ik)2w37Yyg!YiMq<>Aov?F2l}wTe+>h^YXcK=aesey^i)QC_p~S zp%-lS5%)I29WfywP(r4@UZ@XmTkqo51zV$|U|~Lcap##PBJ}w2b4*kt7x6`agP34^ z5fzu_8rrH+)2u*CPcr6I`gL^cI`R2WUkLDE5*PX)eJU@H3HL$~o_y8oMRoQ0WF9w| z6^HZDKKRDG2g;r8Z4bn+iJNFV(CG;K-j2>aj229gl_C6n12Jh$$h!}KVhn>*f>KcH z;^8s3t(ccVZ5<{>ZJK@Z`hn_jL{bP8Yn(XkwfRm?GlEHy=T($8Z1Mq**IM`zxN9>-yXTjfB18m_$E^JEaYn>pj`V?n#Xu;Z}#$- zw0Vw;T*&9TK$tKI7nBk9NkHzL++dZ^;<|F6KBYh2+XP-b;u`Wy{~79b%IBZa3h*3^ zF&BKfQ@Ej{7ku_#W#mNJEYYp=)bRMUXhLy2+SPMfGn;oBsiG_6KNL8{p1DjuB$UZB zA)a~BkL)7?LJXlCc}bB~j9>4s7tlnRHC5|wnycQPF_jLl!Avs2C3^lWOlHH&v`nGd zf&U!fn!JcZWha`Pl-B3XEe;(ks^`=Z5R zWyQR0u|do2`K3ec=YmWGt5Bwbu|uBW;6D8}J3{Uep7_>L6b4%(d=V4m#(I=gkn4HT zYni3cnn>@F@Wr<hFAY3Y~dW+3bte;70;G?kTn4Aw5nZ^s5|47 z4$rCHCW%9qa4)4vE%^QPMGf!ET!^LutY$G zqdT(ub5T5b+wi+OrV}z3msoy<4)`IPdHsHJggmog0K*pFYMhH!oZcgc5a)WmL?;TPSrerTVPp<#s+imF3v#!FuBNNa`#6 z!GdTCF|IIpz#(eV^mrYKThA4Bnv&vQet@%v9kuRu3EHx1-2-it@E`%9#u`)HRN#M? z7aJ{wzKczn#w^`OZ>Jb898^Xxq)0zd{3Tu7+{-sge-rQ z&0PME&wIo6W&@F|%Z8@@N3)@a_ntJ#+g{pUP7i?~3FirqU`rdf8joMG^ld?(9b7Iv z>TJgBg#)(FcW)h!_if#cWBh}f+V08GKyg|$P#KTS&%=!+0a%}O${0$i)kn9@G!}En zv)_>s?glPiLbbx)xk(lD-QbY(OP3;MSXM5E*P&_`Zks2@46n|-h$Y2L7B)iH{GAAq19h5-y0q>d^oy^y+soJu9lXxAe%jcm?=pDLFEG2kla40e!5a}mpe zdL=WlZ=@U6{>g%5a+y-lx)01V-x;wh%F{=qy#XFEAqcd+m}_!lQ)-9iiOL%&G??t| z?&NSdaLqdPdbQs%y0?uIIHY7rw1EDxtQ=DU!i{)Dkn~c$LG5{rAUYM1j5*G@oVn9~ zizz{XH(nbw%f|wI=4rw^6mNIahQpB)OQy10^}ACdLPFc2@ldVi|v@1nWLND?)53O5|fg`RZW&XpF&s3@c-R?aad!$WoH6u0B|}zt)L($E^@U- zO#^fxu9}Zw7Xl~nG1FVM6DZSR0*t!4IyUeTrnp@?)Z)*!fhd3)&s(O+3D^#m#bAem zpf#*aiG_0S^ofpm@9O7j`VfLU0+{$x!u^}3!zp=XST0N@DZTp!7LEVJgqB1g{psNr za0uVmh3_9qah14@M_pi~vAZ#jc*&aSm$hCNDsuQ-zPe&*Ii#2=2gP+DP4=DY z_Y0lUsyE6yaV9)K)!oI6+*4|spx2at*30CAx~6-5kfJzQ`fN8$!lz%hz^J6GY?mVH zbYR^JZ(Pmj6@vy-&!`$5soyy-NqB^8cCT40&R@|6s@m+ZxPs=Bu77-+Os7+bsz4nA3DrJ8#{f98ZMaj-+BD;M+Jk?pgFcZIb}m9N z{ct9T)Kye&2>l^39O4Q2@b%sY?u#&O9PO4@t0c$NUXG}(DZJ<;_oe2~e==3Z1+`Zo zFrS3ns-c}ZognVBHbg#e+1JhC(Yq7==rSJQ8J~}%94(O#_-zJKwnBXihl#hUd9B_>+T& z7eHHPRC?5ONaUiCF7w|{J`bCWS7Q&xw-Sa={j-f)n5+I=9s;E#fBQB$`DDh<^mGiF zu-m_k+)dkBvBO(VMe2O4r^sf3;sk9K!xgXJU>|t9Vm8Ty;fl5pZzw z9j|}ZD}6}t;20^qrS?YVPuPRS<39d^y0#O1o_1P{tN0?OX!lc-ICcHI@2#$cY}_CY zev|xdFcRTQ_H)1fJ7S0*SpPs8e{d+9lR~IZ^~dKx!oxz?=Dp!fD`H=LH{EeC8C&z-zK$e=!5z8NL=4zx2{hl<5z*hEmO=b-7(k5H`bA~5gT30Sjy`@-_C zKM}^so9Ti1B;DovHByJkTK87cfbF16sk-G>`Q4-txyMkyQS$d}??|Aytz^;0GxvOs zPgH>h>K+`!HABVT{sYgzy3CF5ftv6hI-NRfgu613d|d1cg^jh+SK7WHWaDX~hlIJ3 z>%WxKT0|Db1N-a4r1oPKtF--^YbP=8Nw5CNt_ZnR{N(PXI>Cm$eqi@_IRmJ9#)~ZHK_UQ8mi}w^`+4$OihUGVz!kW^qxnCFo)-RIDbA&k-Y=+*xYv5y4^VQ9S)4W5Pe?_RjAX6lS6Nz#!Hry=+PKx2|o_H_3M`}Dq{Bl_PbP(qel~P@=m}VGW*pK96 zI@fVag{DZHi}>3}<(Hv<7cVfWiaVLWr@WWxk5}GDEbB<+Aj;(c>;p1qmyAIj+R!`@#jf$ zy4`q23L-72Zs4j?W+9lQD;CYIULt%;O3jPWg2a%Zs!5OW>5h1y{Qof!p&QxNt5=T( zd5fy&7=hyq;J8%86YBOdc$BbIFxJx>dUyTh`L z-oKa=OhRK9UPVRWS`o2x53bAv+py)o)kNL6 z9W1Dlk-g6Ht@-Z^#6%`9S9`909^EMj?9R^4IxssCY-hYzei^TLq7Cj>z$AJyaU5=z zl!xiWvz0U8kY$etrcp8mL;sYqGZD!Hs-U2N{A|^oEKA482v1T%cs%G@X9M?%lX)p$ zZoC7iYTPe8yxY0Jne|s)fCRe1mU=Vb1J_&WcIyP|x4$;VSVNC`M+e#oOA`#h>pyU6 z?7FeVpk`Hsu`~T3i<_4<5fu?RkhM;@LjKo6nX>pa%8dSdgPO9~Jze;5r>Tb1Xqh5q z&SEdTXevV@PT~!O6z|oypTk7Qq+BNF5IQ(8s18c=^0@sc8Gi|3e>VKCsaZ?6=rrck zl@oF5Bd0zH?@15PxSJIRroK4Wa?1o;An;p0#%ZJ^tI=(>AJ2OY0GP$E_3(+Zz4$AQ zW)QWl<4toIJ5TeF&gNXs>_rl}glkeG#GYbHHOv-G!%dJNoIKxn)FK$5&2Zv*AFic! z@2?sY&I*PSfZ8bU#c9fdIJQa_cQijnj39-+hS@+~e*5W3bj%A}%p9N@>*tCGOk+cF zlcSzI6j%Q|2e>QG3A<86w?cx6sBtLNWF6_YR?~C)IC6_10SNoZUHrCpp6f^*+*b8` zlx4ToZZuI0XW1W)24)92S)y0QZa);^NRTX6@gh8@P?^=#2dV9s4)Q@K+gnc{6|C}& zDLHr7nDOLrsH)L@Zy{C_2UrYdZ4V{|{c8&dRG;wY`u>w%$*p>PO_}3`Y21pk?8Wtq zGwIXTulf7AO2FkPyyh2TZXM1DJv>hI`}x`OzQI*MBc#=}jaua&czSkI2!s^rOci|V zFkp*Vbiz5vWa9HPFXMi=BV&n3?1?%8#1jq?p^3wAL`jgcF)7F4l<(H^!i=l-(OTDE zxf2p71^WRIExLf?ig0FRO$h~aA23s#L zuZPLkm>mDwBeIu*C7@n@_$oSDmdWY7*wI%aL73t~`Yu7YwE-hxAATmOi0dmB9|D5a zLsR7OQcA0`vN9m0L|5?qZ|jU+cx3_-K2!K$zDbJ$UinQy<9nd5ImWW5n^&=Gg>Gsh zY0u?m1e^c~Ug39M{{5q2L~ROq#c{eG8Oy#5h_q=#AJj2Yops|1C^nv0D1=fBOdfAG z%>=vl*+_w`&M7{qE#$xJJp_t>bSh7Mpc(RAvli9kk3{KgG5K@a-Ue{IbU{`umXrR3ra5Y7xiX42+Q%N&-0#`ae_ z#$Y6Wa++OPEDw@96Zz##PFo9sADepQe|hUy!Zzc2C(L`k9&=a8XFr+!hIS>D2{pdGP1SzwyaGLiH3j--P>U#TWw90t8{8Bt%m7Upspl#=*hS zhy|(XL6HOqBW}Og^tLX7 z+`b^L{O&oqjwbxDDTg2B;Yh2(fW>%S5Pg8^u1p*EFb z`(fbUM0`afawYt%VBfD&b3MNJ39~Ldc@SAuzsMiN%E}5{uUUBc7hc1IUE~t-Y9h@e7PC|sv$xGx=hZiMXNJxz5V(np%6u{n24iWX#!8t#>Ob$in<>dw96H)oGdTHnU zSM+BPss*5)Wz@+FkooMxxXZP1{2Nz7a6BB~-A_(c&OiM)UUNoa@J8FGxtr$)`9;|O z(Q?lq1Q+!E`}d?KemgC!{nB1JJ!B>6J@XGQp9NeQvtbM2n7F%v|IS=XWPVZY(>oq$ zf=}8O_x`KOxZoGnp=y24x}k6?gl_0dTF!M!T`={`Ii{GnT1jrG9gPh)R=RZG8lIR| z{ZJ6`x8n|y+lZuy${fuEDTAf`OP!tGySLXD}ATJO5UoZv|Xo3%7O~L63+kw}v)Ci=&tWx3bQJfL@5O18CbPlkR^IcKA zy1=^Vl-K-QBP?9^R`@;czcUw;Enbbyk@vJQB>BZ4?;DM%BUf^eZE+sOy>a){qCY6Y znYy;KGpch-zf=5|p#SoAV+ie8M5(Xg-{FoLx-wZC9IutT!(9rJ8}=!$!h%!J+vE2e z(sURwqCC35v?1>C1L)swfA^sr16{yj7-zbT6Rf26-JoEt%U?+|rQ zeBuGohE?@*!zR9)1P|3>KmJSgK*fOt>N>j}LJB`>o(G#Dduvx7@DY7};W7K;Yj|8O zGF<+gTuoIKe7Rf+LQG3-V1L^|E;F*}bQ-{kuHq}| ze_NwA7~US19sAZ)@a`g*zkl*ykv2v3tPrb4Og2#?k6Lc7@1I~+ew48N&03hW^1Cx+ zfk5Lr4-n=#HYg<7ka5i>2A@ZeJ60gl)IDX!!p zzfXZQ?GrT>JEKl7$SH!otzK6=0dIlqN)c23YLB&Krf9v-{@V8p+-e2`ujFR!^M%*; ze_7(Jh$QgoqwB!HbX=S+^wqO15O_TQ0-qX8f-|&SOuo3ZE{{9Jw5{}>MhY}|GBhO& zv48s_B=9aYQfa;d>~1Z$y^oUUaDer>7ve5+Gf?rIG4GZ!hRKERlRNgg_C{W_!3tsI2TWbX8f~MY)1Q`6Wj&JJ~*;ay_0@e zzx+mE-pu8{cEcVfBqsnm=jFU?H}xj@%CAx#NO>3 z_re3Rq%d1Y7VkKy{=S73&p;4^Praw6Y59VCP6M?!Kt7{v#DG#tz?E)`K95gH_mEvb z%$<~_mQ$ad?~&T=O0i0?`YSp?E3Dj?V>n+uTRHAXn`l!pH9Mr}^D1d@mkf+;(tV45 zH_yfs^kOGLXlN*0GU;O&{=awxd?&`{JPRr$z<1HcAO2K`K}92$wC}ky&>;L?#!(`w z68avZGvb728!vgw>;8Z8I@mLtI`?^u6R>sK4E7%=y)jpmE$fH!Dj*~(dy~-2A5Cm{ zl{1AZw`jaDmfvaB?jvKwz!GC}@-Dz|bFm1OaPw(ia#?>vF7Y5oh{NVbyD~cHB1KFn z9C@f~X*Wk3>sQH9#D~rLPslAd26@AzMh=_NkH_yTNXx6-AdbAb z{Ul89YPHslD?xAGzOlQ*aMYUl6#efCT~WI zOvyiewT=~l1W(_2cEd(8rDywOwjM-7P9!8GCL-1<9KXXO=6%!9=W++*l1L~gRSxLVd8K=A7&t52ql=J&BMQu{fa6y zXO_e>d?4X)xp2V8e3xIQGbq@+vo#&n>-_WreTTW0Yr?|YRPP43cDYACMQ(3t6(?_k zfgDOAU^-pew_f5U#WxRXB30wcfDS3;k~t@b@w^GG&<5n$Ku?tT(%bQH(@UHQGN)N|nfC~7?(etU`}XB)$>KY;s=bYGY#kD%i9fz= z2nN9l?UPMKYwn9bX*^xX8Y@%LNPFU>s#Ea1DaP%bSioqRWi9JS28suTdJycYQ+tW7 zrQ@@=13`HS*dVKaVgcem-45+buD{B;mUbY$YYULhxK)T{S?EB<8^YTP$}DA{(&)@S zS#<8S96y9K2!lG^VW-+CkfXJIH;Vo6wh)N}!08bM$I7KEW{F6tqEQ?H@(U zAqfi%KCe}2NUXALo;UN&k$rU0BLNC$24T_mcNY(a@lxR`kqNQ0z%8m>`&1ro40HX} z{{3YQ;2F9JnVTvDY<4)x+88i@MtXE6TBd7POk&QfKU-F&*C`isS(T_Q@}K)=zW#K@ zbXpcAkTT-T5k}Wj$dMZl7=GvlcCMt}U`#Oon1QdPq%>9J$rKTY8#OmlnNWBYwafhx zqFnym@okL#Xw>4SeRFejBnZzY$jbO)e^&&sHBgMP%Ygfi!9_3hp17=AwLBNFTimf0 zw6BHNXw19Jg_Ud6`5n#gMpqe%9!QB^_7wAYv8nrW94A{*t8XZu0UT&`ZHfkd(F{Px zD&NbRJP#RX<=+sEeGs2`9_*J2OlECpR;4uJie-d__m*(aaGE}HIo+3P{my@;a~9Y$ zHBXVJ83#&@o6{M+pE9^lI<4meLLFN_3rwgR4IRyp)~OF0n+#ORrcJ2_On9-78bWbG zuCO0esc*n1X3@p1?lN{qWS?l7J$^jbpeel{w~51*0CM+q9@9X=>%MF(ce~om(}?td zjkUmdUR@LOn-~6LX#=@a%rvj&>DFEoQscOvvC@&ZB5jVZ-;XzAshwx$;Qf@U41W=q zOSSjQGQV8Qi3*4DngNMIM&Cxm7z*-K`~Bl(TcEUxjQ1c=?)?wF8W1g;bAR%sM#LK( z_Op?=P%)Z+J!>vpN`By0$?B~Out%P}kCriDq@}In&fa_ZyKV+nLM0E?hfxuu%ciUz z>yAk}OydbWNl7{)#112j&qmw;*Uj&B;>|;Qwfc?5wIYIHH}s6Mve@5c5r+y)jK9i( z_}@uC(98g)==AGkVN?4>o@w=7x9qhW^ zB(b5%%4cHSV?3M?k&^py)j*LK16T^Ef4tb05-h-tyrjt$5!oo4spEfXFK7r_Gfv7#x$bsR7T zs;dqxzUg9v&GjsQGKTP*=B(;)be2aN+6>IUz+Hhw-n>^|`^xu*xvjGPaDoFh2W4-n z@Wji{5Y$m>@Vt7TE_QVQN4*vcfWv5VY-dT0SV=l=8LAEq1go*f zkjukaDV=3kMAX6GAf0QOQHwP^{Z^=#Lc)sh`QB)Ftl&31jABvq?8!3bt7#8vxB z53M{4{GR4Hl~;W3r}PgXSNOt477cO62Yj(HcK&30zsmWpvAplCtpp&mC{`2Ue*Bwu zF&UX1;w%`Bs1u%RtGPFl=&sHu@Q1nT`z={;5^c^^S~^?2-?<|F9RT*KQmfgF!7=wD@hytxbD;=9L6PZrK*1<4HMObNWehA62DtTy)q5H|57 z9dePuC!1;0MMRRl!S@VJ8qG=v^~aEU+}2Qx``h1LII!y{crP2ky*R;Cb;g|r<#ryo zju#s4dE?5CTIZKc*O4^3qWflsQ(voX>(*_JP7>Q&$%zCAIBTtKC^JUi@&l6u&t0hXMXjz_y!;r@?k|OU9aD%938^TZ>V? zqJmom_6dz4DBb4Cgs_Ef@}F%+cRCR%UMa9pi<-KHN;t#O@cA%(LO1Rb=h?5jiTs93 zPLR78p+3t>z4|j=<>2i4b`ketv}9Ax#B0)hn7@bFl;rDfP8p7u9XcEb!5*PLKB(s7wQC2kzI^@ae)|DhNDmSy1bOLid%iIap@24A(q2XI!z_hkl-$1T10 z+KKugG4-}@u8(P^S3PW4x>an;XWEF-R^gB{`t8EiP{ZtAzoZ!JRuMRS__-Gg#Qa3{<;l__CgsF+nfmFNi}p z>rV!Y6B@cC>1up)KvaEQiAvQF!D>GCb+WZsGHjDeWFz?WVAHP65aIA8u6j6H35XNYlyy8>;cWe3ekr};b;$9)0G`zsc9LNsQ&D?hvuHRpBxH)r-1t9|Stc*u<}Ol&2N+wPMom}d15_TA=Aprp zjN-X3*Af$7cDWMWp##kOH|t;c2Pa9Ml4-)o~+7P;&q8teF-l}(Jt zTGKOQqJTeT!L4d}Qw~O0aanA$Vn9Rocp-MO4l*HK)t%hcp@3k0%&_*wwpKD6ThM)R z8k}&7?)YS1ZYKMiy?mn>VXiuzX7$Ixf7EW8+C4K^)m&eLYl%#T=MC;YPvD&w#$MMf zQ=>`@rh&&r!@X&v%ZlLF42L_c=5dSU^uymKVB>5O?AouR3vGv@ei%Z|GX5v1GK2R* zi!!}?+-8>J$JH^fPu@)E6(}9$d&9-j51T^n-e0Ze%Q^)lxuex$IL^XJ&K2oi`wG}QVGk2a7vC4X?+o^z zsCK*7`EUfSuQA*K@Plsi;)2GrayQOG9OYF82Hc@6aNN5ulqs1Of-(iZQdBI^U5of^ zZg2g=Xtad7$hfYu6l~KDQ}EU;oIj(3nO#u9PDz=eO3(iax7OCmgT2p_7&^3q zg7aQ;Vpng*)kb6=sd5?%j5Dm|HczSChMo8HHq_L8R;BR5<~DVyU$8*Tk5}g0eW5x7 z%d)JFZ{(Y<#OTKLBA1fwLM*fH7Q~7Sc2Ne;mVWqt-*o<;| z^1@vo_KTYaMnO$7fbLL+qh#R$9bvnpJ$RAqG+z8h|} z3F5iwG*(sCn9Qbyg@t0&G}3fE0jGq3J!JmG2K&$urx^$z95) z7h?;4vE4W=v)uZ*Eg3M^6f~|0&T)2D;f+L_?M*21-I1pnK(pT$5l#QNlT`SidYw~o z{`)G)Asv#cue)Ax1RNWiRUQ(tQ(bzd-f2U4xlJK+)ZWBxdq#fp=A>+Qc%-tl(c)`t z$e2Ng;Rjvnbu7((;v4LF9Y1?0el9hi!g>G{^37{ z`^s-03Z5jlnD%#Mix19zkU_OS|86^_x4<0(*YbPN}mi-$L?Z4K(M|2&VV*n*ZYN_UqI?eKZi3!b)i z%n3dzUPMc-dc|q}TzvPy!VqsEWCZL(-eURDRG4+;Eu!LugSSI4Fq$Ji$Dp08`pfP_C5Yx~`YKcywlMG;$F z)R5!kVml_Wv6MSpeXjG#g?kJ0t_MEgbXlUN3k|JJ%N>|2xn8yN>>4qxh!?dGI}s|Y zDTKd^JCrRSN+%w%D_uf=Tj6wIV$c*g8D96jb^Kc#>5Fe-XxKC@!pIJw0^zu;`_yeb zhUEm-G*C=F+jW%cP(**b61fTmPn2WllBr4SWNdKe*P8VabZsh0-R|?DO=0x`4_QY) zR7sthW^*BofW7{Sak&S1JdiG?e=SfL24Y#w_)xrBVhGB-13q$>mFU|wd9Xqe-o3{6 zSn@@1@&^)M$rxb>UmFuC+pkio#T;mSnroMVZJ%nZ!uImi?%KsIX#@JU2VY(`kGb1A z7+1MEG)wd@)m^R|a2rXeviv$!emwcY(O|M*xV!9%tBzarBOG<4%gI9SW;Um_gth4=gznYzOFd)y8e+3APCkL)i-OI`;@7-mCJgE`js(M} z;~ZcW{{FMVVO)W>VZ}ILouF#lWGb%Couu}TI4kubUUclW@jEn6B_^v!Ym*(T*4HF9 zWhNKi8%sS~viSdBtnrq!-Dc5(G^XmR>DFx8jhWvR%*8!m*b*R8e1+`7{%FACAK`7 zzdy8TmBh?FVZ0vtw6npnWwM~XjF2fNvV#ZlGG z?FxHkXHN>JqrBYoPo$)zNC7|XrQfcqmEXWud~{j?La6@kbHG@W{xsa~l1=%eLly8B z4gCIH05&Y;6O2uFSopNqP|<$ml$N40^ikxw0`o<~ywS1(qKqQN!@?Ykl|bE4M?P+e zo$^Vs_+x)iuw?^>>`$&lOQOUkZ5>+OLnRA)FqgpDjW&q*WAe(_mAT6IKS9;iZBl8M z<@=Y%zcQUaSBdrs27bVK`c$)h6A1GYPS$y(FLRD5Yl8E3j0KyH08#8qLrsc_qlws; znMV%Zq8k+&T2kf%6ZO^2=AE9>?a587g%-={X}IS~P*I(NeCF9_9&`)|ok0iiIun zo+^odT0&Z4k;rn7I1v87=z!zKU(%gfB$(1mrRYeO$sbqM22Kq68z9wgdg8HBxp>_< zn9o%`f?sVO=IN#5jSX&CGODWlZfQ9A)njK2O{JutYwRZ?n0G_p&*uwpE`Md$iQxrd zoQfF^b8Ou)+3BO_3_K5y*~?<(BF@1l+@?Z6;^;U>qlB)cdro;rxOS1M{Az$s^9o5sXDCg8yD<=(pKI*0e zLk>@lo#&s0)^*Q+G)g}C0IErqfa9VbL*Qe=OT@&+N8m|GJF7jd83vY#SsuEv2s{Q> z>IpoubNs>D_5?|kXGAPgF@mb_9<%hjU;S0C8idI)a=F#lPLuQJ^7OnjJlH_Sks9JD zMl1td%YsWq3YWhc;E$H1<0P$YbSTqs`JKY%(}svsifz|h8BHguL82dBl+z0^YvWk8 zGy;7Z0v5_FJ2A$P0wIr)lD?cPR%cz>kde!=W%Ta^ih+Dh4UKdf7ip?rBz@%y2&>`6 zM#q{JXvW9ZlaSk1oD!n}kSmcDa2v6T^Y-dy+#fW^y>eS8_%<7tWXUp8U@s$^{JFfKMjDAvR z$YmVB;n3ofl!ro9RNT!TpQpcycXCR}$9k5>IPWDXEenQ58os?_weccrT+Bh5sLoiH zZ_7~%t(vT)ZTEO= zb0}@KaD{&IyK_sd8b$`Qz3%UA`nSo zn``!BdCeN!#^G;lK@G2ron*0jQhbdw)%m$2;}le@z~PSLnU-z@tL)^(p%P>OO^*Ff zNRR9oQ`W+x^+EU+3BpluwK77|B3=8QyT|$V;02bn_LF&3LhLA<#}{{)jE)}CiW%VEU~9)SW+=F%7U-iYlQ&q!#N zwI2{(h|Pi&<8_fqvT*}FLN^0CxN}#|3I9G_xmVg$gbn2ZdhbmGk7Q5Q2Tm*ox8NMo zv`iaZW|ZEOMyQga5fts?&T-eCCC9pS0mj7v0SDkD=*^MxurP@89v&Z#3q{FM!a_nr zb?KzMv`BBFOew>4!ft@A&(v-kWXny-j#egKef|#!+3>26Qq0 zv!~8ev4G`7Qk>V1TaMT-&ziqoY3IJp8_S*%^1j73D|=9&;tDZH^!LYFMmME4*Wj(S zRt~Q{aLb_O;wi4u&=}OYuj}Lw*j$@z*3>4&W{)O-oi@9NqdoU!=U%d|se&h?^$Ip# z)BY+(1+cwJz!yy4%l(aLC;T!~Ci>yAtXJb~b*yr&v7f{YCU8P|N1v~H`xmGsG)g)y z4%mv=cPd`s7a*#OR7f0lpD$ueP>w8qXj0J&*7xX+U!uat5QNk>zwU$0acn5p=$88L=jn_QCSYkTV;1~(yUem#0gB`FeqY98sf=>^@ z_MCdvylv~WL%y_%y_FE1)j;{Szj1+K7Lr_y=V+U zk6Tr;>XEqlEom~QGL!a+wOf(@ZWoxE<$^qHYl*H1a~kk^BLPn785%nQb$o;Cuz0h& za9LMx^bKEbPS%e8NM33Jr|1T|ELC(iE!FUci38xW_Y7kdHid#2ie+XZhP;2!Z;ZAM zB_cXKm)VrPK!SK|PY00Phwrpd+x0_Aa;}cDQvWKrwnQrqz##_gvHX2ja?#_{f#;bz`i>C^^ zTLDy;6@HZ~XQi7rph!mz9k!m;KchA)uMd`RK4WLK7)5Rl48m#l>b(#`WPsl<0j z-sFkSF6>Nk|LKnHtZ`W_NnxZP62&w)S(aBmmjMDKzF%G;3Y?FUbo?>b5;0j8Lhtc4 zr*8d5Y9>g@FFZaViw7c16VsHcy0u7M%6>cG1=s=Dtx?xMJSKIu9b6GU8$uSzf43Y3 zYq|U+IWfH;SM~*N1v`KJo!|yfLxTFS?oHsr3qvzeVndVV^%BWmW6re_S!2;g<|Oao z+N`m#*i!)R%i1~NO-xo{qpwL0ZrL7hli;S z3L0lQ_z}z`fdK39Mg~Zd*%mBdD;&5EXa~@H(!###L`ycr7gW`f)KRuqyHL3|uyy3h zSS^td#E&Knc$?dXs*{EnPYOp^-vjAc-h4z#XkbG&REC7;0>z^^Z}i8MxGKerEY z>l?(wReOlXEsNE5!DO&ZWyxY)gG#FSZs%fXuzA~XIAPVp-%yb2XLSV{1nH6{)5opg z(dZKckn}Q4Li-e=eUDs1Psg~5zdn1>ql(*(nn6)iD*OcVkwmKL(A{fix(JhcVB&}V zVt*Xb!{gzvV}dc446>(D=SzfCu7KB`oMjv6kPzSv&B>>HLSJP|wN`H;>oRw*tl#N) z*zZ-xwM7D*AIsBfgqOjY1Mp9aq$kRa^dZU_xw~KxP;|q(m+@e+YSn~`wEJzM|Ippb zzb@%;hB7iH4op9SqmX?j!KP2chsb79(mFossBO-Zj8~L}9L%R%Bw<`^X>hjkCY5SG z7lY!8I2mB#z)1o;*3U$G)3o0A&{0}#B;(zPd2`OF`Gt~8;0Re8nIseU z_yzlf$l+*-wT~_-cYk$^wTJ@~7i@u(CZs9FVkJCru<*yK8&>g+t*!JqCN6RH%8S-P zxH8+Cy#W?!;r?cLMC(^BtAt#xPNnwboI*xWw#T|IW^@3|q&QYY6Ehxoh@^URylR|T zne-Y6ugE^7p5bkRDWIh)?JH5V^ub82l-LuVjDr7UT^g`q4dB&mBFRWGL_C?hoeL(% zo}ocH5t7|1Mda}T!^{Qt9vmA2ep4)dQSZO>?Eq8}qRp&ZJ?-`Tnw+MG(eDswP(L*X3ahC2Ad0_wD^ff9hfzb%Jd`IXx5 zae@NMzBXJDwJS?7_%!TB^E$N8pvhOHDK$7YiOelTY`6KX8hK6YyT$tk*adwN>s^Kp zwM3wGVPhwKU*Yq-*BCs}l`l#Tej(NQ>jg*S0TN%D+GcF<14Ms6J`*yMY;W<-mMN&-K>((+P}+t+#0KPGrzjP zJ~)=Bcz%-K!L5ozIWqO(LM)l_9lVOc4*S65&DKM#TqsiWNG{(EZQw!bc>qLW`=>p-gVJ;T~aN2D_- z{>SZC=_F+%hNmH6ub%Ykih0&YWB!%sd%W5 zHC2%QMP~xJgt4>%bU>%6&uaDtSD?;Usm}ari0^fcMhi_)JZgb1g5j zFl4`FQ*%ROfYI}e7RIq^&^a>jZF23{WB`T>+VIxj%~A-|m=J7Va9FxXV^%UwccSZd zuWINc-g|d6G5;95*%{e;9S(=%yngpfy+7ao|M7S|Jb0-4+^_q-uIqVS&ufU880UDH*>(c)#lt2j zzvIEN>>$Y(PeALC-D?5JfH_j+O-KWGR)TKunsRYKLgk7eu4C{iF^hqSz-bx5^{z0h ze2+u>Iq0J4?)jIo)}V!!m)%)B;a;UfoJ>VRQ*22+ncpe9f4L``?v9PH&;5j{WF?S_C>Lq>nkChZB zjF8(*v0c(lU^ZI-)_uGZnnVRosrO4`YinzI-RSS-YwjYh3M`ch#(QMNw*)~Et7Qpy z{d<3$4FUAKILq9cCZpjvKG#yD%-juhMj>7xIO&;c>_7qJ%Ae8Z^m)g!taK#YOW3B0 zKKSMOd?~G4h}lrZbtPk)n*iOC1~mDhASGZ@N{G|dF|Q^@1ljhe=>;wusA&NvY*w%~ zl+R6B^1yZiF)YN>0ms%}qz-^U-HVyiN3R9k1q4)XgDj#qY4CE0)52%evvrrOc898^ z*^)XFR?W%g0@?|6Mxo1ZBp%(XNv_RD-<#b^?-Fs+NL^EUW=iV|+Vy*F%;rBz~pN7%-698U-VMfGEVnmEz7fL1p)-5sLT zL;Iz>FCLM$p$c}g^tbkGK1G$IALq1Gd|We@&TtW!?4C7x4l*=4oF&&sr0Hu`x<5!m zhX&&Iyjr?AkNXU_5P_b^Q3U9sy#f6ZF@2C96$>1k*E-E%DjwvA{VL0PdU~suN~DZo zm{T!>sRdp`Ldpp9olrH@(J$QyGq!?#o1bUo=XP2OEuT3`XzI>s^0P{manUaE4pI%! zclQq;lbT;nx7v3tR9U)G39h?ryrxzd0xq4KX7nO?piJZbzT_CU&O=T(Vt;>jm?MgC z2vUL#*`UcMsx%w#vvjdamHhmN!(y-hr~byCA-*iCD};#l+bq;gkwQ0oN=AyOf@8ow>Pj<*A~2*dyjK}eYdN);%!t1 z6Y=|cuEv-|5BhA?n2Db@4s%y~(%Wse4&JXw=HiO48%c6LB~Z0SL1(k^9y?ax%oj~l zf7(`iAYLdPRq*ztFC z7VtAb@s{as%&Y;&WnyYl+6Wm$ru*u!MKIg_@01od-iQft0rMjIj8e7P9eKvFnx_X5 zd%pDg-|8<>T2Jdqw>AII+fe?CgP+fL(m0&U??QL8YzSjV{SFi^vW~;wN@or_(q<0Y zRt~L}#JRcHOvm$CB)T1;;7U>m%)QYBLTR)KTARw%zoDxgssu5#v{UEVIa<>{8dtkm zXgbCGp$tfue+}#SD-PgiNT{Zu^YA9;4BnM(wZ9-biRo_7pN}=aaimjYgC=;9@g%6< zxol5sT_$<8{LiJ6{l1+sV)Z_QdbsfEAEMw!5*zz6)Yop?T0DMtR_~wfta)E6_G@k# zZRP11D}$ir<`IQ`<(kGfAS?O-DzCyuzBq6dxGTNNTK?r^?zT30mLY!kQ=o~Hv*k^w zvq!LBjW=zzIi%UF@?!g9vt1CqdwV(-2LYy2=E@Z?B}JDyVkluHtzGsWuI1W5svX~K z&?UJ45$R7g>&}SFnLnmw09R2tUgmr_w6mM9C}8GvQX>nL&5R#xBqnp~Se(I>R42`T zqZe9p6G(VzNB3QD><8+y%{e%6)sZDRXTR|MI zM#eZmao-~_`N|>Yf;a;7yvd_auTG#B?Vz5D1AHx=zpVUFe7*hME z+>KH5h1In8hsVhrstc>y0Q!FHR)hzgl+*Q&5hU9BVJlNGRkXiS&06eOBV^dz3;4d5 zeYX%$62dNOprZV$px~#h1RH?_E%oD6y;J;pF%~y8M)8pQ0olYKj6 zE+hd|7oY3ot=j9ZZ))^CCPADL6Jw%)F@A{*coMApcA$7fZ{T@3;WOQ352F~q6`Mgi z$RI6$8)a`Aaxy<8Bc;{wlDA%*%(msBh*xy$L-cBJvQ8hj#FCyT^%+Phw1~PaqyDou^JR0rxDkSrmAdjeYDFDZ`E z)G3>XtpaSPDlydd$RGHg;#4|4{aP5c_Om z2u5xgnhnA)K%8iU==}AxPxZCYC)lyOlj9as#`5hZ=<6<&DB%i_XCnt5=pjh?iusH$ z>)E`@HNZcAG&RW3Ys@`Ci{;8PNzE-ZsPw$~Wa!cP$ye+X6;9ceE}ah+3VY7Mx}#0x zbqYa}eO*FceiY2jNS&2cH9Y}(;U<^^cWC5Ob&)dZedvZA9HewU3R;gRQ)}hUdf+~Q zS_^4ds*W1T#bxS?%RH&<739q*n<6o|mV;*|1s>ly-Biu<2*{!!0#{_234&9byvn0* z5=>{95Zfb{(?h_Jk#ocR$FZ78O*UTOxld~0UF!kyGM|nH%B*qf)Jy}N!uT9NGeM19 z-@=&Y0yGGo_dw!FD>juk%P$6$qJkj}TwLBoefi;N-$9LAeV|)|-ET&culW9Sb_pc_ zp{cXI0>I0Jm_i$nSvGnYeLSSj{ccVS2wyL&0x~&5v;3Itc82 z5lIAkfn~wcY-bQB$G!ufWt%qO;P%&2B_R5UKwYxMemIaFm)qF1rA zc>gEihb=jBtsXCi0T%J37s&kt*3$s7|6)L(%UiY)6axuk{6RWIS8^+u;)6!R?Sgap z9|6<0bx~AgVi|*;zL@2x>Pbt2Bz*uv4x-`{F)XatTs`S>unZ#P^ZiyjpfL_q2z^fqgR-fbOcG=Y$q>ozkw1T6dH8-)&ww+z?E0 zR|rV(9bi6zpX3Ub>PrPK!{X>e$C66qCXAeFm)Y+lX8n2Olt7PNs*1^si)j!QmFV#t z0P2fyf$N^!dyTot&`Ew5{i5u<8D`8U`qs(KqaWq5iOF3x2!-z65-|HsyYz(MAKZ?< zCpQR;E)wn%s|&q(LVm0Ab>gdmCFJeKwVTnv@Js%!At;I=A>h=l=p^&<4;Boc{$@h< z38v`3&2wJtka@M}GS%9!+SpJ}sdtoYzMevVbnH+d_eMxN@~~ zZq@k)7V5f8u!yAX2qF3qjS7g%n$JuGrMhQF!&S^7(%Y{rP*w2FWj(v_J{+Hg*}wdWOd~pHQ19&n3RWeljK9W%sz&Y3Tm3 zR`>6YR54%qBHGa)2xbs`9cs_EsNHxsfraEgZ)?vrtooeA0sPKJK7an){ngtV@{SBa zkO6ORr1_Xqp+`a0e}sC*_y(|RKS13ikmHp3C^XkE@&wjbGWrt^INg^9lDz#B;bHiW zkK4{|cg08b!yHFSgPca5)vF&gqCgeu+c82%&FeM^Bb}GUxLy-zo)}N;#U?sJ2?G2BNe*9u_7kE5JeY!it=f`A_4gV3} z`M!HXZy#gN-wS!HvHRqpCHUmjiM;rVvpkC!voImG%OFVN3k(QG@X%e``VJSJ@Z7tb z*Onlf>z^D+&$0!4`IE$;2-NSO9HQWd+UFW(r;4hh;(j^p4H-~6OE!HQp^96v?{9Zt z;@!ZcccV%C2s6FMP#qvo4kG6C04A>XILt>JW}%0oE&HM5f6 zYLD!;My>CW+j<~=Wzev{aYtx2ZNw|ptTFV(4;9`6Tmbz6K1)fv4qPXa2mtoPt&c?P zhmO+*o8uP3ykL6E$il00@TDf6tOW7fmo?Oz_6GU^+5J=c22bWyuH#aNj!tT-^IHrJ zu{aqTYw@q;&$xDE*_kl50Jb*dp`(-^p={z}`rqECTi~3 z>0~A7L6X)=L5p#~$V}gxazgGT7$3`?a)zen>?TvAuQ+KAIAJ-s_v}O6@`h9n-sZk> z`3{IJeb2qu9w=P*@q>iC`5wea`KxCxrx{>(4{5P+!cPg|pn~;n@DiZ0Y>;k5mnKeS z!LIfT4{Lgd=MeysR5YiQKCeNhUQ;Os1kAymg6R!u?j%LF z4orCszIq_n52ulpes{(QN|zirdtBsc{9^Z72Ycb2ht?G^opkT_#|4$wa9`)8k3ilU z%ntAi`nakS1r10;#k^{-ZGOD&Z2|k=p40hRh5D7(&JG#Cty|ECOvwsSHkkSa)36$4 z?;v#%@D(=Raw(HP5s>#4Bm?f~n1@ebH}2tv#7-0l-i^H#H{PC|F@xeNS+Yw{F-&wH z07)bj8MaE6`|6NoqKM~`4%X> zKFl&7g1$Z3HB>lxn$J`P`6GSb6CE6_^NA1V%=*`5O!zP$a7Vq)IwJAki~XBLf=4TF zPYSL}>4nOGZ`fyHChq)jy-f{PKFp6$plHB2=;|>%Z^%)ecVue(*mf>EH_uO^+_zm? zJATFa9SF~tFwR#&0xO{LLf~@}s_xvCPU8TwIJgBs%FFzjm`u?1699RTui;O$rrR{# z1^MqMl5&6)G%@_k*$U5Kxq84!AdtbZ!@8FslBML}<`(Jr zenXrC6bFJP=R^FMBg7P?Pww-!a%G@kJH_zezKvuWU0>m1uyy}#Vf<$>u?Vzo3}@O% z1JR`B?~Tx2)Oa|{DQ_)y9=oY%haj!80GNHw3~qazgU-{|q+Bl~H94J!a%8UR?XsZ@ z0*ZyQugyru`V9b(0OrJOKISfi89bSVR zQy<+i_1XY}4>|D%X_`IKZUPz6=TDb)t1mC9eg(Z=tv zq@|r37AQM6A%H%GaH3szv1L^ku~H%5_V*fv$UvHl*yN4iaqWa69T2G8J2f3kxc7UE zOia@p0YNu_q-IbT%RwOi*|V|&)e5B-u>4=&n@`|WzH}BK4?33IPpXJg%`b=dr_`hU z8JibW_3&#uIN_#D&hX<)x(__jUT&lIH$!txEC@cXv$7yB&Rgu){M`9a`*PH} zRcU)pMWI2O?x;?hzR{WdzKt^;_pVGJAKKd)F$h;q=Vw$MP1XSd<;Mu;EU5ffyKIg+ z&n-Nb?h-ERN7(fix`htopPIba?0Gd^y(4EHvfF_KU<4RpN0PgVxt%7Yo99X*Pe|zR z?ytK&5qaZ$0KSS$3ZNS$$k}y(2(rCl=cuYZg{9L?KVgs~{?5adxS))Upm?LDo||`H zV)$`FF3icFmxcQshXX*1k*w3O+NjBR-AuE70=UYM*7>t|I-oix=bzDwp2*RoIwBp@r&vZukG; zyi-2zdyWJ3+E?{%?>e2Ivk`fAn&Ho(KhGSVE4C-zxM-!j01b~mTr>J|5={PrZHOgO zw@ND3=z(J7D>&C7aw{zT>GHhL2BmUX0GLt^=31RRPSnjoUO9LYzh_yegyPoAKhAQE z>#~O27dR4&LdQiak6={9_{LN}Z>;kyVYKH^d^*!`JVSXJlx#&r4>VnP$zb{XoTb=> zZsLvh>keP3fkLTIDdpf-@(ADfq4=@X=&n>dyU0%dwD{zsjCWc;r`-e~X$Q3NTz_TJ zOXG|LMQQIjGXY3o5tBm9>k6y<6XNO<=9H@IXF;63rzsC=-VuS*$E{|L_i;lZmHOD< zY92;>4spdeRn4L6pY4oUKZG<~+8U-q7ZvNOtW0i*6Q?H`9#U3M*k#4J;ek(MwF02x zUo1wgq9o6XG#W^mxl>pAD)Ll-V5BNsdVQ&+QS0+K+?H-gIBJ-ccB1=M_hxB6qcf`C zJ?!q!J4`kLhAMry4&a_0}up{CFevcjBl|N(uDM^N5#@&-nQt2>z*U}eJGi}m5f}l|IRVj-Q;a>wcLpK5RRWJ> zysdd$)Nv0tS?b~bw1=gvz3L_ZAIdDDPj)y|bp1;LE`!av!rODs-tlc}J#?erTgXRX z$@ph%*~_wr^bQYHM7<7=Q=45v|Hk7T=mDpW@OwRy3A_v`ou@JX5h!VI*e((v*5Aq3 zVYfB4<&^Dq5%^?~)NcojqK`(VXP$`#w+&VhQOn%;4pCkz;NEH6-FPHTQ+7I&JE1+Ozq-g43AEZV>ceQ^9PCx zZG@OlEF~!Lq@5dttlr%+gNjRyMwJdJU(6W_KpuVnd{3Yle(-p#6erIRc${l&qx$HA z89&sp=rT7MJ=DuTL1<5{)wtUfpPA|Gr6Q2T*=%2RFm@jyo@`@^*{5{lFPgv>84|pv z%y{|cVNz&`9C*cUely>-PRL)lHVErAKPO!NQ3<&l5(>Vp(MuJnrOf^4qpIa!o3D7( z1bjn#Vv$#or|s7Hct5D@%;@48mM%ISY7>7@ft8f?q~{s)@BqGiupoK1BAg?PyaDQ1 z`YT8{0Vz{zBwJ={I4)#ny{RP{K1dqzAaQN_aaFC%Z>OZ|^VhhautjDavGtsQwx@WH zr|1UKk^+X~S*RjCY_HN!=Jx>b6J8`Q(l4y|mc<6jnkHVng^Wk(A13-;AhawATsmmE#H%|8h}f1frs2x@Fwa_|ea+$tdG2Pz{7 z!ox^w^>^Cv4e{Xo7EQ7bxCe8U+LZG<_e$RnR?p3t?s^1Mb!ieB z#@45r*PTc_yjh#P=O8Zogo+>1#|a2nJvhOjIqKK1U&6P)O%5s~M;99O<|Y9zomWTL z666lK^QW`)cXV_^Y05yQZH3IRCW%25BHAM$c0>w`x!jh^15Zp6xYb!LoQ zr+RukTw0X2mxN%K0%=8|JHiaA3pg5+GMfze%9o5^#upx0M?G9$+P^DTx7~qq9$Qoi zV$o)yy zuUq>3c{_q+HA5OhdN*@*RkxRuD>Bi{Ttv_hyaaB;XhB%mJ2Cb{yL;{Zu@l{N?!GKE7es6_9J{9 zO(tmc0ra2;@oC%SS-8|D=omQ$-Dj>S)Utkthh{ovD3I%k}HoranSepC_yco2Q8 zY{tAuPIhD{X`KbhQIr%!t+GeH%L%q&p z3P%<-S0YY2Emjc~Gb?!su85}h_qdu5XN2XJUM}X1k^!GbwuUPT(b$Ez#LkG6KEWQB z7R&IF4srHe$g2R-SB;inW9T{@+W+~wi7VQd?}7||zi!&V^~o0kM^aby7YE_-B63^d zf_uo8#&C77HBautt_YH%v6!Q>H?}(0@4pv>cM6_7dHJ)5JdyV0Phi!)vz}dv{*n;t zf(+#Hdr=f8DbJqbMez)(n>@QT+amJ7g&w6vZ-vG^H1v~aZqG~u!1D(O+jVAG0EQ*aIsr*bsBdbD`)i^FNJ z&B@yxqPFCRGT#}@dmu-{0vp47xk(`xNM6E=7QZ5{tg6}#zFrd8Pb_bFg7XP{FsYP8 zbvWqG6#jfg*4gvY9!gJxJ3l2UjP}+#QMB(*(?Y&Q4PO`EknE&Cb~Yb@lCbk;-KY)n zzbjS~W5KZ3FV%y>S#$9Sqi$FIBCw`GfPDP|G=|y32VV-g@a1D&@%_oAbB@cAUx#aZ zlAPTJ{iz#Qda8(aNZE&0q+8r3&z_Ln)b=5a%U|OEcc3h1f&8?{b8ErEbilrun}mh3 z$1o^$-XzIiH|iGoJA`w`o|?w3m*NX|sd$`Mt+f*!hyJvQ2fS*&!SYn^On-M|pHGlu z4SC5bM7f6BAkUhGuN*w`97LLkbCx=p@K5RL2p>YpDtf{WTD|d3ucb6iVZ-*DRtoEA zCC5(x)&e=giR_id>5bE^l%Mxx>0@FskpCD4oq@%-Fg$8IcdRwkfn;DsjoX(v;mt3d z_4Mnf#Ft4x!bY!7Hz?RRMq9;5FzugD(sbt4up~6j?-or+ch~y_PqrM2hhTToJjR_~ z)E1idgt7EW>G*9%Q^K;o_#uFjX!V2pwfpgi>}J&p_^QlZki!@#dkvR`p?bckC`J*g z=%3PkFT3HAX2Q+dShHUbb1?ZcK8U7oaufLTCB#1W{=~k0Jabgv>q|H+GU=f-y|{p4 zwN|AE+YbCgx=7vlXE?@gkXW9PaqbO#GB=4$o0FkNT#EI?aLVd2(qnPK$Yh%YD%v(mdwn}bgsxyIBI^)tY?&G zi^2JfClZ@4b{xFjyTY?D61w@*ez2@5rWLpG#34id?>>oPg{`4F-l`7Lg@D@Hc}On} zx%BO4MsLYosLGACJ-d?ifZ35r^t*}wde>AAWO*J-X%jvD+gL9`u`r=kP zyeJ%FqqKfz8e_3K(M1RmB?gIYi{W7Z<THP2ihue0mbpu5n(x_l|e1tw(q!#m5lmef6ktqIb${ zV+ee#XRU}_dDDUiV@opHZ@EbQ<9qIZJMDsZDkW0^t3#j`S)G#>N^ZBs8k+FJhAfu< z%u!$%dyP3*_+jUvCf-%{x#MyDAK?#iPfE<(@Q0H7;a125eD%I(+!x1f;Sy`e<9>nm zQH4czZDQmW7^n>jL)@P@aAuAF$;I7JZE5a8~AJI5CNDqyf$gjloKR7C?OPt9yeH}n5 zNF8Vhmd%1O>T4EZD&0%Dt7YWNImmEV{7QF(dy!>q5k>Kh&Xy8hcBMUvVV~Xn8O&%{ z&q=JCYw#KlwM8%cu-rNadu(P~i3bM<_a{3!J*;vZhR6dln6#eW0^0kN)Vv3!bqM`w z{@j*eyzz=743dgFPY`Cx3|>ata;;_hQ3RJd+kU}~p~aphRx`03B>g4*~f%hUV+#D9rYRbsGD?jkB^$3XcgB|3N1L& zrmk9&Dg450mAd=Q_p?gIy5Zx7vRL?*rpNq76_rysFo)z)tp0B;7lSb9G5wX1vC9Lc z5Q8tb-alolVNWFsxO_=12o}X(>@Mwz1mkYh1##(qQwN=7VKz?61kay8A9(94Ky(4V zq6qd2+4a20Z0QRrmp6C?4;%U?@MatfXnkj&U6bP_&2Ny}BF%4{QhNx*Tabik9Y-~Z z@0WV6XD}aI(%pN}oW$X~Qo_R#+1$@J8(31?zM`#e`#(0f<-AZ^={^NgH#lc?oi(Mu zMk|#KR^Q;V@?&(sh5)D;-fu)rx%gXZ1&5)MR+Mhssy+W>V%S|PRNyTAd}74<(#J>H zR(1BfM%eIv0+ngHH6(i`?-%_4!6PpK*0X)79SX0X$`lv_q>9(E2kkkP;?c@rW2E^Q zs<;`9dg|lDMNECFrD3jTM^Mn-C$44}9d9Kc z#>*k&e#25;D^%82^1d@Yt{Y91MbEu0C}-;HR4+IaCeZ`l?)Q8M2~&E^FvJ?EBJJ(% zz1>tCW-E~FB}DI}z#+fUo+=kQME^=eH>^%V8w)dh*ugPFdhMUi3R2Cg}Zak4!k_8YW(JcR-)hY8C zXja}R7@%Q0&IzQTk@M|)2ViZDNCDRLNI)*lH%SDa^2TG4;%jE4n`8`aQAA$0SPH2@ z)2eWZuP26+uGq+m8F0fZn)X^|bNe z#f{qYZS!(CdBdM$N2(JH_a^b#R2=>yVf%JI_ieRFB{w&|o9txwMrVxv+n78*aXFGb z>Rkj2yq-ED<)A46T9CL^$iPynv`FoEhUM10@J+UZ@+*@_gyboQ>HY9CiwTUo7OM=w zd~$N)1@6U8H#Zu(wGLa_(Esx%h@*pmm5Y9OX@CY`3kPYPQx@z8yAgtm(+agDU%4?c zy8pR4SYbu8vY?JX6HgVq7|f=?w(%`m-C+a@E{euXo>XrGmkmFGzktI*rj*8D z)O|CHKXEzH{~iS+6)%ybRD|JRQ6j<+u_+=SgnJP%K+4$st+~XCVcAjI9e5`RYq$n{ zzy!X9Nv7>T4}}BZpSj9G9|(4ei-}Du<_IZw+CB`?fd$w^;=j8?vlp(#JOWiHaXJjB0Q00RHJ@sG6N#y^H7t^&V} z;VrDI4?75G$q5W9mV=J2iP24NHJy&d|HWHva>FaS#3AO?+ohh1__FMx;?`f{HG3v0 ztiO^Wanb>U4m9eLhoc_2B(ca@YdnHMB*~aYO+AE(&qh@?WukLbf_y z>*3?Xt-lxr?#}y%kTv+l8;!q?Hq8XSU+1E8x~o@9$)zO2z9K#(t`vPDri`mKhv|sh z{KREcy`#pnV>cTT7dm7M9B@9qJRt3lfo(C`CNkIq@>|2<(yn!AmVN?ST zbX_`JjtWa3&N*U{K7FYX8})*D#2@KBae` zhKS~s!r%SrXdhCsv~sF}7?ocyS?afya6%rDBu6g^b2j#TOGp^1zrMR}|70Z>CeYq- z1o|-=FBKlu{@;pm@QQJ_^!&hzi;0Z_Ho){x3O1KQ#TYk=rAt9`YKC0Y^}8GWIN{QW znYJyVTrmNvl!L=YS1G8BAxGmMUPi+Q7yb0XfG`l+L1NQVSbe^BICYrD;^(rke{jWCEZOtVv3xFze!=Z&(7}!)EcN;v0Dbit?RJ6bOr;N$ z=nk8}H<kCEE+IK3z<+3mkn4q!O7TMWpKShWWWM)X*)m6k%3luF6c>zOsFccvfLWf zH+mNkh!H@vR#~oe=ek}W3!71z$Dlj0c(%S|sJr>rvw!x;oCek+8f8s!U{DmfHcNpO z9>(IKOMfJwv?ey`V2ysSx2Npeh_x#bMh)Ngdj$al;5~R7Ac5R2?*f{hI|?{*$0qU- zY$6}ME%OGh^zA^z9zJUs-?a4ni8cw_{cYED*8x{bWg!Fn9)n;E9@B+t;#k}-2_j@# zg#b%R(5_SJAOtfgFCBZc`n<&z6)%nOIu@*yo!a% zpLg#36KBN$01W{b;qWN`Tp(T#jh%;Zp_zpS64lvBVY2B#UK)p`B4Oo)IO3Z&D6<3S zfF?ZdeNEnzE{}#gyuv)>;z6V{!#bx)` zY;hL*f(WVD*D9A4$WbRKF2vf;MoZVdhfWbWhr{+Db5@M^A4wrFReuWWimA4qp`GgoL2`W4WPUL5A=y3Y3P z%G?8lLUhqo@wJW8VDT`j&%YY7xh51NpVYlsrk_i4J|pLO(}(b8_>%U2M`$iVRDc-n zQiOdJbroQ%*vhN{!{pL~N|cfGooK_jTJCA3g_qs4c#6a&_{&$OoSQr_+-O^mKP=Fu zGObEx`7Qyu{nHTGNj(XSX*NPtAILL(0%8Jh)dQh+rtra({;{W2=f4W?Qr3qHi*G6B zOEj7%nw^sPy^@05$lOCjAI)?%B%&#cZ~nC|=g1r!9W@C8T0iUc%T*ne z)&u$n>Ue3FN|hv+VtA+WW)odO-sdtDcHfJ7s&|YCPfWaVHpTGN46V7Lx@feE#Od%0XwiZy40plD%{xl+K04*se zw@X4&*si2Z_0+FU&1AstR)7!Th(fdaOlsWh`d!y=+3m!QC$Zlkg8gnz!}_B7`+wSz z&kD?6{zPnE3uo~Tv8mLP%RaNt2hcCJBq=0T>%MW~Q@Tpt2pPP1?KcywH>in5@ zx+5;xu-ltFfo5vLU;2>r$-KCHjwGR&1XZ0YNyrXXAUK!FLM_7mV&^;;X^*YH(FLRr z`0Jjg7wiq2bisa`CG%o9i)o1`uG?oFjU_Zrv1S^ipz$G-lc^X@~6*)#%nn+RbgksJfl{w=k31(q>7a!PCMp5YY{+Neh~mo zG-3dd!0cy`F!nWR?=9f_KP$X?Lz&cLGm_ohy-|u!VhS1HG~e7~xKpYOh=GmiiU;nu zrZ5tWfan3kp-q_vO)}vY6a$19Q6UL0r znJ+iSHN-&w@vDEZ0V%~?(XBr|jz&vrBNLOngULxtH(Rp&U*rMY42n;05F11xh?k;n_DX2$4|vWIkXnbwfC z=ReH=(O~a;VEgVO?>qsP*#eOC9Y<_9Yt<6X}X{PyF7UXIA$f)>NR5P&4G_Ygq(9TwwQH*P>Rq>3T4I+t2X(b5ogXBAfNf!xiF#Gilm zp2h{&D4k!SkKz-SBa%F-ZoVN$7GX2o=(>vkE^j)BDSGXw?^%RS9F)d_4}PN+6MlI8*Uk7a28CZ)Gp*EK)`n5i z){aq=0SFSO-;sw$nAvJU-$S-cW?RSc7kjEBvWDr1zxb1J7i;!i+3PQwb=)www?7TZ zE~~u)vO>#55eLZW;)F(f0KFf8@$p)~llV{nO7K_Nq-+S^h%QV_CnXLi)p*Pq&`s!d zK2msiR;Hk_rO8`kqe_jfTmmv|$MMo0ll}mI)PO4!ikVd(ZThhi&4ZwK?tD-}noj}v zBJ?jH-%VS|=t)HuTk?J1XaDUjd_5p1kPZi6y#F6$lLeRQbj4hsr=hX z4tXkX2d5DeLMcAYTeYm|u(XvG5JpW}hcOs4#s8g#ihK%@hVz|kL=nfiBqJ{*E*WhC zht3mi$P3a(O5JiDq$Syu9p^HY&9~<#H89D8 zJm84@%TaL_BZ+qy8+T3_pG7Q%z80hnjN;j>S=&WZWF48PDD%55lVuC0%#r5(+S;WH zS7!HEzmn~)Ih`gE`faPRjPe^t%g=F ztpGVW=Cj5ZkpghCf~`ar0+j@A=?3(j@7*pq?|9)n*B4EQTA1xj<+|(Y72?m7F%&&& zdO44owDBPT(8~RO=dT-K4#Ja@^4_0v$O3kn73p6$s?mCmVDUZ+Xl@QcpR6R3B$=am z%>`r9r2Z79Q#RNK?>~lwk^nQlR=Hr-ji$Ss3ltbmB)x@0{VzHL-rxVO(++@Yr@Iu2 zTEX)_9sVM>cX$|xuqz~Y8F-(n;KLAfi*63M7mh&gsPR>N0pd9h!0bm%nA?Lr zS#iEmG|wQd^BSDMk0k?G>S-uE$vtKEF8Dq}%vLD07zK4RLoS?%F1^oZZI$0W->7Z# z?v&|a`u#UD=_>i~`kzBGaPj!mYX5g?3RC4$5EV*j0sV)>H#+$G6!ci=6`)85LWR=FCp-NUff`;2zG9nU6F~ z;3ZyE*>*LvUgae+uMf}aV}V*?DCM>{o31+Sx~6+sz;TI(VmIpDrN3z+BUj`oGGgLP z>h9~MP}Pw#YwzfGP8wSkz`V#}--6}7S9yZvb{;SX?6PM_KuYpbi~*=teZr-ga2QqIz{QrEyZ@>eN*qmy;N@FCBbRNEeeoTmQyrX;+ zCkaJ&vOIbc^2BD6_H+Mrcl?Nt7O{xz9R_L0ZPV_u!sz+TKbXmhK)0QWoe-_HwtKJ@@7=L+ z+K8hhf=4vbdg3GqGN<;v-SMIzvX=Z`WUa_91Yf89^#`G(f-Eq>odB^p-Eqx}ENk#&MxJ+%~Ad2-*`1LNT>2INPw?*V3&kE;tt?rQyBw? zI+xJD04GTz1$7~KMnfpkPRW>f%n|0YCML@ODe`10;^DXX-|Hb*IE%_Vi#Pn9@#ufA z_8NY*1U%VseqYrSm?%>F@`laz+f?+2cIE4Jg6 z_VTcx|DSEA`g!R%RS$2dSRM|9VQClsW-G<~=j5T`pTbu-x6O`R z98b;}`rPM(2={YiytrqX+uh65f?%XiPp`;4CcMT*E*dQJ+if9^D>c_Dk8A(cE<#r=&!& z_`Z01=&MEE+2@yr!|#El=yM}v>i=?w^2E_FLPy(*4A9XmCNy>cBWdx3U>1RylsItO z4V8T$z3W-qqq*H`@}lYpfh=>C!tieKhoMGUi)EpWDr;yIL&fy};Y&l|)f^QE*k~4C zH>y`Iu%#S)z)YUqWO%el*Z)ME#p{1_8-^~6UF;kBTW zMQ!eXQuzkR#}j{qb(y9^Y!X7&T}}-4$%4w@w=;w+>Z%uifR9OoQ>P?0d9xpcwa>7kTv2U zT-F?3`Q`7xOR!gS@j>7In>_h){j#@@(ynYh;nB~}+N6qO(JO1xA z@59Pxc#&I~I64slNR?#hB-4XE>EFU@lUB*D)tu%uEa))B#eJ@ZOX0hIulfnDQz-y8 z`CX@(O%_VC{Ogh&ot``jlDL%R!f>-8yq~oLGxBO?+tQb5%k@a9zTs!+=NOwSVH-cR zqFo^jHeXDA_!rx$NzdP;>{-j5w3QUrR<;}=u2|FBJ;D#v{SK@Z6mjeV7_kFmWt95$ zeGaF{IU?U>?W`jzrG_9=9}yN*LKyzz))PLE+)_jc#4Rd$yFGol;NIk(qO1$5VXR)+ zxF7%f4=Q!NzR>DVXUB&nUT&>Nyf+5QRF+Z`X-bB*7=`|Go5D1&h~ zflKLw??kpiRm0h3|1GvySC2^#kcFz^5{79KKlq@`(leBa=_4CgV9sSHr{RIJ^KwR_ zY??M}-x^=MD+9`v@I3jue=OCn0kxno#6i>b(XKk_XTp_LpI}X*UA<#* zsgvq@yKTe_dTh>q1aeae@8yur08S(Q^8kXkP_ty48V$pX#y9)FQa~E7P7}GP_CbCm zc2dQxTeW(-~Y6}im24*XOC8ySfH*HMEnW3 z4CXp8iK(Nk<^D$g0kUW`8PXn2kdcDk-H@P0?G8?|YVlIFb?a>QunCx%B9TzsqQQ~HD!UO7zq^V!v9jho_FUob&Hxi ztU1nNOK)a!gkb-K4V^QVX05*>-^i|{b`hhvQLyj`E1vAnj0fbqqO%r z6Q;X1x0dL~GqMv%8QindZ4CZ%7pYQW~ z9)I*#Gjref-q(4Z*E#1c&rE0-_(4;_M(V7rgH_7H;ps1s%GBmU z{4a|X##j#XUF2n({v?ZUUAP5k>+)^F)7n-npbV3jAlY8V3*W=fwroDS$c&r$>8aH` zH+irV{RG3^F3oW2&E%5hXgMH9>$WlqX76Cm+iFmFC-DToTa`AcuN9S!SB+BT-IA#3P)JW1m~Cuwjs`Ep(wDXE4oYmt*aU z!Naz^lM}B)JFp7ejro7MU9#cI>wUoi{lylR2~s)3M!6a=_W~ITXCPd@U9W)qA5(mdOf zd3PntGPJyRX<9cgX?(9~TZB5FdEHW~gkJXY51}?s4ZT_VEdwOwD{T2E-B>oC8|_ZwsPNj=-q(-kwy%xX2K0~H z{*+W`-)V`7@c#Iuaef=?RR2O&x>W0A^xSwh5MsjTz(DVG-EoD@asu<>72A_h<39_# zawWVU<9t{r*e^u-5Q#SUI6dV#p$NYEGyiowT>>d*or=Ps!H$-3={bB|An$GPkP5F1 zTnu=ktmF|6E*>ZQvk^~DX(k!N`tiLut*?3FZhs$NUEa4ccDw66-~P;x+0b|<!ZN7Z%A`>2tN#CdoG>((QR~IV_Gj^Yh%!HdA~4C3jOXaqb6Ou z21T~Wmi9F6(_K0@KR@JDTh3-4mv2=T7&ML<+$4;b9SAtv*Uu`0>;VVZHB{4?aIl3J zL(rMfk?1V@l)fy{J5DhVlj&cWKJCcrpOAad(7mC6#%|Sn$VwMjtx6RDx1zbQ|Ngg8N&B56DGhu;dYg$Z{=YmCNn+?ceDclp65c_RnKs4*vefnhudSlrCy6-96vSB4_sFAj# zftzECwmNEOtED^NUt{ZDjT7^g>k1w<=af>+0)%NA;IPq6qx&ya7+QAu=pk8t>KTm` zEBj9J*2t|-(h)xc>Us*jHs)w9qmA>8@u21UqzKk*Ei#0kCeW6o z-2Q+Tvt25IUkb}-_LgD1_FUJ!U8@8OC^9(~Kd*0#zr*8IQkD)6Keb(XFai5*DYf~` z@U?-{)9X&BTf!^&@^rjmvea#9OE~m(D>qfM?CFT9Q4RxqhO0sA7S)=--^*Q=kNh7Y zq%2mu_d_#23d`+v`Ol263CZ<;D%D8Njj6L4T`S*^{!lPL@pXSm>2;~Da- zBX97TS{}exvSva@J5FJVCM$j4WDQuME`vTw>PWS0!;J7R+Kq zVUy6%#n5f7EV(}J#FhDpts;>=d6ow!yhJj8j>MJ@Wr_?x30buuutIG97L1A*QFT$c ziC5rBS;#qj=~yP-yWm-p(?llTwDuhS^f&<(9vA9@UhMH2-Fe_YAG$NvK6X{!mvPK~ zuEA&PA}meylmaIbbJXDOzuIn8cJNCV{tUA<$Vb?57JyAM`*GpEfMmFq>)6$E(9e1@W`l|R%-&}38#bl~levA#fx2wiBk^)mPj?<=S&|gv zQO)4*91$n08@W%2b|QxEiO0KxABAZC{^4BX^6r>Jm?{!`ZId9jjz<%pl(G5l));*`UU3KfnuXSDj2aP>{ zRIB$9pm7lj3*Xg)c1eG!cb+XGt&#?7yJ@C)(Ik)^OZ5><4u$VLCqZ#q2NMCt5 z6$|VN(RWM;5!JV?-h<JkEZ(SZF zC(6J+>A6Am9H7OlOFq6S62-2&z^Np=#xXsOq0WUKr zY_+Ob|CQd1*!Hirj5rn*=_bM5_zKmq6lG zn*&_=x%?ATxZ8ZTzd%biKY_qyNC#ZQ1vX+vc48N>aJXEjs{Y*3Op`Q7-oz8jyAh>d zNt_qvn`>q9aO~7xm{z`ree%lJ3YHCyC`q`-jUVCn*&NIml!uuMNm|~u3#AV?6kC+B z?qrT?xu2^mobSlzb&m(8jttB^je0mx;TT8}`_w(F11IKz83NLj@OmYDpCU^u?fD{) z&=$ptwVw#uohPb2_PrFX;X^I=MVXPDpqTuYhRa>f-=wy$y3)40-;#EUDYB1~V9t%$ z^^<7Zbs0{eB93Pcy)96%XsAi2^k`Gmnypd-&x4v9rAq<>a(pG|J#+Q>E$FvMLmy7T z5_06W=*ASUyPRfgCeiPIe{b47Hjqpb`9Xyl@$6*ntH@SV^bgH&Fk3L9L=6VQb)Uqa z33u#>ecDo&bK(h1WqSH)b_Th#Tvk&%$NXC@_pg5f-Ma#7q;&0QgtsFO~`V&{1b zbSP*X)jgLtd@9XdZ#2_BX4{X~pS8okF7c1xUhEV9>PZco>W-qz7YMD`+kCGULdK|^ zE7VwQ-at{%&fv`a+b&h`TjzxsyQX05UB~a0cuU-}{*%jR48J+yGWyl3Kdz5}U>;lE zgkba*yI5>xqIPz*Y!-P$#_mhHB!0Fpnv{$k-$xxjLAc`XdmHd1k$V@2QlblfJPrly z*~-4HVCq+?9vha>&I6aRGyq2VUon^L1a)g`-Xm*@bl2|hi2b|UmVYW|b+Gy?!aS-p z86a}Jep6Mf>>}n^*Oca@Xz}kxh)Y&pX$^CFAmi#$YVf57X^}uQD!IQSN&int=D> zJ>_|au3Be?hmPKK)1^JQ(O29eTf`>-x^jF2xYK6j_9d_qFkWHIan5=7EmDvZoQWz5 zZGb<{szHc9Nf@om)K_<=FuLR<&?5RKo3LONFQZ@?dyjemAe4$yDrnD zglU#XYo6|~L+YpF#?deK6S{8A*Ou;9G`cdC4S0U74EW18bc5~4>)<*}?Z!1Y)j;Ot zosEP!pc$O^wud(={WG%hY07IE^SwS-fGbvpP?;l8>H$;}urY2JF$u#$q}E*ZG%fR# z`p{xslcvG)kBS~B*^z6zVT@e}imYcz_8PRzM4GS52#ms5Jg9z~ME+uke`(Tq1w3_6 zxUa{HerS7!Wq&y(<9yyN@P^PrQT+6ij_qW3^Q)I53iIFCJE?MVyGLID!f?QHUi1tq z0)RNIMGO$2>S%3MlBc09l!6_(ECxXTU>$KjWdZX^3R~@3!SB zah5Za2$63;#y!Y}(wg1#shMePQTzfQfXyJ-Tf`R05KYcyvo8UW9-IWGWnzxR6Vj8_la;*-z5vWuwUe7@sKr#Tr51d z2PWn5h@|?QU3>k=s{pZ9+(}oye zc*95N_iLmtmu}H-t$smi49Y&ovX}@mKYt2*?C-i3Lh4*#q5YDg1Mh`j9ovRDf9&& zp_UMQh`|pC!|=}1uWoMK5RAjdTg3pXPCsYmRkWW}^m&)u-*c_st~gcss(`haA)xVw zAf=;s>$`Gq_`A}^MjY_BnCjktBNHY1*gzh(i0BFZ{Vg^F?Pbf`8_clvdZ)5(J4EWzAP}Ba5zX=S(2{gDugTQ3`%!q`h7kYSnwC`zEWeuFlODKiityMaM9u{Z%E@@y1jmZA#ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/hems_application/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/hems_application/macos/Runner/Configs/AppInfo.xcconfig b/hems_application/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..c295674 --- /dev/null +++ b/hems_application/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = hems_app + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.hemsApp + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2025 com.example. All rights reserved. diff --git a/hems_application/macos/Runner/Configs/Debug.xcconfig b/hems_application/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/hems_application/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/hems_application/macos/Runner/Configs/Release.xcconfig b/hems_application/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/hems_application/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/hems_application/macos/Runner/Configs/Warnings.xcconfig b/hems_application/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/hems_application/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/hems_application/macos/Runner/DebugProfile.entitlements b/hems_application/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/hems_application/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/hems_application/macos/Runner/Info.plist b/hems_application/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/hems_application/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/hems_application/macos/Runner/MainFlutterWindow.swift b/hems_application/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/hems_application/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/hems_application/macos/Runner/Release.entitlements b/hems_application/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/hems_application/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/hems_application/macos/RunnerTests/RunnerTests.swift b/hems_application/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/hems_application/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/hems_application/pubspec.lock b/hems_application/pubspec.lock new file mode 100644 index 0000000..61726f0 --- /dev/null +++ b/hems_application/pubspec.lock @@ -0,0 +1,951 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f + url: "https://pub.dev" + source: hosted + version: "82.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "214e6f07e2a44f45972e0365c7b537eaeaddb4598db0778dd4ac64b4acd3f5b1" + url: "https://pub.dev" + source: hosted + version: "1.3.55" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0" + url: "https://pub.dev" + source: hosted + version: "7.4.5" + ansicolor: + dependency: transitive + description: + name: ansicolor + sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + archive: + dependency: transitive + description: + name: archive + sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + url: "https://pub.dev" + source: hosted + version: "4.0.7" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.dev" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" + url: "https://pub.dev" + source: hosted + version: "2.13.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.dev" + source: hosted + version: "0.2.0" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c + url: "https://pub.dev" + source: hosted + version: "0.4.2" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.dev" + source: hosted + version: "1.1.2" + collection: + dependency: "direct main" + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.dev" + source: hosted + version: "1.19.1" + complex: + dependency: "direct main" + description: + name: complex + sha256: "033b3f880e70aaea9679bece95c02ae160f5afcd54cc658c03dbbb76bd63a1ef" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + coverage: + dependency: transitive + description: + name: coverage + sha256: "802bd084fb82e55df091ec8ad1553a7331b61c08251eef19a508b6f3f3a9858d" + url: "https://pub.dev" + source: hosted + version: "1.13.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" + csslib: + dependency: transitive + description: + name: csslib + sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + dbus: + dependency: transitive + description: + name: dbus + sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" + url: "https://pub.dev" + source: hosted + version: "0.7.11" + duration_picker: + dependency: "direct main" + description: + name: duration_picker + sha256: e505a749c93f3218aa4194d339e5d5480d927df23a81f075b5282511f6ac11ab + url: "https://pub.dev" + source: hosted + version: "1.2.0" + either_dart: + dependency: "direct main" + description: + name: either_dart + sha256: "0b57f6a9410ce0ba2cc340220109f545bf4bad1b06b242219f0af11ab9e84f0e" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + equatable: + dependency: transitive + description: + name: equatable + sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" + url: "https://pub.dev" + source: hosted + version: "2.0.7" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.dev" + source: hosted + version: "1.3.3" + ffi: + dependency: transitive + description: + name: ffi + sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.dev" + source: hosted + version: "7.0.1" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + sha256: b5b31727ad7c7f41e139637d1d582e435fd14054abcbd162c64476f90737105c + url: "https://pub.dev" + source: hosted + version: "11.4.6" + firebase_analytics_platform_interface: + dependency: transitive + description: + name: firebase_analytics_platform_interface + sha256: "86817ee7db6377e09830467932c31644713d8e8915cefff64610ad735612bc7d" + url: "https://pub.dev" + source: hosted + version: "4.3.6" + firebase_analytics_web: + dependency: transitive + description: + name: firebase_analytics_web + sha256: "4914e184a6aa37811d976db59f95fa8fda1d58db49ab7f73d4d8aac9dd9b19b7" + url: "https://pub.dev" + source: hosted + version: "0.5.10+12" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: "8cfe3c900512399ce8d50fcc817e5758ff8615eeb6fa5c846a4cc47bbf6353b6" + url: "https://pub.dev" + source: hosted + version: "3.13.1" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: d7253d255ff10f85cfd2adaba9ac17bae878fa3ba577462451163bd9f1d1f0bf + url: "https://pub.dev" + source: hosted + version: "5.4.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: ddd72baa6f727e5b23f32d9af23d7d453d67946f380bd9c21daf474ee0f7326e + url: "https://pub.dev" + source: hosted + version: "2.23.0" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: "38111089e511f03daa2c66b4c3614c16421b7d78c84ee04331a0a65b47df4542" + url: "https://pub.dev" + source: hosted + version: "15.2.6" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: ba254769982e5f439e534eed68856181c74e2b3f417c8188afad2bb440807cc7 + url: "https://pub.dev" + source: hosted + version: "4.6.6" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: dba89137272aac39e95f71408ba25c33fb8ed903cd5fa8d1e49b5cd0d96069e0 + url: "https://pub.dev" + source: hosted + version: "3.10.6" + fl_chart: + dependency: "direct main" + description: + name: fl_chart + sha256: "577aeac8ca414c25333334d7c4bb246775234c0e44b38b10a82b559dd4d764e7" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: "10f13781741a2e3972126fae08393d3c4e01fa4cd7473326b94b72cf594195e7" + url: "https://pub.dev" + source: hosted + version: "0.14.4" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" + url: "https://pub.dev" + source: hosted + version: "5.0.0" + flutter_local_notifications: + dependency: "direct main" + description: + name: flutter_local_notifications + sha256: b94a50aabbe56ef254f95f3be75640f99120429f0a153b2dc30143cffc9bfdf3 + url: "https://pub.dev" + source: hosted + version: "19.2.1" + flutter_local_notifications_linux: + dependency: transitive + description: + name: flutter_local_notifications_linux + sha256: e3c277b2daab8e36ac5a6820536668d07e83851aeeb79c446e525a70710770a5 + url: "https://pub.dev" + source: hosted + version: "6.0.0" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + sha256: "2569b973fc9d1f63a37410a9f7c1c552081226c597190cb359ef5d5762d1631c" + url: "https://pub.dev" + source: hosted + version: "9.0.0" + flutter_local_notifications_windows: + dependency: transitive + description: + name: flutter_local_notifications_windows + sha256: f8fc0652a601f83419d623c85723a3e82ad81f92b33eaa9bcc21ea1b94773e6e + url: "https://pub.dev" + source: hosted + version: "1.0.0" + flutter_localizations: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_native_splash: + dependency: "direct main" + description: + name: flutter_native_splash + sha256: "8321a6d11a8d13977fa780c89de8d257cce3d841eecfb7a4cadffcc4f12d82dc" + url: "https://pub.dev" + source: hosted + version: "2.4.6" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de + url: "https://pub.dev" + source: hosted + version: "2.1.3" + html: + dependency: transitive + description: + name: html + sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" + url: "https://pub.dev" + source: hosted + version: "0.15.6" + http: + dependency: "direct main" + description: + name: http + sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://pub.dev" + source: hosted + version: "3.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.dev" + source: hosted + version: "4.1.2" + image: + dependency: transitive + description: + name: image + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + url: "https://pub.dev" + source: hosted + version: "4.5.4" + intl: + dependency: "direct main" + description: + name: intl + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + url: "https://pub.dev" + source: hosted + version: "0.20.2" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.dev" + source: hosted + version: "1.0.5" + js: + dependency: transitive + description: + name: js + sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + url: "https://pub.dev" + source: hosted + version: "0.7.2" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + url: "https://pub.dev" + source: hosted + version: "10.0.9" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + url: "https://pub.dev" + source: hosted + version: "3.0.9" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7 + url: "https://pub.dev" + source: hosted + version: "5.1.1" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + url: "https://pub.dev" + source: hosted + version: "0.12.17" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" + source: hosted + version: "0.11.1" + material_design_icons_flutter: + dependency: "direct main" + description: + name: material_design_icons_flutter + sha256: "6f986b7a51f3ad4c00e33c5c84e8de1bdd140489bbcdc8b66fc1283dad4dea5a" + url: "https://pub.dev" + source: hosted + version: "7.0.7296" + meta: + dependency: transitive + description: + name: meta + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + url: "https://pub.dev" + source: hosted + version: "1.16.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + package_config: + dependency: transitive + description: + name: package_config + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://pub.dev" + source: hosted + version: "2.2.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.dev" + source: hosted + version: "1.9.1" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" + url: "https://pub.dev" + source: hosted + version: "2.1.5" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9 + url: "https://pub.dev" + source: hosted + version: "2.2.17" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + platform: + dependency: transitive + description: + name: platform + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" + url: "https://pub.dev" + source: hosted + version: "3.1.6" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + posix: + dependency: transitive + description: + name: posix + sha256: f0d7856b6ca1887cfa6d1d394056a296ae33489db914e365e2044fdada449e62 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + provider: + dependency: "direct main" + description: + name: provider + sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84" + url: "https://pub.dev" + source: hosted + version: "6.1.5" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" + url: "https://pub.dev" + source: hosted + version: "2.5.3" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" + url: "https://pub.dev" + source: hosted + version: "2.4.10" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03" + url: "https://pub.dev" + source: hosted + version: "2.5.4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 + url: "https://pub.dev" + source: hosted + version: "2.4.3" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.dev" + source: hosted + version: "1.4.2" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://pub.dev" + source: hosted + version: "1.1.3" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" + url: "https://pub.dev" + source: hosted + version: "3.0.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://pub.dev" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://pub.dev" + source: hosted + version: "0.10.13" + source_span: + dependency: transitive + description: + name: source_span + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" + url: "https://pub.dev" + source: hosted + version: "1.10.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.dev" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.dev" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.dev" + source: hosted + version: "1.2.2" + test: + dependency: "direct dev" + description: + name: test + sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e" + url: "https://pub.dev" + source: hosted + version: "1.25.15" + test_api: + dependency: transitive + description: + name: test_api + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + url: "https://pub.dev" + source: hosted + version: "0.7.4" + test_core: + dependency: transitive + description: + name: test_core + sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa" + url: "https://pub.dev" + source: hosted + version: "0.6.8" + timezone: + dependency: "direct main" + description: + name: timezone + sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1 + url: "https://pub.dev" + source: hosted + version: "0.10.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 + url: "https://pub.dev" + source: hosted + version: "15.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "69da27e49efa56a15f8afe8f4438c4ec02eff0a117df1b22ea4aad194fe1c104" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.dev" + source: hosted + version: "1.1.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.dev" + source: hosted + version: "3.0.3" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.dev" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.8.0 <4.0.0" + flutter: ">=3.27.4" diff --git a/hems_application/pubspec.yaml b/hems_application/pubspec.yaml new file mode 100644 index 0000000..5e45643 --- /dev/null +++ b/hems_application/pubspec.yaml @@ -0,0 +1,68 @@ +name: hems_app +description: "A new Flutter project." +publish_to: 'none' +version: 0.1.0 + +environment: + sdk: ^3.7.0 + +dependencies: + flutter: + sdk: flutter + complex: ^0.8.0 + http: ^1.4.0 + either_dart: ^1.0.0 + firebase_core: ^3.13.1 + firebase_messaging: ^15.2.6 + firebase_analytics: ^11.4.6 + collection: ^1.19.1 + intl: ^0.20.2 + flutter_localizations: + sdk: flutter + duration_picker: ^1.0.0 + fl_chart: ^1.0.0 + material_design_icons_flutter: 7.0.7296 + flutter_local_notifications: ^19.1.0 + timezone: ^0.10.1 + provider: ^6.1.5 + shared_preferences: ^2.2.2 + path_provider: ^2.1.5 + flutter_native_splash: ^2.4.6 + flutter_launcher_icons: ^0.14.4 + +flutter_native_splash: + color: "#a56ab6" + android_12: + color: "#a56ab6" + android: true + ios: true + web: true + +flutter_launcher_icons: + android: true + ios: true + image_path: "assets/icons/icon.png" + min_sdk_android: 16 + adaptive_icon_foreground: "assets/icons/icon_transparent.png" + adaptive_icon_background: "#a56ab6" + adaptive_icon_foreground_inset: 24 + remove_alpha_ios: true + web: + generate: true + image_path: "assets/icons/icon.png" + windows: + generate: true + image_path: "assets/icons/icon.png" + icon_size: 48 + macos: + generate: false + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^5.0.0 + test: ^1.25.15 + +flutter: + uses-material-design: true + generate: true diff --git a/hems_application/test/app_navigation_test.dart b/hems_application/test/app_navigation_test.dart new file mode 100644 index 0000000..79448a0 --- /dev/null +++ b/hems_application/test/app_navigation_test.dart @@ -0,0 +1,127 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/main.dart'; +import 'package:hems_app/state/locale_notifier.dart'; +import 'package:hems_app/state/theme_notifier.dart'; +import 'package:hems_app/widget/page/devices_page.dart'; +import 'package:hems_app/widget/page/home_page.dart'; +import 'package:hems_app/widget/page/schedules_page.dart'; +import 'package:hems_app/widget/page/settings_page.dart'; +import 'package:provider/provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +void main() { + testWidgets('Navigation tests', (tester) async { + SharedPreferences.setMockInitialValues({ + ThemeNotifier.themePrefKey: true, + LocaleNotifier.localePrefKey: "nl", + }); + ThemeNotifier themeNotifier = await ThemeNotifier.create(); + LocaleNotifier localeNotifier = await LocaleNotifier.create(); + + await tester.pumpWidget( + MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => themeNotifier), + ChangeNotifierProvider(create: (_) => localeNotifier), + ], + child: const HEMSApp(), + ), + ); + + final appbarFinder = find.byType(AppBar); + final titleFinder = find.descendant( + of: appbarFinder, + matching: find.byType(Text), + ); + + final navigationFinder = find.byType(NavigationBar); + final destionationFinder = find.byType(NavigationDestination); + + final homepageFinder = find.byType(HomePage); + final schedulespageFinder = find.byType(SchedulesPage); + final devicespageFinder = find.byType(DevicesPage); + final settingspageFinder = find.byType(SettingsPage); + + expect(appbarFinder, findsOneWidget); + expect(titleFinder, findsAtLeast(1)); + + expect(navigationFinder, findsOneWidget); + expect(destionationFinder, findsExactly(4)); + + expect(homepageFinder, findsOneWidget); + expect(schedulespageFinder, findsNothing); + expect(devicespageFinder, findsNothing); + expect(settingspageFinder, findsNothing); + + await tester.tap(destionationFinder.at(1)); + await tester.pump(); + + expect(appbarFinder, findsOneWidget); + expect(titleFinder, findsAtLeast(1)); + + expect(navigationFinder, findsOneWidget); + expect(destionationFinder, findsExactly(4)); + + expect(homepageFinder, findsNothing); + expect(schedulespageFinder, findsOneWidget); + expect(devicespageFinder, findsNothing); + expect(settingspageFinder, findsNothing); + + await tester.tap(destionationFinder.at(2)); + await tester.pump(); + + expect(appbarFinder, findsOneWidget); + expect(titleFinder, findsAtLeast(1)); + + expect(navigationFinder, findsOneWidget); + expect(destionationFinder, findsExactly(4)); + + expect(homepageFinder, findsNothing); + expect(schedulespageFinder, findsNothing); + expect(devicespageFinder, findsOneWidget); + expect(settingspageFinder, findsNothing); + + await tester.tap(destionationFinder.at(3)); + await tester.pump(); + + expect(appbarFinder, findsOneWidget); + expect(titleFinder, findsAtLeast(1)); + + expect(navigationFinder, findsOneWidget); + expect(destionationFinder, findsExactly(4)); + + expect(homepageFinder, findsNothing); + expect(schedulespageFinder, findsNothing); + expect(devicespageFinder, findsNothing); + expect(settingspageFinder, findsOneWidget); + + await tester.tap(destionationFinder.at(2)); + await tester.pump(); + + expect(appbarFinder, findsOneWidget); + expect(titleFinder, findsAtLeast(1)); + + expect(navigationFinder, findsOneWidget); + expect(destionationFinder, findsExactly(4)); + + expect(homepageFinder, findsNothing); + expect(schedulespageFinder, findsNothing); + expect(devicespageFinder, findsOneWidget); + expect(settingspageFinder, findsNothing); + + await tester.tap(destionationFinder.at(0)); + await tester.pump(); + + expect(appbarFinder, findsOneWidget); + expect(titleFinder, findsAtLeast(1)); + + expect(navigationFinder, findsOneWidget); + expect(destionationFinder, findsExactly(4)); + + expect(homepageFinder, findsOneWidget); + expect(schedulespageFinder, findsNothing); + expect(devicespageFinder, findsNothing); + expect(settingspageFinder, findsNothing); + }); +} diff --git a/hems_application/test/model/api/battery_info_test.dart b/hems_application/test/model/api/battery_info_test.dart new file mode 100644 index 0000000..fb6f628 --- /dev/null +++ b/hems_application/test/model/api/battery_info_test.dart @@ -0,0 +1,119 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/battery_info.dart'; +import 'package:hems_app/model/api/battery_status.dart'; +import 'package:test/test.dart'; + +void main() { + final batInfo1 = BatteryInfo(12000, 1347, 3700, 3700, 5285.25, BatteryStatus.discharging); + final batInfo2 = BatteryInfo(12000, 1347, 3700, 3700, 5285.25, BatteryStatus.discharging); + final batInfo3 = BatteryInfo(12000, 1347, 3700, 3700, 5285.25, BatteryStatus.discharging, 10000); + final batInfo4 = BatteryInfo(12000, 1347, 3700, 3700, 5285.25, BatteryStatus.discharging, 10000); + final batInfo5 = BatteryInfo(12000, 1347, 3700, 3700, 5285.25, BatteryStatus.discharging, 11000); + final batInfo6 = BatteryInfo(10000, 1347, 3700, 3700, 5285.25, BatteryStatus.discharging); + final batInfo7 = BatteryInfo(12000, 1500, 3700, 3700, 5285.25, BatteryStatus.discharging); + final batInfo8 = BatteryInfo(12000, 1347, 4000, 3700, 5285.25, BatteryStatus.discharging); + final batInfo9 = BatteryInfo(12000, 1347, 3700, 4000, 5285.25, BatteryStatus.discharging); + final batInfo10 = BatteryInfo(12000, 1347, 3700, 3700, 5400.47, BatteryStatus.discharging); + final batInfo11 = BatteryInfo(12000, 1347, 3700, 3700, 5285.25, BatteryStatus.charging); + + final json1 = jsonDecode('''{ + "capacity": 12000.0, + "max_charge": 3700.0, + "max_discharge": 3700.0, + "state_of_charge": 5285.25, + "target_soc": null, + "status": "Discharging", + "consumption": 1347.0 +}'''); + final json2 = jsonDecode('''{ + "capacity": 12000.0, + "max_charge": 3700.0, + "max_discharge": 3700.0, + "state_of_charge": 5285.25, + "target_soc": 10000.0, + "status": "Discharging", + "consumption": 1347.0 +}'''); + final json3 = jsonDecode('''{ + "capacity": 12000, + "max_charge": 3700, + "max_discharge": 3700, + "state_of_charge": 5285.25, + "target_soc": 10000, + "status": "Discharging", + "consumption": 1347 +}'''); + final json4 = jsonDecode('''{ + "capacity": 12000.0, + "max_charge": 3700.0, + "max_discharge": 3700.0, + "state_of_charge": 5285.25, + "target_soc": null, + "status": "NotAStatus", + "consumption": 1347.0 +}'''); + + group('== operator tests', () { + test('Equality true without target soc', () { + expect(batInfo1, equals(batInfo1)); + expect(batInfo1, equals(batInfo2)); + expect(batInfo2, equals(batInfo2)); + }); + test('Equality true with target soc', () { + expect(batInfo3, equals(batInfo3)); + expect(batInfo3, equals(batInfo4)); + expect(batInfo4, equals(batInfo4)); + }); + test('Equality considers target soc', () { + expect(batInfo1, isNot(equals(batInfo3))); + expect(batInfo3, isNot(equals(batInfo5))); + }); + test('Equality considers capacity', () { + expect(batInfo1, isNot(equals(batInfo6))); + }); + test('Equality considers consumption', () { + expect(batInfo1, isNot(equals(batInfo7))); + }); + test('Equality considers maxCharge', () { + expect(batInfo1, isNot(equals(batInfo8))); + }); + test('Equality considers maxDischarge', () { + expect(batInfo1, isNot(equals(batInfo9))); + }); + test('Equality considers stateOfCharge', () { + expect(batInfo1, isNot(equals(batInfo10))); + }); + test('Equality considers status', () { + expect(batInfo1, isNot(equals(batInfo11))); + }); + }); + + group('Hashcode tests', () { + test('Hashcode consistent with equality without target soc', () { + expect(batInfo1.hashCode, equals(batInfo1.hashCode)); + expect(batInfo1.hashCode, equals(batInfo2.hashCode)); + expect(batInfo2.hashCode, equals(batInfo2.hashCode)); + }); + test('Hashcode consistent with equality with target soc', () { + expect(batInfo3.hashCode, equals(batInfo3.hashCode)); + expect(batInfo3.hashCode, equals(batInfo4.hashCode)); + expect(batInfo4.hashCode, equals(batInfo4.hashCode)); + }); + }); + + group('fromJson tests', () { + test('fromJson works with null target soc', () { + expect(BatteryInfo.fromJson(json1), batInfo1); + }); + test('fromJson works with target soc', () { + expect(BatteryInfo.fromJson(json2), batInfo3); + }); + test('fromJson works with integer values', () { + expect(BatteryInfo.fromJson(json3), batInfo3); + }); + test('fromJson throws exception for invalid status', () { + expect(() => BatteryInfo.fromJson(json4), throwsFormatException); + }); + }); +} diff --git a/hems_application/test/model/api/device_status_test.dart b/hems_application/test/model/api/device_status_test.dart new file mode 100644 index 0000000..2b830f7 --- /dev/null +++ b/hems_application/test/model/api/device_status_test.dart @@ -0,0 +1,117 @@ +import 'dart:convert'; +import 'package:test/test.dart'; +import 'package:complex/complex.dart'; +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/api/job.dart'; +import 'package:hems_app/model/api/measurement.dart'; + +void main() { + final job1 = Job(1000, 2000); + final job2 = Job(3000, 4000); + final consumption = Measurement(150.5, 'W'); + + final profile = [Complex(1.0, -1.0), Complex(2.0, 3.0)]; + + final devStatus1 = DeviceStatus( + 1, + 'EntityA', + true, + 50.0, + 0, + [job1], + consumption, + profile, + ); + + final devStatus2 = DeviceStatus( + 1, + 'EntityA', + true, + 50.0, + 0, + [job1], + consumption, + profile, + ); + + final devStatus3 = DeviceStatus( + 2, + 'EntityB', + false, + 75.0, + 1, + [job1, job2], + consumption, + profile, + job2, + ); + + final json1 = jsonDecode('''{ + "house_id": 1, + "entity_name": "EntityA", + "is_active": true, + "progress": 50.0, + "active_job_idx": 0, + "scheduled_jobs": [{"startTime": 1000, "endTime": 2000}], + "consumption": {"value": 150.5, "unit": "W"}, + "profile": [{"re": 1.0, "im": -1.0}, {"re": 2.0, "im": 3.0}], + "active_job": null + }'''); + + final json2 = jsonDecode('''{ + "house_id": 2, + "entity_name": "EntityB", + "is_active": false, + "progress": 75.0, + "active_job_idx": 1, + "scheduled_jobs": [{"startTime": 1000, "endTime": 2000}, {"startTime": 3000, "endTime": 4000}], + "consumption": {"value": 150.5, "unit": "W"}, + "profile": [{"re": 1.0, "im": -1.0}, {"re": 2.0, "im": 3.0}], + "active_job": {"startTime": 3000, "endTime": 4000} + }'''); + + group('== operator tests', () { + test('Equality true for identical objects', () { + expect(devStatus1, equals(devStatus1)); + expect(devStatus1, equals(devStatus2)); + }); + + test('Equality false when houseId changes', () { + expect(devStatus1, isNot(equals(devStatus3))); + }); + + test('Equality false when activeJob differs', () { + final devStatusWithJob = DeviceStatus( + 1, + 'EntityA', + true, + 50.0, + 0, + [job1], + consumption, + profile, + job1, + ); + expect(devStatus1, isNot(equals(devStatusWithJob))); + }); + }); + + group('Hashcode tests', () { + test('Hashcode consistent with equality', () { + expect(devStatus1.hashCode, equals(devStatus2.hashCode)); + }); + + }); + + group('fromJson tests', () { + test('fromJson parses correctly without active job', () { + final parsed = DeviceStatus.fromJson(json1); + expect(parsed, equals(devStatus1)); + }); + + test('fromJson parses correctly with active job', () { + final parsed = DeviceStatus.fromJson(json2); + expect(parsed, equals(devStatus3)); + }); + }); +} diff --git a/hems_application/test/model/api/entity_request_test.dart b/hems_application/test/model/api/entity_request_test.dart new file mode 100644 index 0000000..a18090f --- /dev/null +++ b/hems_application/test/model/api/entity_request_test.dart @@ -0,0 +1,44 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/entity_request.dart'; +import 'package:test/test.dart'; + +void main() { + final entityReq1 = EntityRequest('1', "1000"); + final entityReq2 = EntityRequest('1', "1000"); + final entityReq3 = EntityRequest('2', "1000"); + final entityReq4 = EntityRequest('1', "1200.25"); + + final json = jsonDecode('''{ + "entity_id": "1", + "consumption": "1000" +}'''); + + group('== operator tests', () { + test('Equality true', () { + expect(entityReq1, equals(entityReq1)); + expect(entityReq1, equals(entityReq2)); + expect(entityReq2, equals(entityReq2)); + }); + test('Equality considers entityId', () { + expect(entityReq1, isNot(equals(entityReq3))); + }); + test('Equality considers consumption', () { + expect(entityReq1, isNot(equals(entityReq4))); + }); + }); + + group('Hashcode tests', () { + test('Hashcode consistent with equality', () { + expect(entityReq1.hashCode, equals(entityReq1.hashCode)); + expect(entityReq1.hashCode, equals(entityReq2.hashCode)); + expect(entityReq2.hashCode, equals(entityReq2.hashCode)); + }); + }); + + group('fromJson tests', () { + test('fromJson works', () { + expect(EntityRequest.fromJson(json), entityReq1); + }); + }); +} diff --git a/hems_application/test/model/api/job_test.dart b/hems_application/test/model/api/job_test.dart new file mode 100644 index 0000000..92e891e --- /dev/null +++ b/hems_application/test/model/api/job_test.dart @@ -0,0 +1,32 @@ +import 'package:test/test.dart'; +import 'package:hems_app/model/api/job.dart'; + +void main() { + group('Job Equality and HashCode', () { + final job1 = Job(1000, 2000); + final job2 = Job(1000, 2000); + final job3 = Job(3000, 4000); + + test('Jobs with same data are equal', () { + expect(job1, equals(job2)); + }); + + test('Jobs with different data are not equal', () { + expect(job1, isNot(equals(job3))); + }); + + test('HashCodes are consistent with equality', () { + expect(job1.hashCode, equals(job2.hashCode)); + }); + }); + + group('Job fromJson', () { + test('Correctly parses from JSON', () { + final json = {'startTime': 5000, 'endTime': 6000}; + final job = Job.fromJson(json); + + expect(job.startTime, 5000); + expect(job.endTime, 6000); + }); + }); +} diff --git a/hems_application/test/model/api/measurement_test.dart b/hems_application/test/model/api/measurement_test.dart new file mode 100644 index 0000000..4b4e044 --- /dev/null +++ b/hems_application/test/model/api/measurement_test.dart @@ -0,0 +1,32 @@ +import 'package:test/test.dart'; +import 'package:hems_app/model/api/measurement.dart'; + +void main() { + group('Measurement Equality and HashCode', () { + final m1 = Measurement(150.0, 'W'); + final m2 = Measurement(150.0, 'W'); + final m3 = Measurement(200.0, 'kW'); + + test('Measurements with same data are equal', () { + expect(m1, equals(m2)); + }); + + test('Measurements with different data are not equal', () { + expect(m1, isNot(equals(m3))); + }); + + test('HashCodes are consistent with equality', () { + expect(m1.hashCode, equals(m2.hashCode)); + }); + }); + + group('Measurement fromJson', () { + test('Correctly parses from JSON', () { + final json = {'value': 99.5, 'unit': 'kWh'}; + final measurement = Measurement.fromJson(json); + + expect(measurement.value, 99.5); + expect(measurement.unit, 'kWh'); + }); + }); +} diff --git a/hems_application/test/model/api/meter_info_test.dart b/hems_application/test/model/api/meter_info_test.dart new file mode 100644 index 0000000..81a7a02 --- /dev/null +++ b/hems_application/test/model/api/meter_info_test.dart @@ -0,0 +1,130 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/meter_info.dart'; +import 'package:test/test.dart'; + +void main() { + final MeterInfo meterInfo1 = MeterInfo(120.5, 350.0, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo1B = MeterInfo(120.0, 350.0, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo2 = MeterInfo(120.5, 350.0, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo3 = MeterInfo(null, 350.0, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo3B = MeterInfo(null, 350.0, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo4 = MeterInfo(120.5, null, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo4B = MeterInfo(120.5, null, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo5 = MeterInfo(null, null, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo5B = MeterInfo(null, null, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo6 = MeterInfo(201.5, 350.0, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo7 = MeterInfo(120.5, 590.0, 1, 101, 5500.0, 12000.0); + final MeterInfo meterInfo8 = MeterInfo(120.5, 350.0, 2, 101, 5500.0, 12000.0); + final MeterInfo meterInfo9 = MeterInfo(120.5, 350.0, 1, 123, 5500.0, 12000.0); + final MeterInfo meterInfo10 = MeterInfo(120.5, 350.0, 1, 101, 7500.0, 12000.0); + final MeterInfo meterInfo11 = MeterInfo(120.5, 350.0, 1, 101, 5500.0, 20000.0); + + final json1 = jsonDecode('''{ + "current_export": 120.5, + "current_import": 350.0, + "house_id": 1, + "meter_id": 101, + "total_export": 5500.0, + "total_import": 12000.0 + }'''); + final json2 = jsonDecode('''{ + "current_export": null, + "current_import": 350.0, + "house_id": 1, + "meter_id": 101, + "total_export": 5500.0, + "total_import": 12000.0 + }'''); + final json3 = jsonDecode('''{ + "current_export": 120.5, + "current_import": null, + "house_id": 1, + "meter_id": 101, + "total_export": 5500.0, + "total_import": 12000.0 + }'''); + final json4 = jsonDecode('''{ + "current_export": null, + "current_import": null, + "house_id": 1, + "meter_id": 101, + "total_export": 5500.0, + "total_import": 12000.0 + }'''); + final json5 = jsonDecode('''{ + "current_export": 120, + "current_import": 350, + "house_id": 1, + "meter_id": 101, + "total_export": 5500, + "total_import": 12000 + }'''); + + group('== operator tests', () { + test('Is equal', () { + expect(meterInfo1, equals(meterInfo2)); + }); + test('Is not equal, currentExport null', () { + expect(meterInfo1, isNot(equals(meterInfo3))); + }); + test('Is not equal, currentImport null', () { + expect(meterInfo1, isNot(equals(meterInfo4))); + }); + test('Is not equal, both null', () { + expect(meterInfo1, isNot(equals(meterInfo5))); + }); + test('Is not equal, currentExport', () { + expect(meterInfo1, isNot(equals(meterInfo6))); + }); + test('Is not equal, currentImport', () { + expect(meterInfo1, isNot(equals(meterInfo7))); + }); + test('Is not equal, houseId', () { + expect(meterInfo1, isNot(equals(meterInfo8))); + }); + test('Is not equal, meterId', () { + expect(meterInfo1, isNot(equals(meterInfo9))); + }); + test('Is not equal, totalExport', () { + expect(meterInfo1, isNot(equals(meterInfo10))); + }); + test('Is not equal, totalImport', () { + expect(meterInfo1, isNot(equals(meterInfo11))); + }); + }); + + group('hashCode tests', () { + test('Is equal without nulls', () { + expect(meterInfo1.hashCode, equals(meterInfo1.hashCode)); + expect(meterInfo1.hashCode, equals(meterInfo2.hashCode)); + expect(meterInfo2.hashCode, equals(meterInfo2.hashCode)); + }); + test('Is equal with nulls', () { + expect(meterInfo3.hashCode, equals(meterInfo3.hashCode)); + expect(meterInfo3.hashCode, equals(meterInfo3B.hashCode)); + expect(meterInfo4.hashCode, equals(meterInfo4.hashCode)); + expect(meterInfo4.hashCode, equals(meterInfo4B.hashCode)); + expect(meterInfo5.hashCode, equals(meterInfo5.hashCode)); + expect(meterInfo5.hashCode, equals(meterInfo5B.hashCode)); + }); + }); + + group('fromJson tests', () { + test('fromJson works with no nulls', () { + expect(MeterInfo.fromJson(json1), meterInfo1); + }); + test('fromJson works with currentExport null', () { + expect(MeterInfo.fromJson(json2), meterInfo3); + }); + test('fromJson works with currentImport null', () { + expect(MeterInfo.fromJson(json3), meterInfo4); + }); + test('fromJson works with both null', () { + expect(MeterInfo.fromJson(json4), meterInfo5); + }); + test('fromJson works with all integers', () { + expect(MeterInfo.fromJson(json5), meterInfo1B); + }); + }); +} diff --git a/hems_application/test/model/api/schedule_job_test.dart b/hems_application/test/model/api/schedule_job_test.dart new file mode 100644 index 0000000..c8e2cfa --- /dev/null +++ b/hems_application/test/model/api/schedule_job_test.dart @@ -0,0 +1,29 @@ +import 'package:test/test.dart'; +import 'package:hems_app/model/api/schedule_job.dart'; + +void main() { + group('Job Equality and HashCode', () { + final job1 = ScheduleJob(1000, 2000); + final job2 = ScheduleJob(1000, 2000); + final job3 = ScheduleJob(3000, 4000); + + test('Scheduled Jobs with same data are equal', () { + expect(job1, equals(job2)); + }); + + test('Scheduled Jobs with different data are not equal', () { + expect(job1, isNot(equals(job3))); + }); + + test('HashCodes are consistent with equality', () { + expect(job1.hashCode, equals(job2.hashCode)); + }); + }); + + group('Scheduled Job toJson', () { + final job1 = ScheduleJob(1000, 2000); + test('Correctly parses to Json', () { + expect({'delay': 1000, 'duration': 2000}, job1.toJson()); + }); + }); +} diff --git a/hems_application/test/model/api/solar_info_test.dart b/hems_application/test/model/api/solar_info_test.dart new file mode 100644 index 0000000..c71d9ba --- /dev/null +++ b/hems_application/test/model/api/solar_info_test.dart @@ -0,0 +1,41 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/solar_info.dart'; +import 'package:test/test.dart'; + +void main() { + final solInfo1 = SolarInfo(241.0); + final solInfo2 = SolarInfo(241.0); + final solInfo3 = SolarInfo(303.0); + + final json1 = jsonDecode('''{ + "consumption": 303.0 + }'''); + final json2 = jsonDecode('''{ + "consumption": 303 + }'''); + + group('== operator tests', () { + test('Is equal', () { + expect(solInfo1, equals(solInfo2)); + }); + test('Is not equal', () { + expect(solInfo1, isNot(equals(solInfo3))); + }); + }); + + test('hashCode test', () { + expect(solInfo1.hashCode, equals(solInfo1.hashCode)); + expect(solInfo1.hashCode, equals(solInfo2.hashCode)); + expect(solInfo2.hashCode, equals(solInfo2.hashCode)); + }); + + group('fromJson tests', () { + test('fromJson works with doubles', () { + expect(SolarInfo.fromJson(json1), solInfo3); + }); + test('fromJson works with integers', () { + expect(SolarInfo.fromJson(json2), solInfo3); + }); + }); +} diff --git a/hems_application/test/model/api/thermal_info_test.dart b/hems_application/test/model/api/thermal_info_test.dart new file mode 100644 index 0000000..8d9c377 --- /dev/null +++ b/hems_application/test/model/api/thermal_info_test.dart @@ -0,0 +1,60 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/thermal_info.dart'; +import 'package:test/test.dart'; + +void main() { + final tInfo1 = ThermalInfo(552.0, 20.0, 30.0, 40.0); + final tInfo2 = ThermalInfo(552.0, 20.0, 30.0, 40.0); + final tInfo3 = ThermalInfo(650.0, 20.0, 30.0, 40.0); + final tInfo4 = ThermalInfo(552.0, 60.0, 30.0, 40.0); + final tInfo5 = ThermalInfo(552.0, 20.0, 80.0, 40.0); + final tInfo6 = ThermalInfo(552.0, 20.0, 30.0, 90.0); + final tInfo7 = ThermalInfo(849.0, 10.0, 50.0, 35.0); + + final json1 = jsonDecode('''{ + "consumption": 849.0, + "current_temperature": 10.0, + "heating_power": 50.0, + "target_temperature": 35.0 + }'''); + final json2 = jsonDecode('''{ + "consumption": 849, + "current_temperature": 10, + "heating_power": 50, + "target_temperature": 35 + }'''); + + group('== operator tests', () { + test('Is equal', () { + expect(tInfo1, equals(tInfo2)); + }); + test('Is not equal, consumption', () { + expect(tInfo1, isNot(equals(tInfo3))); + }); + test('Is not equal, currentTemperature', () { + expect(tInfo1, isNot(equals(tInfo4))); + }); + test('Is not equal, heatingPower', () { + expect(tInfo1, isNot(equals(tInfo5))); + }); + test('Is not equal, targetTemperature', () { + expect(tInfo1, isNot(equals(tInfo6))); + }); + }); + + test('hashCode test', () { + expect(tInfo1.hashCode, equals(tInfo1.hashCode)); + expect(tInfo1.hashCode, equals(tInfo2.hashCode)); + expect(tInfo2.hashCode, equals(tInfo2.hashCode)); + }); + + group('fromJson tests', () { + test('fromJson works with doubles', () { + expect(ThermalInfo.fromJson(json1), tInfo7); + }); + test('fromJson works with integers', () { + expect(ThermalInfo.fromJson(json2), tInfo7); + }); + }); +} diff --git a/hems_application/test/model/internal/device_test.dart b/hems_application/test/model/internal/device_test.dart new file mode 100644 index 0000000..333864c --- /dev/null +++ b/hems_application/test/model/internal/device_test.dart @@ -0,0 +1,171 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:test/test.dart'; + +void main() { + final device1 = Device( + houseId: 0, + deviceId: 'DishWasher', + type: DeviceType.timeshifter, + ); + final device2 = Device( + houseId: 0, + deviceId: 'DishWasher', + type: DeviceType.timeshifter, + ); + final device3 = Device( + houseId: 1, + deviceId: 'DishWasher', + type: DeviceType.timeshifter, + ); + final device4 = Device( + houseId: 0, + deviceId: 'WashingMachine', + type: DeviceType.timeshifter, + ); + final device5 = Device( + houseId: 0, + deviceId: 'DishWasher', + type: DeviceType.solar, + ); + final device6 = Device( + houseId: 0, + deviceId: 'DishWasher', + type: DeviceType.thermal, + ); + final device7 = Device( + houseId: 0, + deviceId: 'DishWasher', + type: DeviceType.meter, + ); + final device8 = Device( + houseId: 0, + deviceId: 'DishWasher', + type: DeviceType.battery, + ); + final device9 = Device( + houseId: 0, + deviceId: 'DishWasher', + type: DeviceType.haEntity, + ); + + final json1 = jsonDecode('''{ + "house_id": 0, + "device_id": "DishWasher", + "type": "timeshifter" +}'''); + final json2 = jsonDecode('''{ + "house_id": 0, + "device_id": "DishWasher", + "type": "solar" +}'''); + final json3 = jsonDecode('''{ + "house_id": 0, + "device_id": "DishWasher", + "type": "thermal" +}'''); + final json4 = jsonDecode('''{ + "house_id": 0, + "device_id": "DishWasher", + "type": "meter" +}'''); + final json5 = jsonDecode('''{ + "house_id": 0, + "device_id": "DishWasher", + "type": "battery" +}'''); + final json6 = jsonDecode('''{ + "house_id": 0, + "device_id": "DishWasher", + "type": "haEntity" +}'''); + final json7 = jsonDecode('''{ + "house_id": 0, + "device_id": "DishWasher", + "type": "Invalid" +}'''); + + group('== operator tests', () { + test('Equality true', () { + expect(device1, equals(device1)); + expect(device1, equals(device2)); + }); + test('Equality considers houseId', () { + expect(device1, isNot(equals(device3))); + }); + test('Equality considers deviceId', () { + expect(device1, isNot(equals(device4))); + }); + test('Equality considers type', () { + expect(device1, isNot(equals(device5))); + expect(device1, isNot(equals(device6))); + expect(device1, isNot(equals(device7))); + expect(device1, isNot(equals(device8))); + expect(device1, isNot(equals(device9))); + }); + test('Not equals different type', () { + expect(device1, isNot(equals(''))); + }); + }); + + group('Hashcode tests', () { + test('Hashcode consistent with equality', () { + expect(device1.hashCode, equals(device1.hashCode)); + expect(device1.hashCode, equals(device2.hashCode)); + }); + }); + + group('DeviceType tests', () { + test('name is total', () { + expect(device1.type.name, TypeMatcher()); + expect(device5.type.name, TypeMatcher()); + expect(device6.type.name, TypeMatcher()); + expect(device7.type.name, TypeMatcher()); + expect(device8.type.name, TypeMatcher()); + expect(device9.type.name, TypeMatcher()); + }); + test('iconData is total', () { + expect(device1.type.iconData, TypeMatcher()); + expect(device5.type.iconData, TypeMatcher()); + expect(device6.type.iconData, TypeMatcher()); + expect(device7.type.iconData, TypeMatcher()); + expect(device8.type.iconData, TypeMatcher()); + expect(device9.type.iconData, TypeMatcher()); + }); + test('widget is total', () { + expect(device1.widget, TypeMatcher()); + expect(device5.widget, TypeMatcher()); + expect(device6.widget, TypeMatcher()); + expect(device7.widget, TypeMatcher()); + expect(device8.widget, TypeMatcher()); + expect(device9.widget, TypeMatcher()); + }); + }); + + group('fromJson tests', () { + test('fromJson works with valid type', () { + expect(Device.fromJson(json1), device1); + expect(Device.fromJson(json2), device5); + expect(Device.fromJson(json3), device6); + expect(Device.fromJson(json4), device7); + expect(Device.fromJson(json5), device8); + expect(Device.fromJson(json6), device9); + }); + test('fromJson throws exception for invalid type', () { + expect(() => Device.fromJson(json7), throwsFormatException); + }); + }); + + group('toJson tests', () { + test('toJson works', () { + expect(device1.toJson(), json1); + expect(device5.toJson(), json2); + expect(device6.toJson(), json3); + expect(device7.toJson(), json4); + expect(device8.toJson(), json5); + expect(device9.toJson(), json6); + }); + }); +} diff --git a/hems_application/test/model/internal/room_test.dart b/hems_application/test/model/internal/room_test.dart new file mode 100644 index 0000000..772d8c1 --- /dev/null +++ b/hems_application/test/model/internal/room_test.dart @@ -0,0 +1,254 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:test/test.dart'; + +void main() { + final room1 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.bedroom, + ); + final room2 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.bedroom, + ); + final room3 = Room( + name: 'master bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.bedroom, + ); + final room4 = Room( + name: 'bedroom', + devices: [Device(houseId: 1, deviceId: 'solar', type: DeviceType.solar)], + type: RoomType.bedroom, + ); + final room5 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.kitchen, + ); + final room6 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.livingRoom, + ); + final room7 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.bathroom, + ); + final room8 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.garden, + ); + final room9 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.washingRoom, + ); + final room10 = Room( + name: 'bedroom', + devices: [ + Device(houseId: 0, deviceId: 'dish', type: DeviceType.timeshifter), + ], + type: RoomType.others, + ); + + final json1 = jsonDecode('''{ + "name": "bedroom", + "type": "bedroom", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + final json2 = jsonDecode('''{ + "name": "bedroom", + "type": "kitchen", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + final json3 = jsonDecode('''{ + "name": "bedroom", + "type": "livingRoom", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + final json4 = jsonDecode('''{ + "name": "bedroom", + "type": "bathroom", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + final json5 = jsonDecode('''{ + "name": "bedroom", + "type": "garden", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + final json6 = jsonDecode('''{ + "name": "bedroom", + "type": "washingRoom", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + final json7 = jsonDecode('''{ + "name": "bedroom", + "type": "others", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + final json8 = jsonDecode('''{ + "name": "bedroom", + "type": "invalid", + "devices": [ + { + "house_id": 0, + "device_id": "dish", + "type": "timeshifter" + } + ] +}'''); + + group('== operator tests', () { + test('Equality true', () { + expect(room1, equals(room1)); + expect(room1, equals(room2)); + }); + test('Equality considers type', () { + expect(room1, isNot(equals(room3))); + }); + test('Equality considers devices', () { + expect(room1, isNot(equals(room4))); + }); + test('Equality considers type', () { + expect(room1, isNot(equals(room5))); + expect(room1, isNot(equals(room6))); + expect(room1, isNot(equals(room7))); + expect(room1, isNot(equals(room8))); + expect(room1, isNot(equals(room9))); + expect(room1, isNot(equals(room10))); + }); + test('Not equals different type', () { + expect(room1, isNot(equals(''))); + }); + }); + + group('Hashcode tests', () { + test('Hashcode consistent with equality', () { + expect(room1.hashCode, equals(room1.hashCode)); + expect(room1.hashCode, equals(room2.hashCode)); + }); + }); + + group('Totality tests', () { + test('name is total', () { + expect(room1.type.name, TypeMatcher()); + expect(room5.type.name, TypeMatcher()); + expect(room6.type.name, TypeMatcher()); + expect(room7.type.name, TypeMatcher()); + expect(room8.type.name, TypeMatcher()); + expect(room9.type.name, TypeMatcher()); + expect(room10.type.name, TypeMatcher()); + }); + test('icon is total', () { + expect(room1.icon(), TypeMatcher()); + expect(room5.icon(), TypeMatcher()); + expect(room6.icon(), TypeMatcher()); + expect(room7.icon(), TypeMatcher()); + expect(room8.icon(), TypeMatcher()); + expect(room9.icon(), TypeMatcher()); + expect(room10.icon(), TypeMatcher()); + }); + test('color is total', () { + expect(room1.color(), TypeMatcher()); + expect(room5.color(), TypeMatcher()); + expect(room6.color(), TypeMatcher()); + expect(room7.color(), TypeMatcher()); + expect(room8.color(), TypeMatcher()); + expect(room9.color(), TypeMatcher()); + expect(room10.color(), TypeMatcher()); + }); + }); + + group('fromJson tests', () { + test('fromJson works with valid type', () { + expect(Room.fromJson(json1), room1); + expect(Room.fromJson(json2), room5); + expect(Room.fromJson(json3), room6); + expect(Room.fromJson(json4), room7); + expect(Room.fromJson(json5), room8); + expect(Room.fromJson(json6), room9); + expect(Room.fromJson(json7), room10); + }); + test('fromJson throws exception for invalid type', () { + expect(() => Room.fromJson(json8), throwsFormatException); + }); + }); + + group('toJson tests', () { + test('toJson works', () { + expect(room1.toJson(), json1); + expect(room5.toJson(), json2); + expect(room6.toJson(), json3); + expect(room7.toJson(), json4); + expect(room8.toJson(), json5); + expect(room9.toJson(), json6); + expect(room10.toJson(), json7); + }); + }); +} diff --git a/hems_application/test/service/battery_service_test.dart b/hems_application/test/service/battery_service_test.dart new file mode 100644 index 0000000..d6e30ac --- /dev/null +++ b/hems_application/test/service/battery_service_test.dart @@ -0,0 +1,76 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/battery_info.dart'; +import 'package:hems_app/model/api/battery_status.dart'; +import 'package:hems_app/service/battery_service.dart'; +import 'package:test/test.dart'; + +void main() { + final batteryService = BatteryService(); + + final batInfo = BatteryInfo( + 12000, + 1347, + 3700, + 3700, + 5285.25, + BatteryStatus.discharging, + ); + + final json1 = jsonDecode('''{ + "capacity": 12000.0, + "max_charge": 3700.0, + "max_discharge": 3700.0, + "state_of_charge": 5285.25, + "target_soc": null, + "status": "Discharging", + "consumption": 1347.0 +}'''); + final json2 = jsonDecode('{"key": "value"}'); + + group('jsonBatteryInfo Tests', () { + test('Valid json successful', () { + final result = batteryService.jsonToBatteryInfo(json1); + + expect(result.isLeft, true); + expect(result.left, batInfo); + }); + test('Invalid json unsuccessful', () { + final result = batteryService.jsonToBatteryInfo(json2); + + expect(result.isRight, true); + }); + }); + + // Integration tests expect the basic configuration provided by the client in the backend. + group( + 'Integration tests', + () { + test('getBatteryInfo works', () async { + final result = await batteryService.getBatteryInfo(0, 0); + expect(result.isLeft, true); + }); + test('(un)setTargetSOC works', () async { + final result1 = await batteryService.unsetTargetSOC(0, 0); + + expect(result1.isLeft, true); + expect(result1.left.targetSoc, null); + + final result2 = await batteryService.setTargetSOC(0, 0, 10); + + expect(result2.isLeft, true); + expect(result2.left.targetSoc, 10); + + final result3 = await batteryService.unsetTargetSOC(0, 0); + + expect(result3.isLeft, true); + expect(result3.left.targetSoc, null); + }); + }, + tags: ['integration'], + skip: + const bool.hasEnvironment('HEMS_URL') + ? false + : 'HEMS_URL not set, skipping integration test', + ); +} diff --git a/hems_application/test/service/device_service_test.dart b/hems_application/test/service/device_service_test.dart new file mode 100644 index 0000000..cf071c9 --- /dev/null +++ b/hems_application/test/service/device_service_test.dart @@ -0,0 +1,12 @@ +import 'package:hems_app/service/device_service.dart'; +import 'package:test/test.dart'; + +void main() { + final deviceService = DeviceService(); + + // Integration tests expect the basic configuration provided by the client in the backend. + test('Valid json successful', () async { + final result = await deviceService.getDevices(); + expect(result.isLeft, true); + }); +} diff --git a/hems_application/test/service/entity_service_test.dart b/hems_application/test/service/entity_service_test.dart new file mode 100644 index 0000000..e2aef84 --- /dev/null +++ b/hems_application/test/service/entity_service_test.dart @@ -0,0 +1,82 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/entity_request.dart'; +import 'package:hems_app/service/entity_service.dart'; +import 'package:test/test.dart'; + +void main() { + final entityService = EntityService(); + + group('jsonToEntityRequest Tests', () { + final entityRequest = EntityRequest("1", "1000.0"); + final json1 = jsonDecode('''{ + "entity_id": "1", + "consumption": "1000.0" + }'''); + final json2 = jsonDecode('''{ + "consumption": "350.0" + }'''); + + test('Valid json successful', () { + final result = entityService.jsonToEntityRequest(json1); + + expect(result.isLeft, true); + expect(result.left, entityRequest); + }); + test('Invalid json unsuccessful', () { + final result = entityService.jsonToEntityRequest(json2); + + expect(result.isRight, true); + }); + }); + + // Integration tests expect the basic configuration provided by the client in the backend. + // In addition it expects home assistant to be configured with the demo configuration. + group( + 'Integration tests', + () { + test('getEntityState works', () async { + final result = await entityService.getEntityState(0, "light.bed_light"); + expect(result.isLeft, true); + }); + test('setEntityState works', () async { + final result1 = await entityService.setEntityState( + 0, + "light.bed_light", + false, + ); + expect(result1.isLeft, true); + + final result2 = await entityService.getEntityState( + 0, + "light.bed_light", + ); + expect(result2.isLeft, true); + expect(result2.left['state'], 'off'); + + final result3 = await entityService.setEntityState( + 0, + "light.bed_light", + true, + ); + expect(result3.isLeft, true); + + final result4 = await entityService.getEntityState( + 0, + "light.bed_light", + ); + expect(result4.isLeft, true); + expect(result4.left['state'], 'on'); + }); + test('getEntityConsumption works', () async { + final result = await entityService.getEntityConsumption(0, "sensor.power_consumption"); + expect(result.isLeft, true); + }); + }, + tags: ['integration'], + skip: + const bool.hasEnvironment('HEMS_URL') + ? false + : 'HEMS_URL not set, skipping integration test', + ); +} diff --git a/hems_application/test/service/meter_service_test.dart b/hems_application/test/service/meter_service_test.dart new file mode 100644 index 0000000..2a43e83 --- /dev/null +++ b/hems_application/test/service/meter_service_test.dart @@ -0,0 +1,56 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/meter_info.dart'; +import 'package:hems_app/service/meter_service.dart'; +import 'package:test/test.dart'; + +void main() { + final meterService = MeterService(); + + final meterInfo = MeterInfo(120.5, 350.0, 1, 101, 5500.0, 12000.0); + + final json1 = jsonDecode('''{ + "current_export": 120.5, + "current_import": 350.0, + "house_id": 1, + "meter_id": 101, + "total_export": 5500.0, + "total_import": 12000.0 + }'''); + final json2 = jsonDecode('''{ + "current_export": 120.5, + "current_import": null, + "total_export": 5500.0, + "total_import": 12000.0 + }'''); + + group('jsonToMeterInfo Tests', () { + test('Valid json successful', () { + final result = meterService.jsonToMeterInfo(json1); + + expect(result.isLeft, true); + expect(result.left, meterInfo); + }); + test('Invalid json unsuccessful', () { + final result = meterService.jsonToMeterInfo(json2); + + expect(result.isRight, true); + }); + }); + + // Integration tests expect the basic configuration provided by the client in the backend. + group( + 'Integration tests', + () { + test('getMeterInfo works', () async { + final result = await meterService.getMeterInfo(0, 0); + expect(result.isLeft, true); + }); + }, + tags: ['integration'], + skip: + const bool.hasEnvironment('HEMS_URL') + ? false + : 'HEMS_URL not set, skipping integration test', + ); +} diff --git a/hems_application/test/service/solar_service_test.dart b/hems_application/test/service/solar_service_test.dart new file mode 100644 index 0000000..5df1f0b --- /dev/null +++ b/hems_application/test/service/solar_service_test.dart @@ -0,0 +1,52 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/solar_info.dart'; +import 'package:hems_app/service/solar_service.dart'; +import 'package:test/test.dart'; + +void main() { + final solarService = SolarService(); + final solarInfo = SolarInfo(241.0); + + final json1 = jsonDecode('''{ + "consumption": 241.0 + }'''); + final json2 = jsonDecode('{"key": "value"}'); + + group('jsonSolarInfo Tests', () { + test('Valid json successful', () { + final result = solarService.jsonToSolarInfo(json1); + + expect(result.isLeft, true); + expect(result.left, solarInfo); + }); + test('Invalid json unsuccessful', () { + final result = solarService.jsonToSolarInfo(json2); + + expect(result.isRight, true); + }); + }); + + // Integration tests expect the basic configuration provided by the client in the backend. + group( + 'Integration tests', + () { + test('getSolarInfo works', () async { + final result = await solarService.getSolarInfo(0, 0); + expect(result.isLeft, true); + }); + test('setState works', () async { + final result1 = await solarService.setState(0, 0, false); + expect(result1.isLeft, true); + + final result2 = await solarService.setState(0, 0, true); + expect(result2.isLeft, true); + }); + }, + tags: ['integration'], + skip: + const bool.hasEnvironment('HEMS_URL') + ? false + : 'HEMS_URL not set, skipping integration test', + ); +} diff --git a/hems_application/test/service/thermal_service_test.dart b/hems_application/test/service/thermal_service_test.dart new file mode 100644 index 0000000..3f946ec --- /dev/null +++ b/hems_application/test/service/thermal_service_test.dart @@ -0,0 +1,76 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/thermal_info.dart'; +import 'package:hems_app/service/thermal_service.dart'; +import 'package:test/test.dart'; + +void main() { + final thermalService = ThermalService(); + + final thermalInfo = ThermalInfo(849.0, 10.0, 50.0, 35.0); + + final json1 = jsonDecode('''{ + "consumption": 849.0, + "current_temperature": 10.0, + "heating_power": 50.0, + "target_temperature": 35.0 + }'''); + final json2 = jsonDecode('''{ + "consumption": 609.0 + }'''); + final json3 = jsonDecode('''{ + "target_temperature": 30.0 + }'''); + final json4 = jsonDecode('''{ + "target_temperature": null + }'''); + + // Integration tests expect the basic configuration provided by the client in the backend. + group('jsonToThermalInfo Tests', () { + test('Valid json successful', () { + final result = thermalService.jsonToThermalInfo(json1); + + expect(result.isLeft, true); + expect(result.left, thermalInfo); + }); + test('Invalid json unsuccessful', () { + final result = thermalService.jsonToThermalInfo(json2); + + expect(result.isRight, true); + }); + }); + + group('jsonToTemperature Tests', () { + test('Valid json successful', () { + final result = thermalService.jsonToTemperature(json3); + + expect(result.isLeft, true); + expect(result.left, 30.0); + }); + test('Invalid json unsuccessful', () { + final result = thermalService.jsonToTemperature(json4); + + expect(result.isRight, true); + }); + }); + + // Integration tests expect the basic configuration provided by the client in the backend. + group( + 'Integration tests', + () { + test('getThermalInfo works', () async { + final result1 = await thermalService.getThermalInfo(0, 0); + expect(result1.isLeft, true); + }); + test('setTargetTemperature works', () async { + final result2 = await thermalService.setTargetTemperature(0, 0, 30.0); + expect(result2.left, 30.0); + }); + }, + tags: ['integration'], + skip: + const bool.hasEnvironment('HEMS_URL') + ? false + : 'HEMS_URL not set, skipping integration test', + ); +} diff --git a/hems_application/test/service/timeshifter_service_test.dart b/hems_application/test/service/timeshifter_service_test.dart new file mode 100644 index 0000000..51c3ed0 --- /dev/null +++ b/hems_application/test/service/timeshifter_service_test.dart @@ -0,0 +1,106 @@ +import 'dart:convert'; + +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/api/schedule_job.dart'; +import 'package:hems_app/service/timeshifter_service.dart'; +import 'package:complex/complex.dart'; +import 'package:test/test.dart'; +import 'package:hems_app/model/api/measurement.dart'; + +void main() { + final timeshifterService = TimeshifterService(); + + final validJson = jsonDecode(''' + { + "house_id": 1, + "entity_name": "WashingMachine", + "is_active": true, + "progress": 0.75, + "active_job_idx": 1, + "scheduled_jobs": [], + "consumption": {"value": 10.0, "unit": "kWh"}, + "profile": [{"re": 1.0, "im": 2.0}], + "active_job": null + } + '''); + + final invalidJson = jsonDecode('{"invalid": "json"}'); + + final deviceStatus = DeviceStatus( + 1, + 'WashingMachine', + true, + 0.75, + 1, + [], + Measurement(10.0, 'kWh'), + [Complex(1.0, 2.0)], + null, + ); + + // Integration tests expect the basic configuration provided by the client in the backend. + group('jsonToDeviceStatus Tests', () { + test('Valid json successful', () { + final result = timeshifterService.jsonToDeviceStatus(validJson); + expect(result.isLeft, true); + expect(result.left, deviceStatus); + }); + + test('Invalid json unsuccessful', () { + final result = timeshifterService.jsonToDeviceStatus(invalidJson); + expect(result.isRight, true); + }); + }); + + group( + 'Integration tests', + () { + final houseId = 0; + final entityName = 'WashingMachine'; + + test('getTimeshifterProperties works', () async { + final result = await timeshifterService.getTimeshifterProperties( + houseId, + entityName, + ); + expect(result.isLeft, true); + }); + + test('scheduleJob works + cancelJob works', () async { + final job = ScheduleJob(0, 4321); + + final result = await timeshifterService.scheduleJob( + houseId, + entityName, + job, + ); + expect(result.isLeft, true); + final result1 = await timeshifterService.cancelJob( + houseId, + entityName, + 0, + ); + expect(result1.isLeft, true); + }); + + test('shutdownTimeshifter works', () async { + final result = await timeshifterService.shutdownTimeshifter( + houseId, + entityName, + ); + expect(result.isLeft, true); + }); + + test('getCurrentHouseTime works', () async { + final result = await timeshifterService.getCurrentHouseTime(houseId); + expect(result.isLeft, true); + expect(int.tryParse(result.left), isNotNull); + }); + }, + tags: ['integration'], + skip: + const bool.hasEnvironment('HEMS_URL') + ? false + : 'HEMS_URL not set, skipping integration test', + ); +} diff --git a/hems_application/test/testing_utils/wrap_with_material_app.dart b/hems_application/test/testing_utils/wrap_with_material_app.dart new file mode 100644 index 0000000..949ec91 --- /dev/null +++ b/hems_application/test/testing_utils/wrap_with_material_app.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:hems_app/l10n/app_localizations.dart'; + +MaterialApp wrapWithMaterialApp(Widget child) { + return MaterialApp( + localizationsDelegates: [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + supportedLocales: [Locale('en'), Locale('nl')], + locale: Locale('en'), + home: Scaffold(body: child), + ); +} diff --git a/hems_application/test/util/hems_backend_util_test.dart b/hems_application/test/util/hems_backend_util_test.dart new file mode 100644 index 0000000..6428805 --- /dev/null +++ b/hems_application/test/util/hems_backend_util_test.dart @@ -0,0 +1,67 @@ +import 'package:hems_app/util/hems_backend_util.dart'; +import 'package:http/http.dart' as http; +import 'package:test/test.dart'; + +void main() { + final hemsBackendUtil = HemsBackendUtil(); + + final response1 = http.Response('body', 200); + final response2 = http.Response('body', 500); + final response3 = http.Response('{"key": "value"}', 200); + final response4 = http.Response('{"key": "value"}', 500); + + group('responseToString tests', () { + test('Status 200 successful', () { + final result = hemsBackendUtil.responseToString(response1); + + expect(result.isLeft, true); + expect(result.left, 'body'); + }); + test('Status 500 unsuccessful', () { + final result = hemsBackendUtil.responseToString(response2); + + expect(result.isRight, true); + }); + }); + + group('responseToJson tests', () { + test('Status 200 successful', () { + final result = hemsBackendUtil.responseToJson(response3); + + expect(result.isLeft, true); + expect(result.left, {'key': 'value'}); + }); + test('Status 500 unsuccessful', () { + final result = hemsBackendUtil.responseToJson(response4); + + expect(result.isRight, true); + }); + test('Invalid json unsuccessful', () { + final result = hemsBackendUtil.responseToJson(response1); + + expect(result.isRight, true); + }); + }); + + group('no url error tests', () { + final hemsBackendUtilNoUrl = HemsBackendUtil(); + hemsBackendUtilNoUrl.baseUrl = null; + + test('get plain no url error', () async { + final result = await hemsBackendUtilNoUrl.getPlain(''); + expect(result.isRight, true); + }); + test('get json no url error', () async { + final result = await hemsBackendUtilNoUrl.getJson(''); + expect(result.isRight, true); + }); + test('delete plain no url error', () async { + final result = await hemsBackendUtilNoUrl.deletePlain(''); + expect(result.isRight, true); + }); + test('post json no url error', () async { + final result = await hemsBackendUtilNoUrl.postJSON('', {}); + expect(result.isRight, true); + }); + }); +} diff --git a/hems_application/test/util/timeshifter_util_test.dart b/hems_application/test/util/timeshifter_util_test.dart new file mode 100644 index 0000000..c0fff0b --- /dev/null +++ b/hems_application/test/util/timeshifter_util_test.dart @@ -0,0 +1,271 @@ +import 'package:either_dart/either.dart'; +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/api/schedule_job.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/service/timeshifter_service.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/util/timeshifter_util.dart'; +import 'package:hems_app/widget/schedule_view.dart'; +import 'package:test/test.dart'; + +void main() { + group( + 'Integration tests', + () { + test('List jobs', () async { + AppState appState = AppState(); + + Device device = Device( + houseId: 0, + deviceId: "DishWasher", + type: DeviceType.timeshifter, + ); + Room room = Room( + type: RoomType.bathroom, + name: "Bathroom", + devices: [device], + ); + appState.devices = [device]; + appState.rooms = [room]; + + // Clear any existing jobs to avoid conflicts + List? jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + while (jobs != null && jobs.isNotEmpty) { + await TimeshifterUtil().cancelJob(null, jobs.first.id, jobs.first.startTime, device); + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + } + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 0); + + DisplayJob job = DisplayJob( + id: -1, + startTime: DateTime.now().add(Duration(hours: 1)), + duration: Duration(hours: 3), + device: device, + room: room, + ); + + await TimeshifterService().scheduleJob( + 0, + device.deviceId, + ScheduleJob(3600, 10800) + ); + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 1); + expect(jobs.first.duration, job.duration); + expect(jobs.first.room, room); + expect(jobs.first.device, device); + }); + + test('Jobs are filtered correctly', () async { + AppState appState = AppState(); + + Device device = Device( + houseId: 0, + deviceId: "DishWasher", + type: DeviceType.timeshifter, + ); + Room room = Room( + type: RoomType.bathroom, + name: "Bathroom", + devices: [device], + ); + appState.devices = [device]; + appState.rooms = [room]; + + // Clear any existing jobs to avoid conflicts + List? jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + while (jobs != null && jobs.isNotEmpty) { + await TimeshifterUtil().cancelJob(null, jobs.first.id, jobs.first.startTime, device); + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + } + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 0); + + DisplayJob job = DisplayJob( + id: -1, + startTime: DateTime.now().add(Duration(seconds: 100000)), + duration: Duration(hours: 3), + device: device, + room: room, + ); + + await TimeshifterService().scheduleJob( + 0, + device.deviceId, + ScheduleJob(3600, 10800) + ); + + await TimeshifterService().scheduleJob( + 0, + device.deviceId, + ScheduleJob(100000, 10800) + ); + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId, now: DateTime.now().add(Duration(hours: 5))); + expect(jobs, isNotNull); + expect(jobs!.length, 1); + expect(jobs.first.duration, job.duration); + expect(jobs.first.room, room); + expect(jobs.first.device, device); + }); + + test('Jobs are sorted correctly', () async { + AppState appState = AppState(); + + Device device = Device( + houseId: 0, + deviceId: "DishWasher", + type: DeviceType.timeshifter, + ); + Room room = Room( + type: RoomType.bathroom, + name: "Bathroom", + devices: [device], + ); + appState.devices = [device]; + appState.rooms = [room]; + + // Clear any existing jobs to avoid conflicts + List? jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + while (jobs != null && jobs.isNotEmpty) { + await TimeshifterUtil().cancelJob(null, jobs.first.id, jobs.first.startTime, device); + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + } + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 0); + + await TimeshifterService().scheduleJob( + 0, + device.deviceId, + ScheduleJob(10000, 10800) + ); + + await TimeshifterService().scheduleJob( + 0, + device.deviceId, + ScheduleJob(500000, 15800) + ); + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 2); + expect(jobs.first.duration, Duration(seconds: 10800)); + expect(jobs.first.room, room); + expect(jobs.first.device, device); + expect(jobs[1].duration, Duration(seconds: 15800)); + expect(jobs[1].room, room); + expect(jobs[1].device, device); + }); + + test('Cancel jobs', () async { + AppState appState = AppState(); + + Device device = Device( + houseId: 0, + deviceId: "DishWasher", + type: DeviceType.timeshifter, + ); + Room room = Room( + type: RoomType.bathroom, + name: "Bathroom", + devices: [device], + ); + appState.devices = [device]; + appState.rooms = [room]; + + // Clear any existing jobs to avoid conflicts + List? jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + while (jobs != null && jobs.isNotEmpty) { + await TimeshifterUtil().cancelJob(null, jobs.first.id, jobs.first.startTime, device); + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + } + + await TimeshifterService().scheduleJob( + 0, + device.deviceId, + ScheduleJob(3600, 10800) + ); + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 1); + + await TimeshifterService().scheduleJob( + 0, + device.deviceId, + ScheduleJob(20000, 10800) + ); + + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 2); + + await TimeshifterUtil().cancelJob(null, jobs.first.id, jobs.first.startTime, device); + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 1); + + await TimeshifterUtil().cancelJob(null, jobs.first.id, jobs.first.startTime, device); + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + expect(jobs, isNotNull); + expect(jobs!.length, 0); + }); + + test("Schedule job", () async { + AppState appState = AppState(); + + Device device = Device( + houseId: 0, + deviceId: "DishWasher", + type: DeviceType.timeshifter, + ); + Room room = Room( + type: RoomType.bathroom, + name: "Bathroom", + devices: [device], + ); + appState.devices = [device]; + appState.rooms = [room]; + + // Clear any existing jobs to avoid conflicts + List? jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + while (jobs != null && jobs.isNotEmpty) { + await TimeshifterUtil().cancelJob(null, jobs.first.id, jobs.first.startTime, device); + jobs = await TimeshifterUtil().loadJobs(null, deviceId: device.deviceId); + } + + DisplayJob job = DisplayJob( + id: -1, + startTime: DateTime.now().add(Duration(hours: 1)), + duration: Duration(hours: 3), + device: device, + room: room, + ); + + await TimeshifterUtil().scheduleJob(null, job); + + Either result = await TimeshifterService().getTimeshifterProperties(device.houseId, device.deviceId); + expect(result.isLeft, true); + final deviceStatus = result.left; + expect(deviceStatus.scheduledJobs.length, 1); + expect(deviceStatus.scheduledJobs.first.endTime - deviceStatus.scheduledJobs.first.startTime, job.duration.inSeconds); + + }); + }, + tags: ['integration'], + skip: + const bool.hasEnvironment('HEMS_URL') + ? false + : 'HEMS_URL not set, skipping integration test',) + ; +} \ No newline at end of file diff --git a/hems_application/test/widget/analytics/animated_power_flow_test.dart b/hems_application/test/widget/analytics/animated_power_flow_test.dart new file mode 100644 index 0000000..1129779 --- /dev/null +++ b/hems_application/test/widget/analytics/animated_power_flow_test.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/state/stat_collector.dart'; +import 'package:hems_app/widget/analytics/animated_power_flow.dart'; +import 'package:hems_app/widget/analytics/power_flow_painter.dart'; + +void main() { + testWidgets('Displays correctly', (tester) async { + final statCollector = StatCollector(); + + statCollector.consumers = [PowerSink.devices, PowerSink.battery]; + statCollector.producers = [PowerSink.net, PowerSink.solar]; + + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: AnimatedPowerFlow(), + ), + ); + + final painterFinder = find.byType(CustomPaint); + final iconFinder = find.byType(Icon); + + expect(painterFinder, findsAny); + expect(iconFinder, findsExactly(4)); + }); +} diff --git a/hems_application/test/widget/analytics/consumption_chart_test.dart b/hems_application/test/widget/analytics/consumption_chart_test.dart new file mode 100644 index 0000000..4f696a8 --- /dev/null +++ b/hems_application/test/widget/analytics/consumption_chart_test.dart @@ -0,0 +1,49 @@ +import 'package:fl_chart/fl_chart.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/api/measurement.dart'; +import 'package:hems_app/state/stat_collector.dart'; +import 'package:hems_app/widget/analytics/consumption_chart.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays correctly with empty data', (tester) async { + await tester.pumpWidget(wrapWithMaterialApp(ConsumptionChart())); + + final chartFinder = find.byType(BarChart); + + expect(chartFinder, findsOneWidget); + }); + + testWidgets('Displays correctly with data', (tester) async { + final statCollector = StatCollector(); + + statCollector.consumptionData = [ + MapEntry( + Measurement(100, 'W'), + DateTime.now().subtract(Duration(seconds: 5)), + ), + MapEntry( + Measurement(200, 'W'), + DateTime.now().subtract(Duration(seconds: 10)), + ), + MapEntry( + Measurement(300, 'W'), + DateTime.now().subtract(Duration(seconds: 15)), + ), + MapEntry( + Measurement(400, 'W'), + DateTime.now().subtract(Duration(seconds: 20)), + ), + MapEntry( + Measurement(500, 'W'), + DateTime.now().subtract(Duration(seconds: 25)), + ), + ]; + + await tester.pumpWidget(wrapWithMaterialApp(ConsumptionChart())); + + final chartFinder = find.byType(BarChart); + + expect(chartFinder, findsOneWidget); + }); +} diff --git a/hems_application/test/widget/device/battery_info_card_test.dart b/hems_application/test/widget/device/battery_info_card_test.dart new file mode 100644 index 0000000..09dce27 --- /dev/null +++ b/hems_application/test/widget/device/battery_info_card_test.dart @@ -0,0 +1,146 @@ +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/api/battery_info.dart'; +import 'package:hems_app/model/api/battery_status.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/widget/device/battery_info_card.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +Device battery = Device(deviceId: "0", houseId: 0, type: DeviceType.battery); + +void main() { + testWidgets('Displays correctly', (tester) async { + BatteryInfo batInfo1 = BatteryInfo( + 2000, + 100, + 100, + 100, + 1000, + BatteryStatus.idle, + ); + BatteryInfo batInfo2 = BatteryInfo( + 2000, + 100, + 100, + 100, + 1000, + BatteryStatus.idle, + 0, + ); + BatteryInfo batInfo3 = BatteryInfo( + 2000, + 100, + 100, + 100, + 1000, + BatteryStatus.charging, + ); + BatteryInfo batInfo4 = BatteryInfo( + 2000, + 100, + 100, + 100, + 1000, + BatteryStatus.charging, + 0, + ); + BatteryInfo batInfo5 = BatteryInfo( + 2000, + 100, + 100, + 100, + 1000, + BatteryStatus.discharging, + ); + BatteryInfo batInfo6 = BatteryInfo( + 2000, + 100, + 100, + 100, + 1000, + BatteryStatus.discharging, + 0, + ); + + await tester.pumpWidget( + wrapWithMaterialApp(BatteryInfoCard(battery: battery)), + ); + + final batteryState = + tester.state(find.byType(BatteryInfoCard)) as BatteryState; + final percentageFinder = find.textContaining('50%'); + + batteryState.setState(() { + batteryState.batInfo = Left(batInfo1); + }); + await tester.pump(); + expect(percentageFinder, findsOne); + + batteryState.setState(() { + batteryState.batInfo = Left(batInfo2); + }); + await tester.pump(); + expect(percentageFinder, findsOne); + + batteryState.setState(() { + batteryState.batInfo = Left(batInfo3); + }); + await tester.pump(); + expect(percentageFinder, findsOne); + + batteryState.setState(() { + batteryState.batInfo = Left(batInfo4); + }); + await tester.pump(); + expect(percentageFinder, findsOne); + + batteryState.setState(() { + batteryState.batInfo = Left(batInfo5); + }); + await tester.pump(); + expect(percentageFinder, findsOne); + + batteryState.setState(() { + batteryState.batInfo = Left(batInfo6); + }); + await tester.pump(); + expect(percentageFinder, findsOne); + }); + + testWidgets('Displays error correctly', (tester) async { + String message = 'not found'; + + await tester.pumpWidget( + wrapWithMaterialApp(BatteryInfoCard(battery: battery)), + ); + + final batteryState = + tester.state(find.byType(BatteryInfoCard)) as BatteryState; + batteryState.setState(() { + batteryState.batInfo = Right(message); + }); + + await tester.pump(); + + final errorFinder = find.textContaining(message); + expect(errorFinder, findsOne); + }); + + testWidgets('Displays progress correctly', (tester) async { + await tester.pumpWidget( + wrapWithMaterialApp(BatteryInfoCard(battery: battery)), + ); + + final batteryState = + tester.state(find.byType(BatteryInfoCard)) as BatteryState; + batteryState.setState(() { + batteryState.batInfo = null; + }); + + await tester.pump(); + + final progressFinder = find.bySubtype(); + expect(progressFinder, findsOne); + }); +} diff --git a/hems_application/test/widget/device/ha_entity_info_card_test.dart b/hems_application/test/widget/device/ha_entity_info_card_test.dart new file mode 100644 index 0000000..fe24d91 --- /dev/null +++ b/hems_application/test/widget/device/ha_entity_info_card_test.dart @@ -0,0 +1,98 @@ +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/widget/device/ha_entity_info_card.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +Device entity = Device( + deviceId: "light.bed_light", + houseId: 0, + type: DeviceType.haEntity, +); + +void main() { + testWidgets('Displays correctly', (tester) async { + Either, String>? entityState = Left({ + "attributes": { + "brightness": 180, + "color_mode": "color_temp", + "color_temp": 380, + "color_temp_kelvin": 2631, + "effect": "rainbow", + "effect_list": ["rainbow", "off"], + "friendly_name": "Bed Light", + "hs_color": [28.55, 67.974], + "max_color_temp_kelvin": 6535, + "max_mireds": 500, + "min_color_temp_kelvin": 2000, + "min_mireds": 153, + "rgb_color": [255, 164, 82], + "supported_color_modes": ["color_temp", "hs"], + "supported_features": 4, + "xy_color": [0.532, 0.388], + }, + "context": { + "id": "01JX5GMB27FAJQE3QATSTQ58JN", + "parent_id": null, + "user_id": "5a7289fe4a1b4f07a5781fde5cf3b75f", + }, + "entity_id": "light.bed_light", + "last_changed": "2025-06-07T15:37:27.367182+00:00", + "last_reported": "2025-06-07T15:37:27.367182+00:00", + "last_updated": "2025-06-07T15:37:27.367182+00:00", + "state": "on", + }); + await tester.pumpWidget( + wrapWithMaterialApp(HaEntityInfoCard(entity: entity)), + ); + + final haEntityInfoCardState = + tester.state(find.byType(HaEntityInfoCard)) as HaEntityInfoCardState; + haEntityInfoCardState.setState(() { + haEntityInfoCardState.entityState = entityState; + }); + + await tester.pump(); + + final toggleFinder = find.byType(Switch); + + expect(toggleFinder, findsOneWidget); + }); + + testWidgets('Displays error correctly', (tester) async { + String message = 'not found'; + + await tester.pumpWidget( + wrapWithMaterialApp(HaEntityInfoCard(entity: entity)), + ); + + final haEntityInfoCardState = + tester.state(find.byType(HaEntityInfoCard)) as HaEntityInfoCardState; + haEntityInfoCardState.setState(() { + haEntityInfoCardState.entityState = Right(message); + }); + + await tester.pump(); + + final errorFinder = find.textContaining(message); + expect(errorFinder, findsOne); + }); + + testWidgets('Displays progress correctly', (tester) async { + await tester.pumpWidget( + wrapWithMaterialApp(HaEntityInfoCard(entity: entity)), + ); + + final solhaEntityInfoCardStatearState = + tester.state(find.byType(HaEntityInfoCard)) as HaEntityInfoCardState; + solhaEntityInfoCardStatearState.setState(() { + solhaEntityInfoCardStatearState.entityState = null; + }); + + await tester.pump(); + + final progressFinder = find.bySubtype(); + expect(progressFinder, findsOne); + }); +} diff --git a/hems_application/test/widget/device/meter_info_card_test.dart b/hems_application/test/widget/device/meter_info_card_test.dart new file mode 100644 index 0000000..a5dfa47 --- /dev/null +++ b/hems_application/test/widget/device/meter_info_card_test.dart @@ -0,0 +1,87 @@ +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/api/meter_info.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/widget/device/meter_info_card.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +Device meter = Device(deviceId: "0", houseId: 0, type: DeviceType.meter); + +void main() { + testWidgets('Displays correctly export', (tester) async { + MeterInfo meterInfo = MeterInfo(100, 0, 0, 0, 1200, 1300); + + await tester.pumpWidget(wrapWithMaterialApp(MeterInfoCard(meter: meter))); + + final meterState = + tester.state(find.byType(MeterInfoCard)) as MeterInfoState; + meterState.setState(() { + meterState.meterInfo = Left(meterInfo); + }); + + await tester.pump(); + + final exportFinder = find.textContaining('100'); + final totalexportFinder = find.textContaining('1200'); + final totalimportFinder = find.textContaining('1300'); + + expect(exportFinder, findsOneWidget); + expect(totalexportFinder, findsOneWidget); + expect(totalimportFinder, findsOneWidget); + }); + + testWidgets('Displays correctly import', (tester) async { + MeterInfo meterInfo = MeterInfo(0, 250, 0, 0, 1200, 1300); + + await tester.pumpWidget(wrapWithMaterialApp(MeterInfoCard(meter: meter))); + + final meterState = + tester.state(find.byType(MeterInfoCard)) as MeterInfoState; + meterState.setState(() { + meterState.meterInfo = Left(meterInfo); + }); + + await tester.pump(); + + final importFinder = find.textContaining('250'); + final totalexportFinder = find.textContaining('1200'); + final totalimportFinder = find.textContaining('1300'); + + expect(importFinder, findsOneWidget); + expect(totalexportFinder, findsOneWidget); + expect(totalimportFinder, findsOneWidget); + }); + + testWidgets('Displays error correctly', (tester) async { + String message = 'not found'; + + await tester.pumpWidget(wrapWithMaterialApp(MeterInfoCard(meter: meter))); + + final meterState = + tester.state(find.byType(MeterInfoCard)) as MeterInfoState; + meterState.setState(() { + meterState.meterInfo = Right(message); + }); + + await tester.pump(); + + final errorFinder = find.textContaining(message); + expect(errorFinder, findsOne); + }); + + testWidgets('Displays progress correctly', (tester) async { + await tester.pumpWidget(wrapWithMaterialApp(MeterInfoCard(meter: meter))); + + final meterState = + tester.state(find.byType(MeterInfoCard)) as MeterInfoState; + meterState.setState(() { + meterState.meterInfo = null; + }); + + await tester.pump(); + + final progressFinder = find.bySubtype(); + expect(progressFinder, findsOne); + }); +} diff --git a/hems_application/test/widget/device/solar_info_card_test.dart b/hems_application/test/widget/device/solar_info_card_test.dart new file mode 100644 index 0000000..87c3ada --- /dev/null +++ b/hems_application/test/widget/device/solar_info_card_test.dart @@ -0,0 +1,69 @@ +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/api/solar_info.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/widget/device/solar_info_card.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +Device solarPanel = Device(deviceId: "0", houseId: 0, type: DeviceType.solar); + +void main() { + testWidgets('Displays correctly', (tester) async { + SolarInfo solarInfo = SolarInfo(2000); + + await tester.pumpWidget( + wrapWithMaterialApp(SolarInfoCard(solarPanel: solarPanel)), + ); + + final solarState = + tester.state(find.byType(SolarInfoCard)) as SolarInfoState; + solarState.setState(() { + solarState.solarInfo = Left(solarInfo); + }); + + await tester.pump(); + + final toggleFinder = find.byType(Switch); + final productionFinder = find.textContaining('2000'); + + expect(toggleFinder, findsOneWidget); + expect(productionFinder, findsOneWidget); + }); + + testWidgets('Displays error correctly', (tester) async { + String message = 'not found'; + + await tester.pumpWidget( + wrapWithMaterialApp(SolarInfoCard(solarPanel: solarPanel)), + ); + + final solarState = + tester.state(find.byType(SolarInfoCard)) as SolarInfoState; + solarState.setState(() { + solarState.solarInfo = Right(message); + }); + + await tester.pump(); + + final errorFinder = find.textContaining(message); + expect(errorFinder, findsOne); + }); + + testWidgets('Displays progress correctly', (tester) async { + await tester.pumpWidget( + wrapWithMaterialApp(SolarInfoCard(solarPanel: solarPanel)), + ); + + final solarState = + tester.state(find.byType(SolarInfoCard)) as SolarInfoState; + solarState.setState(() { + solarState.solarInfo = null; + }); + + await tester.pump(); + + final progressFinder = find.bySubtype(); + expect(progressFinder, findsOne); + }); +} diff --git a/hems_application/test/widget/device/solar_toggle_switch_test.dart b/hems_application/test/widget/device/solar_toggle_switch_test.dart new file mode 100644 index 0000000..564f64c --- /dev/null +++ b/hems_application/test/widget/device/solar_toggle_switch_test.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/device/solar_toggle_switch.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +Device solarPanel = Device(deviceId: "0", houseId: 0, type: DeviceType.solar); + +void main() { + testWidgets('Displays correctly', (tester) async { + final appState = AppState(); + final switchFinder = find.byType(Switch); + + appState.isSolarEnabled = false; + + await tester.pumpWidget( + wrapWithMaterialApp(SolarToggleSwitch(solarPanel: solarPanel)), + ); + expect(switchFinder, findsOneWidget); + + appState.isSolarEnabled = true; + await tester.pump(); + expect(switchFinder, findsOneWidget); + }); +} diff --git a/hems_application/test/widget/device/thermal_info_card_test.dart b/hems_application/test/widget/device/thermal_info_card_test.dart new file mode 100644 index 0000000..f86ce3b --- /dev/null +++ b/hems_application/test/widget/device/thermal_info_card_test.dart @@ -0,0 +1,67 @@ +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/api/thermal_info.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/widget/device/thermal_info_card.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +Device thermostat = Device(deviceId: "0", houseId: 0, type: DeviceType.thermal); + +void main() { + testWidgets('Displays correctly', (tester) async { + ThermalInfo thermalInfo = ThermalInfo(100, 25, 100, 30); + + await tester.pumpWidget( + wrapWithMaterialApp(ThermalInfoCard(thermostat: thermostat)), + ); + + final thermalState = + tester.state(find.byType(ThermalInfoCard)) as ThermalInfoState; + thermalState.setState(() { + thermalState.thermalInfo = Left(thermalInfo); + }); + + await tester.pump(); + + final paintFinder = find.byType(CustomPaint); + + expect(paintFinder, findsAny); + }); + + testWidgets('Displays error correctly', (tester) async { + String message = 'not found'; + + await tester.pumpWidget( + wrapWithMaterialApp(ThermalInfoCard(thermostat: thermostat)), + ); + + final thermalState = + tester.state(find.byType(ThermalInfoCard)) as ThermalInfoState; + thermalState.setState(() { + thermalState.thermalInfo = Right(message); + }); + + await tester.pump(); + + final errorFinder = find.textContaining(message); + expect(errorFinder, findsOne); + }); + + testWidgets('Displays progress correctly', (tester) async { + await tester.pumpWidget( + wrapWithMaterialApp(ThermalInfoCard(thermostat: thermostat)), + ); + + final thermalState = + tester.state(find.byType(ThermalInfoCard)) as ThermalInfoState; + thermalState.setState(() { + thermalState.thermalInfo = null; + }); + + await tester.pump(); + + final progressFinder = find.bySubtype(); + expect(progressFinder, findsOne); + }); +} diff --git a/hems_application/test/widget/device/timeshifter_card_test.dart b/hems_application/test/widget/device/timeshifter_card_test.dart new file mode 100644 index 0000000..c07fd80 --- /dev/null +++ b/hems_application/test/widget/device/timeshifter_card_test.dart @@ -0,0 +1,143 @@ +import 'package:either_dart/either.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/api/device_status.dart'; +import 'package:hems_app/model/api/job.dart'; +import 'package:hems_app/model/api/measurement.dart'; +import 'package:hems_app/widget/device/timeshifter_card.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays correctly no job', (tester) async { + String id = 'dishwasher'; + DeviceStatus status = DeviceStatus( + 0, + 'dishwasher-house-0', + false, + 0.0, + -1, + [], + Measurement(0.0, 'W'), + [], + ); + + await tester.pumpWidget(wrapWithMaterialApp(TimeshifterCard(id))); + + final timeshifterState = + tester.state(find.byType(TimeshifterCard)) as TimeshifterState; + timeshifterState.setState(() { + timeshifterState.deviceStatus = Left(status); + }); + + await tester.pump(); + + final idFinder = find.textContaining(id); + expect(idFinder, findsOneWidget); + }); + + testWidgets('Displays correctly active job', (tester) async { + String id = 'dishwasher'; + int time = DateTime.now().millisecondsSinceEpoch ~/ 1000; + Job job = Job(time - 59, time + 2 * 3600 + 21 * 60 + 59); + + DeviceStatus status = DeviceStatus( + 0, + 'dishwasher-house-0', + true, + 100.0, + 0, + [job], + Measurement(100.0, 'W'), + [], + job, + ); + + await tester.pumpWidget(wrapWithMaterialApp(TimeshifterCard(id))); + + final timeshifterState = + tester.state(find.byType(TimeshifterCard)) as TimeshifterState; + timeshifterState.setState(() { + timeshifterState.deviceStatus = Left(status); + timeshifterState.timeDelay = 3600; + }); + + await tester.pump(); + + final idFinder = find.textContaining(id); + final remainderFinder = find.textContaining(RegExp(r'1[^0-9]+21')); + + expect(idFinder, findsOneWidget); + expect(remainderFinder, findsOneWidget); + }); + + testWidgets('Displays correctly with scheduled job', (tester) async { + String id = 'dishwasher'; + int time = DateTime.now().millisecondsSinceEpoch ~/ 1000; + Job job = Job( + time + 2 * 3600 + 25 * 60 + 59, + time + 4 * 3600 + 21 * 60 + 59, + ); + + DeviceStatus status = DeviceStatus( + 0, + 'dishwasher-house-0', + false, + 0.0, + -1, + [job], + Measurement(0.0, 'W'), + [], + ); + + await tester.pumpWidget(wrapWithMaterialApp(TimeshifterCard(id))); + + final timeshifterState = + tester.state(find.byType(TimeshifterCard)) as TimeshifterState; + timeshifterState.setState(() { + timeshifterState.deviceStatus = Left(status); + timeshifterState.timeDelay = 3600; + }); + + await tester.pump(); + + final idFinder = find.textContaining(id); + final tillFinder = find.textContaining(RegExp(r'1[^0-9]+25')); + final durationFinder = find.textContaining(RegExp(r'1[^0-9]+56')); + + expect(idFinder, findsOneWidget); + expect(tillFinder, findsOneWidget); + expect(durationFinder, findsOneWidget); + }); + + testWidgets('Displays error correctly', (tester) async { + String message = 'not found'; + + await tester.pumpWidget(wrapWithMaterialApp(TimeshifterCard('dishwasher'))); + + final timeshifterState = + tester.state(find.byType(TimeshifterCard)) as TimeshifterState; + timeshifterState.setState(() { + timeshifterState.deviceStatus = Right(message); + }); + + await tester.pump(); + + final errorFinder = find.textContaining(message); + expect(errorFinder, findsOne); + }); + + testWidgets('Displays progress correctly', (tester) async { + await tester.pumpWidget(wrapWithMaterialApp(TimeshifterCard('dishwasher'))); + + final timeshifterState = + tester.state(find.byType(TimeshifterCard)) as TimeshifterState; + timeshifterState.setState(() { + timeshifterState.deviceStatus = null; + }); + + await tester.pump(); + + final progressFinder = find.bySubtype(); + expect(progressFinder, findsOne); + }); +} diff --git a/hems_application/test/widget/page/create_job_test.dart b/hems_application/test/widget/page/create_job_test.dart new file mode 100644 index 0000000..bb41cc1 --- /dev/null +++ b/hems_application/test/widget/page/create_job_test.dart @@ -0,0 +1,135 @@ +import 'package:duration_picker/duration_picker.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/page/create_job.dart'; +import 'package:hems_app/widget/page/device_selection_page.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Create job buttons work', (tester) async { + final appState = AppState(); + appState.devices = [ + Device(houseId: 0, deviceId: 'Dish Washer', type: DeviceType.timeshifter), + ]; + + await tester.pumpWidget(wrapWithMaterialApp(CreateJob())); + + final deviceFinder = find.text('Device'); + final dateFinder = find.text('Date'); + final startTimeFinder = find.text('Start Time'); + final durationFinder = find.text('Duration'); + final createFinder = find.text('Create job'); + + final deviceSelPageFinder = find.byType(DeviceSelectionPage); + final createJobPageFinder = find.byType(CreateJob); + + final durationPickerFinder = find.byType(DurationPickerDialog); + final datePickerFinder = find.byType(DatePickerDialog); + final timePickerFinder = find.byType(TimePickerDialog); + + final okFinder = find.text('OK'); + final dishWasherFinder = find.text('Dish Washer'); + + expect(deviceFinder, findsOneWidget); + expect(dateFinder, findsOneWidget); + expect(startTimeFinder, findsOneWidget); + expect(durationFinder, findsOneWidget); + expect(createFinder, findsOneWidget); + + expect(createJobPageFinder, findsOneWidget); + expect(deviceSelPageFinder, findsNothing); + + expect(durationPickerFinder, findsNothing); + expect(datePickerFinder, findsNothing); + expect(timePickerFinder, findsNothing); + expect(dishWasherFinder, findsNothing); + + await tester.tap(deviceFinder); + await tester.pumpAndSettle(); + + expect(createJobPageFinder, findsNothing); + expect(deviceSelPageFinder, findsOneWidget); + + await tester.tap(find.text('Dish Washer')); + await tester.pumpAndSettle(); + + final pageState = tester.state(createJobPageFinder) as CreateJobState; + pageState.setState(() { + pageState.minimumDuration = Duration(seconds: 3600); + }); + await tester.pump(); + + await tester.tap(durationFinder); + await tester.pumpAndSettle(); + + expect(durationPickerFinder, findsOneWidget); + expect(datePickerFinder, findsNothing); + expect(timePickerFinder, findsNothing); + expect(dishWasherFinder, findsOneWidget); + + await tester.tap(okFinder); + await tester.pumpAndSettle(); + + await tester.tap(dateFinder); + await tester.pumpAndSettle(); + + expect(durationPickerFinder, findsNothing); + expect(datePickerFinder, findsOneWidget); + expect(timePickerFinder, findsNothing); + expect(dishWasherFinder, findsOneWidget); + + await tester.tap(okFinder); + await tester.pumpAndSettle(); + + await tester.tap(startTimeFinder); + await tester.pumpAndSettle(); + + expect(durationPickerFinder, findsNothing); + expect(datePickerFinder, findsNothing); + expect(timePickerFinder, findsOneWidget); + expect(dishWasherFinder, findsOneWidget); + + await tester.tap(okFinder); + await tester.pumpAndSettle(); + }); + + testWidgets('Minimum duration enforced', (tester) async { + await tester.pumpWidget(wrapWithMaterialApp(CreateJob())); + + final durationFinder = find.text('Duration'); + final createJobPageFinder = find.byType(CreateJob); + final snackbarFinder = find.byType(SnackBar); + final okFinder = find.text('OK'); + + final pageState = tester.state(createJobPageFinder) as CreateJobState; + + expect(durationFinder, findsOneWidget); + expect(createJobPageFinder, findsOneWidget); + expect(snackbarFinder, findsNothing); + + pageState.setState(() { + pageState.minimumDuration = Duration(seconds: 3600); + pageState.device = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + }); + await tester.pump(); + + await tester.tap(durationFinder); + await tester.pumpAndSettle(); + + pageState.setState(() { + pageState.minimumDuration = Duration(seconds: 7200); + }); + await tester.pump(); + + await tester.tap(okFinder); + await tester.pumpAndSettle(); + + expect(snackbarFinder, findsOneWidget); + }); +} diff --git a/hems_application/test/widget/page/device_schedule_page_test.dart b/hems_application/test/widget/page/device_schedule_page_test.dart new file mode 100644 index 0000000..234ecae --- /dev/null +++ b/hems_application/test/widget/page/device_schedule_page_test.dart @@ -0,0 +1,139 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/page/create_job.dart'; +import 'package:hems_app/widget/page/device_schedule_page.dart'; +import 'package:hems_app/widget/schedule_view.dart'; +import 'package:hems_app/widget/scheduled_job.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays Correctly', (tester) async { + + final device1 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [device1], + ); + + final job1 = DisplayJob( + id: 0, + room: room1, + device: device1, + startTime: DateTime.utc(2025, 6, 1, 1, 21), + duration: Duration(seconds: 4285), + ); + final job2 = DisplayJob( + id: 1, + room: room1, + device: device1, + startTime: DateTime.utc(2025, 6, 1, 1, 21).add(Duration(hours: 2)), + duration: Duration(seconds: 3600), + ); + + await tester.pumpWidget(wrapWithMaterialApp(DeviceSchedulePage(deviceId: device1.deviceId))); + + + + final firstCardFinder = find.byType(Card).first; + final scheduledJobFinder = find.descendant( + of: firstCardFinder, + matching: find.byType(ScheduledJob), + skipOffstage: false, + ); + final dividerFinder = find.byType(Divider); + + final schedulePageFinder = find.byType(DeviceSchedulePage); + + final pageState = tester.state(schedulePageFinder) as DeviceSchedulePageState; + + pageState.setState(() { + pageState.jobs = [job1, job2]; + }); + await tester.pump(); + + expect(scheduledJobFinder, findsExactly(2)); + expect(dividerFinder, findsExactly(1)); + + final job3 = DisplayJob( + id: 2, + room: room1, + device: device1, + startTime: DateTime.utc(2025, 6, 1, 1, 21).add(Duration(days: 1)), + duration: Duration(seconds: 360), + ); + + pageState.setState(() { + pageState.jobs = [job1, job2, job3]; + }); + await tester.pump(); + + findById(id) => find.byWidgetPredicate( + (Widget widget) => widget is ScheduledJob && widget.id == id, + ); + + final widget1 = tester.widget(findById(0)) as ScheduledJob; + final widget2 = tester.widget(findById(1)) as ScheduledJob; + final widget3 = tester.widget(findById(2)) as ScheduledJob; + + expect(widget1.device, job1.device); + expect(widget1.room, job1.room); + expect(widget1.startTime, job1.startTime); + expect(widget1.endTime.difference(widget1.startTime), job1.duration); + + expect(widget2.device, job2.device); + expect(widget2.room, job2.room); + expect(widget2.startTime, job2.startTime); + expect(widget2.endTime.difference(widget2.startTime), job2.duration); + + expect(widget3.device, job3.device); + expect(widget3.room, job3.room); + expect(widget3.startTime, job3.startTime); + expect(widget3.endTime.difference(widget3.startTime), job3.duration); + }); + + testWidgets("Create new job button works", (tester) async { + final appState = AppState(); + final device1 = Device( + houseId: 0, + deviceId: "Dish Washer", + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: "bathroom 2", + devices: [device1], + ); + appState.addDevice(device1); + appState.addRoom(room1); + + await tester.pumpWidget(wrapWithMaterialApp(DeviceSchedulePage(deviceId: "Dish Washer"))); + + final schedulePageFinder = find.byType(DeviceSchedulePage); + final createJobPageFinder = find.byType(CreateJob); + final createButtonFinder = find.byType(FilledButton); + + expect(createButtonFinder, findsOneWidget); + expect(schedulePageFinder, findsOneWidget); + expect(createJobPageFinder, findsNothing); + + await tester.tap(createButtonFinder); + await tester.pumpAndSettle(); + + expect(schedulePageFinder, findsNothing); + expect(createJobPageFinder, findsOneWidget); + + await tester.tap(find.backButton()); + await tester.pumpAndSettle(); + + expect(schedulePageFinder, findsOneWidget); + expect(createJobPageFinder, findsNothing); + }); +} \ No newline at end of file diff --git a/hems_application/test/widget/page/device_selection_page_test.dart b/hems_application/test/widget/page/device_selection_page_test.dart new file mode 100644 index 0000000..0717479 --- /dev/null +++ b/hems_application/test/widget/page/device_selection_page_test.dart @@ -0,0 +1,64 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/page/device_selection_page.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays Correctly', (tester) async { + final appState = AppState(); + + final device1 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final device2 = Device( + houseId: 0, + deviceId: 'Washing Machine', + type: DeviceType.timeshifter, + ); + final device3 = Device( + houseId: 0, + deviceId: 'Dryer', + type: DeviceType.solar, + ); + final device4 = Device( + houseId: 0, + deviceId: 'Shower', + type: DeviceType.solar, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [device1, device4], + ); + final room2 = Room( + type: RoomType.bedroom, + name: 'bedroom 2', + devices: [device3], + ); + + appState.devices = [device1, device2, device3]; + appState.rooms = [room1, room2]; + + await tester.pumpWidget(wrapWithMaterialApp(DeviceSelectionPage())); + + final dishFinder = find.text('Dish Washer'); + final washingFinder = find.text('Washing Machine'); + final dryerFinder = find.text('Dryer'); + final showerFinder = find.text('Shower'); + + final bathroomFinder = find.text('bathroom 2'); + final otherFinder = find.text('Others'); + + expect(dishFinder, findsOneWidget); + expect(washingFinder, findsOneWidget); + expect(dryerFinder, findsNothing); + expect(showerFinder, findsNothing); + + expect(otherFinder, findsOneWidget); + expect(bathroomFinder, findsOneWidget); + }); +} diff --git a/hems_application/test/widget/page/devices_page_test.dart b/hems_application/test/widget/page/devices_page_test.dart new file mode 100644 index 0000000..dca3cf5 --- /dev/null +++ b/hems_application/test/widget/page/devices_page_test.dart @@ -0,0 +1,155 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/l10n/app_localizations.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/device/battery_info_card.dart'; +import 'package:hems_app/widget/device/solar_info_card.dart'; +import 'package:hems_app/widget/device/thermal_info_card.dart'; +import 'package:hems_app/widget/device/timeshifter_card.dart'; +import 'package:hems_app/widget/page/devices_page.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Shows Correct Widgets', (tester) async { + final appState = AppState(); + + final device1 = Device(houseId: 0, deviceId: '1', type: DeviceType.battery); + final device2 = Device(houseId: 0, deviceId: '1', type: DeviceType.thermal); + final device3 = Device(houseId: 0, deviceId: '1', type: DeviceType.solar); + final device4 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + + await tester.pumpWidget(wrapWithMaterialApp(DevicesPage())); + + final batteryFinder = find.byType(BatteryInfoCard); + final thermalFinder = find.byType(ThermalInfoCard); + final solarFinder = find.byType(SolarInfoCard); + final timeshifterFinder = find.byType(TimeshifterCard); + + expect(batteryFinder, findsNothing); + expect(thermalFinder, findsNothing); + expect(solarFinder, findsNothing); + expect(timeshifterFinder, findsNothing); + + final pageState = + tester.state(find.byType(DevicesPage)) as DevicesPageState; + pageState.setState(() { + appState.devices = [device1, device2, device3, device4]; + }); + await tester.pump(); + + await tester.scrollUntilVisible(batteryFinder, 400); + expect(batteryFinder, findsOneWidget); + await tester.scrollUntilVisible(thermalFinder, 400); + expect(thermalFinder, findsOneWidget); + await tester.scrollUntilVisible(solarFinder, 400); + expect(solarFinder, findsOneWidget); + await tester.scrollUntilVisible(timeshifterFinder, 400); + expect(timeshifterFinder, findsOneWidget); + + appState.devices = []; + await tester.pump(); + }); + + testWidgets('Device management works', (tester) async { + final appState = AppState(); + final l10n = lookupAppLocalizations(Locale('en')); + + await tester.pumpWidget(wrapWithMaterialApp(DevicesPage())); + + final buttonFinder = find.byType(FloatingActionButton); + + final batteryFinder = find.byType(BatteryInfoCard); + final thermalFinder = find.byType(ThermalInfoCard); + final solarFinder = find.byType(SolarInfoCard); + + final batteryCheckboxFinder = find.text( + DeviceType.battery.localizedName(l10n), + ); + final thermalCheckboxFinder = find.text( + DeviceType.thermal.localizedName(l10n), + ); + final solarCheckboxFinder = find.text(DeviceType.solar.localizedName(l10n)); + + final doneFinder = find.text('Done'); + final cancelFinder = find.text('Cancel'); + + expect(appState.devices.length, 0); + expect(batteryFinder, findsNothing); + expect(thermalFinder, findsNothing); + expect(solarFinder, findsNothing); + + expect(buttonFinder, findsOneWidget); + await tester.tap(buttonFinder); + await tester.pumpAndSettle(); + + expect(batteryCheckboxFinder, findsAny); + expect(thermalCheckboxFinder, findsAny); + expect(solarCheckboxFinder, findsAny); + + expect(cancelFinder, findsOneWidget); + await tester.tap(batteryCheckboxFinder.first); + await tester.tap(thermalCheckboxFinder.first); + await tester.tap(solarCheckboxFinder.first); + await tester.tap(cancelFinder); + await tester.pumpAndSettle(); + + expect(appState.devices.length, 0); + expect(batteryFinder, findsNothing); + expect(thermalFinder, findsNothing); + expect(solarFinder, findsNothing); + + expect(buttonFinder, findsOneWidget); + await tester.tap(buttonFinder); + await tester.pumpAndSettle(); + + expect(batteryCheckboxFinder, findsAny); + expect(thermalCheckboxFinder, findsAny); + expect(solarCheckboxFinder, findsAny); + + expect(doneFinder, findsOneWidget); + await tester.tap(batteryCheckboxFinder.first); + await tester.tap(thermalCheckboxFinder.first); + await tester.tap(solarCheckboxFinder.first); + await tester.tap(doneFinder); + await tester.pumpAndSettle(); + + expect(appState.devices.length, 3); + await tester.scrollUntilVisible(batteryFinder, 400); + expect(batteryFinder, findsOneWidget); + await tester.scrollUntilVisible(thermalFinder, 400); + expect(thermalFinder, findsOneWidget); + await tester.scrollUntilVisible(solarFinder, 400); + expect(solarFinder, findsOneWidget); + + appState.rooms = [ + Room(type: RoomType.bedroom, name: 'bedroom', devices: appState.devices), + ]; + + expect(buttonFinder, findsOneWidget); + await tester.tap(buttonFinder); + await tester.pumpAndSettle(); + + expect(batteryCheckboxFinder, findsAny); + expect(thermalCheckboxFinder, findsAny); + expect(solarCheckboxFinder, findsAny); + + expect(doneFinder, findsOneWidget); + await tester.tap(batteryCheckboxFinder.first); + await tester.tap(solarCheckboxFinder.first); + await tester.tap(doneFinder); + await tester.pumpAndSettle(); + + expect(appState.devices.length, 1); + expect(batteryFinder, findsNothing); + await tester.scrollUntilVisible(thermalFinder, 400); + expect(thermalFinder, findsOneWidget); + expect(solarFinder, findsNothing); + expect(appState.rooms[0].devices.length, 1); + }); +} diff --git a/hems_application/test/widget/page/edit_room_test.dart b/hems_application/test/widget/page/edit_room_test.dart new file mode 100644 index 0000000..81d098c --- /dev/null +++ b/hems_application/test/widget/page/edit_room_test.dart @@ -0,0 +1,364 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/device/battery_info_card.dart'; +import 'package:hems_app/widget/device/solar_info_card.dart'; +import 'package:hems_app/widget/device/thermal_info_card.dart'; +import 'package:hems_app/widget/device/timeshifter_card.dart'; +import 'package:hems_app/widget/page/edit_room.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays correctly', (tester) async { + final appState = AppState(); + + final device1 = Device(houseId: 0, deviceId: '1', type: DeviceType.battery); + final device2 = Device(houseId: 0, deviceId: '1', type: DeviceType.thermal); + final device3 = Device(houseId: 0, deviceId: '1', type: DeviceType.solar); + final device4 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [device1, device4], + ); + final room2 = Room( + type: RoomType.bedroom, + name: 'bedroom 2', + devices: [device3], + ); + + appState.devices = [device1, device2, device3, device4]; + appState.rooms = [room1, room2]; + + await tester.pumpWidget(wrapWithMaterialApp(EditRoom(room: room1))); + + final nameFinder = find.text('bathroom 2'); + final buttonFinder = find.byType(FloatingActionButton); + + final batteryFinder = find.byType(BatteryInfoCard); + final thermalFinder = find.byType(ThermalInfoCard); + final solarFinder = find.byType(SolarInfoCard); + final timeshifterFinder = find.byType(TimeshifterCard); + + expect(nameFinder, findsOneWidget); + expect(buttonFinder, findsAtLeast(2)); + + await tester.scrollUntilVisible( + batteryFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(batteryFinder, findsOneWidget); + expect(thermalFinder, findsNothing); + expect(solarFinder, findsNothing); + await tester.scrollUntilVisible( + timeshifterFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(timeshifterFinder, findsOneWidget); + }); + + testWidgets('Displays correctly no device', (tester) async { + final appState = AppState(); + + final device1 = Device(houseId: 0, deviceId: '1', type: DeviceType.battery); + final device2 = Device(houseId: 0, deviceId: '1', type: DeviceType.thermal); + final device3 = Device(houseId: 0, deviceId: '1', type: DeviceType.solar); + final device4 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [], + ); + final room2 = Room( + type: RoomType.bedroom, + name: 'bedroom 2', + devices: [device3], + ); + + appState.devices = [device1, device2, device3, device4]; + appState.rooms = [room1, room2]; + + await tester.pumpWidget(wrapWithMaterialApp(EditRoom(room: room1))); + + final nameFinder = find.text('bathroom 2'); + final buttonFinder = find.byType(FloatingActionButton); + + final batteryFinder = find.byType(BatteryInfoCard); + final thermalFinder = find.byType(ThermalInfoCard); + final solarFinder = find.byType(SolarInfoCard); + final timeshifterFinder = find.byType(TimeshifterCard); + + expect(nameFinder, findsOneWidget); + expect(buttonFinder, findsAtLeast(2)); + + expect(batteryFinder, findsNothing); + expect(thermalFinder, findsNothing); + expect(solarFinder, findsNothing); + expect(timeshifterFinder, findsNothing); + }); + + testWidgets('Delete room works correctly', (tester) async { + final appState = AppState(); + + final device1 = Device(houseId: 0, deviceId: '1', type: DeviceType.battery); + final device2 = Device(houseId: 0, deviceId: '1', type: DeviceType.thermal); + final device3 = Device(houseId: 0, deviceId: '1', type: DeviceType.solar); + final device4 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [device1, device4], + ); + final room2 = Room( + type: RoomType.bedroom, + name: 'bedroom 2', + devices: [device3], + ); + + appState.devices = [device1, device2, device3, device4]; + appState.rooms = [room1, room2]; + + await tester.pumpWidget(wrapWithMaterialApp(EditRoom(room: room1))); + + final pageFinder = find.byType(EditRoom); + final deleteButtonFinder = find.widgetWithIcon( + FloatingActionButton, + Icons.delete, + ); + final cancelFinder = find.text('Cancel'); + final deleteFinder = find.text('Delete'); + + expect(deleteButtonFinder, findsOneWidget); + await tester.tap(deleteButtonFinder); + await tester.pumpAndSettle(); + + expect(cancelFinder, findsOneWidget); + await tester.tap(cancelFinder); + await tester.pumpAndSettle(); + + expect(pageFinder, findsOneWidget); + expect(appState.rooms, contains(room1)); + + expect(deleteButtonFinder, findsOneWidget); + await tester.tap(deleteButtonFinder); + await tester.pumpAndSettle(); + + expect(deleteFinder, findsOneWidget); + await tester.tap(deleteFinder); + await tester.pumpAndSettle(); + + expect(pageFinder, findsNothing); + expect(appState.rooms, isNot(contains(room1))); + }); + + testWidgets('Edit room works', (tester) async { + final appState = AppState(); + + final device1 = Device(houseId: 0, deviceId: '1', type: DeviceType.battery); + final device2 = Device(houseId: 0, deviceId: '1', type: DeviceType.thermal); + final device3 = Device(houseId: 0, deviceId: '1', type: DeviceType.solar); + final device4 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [device2], + ); + final room2 = Room( + type: RoomType.bedroom, + name: 'bedroom 2', + devices: [device3], + ); + + appState.devices = [device1, device2, device3, device4]; + appState.rooms = [room1, room2]; + + await tester.pumpWidget(wrapWithMaterialApp(EditRoom(room: room1))); + + final editButtonFinder = find.widgetWithIcon( + FloatingActionButton, + Icons.edit, + ); + final cancelFinder = find.text('Cancel'); + final saveFinder = find.textContaining('Save'); + + final typeFinder = find.byType(DropdownButton); + final context = tester.element(find.byType(EditRoom)); + + final gardenFinder = find.text(RoomType.garden.localizedName(context.l10n)); + final nameFinder = find.byType(TextField); + + final batteryFinder = find.byType(BatteryInfoCard); + final thermalFinder = find.byType(ThermalInfoCard); + final solarFinder = find.byType(SolarInfoCard); + final timeshifterFinder = find.byType(TimeshifterCard); + + final batteryCheckboxFinder = find.text( + DeviceType.battery.localizedName(context.l10n), + ); + final thermalCheckboxFinder = find.text( + DeviceType.thermal.localizedName(context.l10n), + ); + final solarCheckboxFinder = find.text( + DeviceType.solar.localizedName(context.l10n), + ); + final timeshifterCheckboxFinder = find.text( + DeviceType.timeshifter.localizedName(context.l10n), + ); + + expect(batteryFinder, findsNothing); + await tester.scrollUntilVisible( + thermalFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(thermalFinder, findsOneWidget); + expect(solarFinder, findsNothing); + expect(timeshifterFinder, findsNothing); + expect(find.text('bathroom 2'), findsAny); + + expect(editButtonFinder, findsOneWidget); + await tester.tap(editButtonFinder); + await tester.pumpAndSettle(); + + expect(typeFinder, findsOneWidget); + await tester.tap(typeFinder); + await tester.pumpAndSettle(); + expect(gardenFinder, findsOneWidget); + await tester.tap(gardenFinder); + await tester.pumpAndSettle(); + expect(nameFinder, findsOneWidget); + await tester.enterText(nameFinder, 'new name'); + await tester.pumpAndSettle(); + + await tester.scrollUntilVisible( + batteryCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(batteryCheckboxFinder, findsOneWidget); + await tester.scrollUntilVisible( + thermalCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(thermalCheckboxFinder, findsOneWidget); + await tester.tap(thermalCheckboxFinder); + await tester.pumpAndSettle(); + await tester.scrollUntilVisible( + solarCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(solarCheckboxFinder, findsOneWidget); + await tester.pumpAndSettle(); + await tester.scrollUntilVisible( + timeshifterCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(timeshifterCheckboxFinder, findsOneWidget); + await tester.tap(timeshifterCheckboxFinder); + await tester.pumpAndSettle(); + + expect(cancelFinder, findsOneWidget); + await tester.tap(cancelFinder); + await tester.pump(); + + expect(batteryFinder, findsNothing); + await tester.scrollUntilVisible( + thermalFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(thermalFinder, findsOneWidget); + expect(solarFinder, findsNothing); + expect(timeshifterFinder, findsNothing); + expect(find.text('bathroom 2'), findsAny); + + expect(room1.type, RoomType.bathroom); + expect(room1.name, 'bathroom 2'); + + expect(editButtonFinder, findsOneWidget); + await tester.tap(editButtonFinder); + await tester.pumpAndSettle(); + + expect(typeFinder, findsOneWidget); + await tester.tap(typeFinder); + await tester.pumpAndSettle(); + expect(gardenFinder, findsOneWidget); + await tester.tap(gardenFinder); + await tester.pumpAndSettle(); + expect(nameFinder, findsOneWidget); + await tester.enterText(nameFinder, 'new name'); + await tester.pumpAndSettle(); + + await tester.scrollUntilVisible( + batteryCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(batteryCheckboxFinder, findsOneWidget); + await tester.scrollUntilVisible( + thermalCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(thermalCheckboxFinder, findsOneWidget); + await tester.tap(thermalCheckboxFinder); + await tester.pumpAndSettle(); + await tester.scrollUntilVisible( + solarCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(solarCheckboxFinder, findsOneWidget); + await tester.pumpAndSettle(); + await tester.scrollUntilVisible( + timeshifterCheckboxFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(timeshifterCheckboxFinder, findsOneWidget); + await tester.tap(timeshifterCheckboxFinder); + await tester.pumpAndSettle(); + + expect(saveFinder, findsOneWidget); + await tester.tap(saveFinder); + await tester.pump(); + + expect(batteryFinder, findsNothing); + expect(thermalFinder, findsNothing); + expect(solarFinder, findsNothing); + await tester.scrollUntilVisible( + timeshifterFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(timeshifterFinder, findsOneWidget); + expect(find.text('new name'), findsAny); + + expect(room1.type, RoomType.garden); + expect(room1.name, 'new name'); + }); +} diff --git a/hems_application/test/widget/page/home_page_test.dart b/hems_application/test/widget/page/home_page_test.dart new file mode 100644 index 0000000..979c156 --- /dev/null +++ b/hems_application/test/widget/page/home_page_test.dart @@ -0,0 +1,137 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/extensions.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/analytics/animated_power_flow.dart'; +import 'package:hems_app/widget/analytics/consumption_chart.dart'; +import 'package:hems_app/widget/page/home_page.dart'; +import 'package:hems_app/widget/room_card.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays Correctly', (tester) async { + final appState = AppState(); + + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [], + ); + final room2 = Room(type: RoomType.bedroom, name: 'bedroom 2', devices: []); + + await tester.pumpWidget(wrapWithMaterialApp(HomePage())); + + final roomFinder = find.byType(RoomCard); + final flowFinder = find.byType(AnimatedPowerFlow); + final chartFinder = find.byType(ConsumptionChart); + + expect(roomFinder, findsNothing); + await tester.scrollUntilVisible( + flowFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(flowFinder, findsOneWidget); + await tester.scrollUntilVisible( + chartFinder, + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(chartFinder, findsOneWidget); + + final pageState = tester.state(find.byType(HomePage)) as HomePageState; + pageState.setState(() { + appState.rooms = [room1, room2]; + }); + + await tester.scrollUntilVisible( + find.widgetWithText(RoomCard, 'bathroom 2'), + 400, + scrollable: find.byType(Scrollable).first, + ); + expect(roomFinder, findsExactly(3)); + + final widget1 = tester.widget(roomFinder.at(0)) as RoomCard; + final widget2 = tester.widget(roomFinder.at(1)) as RoomCard; + + expect(widget1.room, room1); + expect(widget2.room, room2); + }); + + testWidgets('Displays Correctly', (tester) async { + final appState = AppState(); + + // final room1 = Room( + // type: RoomType.bathroom, + // name: 'bathroom 2', + // devices: [], + // ); + // final room2 = Room(type: RoomType.bedroom, name: 'bedroom 2', devices: []); + + await tester.pumpWidget(wrapWithMaterialApp(HomePage())); + + final roomFinder = find.byType(RoomCard); + final addFinder = find.widgetWithIcon(IconButton, Icons.add); + + final typeFinder = find.byType(DropdownButton); + + final context = tester.element(find.byType(HomePage)); + final gardenFinder = find.text(RoomType.garden.localizedName(context.l10n)); + final nameFinder = find.byType(TextField); + + final cancelFinder = find.text('Cancel'); + final createFinder = find.widgetWithText(FilledButton, 'Create'); + + expect(roomFinder, findsExactly(3)); + + expect(addFinder, findsOneWidget); + await tester.tap(addFinder); + await tester.pump(); + + expect(typeFinder, findsOneWidget); + await tester.tap(typeFinder); + await tester.pump(); + expect(gardenFinder, findsOneWidget); + await tester.tap(gardenFinder); + await tester.pump(); + expect(nameFinder, findsOneWidget); + await tester.enterText(nameFinder, 'new name'); + await tester.pump(); + + expect(cancelFinder, findsOneWidget); + await tester.tap(cancelFinder); + await tester.pump(); + + expect(roomFinder, findsExactly(3)); + expect(appState.rooms.length, 2); + + expect(addFinder, findsOneWidget); + await tester.tap(addFinder); + await tester.pump(); + + expect(typeFinder, findsOneWidget); + await tester.tap(typeFinder); + await tester.pump(); + expect(gardenFinder, findsOneWidget); + await tester.tap(gardenFinder); + await tester.pump(); + expect(nameFinder, findsOneWidget); + await tester.enterText(nameFinder, 'new name'); + await tester.pump(); + + expect(createFinder, findsOneWidget); + await tester.tap(createFinder); + await tester.pump(); + + final newRoom = Room(type: RoomType.garden, name: 'new name', devices: []); + + expect(appState.rooms.length, 3); + expect(appState.rooms, contains(newRoom)); + + expect(roomFinder, findsExactly(4)); + final widget = tester.widget(roomFinder.at(2)) as RoomCard; + + expect(widget.room, newRoom); + }); +} diff --git a/hems_application/test/widget/page/schedules_page_test.dart b/hems_application/test/widget/page/schedules_page_test.dart new file mode 100644 index 0000000..838cc8d --- /dev/null +++ b/hems_application/test/widget/page/schedules_page_test.dart @@ -0,0 +1,149 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/page/create_job.dart'; +import 'package:hems_app/widget/page/schedules_page.dart'; +import 'package:hems_app/widget/schedule_view.dart'; +import 'package:hems_app/widget/scheduled_job.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays Correctly', (tester) async { + final appState = AppState(); + + final device1 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final device2 = Device( + houseId: 0, + deviceId: 'Washing Machine', + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [device1], + ); + final room2 = Room(type: RoomType.bedroom, name: 'bedroom 2', devices: []); + + final job1 = DisplayJob( + id: 0, + room: room1, + device: device1, + startTime: DateTime.utc(2025, 6, 1, 1, 21), + duration: Duration(seconds: 4285), + ); + final job2 = DisplayJob( + id: 1, + room: room2, + device: device2, + startTime: DateTime.utc(2025, 6, 1, 1, 21).add(Duration(hours: 2)), + duration: Duration(seconds: 3600), + ); + + await tester.pumpWidget(wrapWithMaterialApp(SchedulesPage())); + + final firstCardFinder = find.byType(Card).first; + final scheduledJobFinder = find.descendant( + of: firstCardFinder, + matching: find.byType(ScheduledJob), + skipOffstage: false, + ); + final dividerFinder = find.byType(Divider); + + final schedulePageFinder = find.byType(SchedulesPage); + + expect(scheduledJobFinder, findsNothing); + expect(dividerFinder, findsNothing); + + final pageState = tester.state(schedulePageFinder) as SchedulesPageState; + + final context = tester.element(schedulePageFinder); + final job3 = DisplayJob( + id: 2, + room: appState.othersRoom(context), + device: device1, + startTime: DateTime.utc(2025, 6, 1, 1, 21).add(Duration(days: 1)), + duration: Duration(seconds: 360), + ); + + pageState.setState(() { + pageState.jobs = [job1, job2, job3]; + }); + await tester.pump(); + + findById(id) => find.byWidgetPredicate( + (Widget widget) => widget is ScheduledJob && widget.id == id, + ); + scrollAndFind(id) => tester.scrollUntilVisible( + findById(id), + 400.0, + scrollable: find.descendant( + of: firstCardFinder, + matching: find.byType(Scrollable), + ), + ); + + await scrollAndFind(0); + final widget1 = tester.widget(findById(0)) as ScheduledJob; + + await scrollAndFind(1); + final widget2 = tester.widget(findById(1)) as ScheduledJob; + + await tester.scrollUntilVisible( + dividerFinder, + 400.0, + scrollable: find.descendant( + of: firstCardFinder, + matching: find.byType(Scrollable), + ), + ); + expect(dividerFinder, findsOne); + + await scrollAndFind(2); + final widget3 = tester.widget(findById(2)) as ScheduledJob; + + expect(widget1.device, job1.device); + expect(widget1.room, job1.room); + expect(widget1.startTime, job1.startTime); + expect(widget1.endTime.difference(widget1.startTime), job1.duration); + + expect(widget2.device, job2.device); + expect(widget2.room, job2.room); + expect(widget2.startTime, job2.startTime); + expect(widget2.endTime.difference(widget2.startTime), job2.duration); + + expect(widget3.device, job3.device); + expect(widget3.room, job3.room); + expect(widget3.startTime, job3.startTime); + expect(widget3.endTime.difference(widget3.startTime), job3.duration); + }); + + testWidgets('Create job button works', (tester) async { + await tester.pumpWidget(wrapWithMaterialApp(SchedulesPage())); + + final schedulePageFinder = find.byType(SchedulesPage); + final createJobPageFinder = find.byType(CreateJob); + final actionButtonFinder = find.byType(FloatingActionButton); + + expect(actionButtonFinder, findsOneWidget); + expect(schedulePageFinder, findsOneWidget); + expect(createJobPageFinder, findsNothing); + + await tester.tap(actionButtonFinder); + await tester.pumpAndSettle(); + + expect(schedulePageFinder, findsNothing); + expect(createJobPageFinder, findsOneWidget); + + await tester.tap(find.backButton()); + await tester.pumpAndSettle(); + + expect(schedulePageFinder, findsOneWidget); + expect(createJobPageFinder, findsNothing); + }); +} diff --git a/hems_application/test/widget/page/settings_page_test.dart b/hems_application/test/widget/page/settings_page_test.dart new file mode 100644 index 0000000..ee46de6 --- /dev/null +++ b/hems_application/test/widget/page/settings_page_test.dart @@ -0,0 +1,73 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/state/locale_notifier.dart'; +import 'package:hems_app/state/theme_notifier.dart'; +import 'package:hems_app/widget/page/settings_page.dart'; +import 'package:provider/provider.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays Correctly english', (tester) async { + SharedPreferences.setMockInitialValues({ + ThemeNotifier.themePrefKey: false, + LocaleNotifier.localePrefKey: "en", + }); + ThemeNotifier themeNotifier = await ThemeNotifier.create(); + LocaleNotifier localeNotifier = await LocaleNotifier.create(); + + await tester.pumpWidget( + MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => themeNotifier), + ChangeNotifierProvider(create: (_) => localeNotifier), + ], + child: wrapWithMaterialApp(SettingsPage()), + ), + ); + + final switchFinder = find.byType(Switch); + final dropdownFinder = find.byType(DropdownButton); + final englishFinder = find.text("English"); + final dutchFinder = find.text("Nederlands"); + final buttonFinder = find.byWidgetPredicate((w) => w is TextButton); + + expect(switchFinder, findsOneWidget); + expect(dropdownFinder, findsOneWidget); + expect(englishFinder, findsOneWidget); + expect(dutchFinder, findsNothing); + expect(buttonFinder, findsNWidgets(2)); + }); + + testWidgets('Displays Correctly dutch', (tester) async { + SharedPreferences.setMockInitialValues({ + ThemeNotifier.themePrefKey: false, + LocaleNotifier.localePrefKey: "nl", + }); + ThemeNotifier themeNotifier = await ThemeNotifier.create(); + LocaleNotifier localeNotifier = await LocaleNotifier.create(); + + await tester.pumpWidget( + MultiProvider( + providers: [ + ChangeNotifierProvider(create: (_) => themeNotifier), + ChangeNotifierProvider(create: (_) => localeNotifier), + ], + child: wrapWithMaterialApp(SettingsPage()), + ), + ); + + final switchFinder = find.byType(Switch); + final dropdownFinder = find.byType(DropdownButton); + final englishFinder = find.text("English"); + final dutchFinder = find.text("Nederlands"); + final buttonFinder = find.byWidgetPredicate((w) => w is TextButton); + + expect(switchFinder, findsOneWidget); + expect(dropdownFinder, findsOneWidget); + expect(englishFinder, findsNothing); + expect(dutchFinder, findsOneWidget); + expect(buttonFinder, findsNWidgets(2)); + }); +} diff --git a/hems_application/test/widget/room_card_test.dart b/hems_application/test/widget/room_card_test.dart new file mode 100644 index 0000000..68ebe3b --- /dev/null +++ b/hems_application/test/widget/room_card_test.dart @@ -0,0 +1,38 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/widget/page/edit_room.dart'; +import 'package:hems_app/widget/room_card.dart'; +import '../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays correctly', (tester) async { + String name = 'bedroom 1'; + Room room = Room(type: RoomType.bedroom, name: name, devices: []); + + await tester.pumpWidget(wrapWithMaterialApp(RoomCard(room))); + + final nameFinder = find.text(name); + final iconFinder = find.byIcon(room.icon()); + + expect(nameFinder, findsOneWidget); + expect(iconFinder, findsOneWidget); + }); + + testWidgets('Tapping works', (tester) async { + String name = 'bedroom 1'; + Room room = Room(type: RoomType.bedroom, name: name, devices: []); + + await tester.pumpWidget(wrapWithMaterialApp(RoomCard(room))); + + final editRoomFinder = find.byType(EditRoom); + + expect(editRoomFinder, findsNothing); + + await tester.tap(find.byType(RoomCard)); + await tester.pumpAndSettle(); + + expect(editRoomFinder, findsOneWidget); + final widget = tester.widget(editRoomFinder) as EditRoom; + expect(widget.room, room); + }); +} diff --git a/hems_application/test/widget/schedule_view_test.dart b/hems_application/test/widget/schedule_view_test.dart new file mode 100644 index 0000000..e897ecb --- /dev/null +++ b/hems_application/test/widget/schedule_view_test.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/state/app_state.dart'; +import 'package:hems_app/widget/schedule_view.dart'; +import 'package:hems_app/widget/scheduled_job.dart'; +import '../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays Correctly', (tester) async { + final appState = AppState(); + + final device1 = Device( + houseId: 0, + deviceId: 'Dish Washer', + type: DeviceType.timeshifter, + ); + final device2 = Device( + houseId: 0, + deviceId: 'Washing Machine', + type: DeviceType.timeshifter, + ); + final room1 = Room( + type: RoomType.bathroom, + name: 'bathroom 2', + devices: [device1], + ); + final room2 = Room(type: RoomType.bedroom, name: 'bedroom 2', devices: []); + + final job1 = DisplayJob( + id: 0, + room: room1, + device: device1, + startTime: DateTime.utc(2025, 6, 1, 1, 21), + duration: Duration(seconds: 4285), + ); + final job2 = DisplayJob( + id: 1, + room: room2, + device: device2, + startTime: DateTime.utc(2025, 6, 1, 1, 21).add(Duration(hours: 2)), + duration: Duration(seconds: 3600), + ); + + await tester.pumpWidget(wrapWithMaterialApp(ScheduleView(jobs: [job1, job2], onCancelJob: (id, startTime, device) {}))); + + final firstCardFinder = find.byType(Card).first; + final scheduledJobFinder = find.descendant( + of: firstCardFinder, + matching: find.byType(ScheduledJob), + skipOffstage: false, + ); + final dividerFinder = find.byType(Divider); + + final scheduleViewFinder = find.byType(ScheduleView); + + expect(scheduledJobFinder, findsExactly(2)); + expect(dividerFinder, findsExactly(1)); + + final context = tester.element(scheduleViewFinder); + final job3 = DisplayJob( + id: 2, + room: appState.othersRoom(context), + device: device1, + startTime: DateTime.utc(2025, 6, 1, 1, 21).add(Duration(days: 1)), + duration: Duration(seconds: 360), + ); + + await tester.pumpWidget(wrapWithMaterialApp(ScheduleView(jobs: [job1, job2, job3], onCancelJob: (id, startTime, device) {}))); + + findById(id) => find.byWidgetPredicate( + (Widget widget) => widget is ScheduledJob && widget.id == id, + ); + + final widget1 = tester.widget(findById(0)) as ScheduledJob; + final widget2 = tester.widget(findById(1)) as ScheduledJob; + final widget3 = tester.widget(findById(2)) as ScheduledJob; + + expect(widget1.device, job1.device); + expect(widget1.room, job1.room); + expect(widget1.startTime, job1.startTime); + expect(widget1.endTime.difference(widget1.startTime), job1.duration); + + expect(widget2.device, job2.device); + expect(widget2.room, job2.room); + expect(widget2.startTime, job2.startTime); + expect(widget2.endTime.difference(widget2.startTime), job2.duration); + + expect(widget3.device, job3.device); + expect(widget3.room, job3.room); + expect(widget3.startTime, job3.startTime); + expect(widget3.endTime.difference(widget3.startTime), job3.duration); + }); +} \ No newline at end of file diff --git a/hems_application/test/widget/scheduled_job_test.dart b/hems_application/test/widget/scheduled_job_test.dart new file mode 100644 index 0000000..1b42526 --- /dev/null +++ b/hems_application/test/widget/scheduled_job_test.dart @@ -0,0 +1,145 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/model/internal/device.dart'; +import 'package:hems_app/model/internal/room.dart'; +import 'package:hems_app/widget/scheduled_job.dart'; +import '../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('Displays correctly without displayTimeLeft', (tester) async { + String roomName = 'bedroom 1'; + String deviceId = 'dishwasher'; + Device device = Device( + type: DeviceType.timeshifter, + houseId: 0, + deviceId: deviceId, + ); + Room room = Room(type: RoomType.bedroom, name: roomName, devices: []); + + await tester.pumpWidget( + wrapWithMaterialApp( + ScheduledJob( + id: 0, + onCancelJob: (id, startTime, device) {}, + device: device, + room: room, + startTime: DateTime.utc(2025, 6, 1, 1, 21), + endTime: DateTime.utc(2025, 6, 1, 13, 31), + displayTimeLeft: false, + ), + ), + ); + + final roomNameFinder = find.text(roomName); + final roomIconFinder = find.byIcon(room.icon()); + final deviceIdFinder = find.text(deviceId); + final deviceIconFinder = find.byIcon(device.type.iconData); + final startTimeFinder = find.textContaining('01:21'); + final endTimeFinder = find.textContaining('13:31'); + final cancelFinder = find.textContaining('Cancel'); + + expect(roomNameFinder, findsOneWidget); + expect(roomIconFinder, findsOneWidget); + expect(deviceIdFinder, findsOneWidget); + expect(deviceIconFinder, findsOneWidget); + expect(startTimeFinder, findsOneWidget); + expect(endTimeFinder, findsOneWidget); + expect(cancelFinder, findsNothing); + + await tester.tap(find.byType(ScheduledJob)); + await tester.pumpAndSettle(); + + expect(roomNameFinder, findsOneWidget); + expect(roomIconFinder, findsOneWidget); + expect(deviceIdFinder, findsOneWidget); + expect(deviceIconFinder, findsOneWidget); + expect(startTimeFinder, findsOneWidget); + expect(endTimeFinder, findsOneWidget); + expect(cancelFinder, findsOneWidget); + }); + + testWidgets('Displays correctly with displayTimeLeft', (tester) async { + String roomName = 'bedroom 1'; + String deviceId = 'dishwasher'; + Device device = Device( + type: DeviceType.timeshifter, + houseId: 0, + deviceId: deviceId, + ); + Room room = Room(type: RoomType.bedroom, name: roomName, devices: []); + + await tester.pumpWidget( + wrapWithMaterialApp( + ScheduledJob( + id: 0, + onCancelJob: (id, startTime, device) {}, + device: device, + room: room, + startTime: DateTime.utc(2025, 6, 1, 1, 21), + endTime: DateTime.utc(2025, 6, 1, 13, 31), + displayTimeLeft: true, + ), + ), + ); + + final roomNameFinder = find.text(roomName); + final roomIconFinder = find.byIcon(room.icon()); + final deviceIdFinder = find.text(deviceId); + final deviceIconFinder = find.byIcon(device.type.iconData); + final startTimeFinder = find.textContaining('01:21'); + final endTimeFinder = find.textContaining('13:31'); + final cancelFinder = find.textContaining('Cancel'); + + expect(roomNameFinder, findsOneWidget); + expect(roomIconFinder, findsOneWidget); + expect(deviceIdFinder, findsOneWidget); + expect(deviceIconFinder, findsOneWidget); + expect(startTimeFinder, findsExactly(2)); + expect(endTimeFinder, findsOneWidget); + expect(cancelFinder, findsNothing); + + await tester.tap(find.byType(ScheduledJob)); + await tester.pumpAndSettle(); + + expect(roomNameFinder, findsOneWidget); + expect(roomIconFinder, findsOneWidget); + expect(deviceIdFinder, findsOneWidget); + expect(deviceIconFinder, findsOneWidget); + expect(startTimeFinder, findsExactly(2)); + expect(endTimeFinder, findsOneWidget); + expect(cancelFinder, findsOneWidget); + }); + + testWidgets('No expansion with id -1', (tester) async { + String roomName = 'bedroom 1'; + String deviceId = 'dishwasher'; + Device device = Device( + type: DeviceType.timeshifter, + houseId: 0, + deviceId: deviceId, + ); + Room room = Room(type: RoomType.bedroom, name: roomName, devices: []); + + await tester.pumpWidget( + wrapWithMaterialApp( + ScheduledJob( + id: -1, + onCancelJob: (id, startTime, device) {}, + device: device, + room: room, + startTime: DateTime.utc(2025, 6, 1, 1, 21), + endTime: DateTime.utc(2025, 6, 1, 13, 31), + displayTimeLeft: true, + ), + ), + ); + + final cancelFinder = find.textContaining('Cancel'); + + expect(cancelFinder, findsNothing); + + await tester.tap(find.byType(ScheduledJob)); + await tester.pumpAndSettle(); + + expect(cancelFinder, findsNothing); + }); +} diff --git a/hems_application/test/widget/util/value_row_test.dart b/hems_application/test/widget/util/value_row_test.dart new file mode 100644 index 0000000..82d25f3 --- /dev/null +++ b/hems_application/test/widget/util/value_row_test.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:hems_app/widget/util/value_row.dart'; +import '../../testing_utils/wrap_with_material_app.dart'; + +void main() { + testWidgets('No icon test', (tester) async { + String description = "Power consumption"; + String value = "15 Wh"; + await tester.pumpWidget( + wrapWithMaterialApp(ValueRow(description: description, value: value)), + ); + + final descriptionFinder = find.text(description); + final valueFinder = find.text(value); + + expect(descriptionFinder, findsOneWidget); + expect(valueFinder, findsOneWidget); + }); + + testWidgets('Icon test', (tester) async { + String description = "Power consumption"; + String value = "15 Wh"; + await tester.pumpWidget( + wrapWithMaterialApp( + ValueRow(description: description, value: value, icon: Icons.bolt), + ), + ); + + final descriptionFinder = find.text(description); + final valueFinder = find.text(value); + final iconFinder = find.byIcon(Icons.bolt); + + expect(descriptionFinder, findsOneWidget); + expect(valueFinder, findsOneWidget); + expect(iconFinder, findsOneWidget); + }); +} diff --git a/hems_application/web/app.html b/hems_application/web/app.html new file mode 100644 index 0000000..1352fb9 --- /dev/null +++ b/hems_application/web/app.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + hems_app + + + + + + diff --git a/hems_application/web/favicon.png b/hems_application/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f4814fd88654345e59967d0b34ad47453ea707 GIT binary patch literal 558 zcmV+}0@3}6P)W-aFHoGE>@yR$46rQ=)BbA{8UV1QQD}(S-?X-LfFE;Rm>I<4+)AB{2rq z8i|^i2n$Rk7)zxXMYKVw^aCWFj>HE#EnD!bQrjtOiL2506$JpY z&ps_ZUmd!887a<;FBCr7&MX-9n}&&q`D}5gq@_mBds-!DSmIjO$#Wr2WQa%@sXOGC zOU2bK?{Qh_J8|Jg0ulcWunQA{dv9oNmHLO1oWLy8LWe#M+r>(Lxuo<(C|6J7lK65?tvdh!610Q<9iMr!;){6J(%;*A!VPM*7oLXC z1jJ^+IVu+;^AFz*j`ccjucwxni&~b2h-?>a>kiG`dn*Ur-mn~0e4b+xp=53{t*&oh z8tD-|uBls3_Z*zh?jAb*Wq$qa^;6D`_Twj5AhozTo*j%-?~amvod%m?10C;Qe13I* zF_vm?034P#ELXOwjHiU7{{?)_6hiTq_+aP3NQQ1wMh*jJ&5-;eA{sSgAMoh*OC~T= wH*1={mfiphG`0Hp&a7V50bp@@#o7GPZ~YOcHILnt-~a#s07*qoM6N<$f=xs9_5c6? literal 0 HcmV?d00001 diff --git a/hems_application/web/icons/Icon-192.png b/hems_application/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbc412eab5a8203ef81ab9f402b7df4ab612a9e GIT binary patch literal 8199 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 literal 0 HcmV?d00001 diff --git a/hems_application/web/icons/Icon-maskable-192.png b/hems_application/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbc412eab5a8203ef81ab9f402b7df4ab612a9e GIT binary patch literal 8199 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 literal 0 HcmV?d00001 diff --git a/hems_application/web/index.html b/hems_application/web/index.html new file mode 100644 index 0000000..92e5ffd --- /dev/null +++ b/hems_application/web/index.html @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + hems_app + + + + + + + + + + + +
+ +
+ + + \ No newline at end of file diff --git a/hems_application/web/manifest.json b/hems_application/web/manifest.json new file mode 100644 index 0000000..20b1995 --- /dev/null +++ b/hems_application/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "hems_app", + "short_name": "hems_app", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} \ No newline at end of file diff --git a/hems_application/windows/.gitignore b/hems_application/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/hems_application/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/hems_application/windows/CMakeLists.txt b/hems_application/windows/CMakeLists.txt new file mode 100644 index 0000000..7814764 --- /dev/null +++ b/hems_application/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(hems_app LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "hems_app") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/hems_application/windows/flutter/CMakeLists.txt b/hems_application/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..903f489 --- /dev/null +++ b/hems_application/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/hems_application/windows/runner/CMakeLists.txt b/hems_application/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/hems_application/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/hems_application/windows/runner/Runner.rc b/hems_application/windows/runner/Runner.rc new file mode 100644 index 0000000..0fd616d --- /dev/null +++ b/hems_application/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "hems_app" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "hems_app" "\0" + VALUE "LegalCopyright", "Copyright (C) 2025 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "hems_app.exe" "\0" + VALUE "ProductName", "hems_app" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/hems_application/windows/runner/flutter_window.cpp b/hems_application/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/hems_application/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/hems_application/windows/runner/flutter_window.h b/hems_application/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/hems_application/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/hems_application/windows/runner/main.cpp b/hems_application/windows/runner/main.cpp new file mode 100644 index 0000000..8130695 --- /dev/null +++ b/hems_application/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"hems_app", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/hems_application/windows/runner/resource.h b/hems_application/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/hems_application/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/hems_application/windows/runner/resources/app_icon.ico b/hems_application/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..758a0c2ca2c4bd66caf292b0b2ec87bc1b079140 GIT binary patch literal 1944 zcmV;J2WR*I0096205C8B0000W0D=bq02TlM0EtjeM-2)Z3IG5A4M|8uQUCw|FaQ7m zFbDzw007uvZqNV#2T4gpK~#90&6rti8^;;PXD^;2DT((DWfd9|{CPfhK7K!${NAMVcakQzS<1TCrnUu4qxWWyz8( zlA5fN(FY?HvsZQ0JLe-JuF9nVP(KZ(-1`ZkB6W6uO=Yu84yG5OhTz zOu7pPq(83H9jb_UW7q#^E~%6pf4!G4<^lj9gej5+5DH~{6hmn0p)RyWb#-SMK!9z; zX)!qf+$A7It+e%+E)gO7|8TqENL53h7ShmWUS1q>ggjBMkic-vWA)P%y?KjBDd;@Y zs;ZMQmzripZFjlpZ+AiuNBz-XbPA=sZ??D>e5MO`vH-O|+k~LV=qEGPotlO|Z7h%& zI5)}@bM+_cWLgP=AOL{r%l9Y#IR^khP^9Vc>ei=q8Bwp)l|230q3J7&cQ4SlRKrNp}w2)ZI&FX)po^7^~OO;6NRb!Y$pft9e|5uy^5eSC!( z%Z}$-iZvqE9x(!IJ6@+Xln#G1{Vi6&22kz63IM>&mBoE0>(<9#Gv@apeP=?fl~jFL+uPMKEXvHEQzP6PpsN2~QG z>b9orJ<>yYh>EAIx0e9`|M_4N03fXpcRt@L(@F}1!UFWaRxZ|dqOQKL3dOPn@3#}d z!wEi4#;C0(7ND{=rSVj=P|Dv66h?w#-ig-_n?IhmkGpmP;uaCc(=A$qdhbv+#g}k< z&l>FGE5m=k8xJPffs}Q!j2urTs5M83!zaY0!mPO`UqJ}@60W*YW?2th79jiBihXS5 z%sWppm&?WIf@|*H|@9HpE&tO zABv&73{=`6o%^%;*@XP`vtq_;#l@BIe z*WNMrp54FMS1y7OuFQA>E8!x!VCswcm_J@pDd|0H*sNq|8jk#9CO;qqL3&==fAjp9 zW70ivZmj1=-^sB|qf_+2xiQC-dlOC|<@Np8khQML9zz(8_P(^=bm5N0DUe57g$`hqmzH??(RbR4v*R$Tj*-fBLt{fe8 zJr(lPrlkU`T2ZcIV3JE(zdH_ zyf+&0#u(FMue6I*?0d^z0i_eYMs)aP1GB^~{q|)C`oAr%OS;Nu~8 zet}>oxuN?{jG~E+0F!* eGtHw0-+uwb + + + + PerMonitorV2 + + + + + + + + + diff --git a/hems_application/windows/runner/utils.cpp b/hems_application/windows/runner/utils.cpp new file mode 100644 index 0000000..3a0b465 --- /dev/null +++ b/hems_application/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/hems_application/windows/runner/utils.h b/hems_application/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/hems_application/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/hems_application/windows/runner/win32_window.cpp b/hems_application/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/hems_application/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/hems_application/windows/runner/win32_window.h b/hems_application/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/hems_application/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ From 320e63a740ff7bc6a825967779434f3a6fed4b8b Mon Sep 17 00:00:00 2001 From: CARBONTREX Date: Mon, 23 Jun 2025 19:08:23 +0200 Subject: [PATCH 2/2] Added license --- hems_application/LICENSE | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 hems_application/LICENSE diff --git a/hems_application/LICENSE b/hems_application/LICENSE new file mode 100644 index 0000000..1538853 --- /dev/null +++ b/hems_application/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2025 Zev Comvalius, Daniel Dumitru, İlker Kılıç, Ipshit Raychaudhuri, Mert Yılmaz + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.