From 942d2089c7956ec62dc5cedde8e0da27ef92aa46 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Sat, 16 Mar 2024 14:43:30 +0800 Subject: [PATCH] =?utf8?q?=E5=A4=A9=E6=B0=94app=E8=A7=86=E5=9B=BE=E4=BF=AE?= =?utf8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../wearable/fd230app/CMakeLists.txt | 2 +- .../nativelauncher/include/AppViewIDs.h | 1 - .../nativelauncher/include/NativeLauncher.h | 1 - .../nativelauncher/src/NativeLauncher.cpp | 14 - .../nativeui/config/include/ConfigModel.h | 30 +- .../nativeui/config/src/ConfigModel.cpp | 81 +++ .../weather/include/MainWeatherPresenter.h | 6 +- .../weather/include/MainWeatherView.h | 29 +- .../weather/include/WeatherReportPresenter.h | 33 - .../weather/include/WeatherReportView.h | 71 ++- .../nativeui/weather/include/WeatherView.h | 4 +- .../weather/src/FutureWeatherPresenter.cpp | 2 +- .../weather/src/MainWeatherPresenter.cpp | 40 +- .../nativeui/weather/src/MainWeatherView.cpp | 174 ++++- .../weather/src/WeatherReportPresenter.cpp | 78 --- .../weather/src/WeatherReportView.cpp | 592 +++++++----------- .../nativeui/weather/src/WeatherView.cpp | 29 +- .../weather/weather60x60gif/Humidity/1.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/10.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/11.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/12.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/13.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/14.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/15.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/16.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/17.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/18.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/19.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/2.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/20.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/3.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/4.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/5.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/6.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/7.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/8.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/Humidity/9.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/1.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/10.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/11.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/12.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/13.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/14.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/15.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/16.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/17.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/18.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/19.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/2.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/20.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/21.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/22.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/23.bin | Bin 0 -> 2424 bytes .../res/weather/weather60x60gif/UV/24.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/3.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/4.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/5.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/6.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/7.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/8.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather60x60gif/UV/9.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/1.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/10.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/11.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/12.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/13.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/14.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/15.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/16.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/17.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/18.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/19.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/2.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/20.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/21.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/22.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/23.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/24.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/3.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/4.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/5.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/6.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/7.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/8.bin | Bin 0 -> 2424 bytes .../weather/weather60x60gif/WindSpeed/9.bin | Bin 0 -> 2424 bytes 85 files changed, 617 insertions(+), 570 deletions(-) delete mode 100644 code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportPresenter.h delete mode 100644 code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportPresenter.cpp create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/1.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/10.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/11.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/12.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/13.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/14.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/15.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/16.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/17.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/18.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/19.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/2.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/20.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/3.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/4.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/5.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/6.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/7.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/8.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/9.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/1.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/10.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/11.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/12.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/13.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/14.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/15.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/16.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/17.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/18.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/19.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/2.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/20.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/21.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/22.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/23.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/24.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/3.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/4.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/5.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/6.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/7.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/8.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/9.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/12.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/16.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/18.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/2.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/22.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/23.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/4.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/7.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/8.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/9.bin diff --git a/code/sdk/application/wearable/fd230app/CMakeLists.txt b/code/sdk/application/wearable/fd230app/CMakeLists.txt index 66a9a9f4d..4d25652a4 100644 --- a/code/sdk/application/wearable/fd230app/CMakeLists.txt +++ b/code/sdk/application/wearable/fd230app/CMakeLists.txt @@ -252,9 +252,9 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/config/src/ConfigModel.cpp + #天气 ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/MainWeatherPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/MainWeatherView.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherReportPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherReportView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/FutureWeatherPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/FutureWeatherView.cpp diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h index 3696585a0..487957f8e 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h @@ -43,7 +43,6 @@ typedef enum : uint16_t VIEW_INDOORWALK, // 室内步行 VIEW_SHUTDOWN_OR_REBOOT, // 关机或重启界面 VIEW_WEATHER, // 天气 - VIEW_WEATHER_REPORT, // 气象报告 VIEW_FUTURE_WEATHER, // 未来天气 VIEW_GET_WEATHER_DATA_ERROR, // 获取天气数据失败 VIEW_SYSTEM, // 系统 diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h index e70e7807c..d195de5a5 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h @@ -34,7 +34,6 @@ namespace OHOS void InitRecordingSlice(void); /* ----------------------------------- 天气 ----------------------------------- */ void InitWeatherSlice(void); - void InitWeatherReportSlice(void); void InitFutureWeatherSlice(void); void InitGetWeatherDataErrorSlice(void); /* -------------------------------------------------------------------------- */ diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp index e3879fdd8..398629a19 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp @@ -64,8 +64,6 @@ #include "weather/include/MainWeatherPresenter.h" #include "weather/include/MainWeatherView.h" -#include "weather/include/WeatherReportPresenter.h" -#include "weather/include/WeatherReportView.h" #include "weather/include/FutureWeatherPresenter.h" #include "weather/include/FutureWeatherView.h" #include "weather/include/GetWeatherDataErrorPresenter.h" @@ -161,7 +159,6 @@ namespace OHOS {VIEW_INDOORWALK, &NativeLauncher::InitIndoorWalkSlice}, {VIEW_SHUTDOWN_OR_REBOOT, &NativeLauncher::InitRebootSlice}, {VIEW_WEATHER, &NativeLauncher::InitWeatherSlice}, // 天气 - {VIEW_WEATHER_REPORT, &NativeLauncher::InitWeatherReportSlice}, // 气象报告 {VIEW_FUTURE_WEATHER, &NativeLauncher::InitFutureWeatherSlice}, // 未来天气 {VIEW_GET_WEATHER_DATA_ERROR, &NativeLauncher::InitGetWeatherDataErrorSlice}, // 获取天气数据失败 {VIEW_SYSTEM, &NativeLauncher::InitSystemSlice}, // 系统实例化地址 @@ -509,17 +506,6 @@ namespace OHOS NativeAbility::GetInstance().AddSliceProxy(VIEW_WEATHER, mainweather); } - void NativeLauncher::InitWeatherReportSlice(void) // 气象报告 - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitWeatherReportSlice"); - SliceProxy *weatherreport = new AbilitySliceProxy; - if (weatherreport == nullptr) - { - return; - } - NativeAbility::GetInstance().AddSliceProxy(VIEW_WEATHER_REPORT, weatherreport); - } - void NativeLauncher::InitFutureWeatherSlice(void) // 未来天气 { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitFutureWeatherSlice"); diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h index 15909453a..5ae3a10d6 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h @@ -6,7 +6,7 @@ #include #include "../../../../../../open_source/openharmony/third_party/cJSON/cJSON.h" #include "wearable_log.h" - +#include "components/ui_image_animator.h" namespace OHOS { class ConfigModel @@ -144,6 +144,34 @@ namespace OHOS } } } + /* ------------------------------ ImageAnimator ----------------------------- */ + /* + * 图片动画类 + */ + class ImageAnimator + { + public: + struct ImageAnimatorConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + + int numFrames; + int time; + } imageAnimatorConfig; + // 构造函数 + ImageAnimator(); + // 析构函数 + ~ImageAnimator(); + const char **CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages); + + void InitImageAnimatorSource(UIImageAnimatorView *&imageAnimator, ImageAnimatorInfo *&imageAnimatorInfo, const char **imagePaths, const ImageAnimatorConfig &imageAnimatorConfig); + + void FreeImagePathsArray(const char **imagePaths, const int numImages); + + }; } #endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp index 7d4feec4c..783635b6e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp @@ -128,4 +128,85 @@ namespace OHOS { return HeartRateOrBloodOxygenQuickAccessSwitch; } + + /* ------------------------------ ImageAnimator ----------------------------- */ + + ImageAnimator::ImageAnimator() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ImageAnimator::ImageAnimator"); + } + + ImageAnimator::~ImageAnimator() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ImageAnimator::~ImageAnimator"); + } + + /* + * @brief 创建并初始化图像路径数组 + * @param basePath 包含图片文件的基本路径 + * @param fileExtension 图片文件的扩展名 + * @param numImages 图片文件的数量 + * @return 返回包含图片文件路径的数组 + */ + const char **ImageAnimator::CreateImagePathsArray(const char *basePath, const char *fileExtension, int numImages) + { + const char **imagePaths = new const char *[numImages]; + char buffer[256]; + for (int i = 0; i < numImages; i++) + { + snprintf(buffer, sizeof(buffer), "%s%d.%s", basePath, i + 1, fileExtension); + imagePaths[i] = strdup(buffer); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " imagePaths[%d] = %s", i, imagePaths[i]); + } + return imagePaths; + } + + /* + * @brief 初始化UIImageAnimatorView,并设置为GIF动画 + * 该函数用于使用提供的GIF图像和属性初始化UIImageAnimatorView + * @param imageAnimator 要初始化的UIImageAnimatorView对象的引用 + * @param imagePaths 图片路径 + * @param imageAnimatorInfo 图片映像的信息 + * @param imageAnimatorConfig 样式配置信息 + */ + void ImageAnimator::InitImageAnimatorSource(UIImageAnimatorView *&imageAnimator, ImageAnimatorInfo *&imageAnimatorInfo, const char **imagePaths, const ImageAnimatorConfig &imageAnimatorConfig) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ImageAnimator::InitImageAnimatorSource"); + + if (imageAnimator == nullptr) + { + imageAnimator = new UIImageAnimatorView(); + } + imageAnimator->SetPosition(imageAnimatorConfig.x, imageAnimatorConfig.y, imageAnimatorConfig.w, imageAnimatorConfig.h); + imageAnimator->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); + imageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + + imageAnimatorInfo = new ImageAnimatorInfo[imageAnimatorConfig.numFrames]; + for (int i = 0; i < imageAnimatorConfig.numFrames; i++) + { + imageAnimatorInfo[i].imagePath = imagePaths[i]; + imageAnimatorInfo[i].pos.x = imageAnimatorConfig.x; + imageAnimatorInfo[i].pos.y = imageAnimatorConfig.y; + imageAnimatorInfo[i].width = imageAnimatorConfig.w; + imageAnimatorInfo[i].height = imageAnimatorConfig.h; + imageAnimatorInfo[i].imageType = IMG_SRC_FILE_PATH; + } + + imageAnimator->SetImageAnimatorSrc(imageAnimatorInfo, imageAnimatorConfig.numFrames, imageAnimatorConfig.time); // 200 is the default delay time + imageAnimator->SetTimeOfPause(imageAnimatorConfig.time); + imageAnimator->SetRepeat(true); + } + /* + * 释放图片文件路径数组占用的内存 + * @param imagePaths 图片文件路径数组 + * @param numImages 图片文件的数量 + */ + void ImageAnimator::FreeImagePathsArray(const char **imagePaths, const int numImages) + { + for (int i = 0; i < numImages; i++) + { + free((void *)imagePaths[i]); + } + delete[] imagePaths; + } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherPresenter.h index 0ad0ca063..04e1e8302 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherPresenter.h @@ -7,11 +7,13 @@ /*主天气视图*/ namespace OHOS { + static constexpr const char *MAIN_WEATHER_VIEW = "MainWeatherview"; class MainWeatherView; class MainWeatherPresenter : public Presenter, public UIView::OnClickListener, public RootView::OnKeyActListener, - public UIView::OnDragListener + public UIView::OnDragListener, + public UISwipeView::OnSwipeListener { public: MainWeatherPresenter(); @@ -28,7 +30,9 @@ namespace OHOS // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnDragEnd(UIView &view, const DragEvent &event) override; bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 + void OnSwipe(UISwipeView& view) override; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherView.h b/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherView.h index b5554d403..cbc2de4ef 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/include/MainWeatherView.h @@ -3,10 +3,20 @@ #include "BaseView.h" #include "View.h" -#include "weather/include/WeatherView.h" +#include "components/ui_swipe_view.h" +#include "weather/include/WeatherView.h" +#include "weather/include/WeatherReportView.h" namespace OHOS { + typedef enum + { + MAINWEATHERVIEW = 0, // 主天气视图 + WEATHERREPORTVIEW, // 气象报告视图 + // FUTUREWEATHERVIEW, // 未来七天天气视图 + MAX_WEATHERVIEW, + } WeatherPageId; + class MainWeatherPresenter; class MainWeatherView : public View { @@ -15,14 +25,29 @@ namespace OHOS MainWeatherView(); virtual ~MainWeatherView(); static MainWeatherView *GetInstance(void); + UIViewGroup *MainWeatherViewInit(void); + void ClearAll(void); + AppGroupView *WeatherViewPageInit(void); + AppGroupView *WeatherReportViewPageInit(void); + WeatherView * GetWeatherView(void); + WeatherReportView *GetWeatherReportView(void); + public: void OnStart() override; void OnSetUpView() override; void OnTearDownView() override; void OnStop() override; private: - WeatherView * weatherView{nullptr}; + WeatherView *weatherView{nullptr}; + WeatherReportView *weatherReportView{nullptr}; + + private: + int16_t maxPage = MAX_WEATHERVIEW; + UISwipeView *weatherSwipeViewList{nullptr}; // 天气滑动视图列表 + AppGroupView *recordCard[MAX_WEATHERVIEW]{nullptr}; + bool pageStatus[MAX_WEATHERVIEW]{false}; + AppGroupView *CreatePage(int32_t WeatherPageId); }; } // namespace OHOS #endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportPresenter.h deleted file mode 100644 index a6049260a..000000000 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportPresenter.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef WEATHER_REPORT_PRESENTER_H -#define WEATHER_REPORT_PRESENTER_H - -#include "Presenter.h" -#include "WeatherReportView.h" - -namespace OHOS -{ - class WeatherReportView; - - class WeatherReportPresenter : public Presenter, - public UIView::OnClickListener, - public UIView::OnDragListener - { - public: - WeatherReportPresenter(); - virtual ~WeatherReportPresenter(); - - void OnStart() override; - void OnPause() override; - void OnResume() override; - void OnStop() override; - - static WeatherReportPresenter *GetInstance(); - - private: - // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; - bool OnClick(UIView &view, const ClickEvent &event) override; - bool OnDrag(UIView &view, const DragEvent &event) override; - }; -} // namespace OHOS - -#endif // WeatherReport_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportView.h b/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportView.h index 31c90825f..d5e112a10 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherReportView.h @@ -3,45 +3,64 @@ #include "BaseView.h" #include "View.h" +#include "AppGroupView.h" #include "components/ui_view_group.h" #include "components/ui_scroll_view.h" -#include "components/ui_label.h" +#include "components/ui_label_ext.h" #include "components/ui_image_animator.h" +#include "config/include/ConfigModel.h" namespace OHOS { - class WeatherReportPresenter; - class WeatherReportView : public View + + class WeatherReportView : public AppGroupView { public: + struct LabelConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + int16_t fontSize; // 字体大小 + int16_t lineHeigh; // 行高 + const char *text; // 文本 + uint8_t lineBreakMode; // 断行模式。 + }; WeatherReportView(); virtual ~WeatherReportView(); static WeatherReportView *GetInstance(void); - - void OnStart() override; - void OnSetUpView() override; - void OnTearDownView() override; - void OnStop() override; - - private: - void InitView(void); - void DeInitView(void); - void PreLoad(void); + bool InitPage(void); + virtual bool InitView(void *caller) override; + void ClearAll(void); + UIImageAnimatorView *GetUVImageAnimatorView() + { + return UVImageAnimatorView; + } private: - UIViewGroup *container_ = nullptr; - UIScrollView *scrollView1_ = nullptr; - UILabel *label5_ = nullptr; - UIImageAnimatorView *imageAnimator3_ = nullptr; - UIImageAnimatorView *imageAnimator2_ = nullptr; - UIImageAnimatorView *imageAnimator1_ = nullptr; - UIImageAnimatorView *imageAnimator = nullptr; - UILabel *label6_ = nullptr; - UILabel *label7_ = nullptr; - UILabel *label8_ = nullptr; - UILabel *label9_ = nullptr; - UILabel *label10_ = nullptr; - UILabel *label11_ = nullptr; + UILabelExt *SetUpLabel(LabelConfig &labelconfig); // 设置标签 + bool WeatherReportViewLabelInit(void); + bool WeatherReportViewImageAnimatorViewInit(void); + UILabelExt *title{nullptr}; // 标题 + UILabelExt *UV{nullptr}; // 紫外线 + UILabelExt *UV_Number{nullptr}; // + UILabelExt *WindSpeed{nullptr}; // 风速 + UILabelExt *WindSpeed_Number{nullptr}; // + UILabelExt *Humidity{nullptr}; // 湿度 + UILabelExt *Humidity_Number{nullptr}; // + UIImageAnimatorView *UVImageAnimatorView{nullptr}; // 紫外线动画 + UIImageAnimatorView *WindSpeedImageAnimatorView{nullptr}; // 风速动画 + UIImageAnimatorView *HumidityImageAnimatorView{nullptr}; // 湿度动画 + UIImageAnimatorView *AnimatorView{nullptr}; + ImageAnimator *p_ImageAnimator{nullptr}; + ImageAnimatorInfo *UVimageAnimatorInfo{nullptr}; + ImageAnimatorInfo *WindSpeedimageAnimatorInfo{nullptr}; + ImageAnimatorInfo *HumidityimageAnimatorInfo{nullptr}; + const char **UVPaths{nullptr}; + const char **WindSpeedPaths{nullptr}; + const char **HumidityPaths{nullptr}; + std::string imagePaths = "/user/res/weather/weather60x60gif"; bool viewInitStatus{false}; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherView.h b/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherView.h index 24b8e64d4..9a2ffebea 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/include/WeatherView.h @@ -36,7 +36,7 @@ namespace OHOS namespace OHOS { - class WeatherView : public UIViewGroup + class WeatherView : public AppGroupView { public: @@ -44,7 +44,7 @@ namespace OHOS virtual ~WeatherView(); static WeatherView *GetInstance(void); bool InitPage(void); - bool InitView(void); + virtual bool InitView(void *caller) override; void ClearAll(); bool GetInitViewState(void); diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/src/FutureWeatherPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/weather/src/FutureWeatherPresenter.cpp index 8c2d22b4a..723519533 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/src/FutureWeatherPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/src/FutureWeatherPresenter.cpp @@ -57,7 +57,7 @@ namespace OHOS if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM && (event.GetDeltaY() > 20) && (event.GetDeltaY() > (2 * MATH_ABS(event.GetDeltaX())))) { - NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 未来天气界面从上往下滑进入气象报告界面 + //NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 未来天气界面从上往下滑进入气象报告界面 } return true; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherPresenter.cpp index 6acebea7a..595311ce8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherPresenter.cpp @@ -52,25 +52,27 @@ namespace OHOS bool MainWeatherPresenter::OnDrag(UIView &view, const DragEvent &event) { - if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && - (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY())))) + + return true; + } + + bool MainWeatherPresenter::OnDragEnd(UIView &view, const DragEvent &event) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " MainWeatherPresenter::OnDragEnd"); + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) { NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); return true; } - // else if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP) - // { - // NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 主天气界面从下往上滑进入气象报告界面 - // return true; - // } - return false; + return true; } bool MainWeatherPresenter::OnClick(UIView &view, const ClickEvent &event) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " MainWeatherPresenter::OnClick"); - // 根据控件id查找是哪个控件触发了点击回调 - // if (strcmp(view.GetViewId(), 控件ID) == 0) + UNUSED(view); + UNUSED(event); return true; } @@ -79,12 +81,18 @@ namespace OHOS { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::OnKeyAct"); uint16 keyID = event.GetKeyId(); - //如果是power键就返回上一级 - if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER)) - { - uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); - NativeAbility::GetInstance().ChangeSlice(preSlice); - } + // 如果是power键就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER)) + { + uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); + NativeAbility::GetInstance().ChangeSlice(preSlice); + } return true; } + + void MainWeatherPresenter::OnSwipe(UISwipeView &view) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherPresenter::OnSwipe,current tab index = %d", view.GetCurrentPage()); + //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the view index = %d,dragging direction = %d,current tab index = %d", view.GetViewIndex(), view.GetDirection(), view.GetCurrentPage()); + } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherView.cpp b/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherView.cpp index 8a7ceb3f5..24fd107be 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/src/MainWeatherView.cpp @@ -1,41 +1,110 @@ #include "weather/include/MainWeatherView.h" #include "weather/include/MainWeatherPresenter.h" +#include "ScreenModels.h" namespace OHOS { static MainWeatherView *g_pMainWeatherView{nullptr}; MainWeatherView::MainWeatherView() { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::MainWeatherView"); g_pMainWeatherView = this; } MainWeatherView::~MainWeatherView() { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::~MainWeatherView"); - RootView::GetInstance()->Remove(weatherView); + ClearAll(); + g_pMainWeatherView = nullptr; + } + + MainWeatherView *MainWeatherView::GetInstance(void) + { + return g_pMainWeatherView; + } + + void MainWeatherView::ClearAll(void) + { + for (int32_t i = 0; i < maxPage; i++) + { + recordCard[i] = nullptr; + } + weatherSwipeViewList->RemoveAll(); + delete weatherView; weatherView = nullptr; - g_pMainWeatherView = nullptr; + + delete weatherReportView; + weatherReportView = nullptr; + + delete weatherSwipeViewList; + weatherSwipeViewList = nullptr; } - void MainWeatherView::OnStart() + /* + * @brief 主天气页面视图初始化 + */ + UIViewGroup *MainWeatherView::MainWeatherViewInit(void) { - View::OnStart(); - weatherView = new WeatherView(); - if (weatherView == nullptr) + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView::MainWeatherViewInit"); + weatherSwipeViewList = new UISwipeView(UISwipeView::VERTICAL); + if (nullptr == weatherSwipeViewList) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherSwipeViewList new fail!!"); + return nullptr; + } + + weatherSwipeViewList->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); + weatherSwipeViewList->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); // 0 : X; 0 : Y + weatherSwipeViewList->SetAnimatorTime(50); // 50:animator drag time(ms) + for (uint16_t i = 0; i < maxPage; i++) + { + recordCard[i] = CreatePage(i); + if (nullptr == recordCard[i]) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordCard[%d] is nullptr!!", i); + return nullptr; + } + recordCard[i]->InitView(this); + weatherSwipeViewList->Add(recordCard[i]); + } + + UIView::OnClickListener *weatherOnClickListener = (UIView::OnClickListener *)OHOS::MainWeatherPresenter::GetInstance(); + if (weatherOnClickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnClickListener new fail"); + return nullptr; + } + + UIView::OnDragListener *weatherOnDragListener = (UIView::OnDragListener *)OHOS::MainWeatherPresenter::GetInstance(); + if (weatherOnDragListener == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainWeatherView::new weatherView fail!"); - return; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnDragListener new fail"); + return nullptr; } - UIView::OnDragListener *weatherDragListener = (UIView::OnDragListener *)OHOS::MainWeatherPresenter::GetInstance(); - if (weatherDragListener == nullptr) + + UISwipeView::OnSwipeListener *weatherOnSwipeListener = (UISwipeView::OnSwipeListener *)OHOS::MainWeatherPresenter::GetInstance(); + if (weatherOnSwipeListener == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherDragListener new fail"); - return; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherOnSwipeListener new fail"); + return nullptr; } - weatherView->SetOnDragListener(weatherDragListener); - weatherView->InitView(); - RootView::GetInstance()->Add(weatherView); - // 增加按键监听 + + weatherSwipeViewList->SetOnClickListener(weatherOnClickListener); + weatherSwipeViewList->SetOnDragListener(weatherOnDragListener); + weatherSwipeViewList->SetOnSwipeListener(weatherOnSwipeListener); + weatherSwipeViewList->SetViewId(MAIN_WEATHER_VIEW); + weatherSwipeViewList->SetDraggable(true); + weatherSwipeViewList->SetTouchable(true); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView InitPage over!!"); + + return weatherSwipeViewList; + } + + void MainWeatherView::OnStart() + { + View::OnStart(); + MainWeatherViewInit(); + RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MainWeatherPresenter::GetInstance(); RootView::GetInstance()->SetOnKeyActListener(keyactListener); } @@ -43,6 +112,7 @@ namespace OHOS void MainWeatherView::OnSetUpView() { View::OnSetUpView(); + RootView::GetInstance()->Add(weatherSwipeViewList); Draw(); } @@ -60,4 +130,76 @@ namespace OHOS RootView::GetInstance()->RemoveAll(); return; } + + WeatherView *MainWeatherView::GetWeatherView(void) + { + return weatherView; + } + + WeatherReportView *MainWeatherView::GetWeatherReportView(void) + { + return weatherReportView; + } + + /* + * @brief 天气页面视图初始化 + */ + AppGroupView *MainWeatherView::WeatherViewPageInit(void) + { + weatherView = new WeatherView(); + if (weatherView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView::new weatherView fail!"); + return nullptr; + } + + return weatherView; + } + + /* + * @brief 气象报告视图初始化 + */ + AppGroupView *MainWeatherView::WeatherReportViewPageInit(void) + { + weatherReportView = new WeatherReportView(); + if (weatherReportView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainWeatherView::new weatherReportView fail!"); + return nullptr; + } + return weatherReportView; + } + + struct MainWeatherViewMapper + { + const int16_t viewId; + AppGroupView *(MainWeatherView::*func)(void); + }; + + // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与DisplayBrightnessViewMapper类中的特定成员函数指针进行了绑定。 + static const MainWeatherViewMapper g_pageMapper[] = { + {MAINWEATHERVIEW, &MainWeatherView::WeatherViewPageInit}, + {WEATHERREPORTVIEW, &MainWeatherView::WeatherReportViewPageInit}, + }; + + /* + * @brief 根据提供的 WeatherPageId 查找对应的页面ID,然后根据这个页面ID来创建对应的页面视图 + */ + AppGroupView *MainWeatherView::CreatePage(int32_t WeatherPageId) + { + uint16_t i; + AppGroupView *view = nullptr; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage WeatherPageId:%d", WeatherPageId); + + for (i = 0; i < sizeof(g_pageMapper) / sizeof(g_pageMapper[0]); i++) + { + if (g_pageMapper[i].viewId == WeatherPageId) + { // 正确使用 WeatherPageId 来匹配视图ID + view = (this->*(g_pageMapper[i].func))(); // 如果找到匹配项,则调用相应的函数创建视图 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage view:%p", view); + return view; // 返回创建的视图 + } + } + return nullptr; // 如果没有找到匹配的视图ID,返回 nullptr + } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportPresenter.cpp deleted file mode 100644 index 22ef28cdb..000000000 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportPresenter.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "AppViewIDs.h" -#include "NativeAbility.h" - -#include "weather/include/WeatherReportPresenter.h" - -namespace OHOS -{ - - // 当前Presenter属性实例化的内存指针 - static WeatherReportPresenter *g_pWeatherReportPresenter = nullptr; - - WeatherReportPresenter::WeatherReportPresenter() - { - - g_pWeatherReportPresenter = this; - } - - WeatherReportPresenter::~WeatherReportPresenter() - { - - g_pWeatherReportPresenter = nullptr; - } - - WeatherReportPresenter *WeatherReportPresenter::GetInstance() - { - - return g_pWeatherReportPresenter; - } - - void WeatherReportPresenter::OnStart() - { - - Presenter::OnStart(); - } - - void WeatherReportPresenter::OnPause(void) - { - - Presenter::OnPause(); - } - - void WeatherReportPresenter::OnResume(void) - { - - Presenter::OnResume(); - } - - void WeatherReportPresenter::OnStop(void) - { - - Presenter::OnStop(); - } - - bool WeatherReportPresenter::OnDrag(UIView &view, const DragEvent &event) - { - - if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM && - (event.GetDeltaY() > 20) && (event.GetDeltaY() > (2 * MATH_ABS(event.GetDeltaX())))) - { - NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER); // 气象报告界面从上往下滑进入主天气界面 - return true; - } - if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP) - { - NativeAbility::GetInstance().ChangeSlice(VIEW_FUTURE_WEATHER); // 气象报告界面从下往上进入未来天气界面 - return true; - } - return false; - } - - bool WeatherReportPresenter::OnClick(UIView &view, const ClickEvent &event) - { - - // 根据控件id查找是哪个控件触发了点击回调 - // if (strcmp(view.GetViewId(), 控件ID) == 0) - return true; - } -} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportView.cpp b/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportView.cpp index 9207a8995..95edcc5de 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherReportView.cpp @@ -1,427 +1,293 @@ #include "weather/include/WeatherReportView.h" -#include "weather/include/WeatherReportPresenter.h" -#include "UiConfig.h" +#include "wearable_log.h" namespace OHOS { - - const char *IMAGEANIMATOR3 = "/user/res/weather/WEATHER_WINDSPEED.bin"; - const char *IMAGEANIMATOR2 = "/user/res/weather/WEATHER_HUMIDITY.bin"; - const char *IMAGEANIMATOR1 = "/user/res/weather/WEATHER_UVI.bin"; - static ImageAnimatorInfo g_imageAnimator3Info[2] = { - {IMAGEANIMATOR3, {341, 167}, 60, 60, IMG_SRC_FILE_PATH}, - {"", {341, 167}, 60, 60, IMG_SRC_FILE_PATH}, - }; - static ImageAnimatorInfo g_imageAnimator2Info[2] = { - {IMAGEANIMATOR2, {207, 167}, 60, 60, IMG_SRC_FILE_PATH}, - {"", {207, 167}, 60, 60, IMG_SRC_FILE_PATH}, - }; - - static ImageAnimatorInfo g_imageAnimator1Info[2] = { - {IMAGEANIMATOR1, {73, 167}, 60, 60, IMG_SRC_FILE_PATH}, - {"", {73, 167}, 60, 60, IMG_SRC_FILE_PATH}, - }; - static ImageAnimatorInfo g_imageAnimatorInfo[2] = { - {PNG_ANIMATOR1_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH}, - {PNG_ANIMATOR2_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH}, - }; static WeatherReportView *g_pWeatherReportView{nullptr}; WeatherReportView::WeatherReportView() { - + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherReportView::WeatherReportView"); + SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + SetViewIndex(1); g_pWeatherReportView = this; } WeatherReportView::~WeatherReportView() { - if (viewInitStatus == true) - { - DeInitView(); - } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherReportView::~WeatherReportView"); + ClearAll(); g_pWeatherReportView = nullptr; } WeatherReportView *WeatherReportView::GetInstance() { - return g_pWeatherReportView; } - void WeatherReportView::InitView() + /** + * 释放图片文件路径数组占用的内存 + * @param imagePaths 图片文件路径数组 + * @param numImages 图片文件的数量 + */ + static void FreeImagePathsArray(const char **imagePaths, int numImages) { - if (container_ == nullptr) + for (int i = 0; i < numImages; i++) { - container_ = new UIViewGroup(); - container_->SetPosition(0, 0, 466, 466); - container_->SetStyle(STYLE_BACKGROUND_OPA, 0); - container_->SetTouchable(true); - container_->SetDraggable(true); - UIView::OnDragListener *draglistener = static_cast(WeatherReportPresenter::GetInstance()); - container_->SetOnDragListener(draglistener); + free((void *)imagePaths[i]); } + delete[] imagePaths; + } - // Add ScrollView to App - if (scrollView1_ == nullptr) + void WeatherReportView::ClearAll(void) + { + if (viewInitStatus == true) { - scrollView1_ = new UIScrollView(); - } - scrollView1_->SetPosition(0, 0); // widget's left position and top position - scrollView1_->Resize(466, 466); // widget's width and height - scrollView1_->SetViewId("scrollView1"); // Set style - scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + RemoveAll(); + delete title; + title = nullptr; - // Set additional property + delete UV; + UV = nullptr; - // Add to rootView - container_->Add(scrollView1_); - scrollView1_->SetVisible(true); + delete UV_Number; + UV_Number = nullptr; - // Add Label to App - if (label5_ == nullptr) - { - label5_ = new UILabel(); - } - label5_->SetPosition(173, 52); // widget's left position and top position - label5_->Resize(120, 35); // widget's width and height - label5_->SetViewId("label5"); // Set style - label5_->SetStyle(STYLE_TEXT_FONT, 30); - label5_->SetStyle(STYLE_LINE_HEIGHT, 35); - - // Set additional property - label5_->SetText("气象报告"); - label5_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - label5_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - label5_->SetRollSpeed(0); - label5_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); - - // Add to scrollView1 - scrollView1_->Add(label5_); - label5_->SetVisible(true); - - // Add ImageAnimatorView to App - if (imageAnimator3_ == nullptr) - { - imageAnimator3_ = new UIImageAnimatorView(); - } - imageAnimator3_->SetPosition(341, 167); // widget's left position and top position - imageAnimator3_->Resize(60, 60); // widget's width and height - imageAnimator3_->SetViewId("imageAnimator3"); // Set style - - // Set additional property - imageAnimator3_->SetImageAnimatorSrc(g_imageAnimator3Info, 2, 200); - imageAnimator3_->SetTimeOfPause(500); - imageAnimator3_->SetRepeatTimes(1); - imageAnimator3_->SetReverse(true); - imageAnimator3_->Start(); - - // Add to scrollView1 - scrollView1_->Add(imageAnimator3_); - imageAnimator3_->SetVisible(true); - - // Add ImageAnimatorView to App - if (imageAnimator2_ == nullptr) - { - imageAnimator2_ = new UIImageAnimatorView(); - } - imageAnimator2_->SetPosition(207, 167); // widget's left position and top position - imageAnimator2_->Resize(60, 60); // widget's width and height - imageAnimator2_->SetViewId("imageAnimator2"); // Set style - - // Set additional property - imageAnimator2_->SetImageAnimatorSrc(g_imageAnimator2Info, 2, 200); - imageAnimator2_->SetTimeOfPause(500); - imageAnimator2_->SetRepeatTimes(1); - imageAnimator2_->SetReverse(true); - imageAnimator2_->Start(); - - // Add to scrollView1 - scrollView1_->Add(imageAnimator2_); - imageAnimator2_->SetVisible(true); - - // Add ImageAnimatorView to App - if (imageAnimator1_ == nullptr) - { - imageAnimator1_ = new UIImageAnimatorView(); - } - imageAnimator1_->SetPosition(73, 167); // widget's left position and top position - imageAnimator1_->Resize(60, 60); // widget's width and height - imageAnimator1_->SetViewId("imageAnimator1"); // Set style - - // Set additional property - imageAnimator1_->SetImageAnimatorSrc(g_imageAnimator1Info, 2, 200); - imageAnimator1_->SetTimeOfPause(500); - imageAnimator1_->SetRepeatTimes(1); - imageAnimator1_->SetReverse(true); - imageAnimator1_->Start(); - - // Add to scrollView1 - scrollView1_->Add(imageAnimator1_); - imageAnimator1_->SetVisible(true); - - // Add Label to App - if (label6_ == nullptr) - { - label6_ = new UILabel(); - } - label6_->SetPosition(93, 240); // widget's left position and top position - label6_->Resize(20, 50); // widget's width and height - label6_->SetViewId("label6"); // Set style - label6_->SetStyle(STYLE_TEXT_FONT, 40); - label6_->SetStyle(STYLE_LINE_HEIGHT, 50); - - // Set additional property - label6_->SetText("7"); - label6_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - label6_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - label6_->SetRollSpeed(0); - label6_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); - - // Add to scrollView1 - scrollView1_->Add(label6_); - label6_->SetVisible(true); - - // Add Label to App - if (label7_ == nullptr) - { - label7_ = new UILabel(); - } - label7_->SetPosition(210, 240); // widget's left position and top position - label7_->Resize(200, 60); // widget's width and height - label7_->SetViewId("label7"); // Set style - label7_->SetStyle(STYLE_TEXT_FONT, 40); - label7_->SetStyle(STYLE_LINE_HEIGHT, 50); - - // Set additional property - label7_->SetText("1-2"); - label7_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - label7_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - label7_->SetRollSpeed(0); - label7_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); - - // Add to scrollView1 - scrollView1_->Add(label7_); - label7_->SetVisible(true); - - // Add Label to App - if (label8_ == nullptr) - { - label8_ = new UILabel(); - } - label8_->SetPosition(337, 240); // widget's left position and top position - label8_->Resize(200, 60); // widget's width and height - label8_->SetViewId("label8"); // Set style - label8_->SetStyle(STYLE_TEXT_FONT, 40); - label8_->SetStyle(STYLE_LINE_HEIGHT, 50); - - // Set additional property - label8_->SetText("75%"); - label8_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - label8_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - label8_->SetRollSpeed(0); - label8_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 40); - - // Add to scrollView1 - scrollView1_->Add(label8_); - label8_->SetVisible(true); - - // Add Label to App - if (label9_ == nullptr) - { - label9_ = new UILabel(); - } - label9_->SetPosition(63, 293); // widget's left position and top position - label9_->Resize(200, 60); // widget's width and height - label9_->SetViewId("label9"); // Set style - label9_->SetStyle(STYLE_TEXT_FONT, 26); - label9_->SetStyle(STYLE_LINE_HEIGHT, 30); - - // Set additional property - label9_->SetText("紫外线"); - label9_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - label9_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - label9_->SetRollSpeed(0); - label9_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26); - - // Add to scrollView1 - scrollView1_->Add(label9_); - label9_->SetVisible(true); - - // Add Label to App - if (label10_ == nullptr) - { - label10_ = new UILabel(); - } - label10_->SetPosition(212, 293); // widget's left position and top position - label10_->Resize(290, 60); // widget's width and height - label10_->SetViewId("label10"); // Set style - label10_->SetStyle(STYLE_TEXT_FONT, 26); - label10_->SetStyle(STYLE_LINE_HEIGHT, 30); - - // Set additional property - label10_->SetText("风速"); - label10_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - label10_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - label10_->SetRollSpeed(0); - label10_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26); - - // Add to scrollView1 - scrollView1_->Add(label10_); - label10_->SetVisible(true); - - // Add Label to App - if (label11_ == nullptr) - { - label11_ = new UILabel(); - } - label11_->SetPosition(345, 293); // widget's left position and top position - label11_->Resize(200, 60); // widget's width and height - label11_->SetViewId("label11"); // Set style - label11_->SetStyle(STYLE_TEXT_FONT, 26); - label11_->SetStyle(STYLE_LINE_HEIGHT, 30); - - // Set additional property - label11_->SetText("湿度"); - label11_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); - label11_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); - label11_->SetRollSpeed(0); - label11_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26); - - // Add to scrollView1 - scrollView1_->Add(label11_); - label11_->SetVisible(true); - /* -------------------------------------------------------------------------- */ - #if 0 - // Add ImageAnimatorView to App - if (imageAnimator == nullptr) - { - imageAnimator = new UIImageAnimatorView(); + delete WindSpeed; + WindSpeed = nullptr; + + delete WindSpeed_Number; + WindSpeed_Number = nullptr; + + delete Humidity; + Humidity = nullptr; + + delete Humidity_Number; + Humidity_Number = nullptr; + + UVImageAnimatorView->Stop(); + delete UVImageAnimatorView; + UVImageAnimatorView = nullptr; + + WindSpeedImageAnimatorView->Stop(); + delete WindSpeedImageAnimatorView; + WindSpeedImageAnimatorView = nullptr; + + HumidityImageAnimatorView->Stop(); + delete HumidityImageAnimatorView; + HumidityImageAnimatorView = nullptr; + + if (p_ImageAnimator != nullptr) + { + p_ImageAnimator->FreeImagePathsArray(UVPaths, 24); + p_ImageAnimator->FreeImagePathsArray(WindSpeedPaths, 24); + p_ImageAnimator->FreeImagePathsArray(HumidityPaths, 20); + + delete p_ImageAnimator; + p_ImageAnimator = nullptr; + } + + delete UVimageAnimatorInfo; + delete WindSpeedimageAnimatorInfo; + delete HumidityimageAnimatorInfo; } - imageAnimator->SetPosition(213, 400); - imageAnimator->Resize(40, 40); - imageAnimator->SetViewId("imageAnimator1"); - imageAnimator->SetStyle(STYLE_BACKGROUND_OPA, 0xff); - - // Set additional property - imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo, 2, 200); - imageAnimator->SetTimeOfPause(200); - imageAnimator->SetRepeatTimes(1); - imageAnimator->SetReverse(true); - imageAnimator->Start(); - - // Add to scrollView1 - scrollView1_->Add(imageAnimator); - #endif } - void WeatherReportView::DeInitView() + // 设置标签 + UILabelExt *WeatherReportView::SetUpLabel(LabelConfig &labelconfig) { - if (label5_ != nullptr) - { - delete label5_; - label5_ = nullptr; - } - if (imageAnimator3_ != nullptr) - { - imageAnimator3_->Stop(); - delete imageAnimator3_; - imageAnimator3_ = nullptr; - } - if (imageAnimator2_ != nullptr) - { - imageAnimator2_->Stop(); - delete imageAnimator2_; - imageAnimator2_ = nullptr; - } - if (imageAnimator1_ != nullptr) - { - imageAnimator1_->Stop(); - delete imageAnimator1_; - imageAnimator1_ = nullptr; - } - if (imageAnimator != nullptr) - { - imageAnimator->Stop(); - delete imageAnimator; - imageAnimator = nullptr; - } - if (label6_ != nullptr) + UILabelExt *label = new UILabelExt(); + if (label == nullptr) { - delete label6_; - label6_ = nullptr; + return nullptr; } - if (label7_ != nullptr) + label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); // 位置大小 + label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); // 字体大小 + label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); // 字体行高 + label->SetText(labelconfig.text); // 内容 + label->SetLineBreakMode(labelconfig.lineBreakMode); // 断行模式。 + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize); + return label; + } + + bool WeatherReportView::WeatherReportViewLabelInit(void) + { + LabelConfig labelconfig = { + .left = 173, + .top = 52, + .width = 120, + .height = 40, + .fontSize = 30, + .lineHeigh = 35, + .text = "气象报告", + .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS, + }; + title = SetUpLabel(labelconfig); + if (title == nullptr) { - delete label7_; - label7_ = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::title new fail!"); + return false; } - if (label8_ != nullptr) + /* -------------------------------------------------------------------------- */ + labelconfig = { + .left = 23, + .top = 240, + .width = 120, + .height = 50, + .fontSize = 40, + .lineHeigh = 50, + .text = "7", + .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS, + }; + UV_Number = SetUpLabel(labelconfig); + if (UV_Number == nullptr) { - delete label8_; - label8_ = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::UV_Number new fail!"); + return false; } - if (label9_ != nullptr) + + labelconfig.left = 173; + labelconfig.text = "1-2"; + WindSpeed_Number = SetUpLabel(labelconfig); + if (WindSpeed_Number == nullptr) { - delete label9_; - label9_ = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::WindSpeed_Number new fail!"); + return false; } - if (label10_ != nullptr) + + labelconfig.left = 323; + labelconfig.text = "75%"; + Humidity_Number = SetUpLabel(labelconfig); + if (Humidity_Number == nullptr) { - delete label10_; - label10_ = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::Humidity_Number new fail!"); + return false; } - if (label11_ != nullptr) + + /* -------------------------------------------------------------------------- */ + labelconfig = { + .left = 23, + .top = 290, + .width = 120, + .height = 30, + .fontSize = 26, + .lineHeigh = 35, + .text = "紫外线", + .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS, + }; + UV = SetUpLabel(labelconfig); + if (UV == nullptr) { - delete label11_; - label11_ = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::UV new fail!"); + return false; } - if (scrollView1_ != nullptr) + UV->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + + labelconfig.left = 173; + labelconfig.text = "风速"; + WindSpeed = SetUpLabel(labelconfig); + if (WindSpeed == nullptr) { - delete scrollView1_; - scrollView1_ = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::WindSpeed new fail!"); + return false; } - if (container_ != nullptr) + WindSpeed->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + + labelconfig.left = 323; + labelconfig.text = "湿度"; + Humidity = SetUpLabel(labelconfig); + if (Humidity == nullptr) { - container_->RemoveAll(); - delete container_; - container_ = nullptr; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::Humidity new fail!"); + return false; } + Humidity->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + /* ----------------------------------- Add ---------------------------------- */ + + Add(title); + + Add(UV_Number); + Add(WindSpeed_Number); + Add(Humidity_Number); + Add(UV); + Add(WindSpeed); + Add(Humidity); + + return true; } - void WeatherReportView::PreLoad(void) + bool WeatherReportView::WeatherReportViewImageAnimatorViewInit(void) { - if (!viewInitStatus) + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::WeatherReportViewImageAnimatorViewInit"); + + p_ImageAnimator = new ImageAnimator(); + if (p_ImageAnimator == nullptr) { - InitView(); - viewInitStatus = true; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_ImageAnimator new fail!!"); + return false; } - } - void WeatherReportView::OnStart() - { - View::OnStart(); - PreLoad(); - RootView::GetInstance()->Add(container_); - } - - void WeatherReportView::OnSetUpView() - { - View::OnSetUpView(); - Draw(); + p_ImageAnimator->imageAnimatorConfig = { + .x = 53, + .y = 160, + .w = 60, + .h = 60, + .numFrames = 24, + .time = 100, + }; + UVPaths = p_ImageAnimator->CreateImagePathsArray("/user/res/weather/weather60x60gif/UV/", "bin", 24); + p_ImageAnimator->InitImageAnimatorSource(UVImageAnimatorView, UVimageAnimatorInfo, UVPaths, p_ImageAnimator->imageAnimatorConfig); + + p_ImageAnimator->imageAnimatorConfig.x = 203; + WindSpeedPaths = p_ImageAnimator->CreateImagePathsArray("/user/res/weather/weather60x60gif/WindSpeed/", "bin", 24); + p_ImageAnimator->InitImageAnimatorSource(WindSpeedImageAnimatorView, WindSpeedimageAnimatorInfo, WindSpeedPaths, p_ImageAnimator->imageAnimatorConfig); + + p_ImageAnimator->imageAnimatorConfig.x = 353; + p_ImageAnimator->imageAnimatorConfig.numFrames = 20; + HumidityPaths = p_ImageAnimator->CreateImagePathsArray("/user/res/weather/weather60x60gif/Humidity/", "bin", 20); + p_ImageAnimator->InitImageAnimatorSource(HumidityImageAnimatorView, HumidityimageAnimatorInfo, HumidityPaths, p_ImageAnimator->imageAnimatorConfig); + + /* ---------------------------------- Start --------------------------------- */ + UVImageAnimatorView->Start(); + WindSpeedImageAnimatorView->Start(); + HumidityImageAnimatorView->Start(); + /* ----------------------------------- Add ---------------------------------- */ + Add(UVImageAnimatorView); + Add(WindSpeedImageAnimatorView); + Add(HumidityImageAnimatorView); + + return true; } - void WeatherReportView::OnTearDownView() + bool WeatherReportView::InitPage(void) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::InitPage"); + if (!WeatherReportViewLabelInit()) + { + return false; + } + + if (!WeatherReportViewImageAnimatorViewInit()) + { + return false; + } - View::OnTearDownView(); - return; + viewInitStatus = true; + return true; } - void WeatherReportView::OnStop() + bool WeatherReportView::InitView(void *caller) { - - View::OnStop(); - RootView::GetInstance()->RemoveAll(); - return; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView InitView %p", caller); + if (InitPage() == false) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherReportView::InitPage fail"); + return false; + } + SetDraggable(true); + SetTouchable(true); + return true; } + } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherView.cpp b/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherView.cpp index 12922aa31..c16238556 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/weather/src/WeatherView.cpp @@ -13,8 +13,9 @@ namespace OHOS static WeatherView *g_pWeatherView{nullptr}; WeatherView::WeatherView() { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::WeatherView()"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::WeatherView"); SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + SetViewIndex(0); Time = GetTime(); WeatherImag = GetWeatherImage(); Temperature = GetWeatherTemperature(); @@ -26,7 +27,7 @@ namespace OHOS WeatherView::~WeatherView() { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::~WeatherView()"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherView::~WeatherView"); ClearAll(); g_pWeatherView = nullptr; } @@ -154,12 +155,12 @@ namespace OHOS // 初始化天气页面 bool WeatherView::InitPage(void) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::InitPage()"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " WeatherView::InitPage"); /* -------------------------------------------------------------------------- */ showWeatherImage = new UIImageView(); if (showWeatherImage == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherImage fail!"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherImage fail!"); return false; } showWeatherImage->SetPosition(109, 124, 100, 100); @@ -168,19 +169,19 @@ namespace OHOS showCurrentTimeLabel = InitLabel(185, 52, Time.c_str(), "showCurrentTimeLabel", 40, 47); if (showCurrentTimeLabel == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showCurrentTimeLabel fail!"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showCurrentTimeLabel fail!"); return false; } /* -------------------------------------------------------------------------- */ showTemperatureLabel = InitLabel(249, 126, Temperature.c_str(), "showTemperatureLabel", 100, 125); if (showTemperatureLabel == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showTemperatureLabel fail!"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showTemperatureLabel fail!"); return false; } /* -------------------------------------------------------------------------- */ showWeatherDescriptionLabel = new UILabel(); - showWeatherDescriptionLabel->SetPosition(83, 264,300,40); + showWeatherDescriptionLabel->SetPosition(83, 264, 300, 40); showWeatherDescriptionLabel->SetViewId("showWeatherDescriptionLabel"); showWeatherDescriptionLabel->SetStyle(STYLE_TEXT_FONT, 35); showWeatherDescriptionLabel->SetStyle(STYLE_LINE_HEIGHT, 41); @@ -190,14 +191,14 @@ namespace OHOS showWeatherDescriptionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35); if (showWeatherDescriptionLabel == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherDescriptionLabel fail!"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherDescriptionLabel fail!"); return false; } /* -------------------------------------------------------------------------- */ showWeatherAreaLabel = InitLabel(155, 330, WeatherArea.c_str(), "showWeatherAreaLabel", 26, 30); if (showWeatherAreaLabel == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherAreaLabel fail!"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherAreaLabel fail!"); return false; } showWeatherAreaLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); @@ -205,11 +206,11 @@ namespace OHOS showMaxandMinTemperatureLabel = InitLabel(158, 368, MaxandMinTemperature.c_str(), "showMaxandMinTemperatureLabel", 20, 23); if (showMaxandMinTemperatureLabel == nullptr) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showMaxandMinTemperatureLabel fail!"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::new showMaxandMinTemperatureLabel fail!"); return false; } showMaxandMinTemperatureLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); - + /* -------------------------------- 将组件添加到根视图 ------------------------------- */ Add(showWeatherImage); Add(showCurrentTimeLabel); @@ -221,12 +222,12 @@ namespace OHOS return true; } - bool WeatherView::InitView() + bool WeatherView::InitView(void *caller) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::InitView"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView InitView %p", caller); if (InitPage() == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitPage fail"); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "WeatherView::InitPage fail"); return false; } SetDraggable(true); diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/1.bin new file mode 100644 index 0000000000000000000000000000000000000000..26e05031b8a25f006fae9ef9cbe5a353c6ca8cba GIT binary patch literal 2424 zcmdT_ZA@Eb6n^f<+5%U&&<$zk!fk<#4q{rsj7>J~y(|dAW?PJjCX)_WLdKLa7l%sR z>wwsfjUXd&Geo-W$Al~abQ(2I3*7`AS!9w}zha|{A(?TEZjLCkzGd5=i%CQHqvz)S zcQF=P(+^yXDFI+WZ}Ne--#^PT^x!0*KvvWOUBsR{Ttm`|lNKseDz*Moj4))2d?wdCY$hDkrlzH-=Cj2 z;z;RwdxK|oS|4I078e9~;*Di(JY=5|N(Tr7bT`k7(Nd7{H=G3gB7Wyb&xN*>J23Mcl*$a!o>UmD1nEro3IPE0Td>-4sp(lx)fS0q|rBOmK-~L-*b?w(Q_J+ zMf%L|<&(EE7`c?i86byIMs)GIyP=4-fL5OtEB(1mHMxg!3H2qMhs0G&v!^;OETQSr`RI=oztnYSK%B)skO9W=3`;(+UCI9D-CtZKtOTN$ z=>&Af?Gt(gUDgfHrtWB?(0OysL@<$%xki3P3@`gUW9c=%)5*gpw=VoI=%Kr;6~ZY| uOlpD5&U}30VAW`E;|Zz@zOLP$M5-?-)(v);C7-(O=L7;AipBqbU;hU?dvH7e literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/10.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/10.bin new file mode 100644 index 0000000000000000000000000000000000000000..585620079e9ef625dd17abd650ca457dd58e81a7 GIT binary patch literal 2424 zcmeHJT}V@57=FH;vtQ5VR*1_Bcbp5H6wEY=Fg@oeVW_#byRJ4{;e{-%=%$N~i^wgI z#4aKSGV!F;UZ%)u5qKm-yyZCtczV|uLd7tl( z@IbZPvXr4Z?R8;0G8@?+v4yi)CH~Mm#xQKvu*DU@5sHS-NSH~3wlD-HNj;3*J829s zG^6pPnv<|wIZ8NAn$~Adcq5R^67(optwEZK)qo{0v7N`S+M}Out-wZzmkky`F%B9nka74 zgKN=?F06?{%h_Y8wf%R790n6GeS!a^ zv&k~0(9c!zkzSmiSGzd_nfRo$DCvJ7`RU@@gugrcN;k zB*vXOdWu#3KQ;cN`7s)SBp=r{=vYez2cp!2VCc5Khk&z`k-KX76~>$%7Nz4uMO6@q z)ARoGVEZ&d~%SRm&Hmdztd9-i6)`O9!FS5Zqml zgq{cq0JI2N)ju_UGiBh~^ddMwFrH`5N*yD8-+Ecd z!6*7tdw^$o^Z<9+y873CD)lJw?)yEm-+|VoL*DGL!ao&1Js|6lSUhR;&ga!l`C^SZ zVYoROo*zx|?n4zKz-gFPliWv?d^`B}=lM>3cIuO>KyF6?zux!%`}){5_m)9Ji@UgM bNPe%p13w$I@q~aeFU$9*;h&#p%KCi=CT0Ut literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/11.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/11.bin new file mode 100644 index 0000000000000000000000000000000000000000..da418e602a1262734181ccb5d68d16b77311e079 GIT binary patch literal 2424 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 KZ&BWF6#oP$WBK*~ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/14.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/14.bin new file mode 100644 index 0000000000000000000000000000000000000000..44fa2f8d0ef651877c63e742d3741566991b1ae0 GIT binary patch literal 2424 zcmeH}T}TvB6vzK_XLi=F+%<)yww!iS7ZjrDAuOqxU5EvJ&|MIFX@|ZDf~d{6M5a}& zpv+e*DEfeeumnj2A7*z1S1c%c5lY#8NDzY6lFGH(?kK*D5G<(s;u#qD!AMYPzZGbo-5*PCNWUcuH#ulx7h6oHOg(b`Kdk5XvU22mOX|nZ&elwU z{s2l;Ix4O4pdhUN+3He%7YA8Y5*2{P(0SXq9KO*&6ELP)AK$z$kAQLN0ML<0b)*Q+ ze6&|%DI^U04xNH}a(bD0!DyfpJllG#{$f9K=X1OuRzhY`1VZ-#C*23`I<&SO5Q)%Z z^;afquvm!QbZe+&oAyv%{(#>+$f{|+k;^K7K!vck$tIuH2Cd&`tDB8tT2Ifu-hlL$ zlpi+hTg0dhm3B-M`3+kdPjV1+VTCWP-{gm(2Bd9R;`L$9nop^5qrI?-2(J)!uKprCLCq4{E3q11AnO?qg17(>w)fA{Ho&+q(xAHL^s z&S4~=oPIG*Q~s@CJN`xVPb?A3Iu?`e?y?0X6xitxg~@@rm#bS09o6cAc?6J`oS&?l z+dZuf1{8&a0$4;tbg1m(v-TDTqexXwuWuU3`I+h_@5M$%B0_?fb;4Y#ult}A2KpFu zV;Jw#)hls&4xg&cFL`?;9~Pbk<(ql!0Of0e7yfX%`I(MO;Lfyvx_nz{{R>B1r{2Uc z&=A6njSbEi$N@=Qn5rJ#jN?sljXkp+OGPKmRe)T&o9>6LHFQ59LN-;TtH0XgvZcP= zewy}<+Xv`gX)ALH1Ap*FLO)&YejD}vKOZ*ySYJQnfEC0-_C}5R26}uz3JhgAuT4&c zE}!B2BG~m_ADIJ7I@m}vMt0!07F3Vnmk00K;6DibTx&k*2`f;WmV*IoQECUAhc?-3=h-romi7F;5T6QVRRJS=;i2r zhM}=-;>0cmhGyXveJl(O4M`8=85kNE1Q?7@TKN29RR|DZsANbmXQ)LtkJ^0Y!z$q% z3{7uY7i?s9n8nUO$b99)O6S=fma#J|NMmI1GG`*Bo>F;ZO+z0CR-LGej0gBP2!9YJ zWS$dew$G0f{4?4Z`3)Go;mpK%K)!%`1=Alw?sGbs>T`$Nc18=Mr~w221O_LAqdW{e z7X+G>ITjpXaCksSKdJJLhh^T&IILkPSjAu^$DqmXEswD|-3}>Rig=!+FTDKa5d+1G4~w)6DDx0?ZB$X)*`+ z4=@m}-_XsYHb1zKkzoO=1H(NBOU6Bii^tQ0Jd?ICT`Z^QsO$0`*se;2L^s~<-@=J+bOIOVQ5NXVn|s>as5QdJ?QcP Dx=tt+qiWdg%{Q3Xg!KJJNoS=pP!~)&N^o~c{7euFlHphK z>mN3t*h2ya7>&|-)Xy;_BPa8@J<({@l;38Vo{jpml0X3xPwy)ETCotE*cyj8LtE_Qm9J6GZv$*Ti?Cig@i?;^%&E~+_V<_|wSewf}F1B2nCq&{5e=D%3st;=Mm3DbvH9DlcqVR4N*y&Q* zmDnchPff7n-e|?d5~bgW?du5F%X?aj=ThW-6_x(+;?v$ynprKiQ_K|cpncrqUN9TF zzx2}Nhf>ZU-`TfAdo=Et%a(`IWRb(6-hgZ7%@r5BLYri~`L*)hg|$vIf$-GjC-N<} zb4_zzqz< literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/18.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/18.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d940d62e4d102693f3f91e5c627e204367ae292 GIT binary patch literal 2424 zcmeHJTSydP6#iy*_F|3e=z?ZRPP`uef`u06Cv3}u5WV*4Cd7HVvFniB4Jq0EiIbM1uP>@K59V<5>X?~_Hrh))8y3`~xi zPYNW=O8Bh@Q`dR6dGulBjEPs|$R;V^T)FhOJ!-uy`IQWOo{CVaA~pr39^YWCh&GnA zk{)JBp=)g}YZcvnHDC31I6|ly{mf>tP29!qvU<4x{rtE(b`r=Ysz7(FRDhkXm(N9W1Pw0!PL^8_=n~uMr)^obCO}2I!k?;z^FxBOKta+Yn za@tFyulW?^pI1%QH&fGHkDAXW^Z7<#Um32HQ^9ST`IP-GD3|xuU49hTgls>gntB$d z6dIN9JU4jIYW`^P)|uxRh#}>+By%>0C|HH_t3RxY%jQ7nVxo6y@on8-v6GKSN@rCf zGVEDn&xPL3lF}O#kyi5OoYk8BY4H~YXpWv7CLT|bJD@Arn;w&H!fS{Q+|r7#J6LhE z%k+kiP39V$cEB}0uNS*Kr&ee9{G905ijUS_D4R!cB^K$su~E-nGfN#Mf{%x1-h#eV zqT~-)DR`EHOtz$)@7kec;=My3(qA{YXT#E8rR)chCeA;=N1I>Ezi8pJ7d^RIFewEP z^rJhNm*-&c02_{42lM#GV6b-kRYJmp2M)IkBr=fu=fvNovgTeL4-gH*TKxa*|Mvev nt*^9}>0Z&MBh}uaRH6ecPx=`6OWWU$e?LHL-hXPozr{ZRsV>}` literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/19.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/19.bin new file mode 100644 index 0000000000000000000000000000000000000000..ecb91b5860382c375bd644c099096d90c35502d8 GIT binary patch literal 2424 zcmdT_T})GF7=F$Vr>AnD2N6N0_JhjS`h#r%hXVGr6(+7aT1{Pe z*lsMTQxh+?qzfi4(r_gK)8y- zD@J+f0A@`bCJtrdn{R*XfsW7zY%MKj-FU%t78?1}`nvx$1ApuT{;p$<{%o@(lFK=qKLq#~ zM!*7n6aZR6-{mu&H{xKlLTVIqEPs8jnw;Ds1QPNzNIyqwOt`?3%f@&whpW$h*uF

) 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 KWb^;u{r?4p?whIr literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/3.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/3.bin new file mode 100644 index 0000000000000000000000000000000000000000..666e09c0e12c7edebf809e58a5ef5b84518917eb GIT binary patch literal 2424 zcmd5+e`p(J7=FIH>*bo=@}tSpYz1@ey4wAyrj1Y?Exk*eYoXhc)M+=xUTwt9!Qy7A zOoo14t0c}rw+ZvV1spm--NqCYpTlU|E^|P^6P| zGm_);Z@UC6*S|6ZW~nydaNBxqZV$$6(aCVMo^I7%LYS2qeDEps(~zG7ep|M`qdO@7 z(T%YO?u|)3)DLCIQQ}xKY?Q=Gzi!{dI1ECwq7-N8LmO)MrDi5=I*}L*i%8k6_+~tE zyaxV>fL;w3c%xup7GXQukKtyLE;J>shii8MUGJ`bCZIVr6y4%adB@?F0hOwHfWpNs z)~j;v7{-&xoQBj9+0_lv7hElWOUhFGz?0_vt#ZQ;6HVe^1al75b5PcIyA?vz=DlYb z3iO9q{6*wk3ou_saP8c`(7Oa61zg>Z-R;LNV}77qC#qneqQRuh>`%=}Q(RzW{lhdCa_DXnGScwX$_$u7oNTjMfB&EGH1OKuy+Is`dq zH!67Ir~aANuSDY?*0(Iajs9OkPlxopWBgal^xeWY>sjUT^g3|}MWwU5sWZrW5zCf% ziS#~;X&c?oV9?BuUC=q)m3@;_!+^@L38%2r_TZyfo0VE^^Z)~{2WZ_7&&c;2GIF0D04SJc*Tc%6a{N6J?X%v? zs6d8wp?pOzC%9�v$$1Of-hqm$r_7-W25t0agYPPk+LR!OeU>?$LOPsFnV5@p!sX z987KXlWVeX)b?}Xeo&20-B@u%q!2W-ek?mM1L#CUr}MgOLsdOcIl)9i z^!`nj{feg_5eFwPd)b|E>OPq-^jkvto$9xzxu1iSkqUZ7%R)c0uRU>w+af?`G|zdT z)%nZ2`(7Ejd)p6RzkY;l0P763^qz1(UYLC+sv%qPt?(M>s~l8>K?aI7`yNu4X20l6 w94>YJ-yn&jq5uE@ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/4.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/4.bin new file mode 100644 index 0000000000000000000000000000000000000000..d5f59b85ff9283bcb7cf082f0299551e32f88b2c GIT binary patch literal 2424 zcmd5-TSyd982--e>_r>b^=>NcxQksL0&kd->C7yaTM?@Z5+rF+sS%M%VH9*sGdFy( z-YRHK9}J+X2MKU4OnUY#a|Ek z3lT%acx^?Nc8bVP6w15l6&@pK4nxmM>$7^l1@eILs`BU|NW&!EI~ABFc+)`SW1z~K z#p;tM&IuwdZgc4G6St12_QOU94+Ho)|MAd4(LkZcAHrmYSjOJ8$x_f~hdG*Fxf3%n zs(iuvhM7{8?CSH7E0yIB*^nobLH-`=$PWa2*GHEO1!x_@i~W$2`NvjjJg zsrT!g>o@pgz$yxaxsyC$!THs&rHdc}B^!YkKqz2K%NJ)G3?4{YL=Hx~oUTnMf2p8O zQx}eGWUBEkb=-L?7T6UsW0mxt*VG8PR~M?AuO~Z(te%{^478TR&k$s;UF!U5d>I;i zA@JlI*<|Ae?{dNWovsowk-JleDZTqFrWWjFUlBBT|59Ui-ncjez8AoE6+M%o*6s{ z8ehXFOD$RI{Azsibz?P^;D0du!At?6-PFOiWIx|(gal;y6XX$HE7!nbZ0zG)yhn{s zEneh`d)isy(O!nk8BA=-lJ_7XAwS#RsY;S!Fr4BQNlixHtv*3+Rc1LioB7r zWXKN39+dlpd!@nqmm5bFHu4a~WWSjW12$i+UU9n~NbSa}Arx9yEA|XwOTFWLYfiWa zn|neO`^lC|5xj$44LoHNf4TK3eFt{TJQ55|h)YEn>!%$8XJdLs00#u0?9xSC8%+)s Z!SpkK+4|Zq9O+;`l8c=9K{PH_-!CX@>4X3P literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/5.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/5.bin new file mode 100644 index 0000000000000000000000000000000000000000..6c28cf8a972f011a2f3e1a847110876e47a2dd33 GIT binary patch literal 2424 zcmeHHT}V@57=FHU&VCrCtE{lAvnDz*)S0E#V&`m9Q-r3j$RJz=wJ6CXC<*MlST!mr zM^O}Hkrd^{7!AUkI`gJLi%Bhxbm~lG{lvwi3&r}%>+M41E1OeRAioDZ$6rg7pOvF+W zD-<{8nqPZVYtW{aLxMu!;NdtjcL{YNcn2VMGR)DXF7HRd9m2#LQgA%-t~a`gz_$}pN;4o2okCsVR{w?P zl{nRMHEWqCKo$_eCX)wZg1z1Zd@=Sg`f;AbIvoN#~3bY8OcmrwS@HQh9#8{C7N zv{$E&*FIfM*P_pkDXsDz^Ss*rud%tp+VZH9S^}G;y@(;E&Swq3ICj75h9%%dV}Glp zW%oq?`cLM-efLZNhxqXLRBJ{3^|3~+uX=Ks s1u(kQ|7VKL&q&Ms+v1Kpqz=U_hiUY2?TLQq;W|y<72tEG@&4rh3y)+FE&u=k literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/6.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/6.bin new file mode 100644 index 0000000000000000000000000000000000000000..9badd78d35ea449013b2dc90274815e35364a7af GIT binary patch literal 2424 zcmeH}y-Ncz7{;IE`lXmf9@5fK%%6-5dP_u=4ra({p)D2NUgb#M@jcCbYU#nqvU zP;jVXp_{ZW#jS%wL4*o|LkCYmuuwg()h>0vE`2k-5Xdi2o;(SWfEjZboNGo`22ici zmr<$T-Y^<{Lyxio_40#!G72V^gr(j#1|E>E;=F$)^KcVcrcpm=z5S_Pbpg57U^iag z#!_y`94Izsp}e9m2^6j7OZO9K0$BAvtC1e)=M+IsZ(8ZpJu)ZmD?a4CNF{Cfa9hnM zr5(+VDjZ;w4m)8FZk^i0!w9#CMU#)Rq9-cw$Lq*uU^QRudb9H_(3r18Oy&gcUFnh0 z{Igf5w>;~~;V=eru22Gh;FAlps^ zFln`)rNUg^5l|LF8o73g6lR`fF@@egNyTzLXbWJQ6yHrqWUS_!;P6RsDY(s_6V2WH Udw}<3q%<- z+8I7DD1buPapQWHgoatOt@spJ6bu-csBIsq<^^vQV_=Bj|B%-3{NvRFd<;&^3{DJ1 z-V77u84he`VE9O?d6cR@sKm&SV9(G13M&u*yJx|Ch6(u$HQo##86CNqAF!-Y;A>vY z*kQ-Oz)z`tr0RD($i~G6aTfpz`h}Egm_JL%gHv_{7phyG5X#F?9?E#^W?JU5^;8-EB sfPsmbVZhT1dirx*ox>o)XWCM~O517@s{yOyK^H$4P|61Z1x)t>00A(6E&u=k literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/8.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/Humidity/8.bin new file mode 100644 index 0000000000000000000000000000000000000000..1d5c19ae000bc71e8f651ea362cb1bd631b2a0e0 GIT binary patch literal 2424 zcmZQ{WMHrX!vD-1HXj017+~Pf-~V6$;s5`S&Uad=z@yS!uyFEQCI<%V2W*a7-ac!b_rW=str*9j<0rnUW}=HpLKqv10eKA;c)7Zwbd<;`gN7~1K> zk+aCqL4jex=Pj2x8-R6=#)QTP z!VW+S8yFZQ(Df7I2OVS*V1hW7L4n~6gYiq|o;(#!RSt&R3=ZZDYY6FISkk=g0>@*8 zUP*x!HUt$)CxP#$@o=K*E|qCDQR^qTvAr zhJ-}-hw=?T`wuEHGBELjf&u~p4-0%|P*|t7#VWz;L;){@@QXHJd^9*dkOzmC0;%>B zQXiyw_RNbFgG$*u@Z1Y4pxcVQuiCIaxCq8lv96|6gA@U4g+# zQ`hIm3A=z6p!x$1EI$dEKPr!!zedAjG(12d0LktD|Bt4J(eyBs(!(K%Tm}bAzNst> z49q$Y7#JLPHYN#3sWC_^H0UxJurLjDdUovAT)?tIU;=9?3zM94GlLT|0~5nHRt6Jw Nh6nKs4aM|!9{}FqWqJSr literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/1.bin new file mode 100644 index 0000000000000000000000000000000000000000..f449dada8795f30a3c12041c1817d9cb7611e561 GIT binary patch literal 2424 zcmds2Z%i9y82|O|TCSyIEi?{qtI;Sw5Je%ue*OLiM4 zc8?jffQOBQhp^P=bw$e_DN7_bH(|Y@GIWG99hzw>fqji_pPL)M{b65IK8oANe_Ff# zTKmoC;~Ju^Gk5kBc4TgQb;rj$^{Q_%2ZTo&|%rJr1 zz)6GJdV}F-Yq0eO`0u>>dT9mqauxE>XCPIG9?A9h7U}lywoSd0Dc{dKY2K*>*553T z8^{F~XT8-xL#P$g8fiIkknJvWmNfHae$eEg9+cDWpf;Lq&0gSBEhVL@*Y!c9c4v7X z#lip!?eVMp6y!MnyRxC`$v`zvi+vZ_3UR=$0S5#x){2`k4bPSamCa6n|I57I_yH(B zW8Lj3ar1Dc zTyNnpD{0SW`|z8crNXO{>Pe-%{ zpSh6hqaSr0tL=IFydc(JR$5+Ze5)_soCnD*;!Np~YoIjIGM<1gWh_oLgu1`kpx>o7 zcjTP)dd%9@)7#SW{-#1Ri(mf`w#lp??4GG|m^hAUOQwIFdBlj|+WtfB9CJnoIM+P2 zW#X`n)nT@Cxhhf!m5KfWS*A`8TF9q>_%ky@ogVY?1%N-`_!kz;T}2+?zKxG%pxBX- zay=L86~xUY9L4jL#J;u?drPRUH;j0J&DnmyiOAhjg%U4)=ux$hw9)H}{$PPj=~o#?I(c^Z(cJ{{q0Pi2wiq literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/10.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/10.bin new file mode 100644 index 0000000000000000000000000000000000000000..159eacfcda39f14203b420d000d89cce2bb64d7a GIT binary patch literal 2424 zcmeH|ZAep57{~wjWjg0-!=Tn$?jlA@iEUb) z&=7(Y8b+xUHFY7q5KbslMDR->8ifiHf?Af-(r(u+zswIq{F320aN&Q?J&Mzu{=O*0oJ4Grv7N8#|4V*$kqq$1zmN4b@Fvk>Xl z;hu<`GrSjdrL-ej)4lT=HGq#b)ilqHXkL+0u#k0clqcML69v=Z88BTm774uGFY2C7 zztjI|a8!@FXD}Nh*#1ea;Xq?y)x#5Bm?+kClWdv+WPt_e>YL^0zGC1Xd50fBPKL`D zZhVDj?lDwO89tEU!9}ZCn&n-J_=AZlYzLBT9y&YkM-Bz4nE#wE$7TUT6y#qOm4O3gHil!0gJg?;;4ZELA?G7-#-?R<_ z2FMJQ$U{P@MS*kTmw#^8DEB3z(07(_*F2dL<6%wxIiEUK9kjCYq`AbC*byyy--gT* zYx5~?Dub6?lIFo1sk_tK;R^M)UcItjfIRBfd zv`i3{K87~-#TM=sbyo@I$B?1RuB}mobBy9kw;q}30}v@%R+g#^ydB_Y}N1I ZuAkX=Bqo^_Pqz}ODmAs{zWv|o_XmXb^Ev)GXA3`h5oo2;if-^=_7`by6=`hM|AQF|!o6;MRlB}eC4x~+l z9Ci`e#lQ3P#A=?-F}m^QAVE<0epe6g-}64-$M=2U z0lTzBhP5Xuci^}ENQx`=3yb2vj`@=D3{D!RKJS^0SX5A&$K4#wkiyB;Lp@q<8jA5s z^_2Vq1KL-^l2bI6)fjl_Y&3!+yPj{Rp28{-*&V*f;{37k?Q~pcXDArWnaD;hFpHrm zIvbSguhq{FTkTeKrbw+<%sZA3ALpE;7U+l#=P14+&6iRh>?(iaRZ|HX&Tvj#oG^59 zH}d9eQ`(3#)b5$c{%B;mEx>hLF}~abL~_7U5#}T`f2^mh*Dz2@W62Et2?&gXMqG3( zz1mwE@Vk&z(jT}}*HH{LIKXT2xXYy8N2(g6X)Mg^PjdWx2wx_3(fJv(eo<(A6!YJW z8<7eYNFQ|;X~;sWmY|1aWC4`)llTOpeQcB1GxTN?NQbwmBHpH{Y<|4hb|K5L5&U4- zqE`{rc6~lfz~(E~yX6Dk&l!9aEJ(F5GGFejp(%Q%^x*P-yzquhaCFl$HBCZ4QlnIl zcU5OP0M1-ckxGDUPswq7AmX6*vPy?-)h$Z-N`7hnSTIRrHVxn8^E>JK?uiMsEI!#P zkzAe6&t4lhe_f`6WpAnAJx*0Lme-im(k%w2rwpf)NBx3(W@lS&|GP^CQgT8lcH?&8 zsB@rDLO`WIWv$o~I#95ou4p)pD* zsX!=l^g&V(D+`RGrb|)#z+usT2o5!(q?iqj)OEYf`m;Yn45aX!ABTtcoacSs_j%!f z0gA*eQ1YUnbtC?)g|HA=i&zl;bzJdXj>G6qQC>|c00G3RCrRa_QRW><^uV!BY(lL2 z%Z+b%kq!mO4&E7Rb zZ=S#?$B?bA5Jp!5Iw?P`+%|m7)?=--icGl?wx#!zr6BDLOJH1-16$TES1K}Oki$%R z7}&TxJeF<3G&2`^8rIv@TW{~b`{AGo5*UCJ#tNRQESC!&< zcnX?t7F9C#_{aQ&8y7t)^V+5QY4KH|lTVo^pg|6KNhwn5#o}l0*KrB-i0xl`*qEl>I9e)(JS_&msf{23-3-%C5?@Ri0yyVyX$URbfS%?}pDM@z&5lc_3cv@F6&L8E{Ndo~@OL{ir4b%jF zdo3Qa8 z4T`2{z0sH*q;^hjC;bj$AyQ>@e5EnxpV0#S>!raG+6c2}rS+`l|G)mzRX>;K=TCZF B5kmj~ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/13.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/13.bin new file mode 100644 index 0000000000000000000000000000000000000000..e79f9ddd4fcbc3b741e4543cefd37b1a54dc142e GIT binary patch literal 2424 zcmeHITSydP7(H`w8*LSDpryEzns|v+(k`etvlf;Gxn__L>1sD$OsznnVt zdg#IymQWOE2KwZhnKyjN0;8hMHjqqG19kB-&1k)>53=+Sh2K1#|2uQO^PQhzAOgwq zBQad^MCNAvuK5LNsg|)M{p+~7{;?Xv(#+6@k^l=RN^GyN2OCd#2NDv+#j*5i`*ns= zC`^*m@Lo=2HNLBTv0CLb?m1X8Qb246^phH>;ZIeS$VZ!=hQmT5l-|k+8)XYx z2K0Fv8el)*0US;2RwGii$2i{Nh*S$ISLZwP^EULe7;U+&mS=I+e59Fq@PnyG`c6{> zCS|@*xoyT!HWzasp$Fc@X^t=}JM5Jc9W;AC@VG$BeHxBymL2SHF%~bwS>IKB$Y(c_ zIrj#9OC<9sr?PU~tnP%u>{%}`WXaES*bIWBX}jbmU2I}@MeFz7xyxAH-`-&dsgsQ^XJ?b z2a*u5UMNRmPWaHo;TUls7j0gOv#a@CDPafwMvd&UJAeSZIC-l-W_pn_rQ0b}C(mko zL(D-JZc3wH3v2M^HT5cUEW#dK_M|RT=36`->F_MJH?1{RQADOe+YDOKiGejd@B>nJjay6%^o0%cUDaFT|6l*Zwfp?L_xTet CBld3q literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/14.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/14.bin new file mode 100644 index 0000000000000000000000000000000000000000..a619bf730d5e69cadea3268e6133b9c70bfcf636 GIT binary patch literal 2424 zcmeHIT}V@57=F&r=5Zd}1Pe`T$MrY0aHeFX;W-t_o*^QoJ#ctQ2;pQYslU zsDyqnBoKB+xX%?!2fJGa|%rMh>%i+L`R8o3SfF{Jx8ihxdJ-?|q*4gAW2w z5Zp4w6wF(9BE0?vsIOTWd7rd!^KKyo}9m2!XDRtNV zZ$mNIuh7`i38avz2&vTLd({2)*)dk@!)ARe=0vRO0dD(-HRVJTO~JnUTG!hZpuD01@p2CPs-UTc{X>_Z;9=uO+~q^ zgYYRiQTr!)X@(9}LZci)oC7DdcGT=fEx~s~80au1k~A{v&*~*GR3!c8pkBLrLC+B| zL1UtXxMWzhXr|HA**W335vl(FxcQ<3>@tBEpcnZZY5Q@Q--1iyC7iR_S(ty}|NLmN znUYAqlf4^I+CM3 z;^)i6OkS`3{g{lG zh6xDbXI94~qEU6+^&ppx`u#-fccgqljN8LCaz@g_w8x_+)ttWf*y7j@=Ca}+kKd8% PH{$F2|J#`F+RpbME1vE* literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/15.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/15.bin new file mode 100644 index 0000000000000000000000000000000000000000..c586f0677b8b3683a355f57004dc5ba713d12e6a GIT binary patch literal 2424 zcmeHIO-K}B7=Gr*bvCE9)`DtncQgvOG&c?UJ?u<@7F+D>7TF6dL2`i}8C)(^0R{YLu=sfxM7A$3G-C8I-g{!NsT{c;=S}ldIlQGc((xU96At z1}wshgo5v7Srw6*H$1%lB;_)_XKw2PLgqk)H=N@%aBlQ7{fw41v2e2f{{CKKK!4^C z@gt{*Riizgorg7UdD!|G^E&d@yiLfFTiJZ;tqqB!KR`)_N6v!=*VeL_9p?Qosh1)( zm?+}EMh32>j>-1Q`ko$x|7pq9SX|%VdhxKwIKsM&oiz=)s)$|DI7`D$66+&kZ7-L(}M7o?)T3j zd~`fM@wO?zoMwdC=CDlx_+RrBo=~%_*wW0kT#8p8Z{O?Bg>YCZO2#vUC@sr8JHYe3 z*~gApx1_AyO7eFX$NUBlTo|?~4uZp1Uo9J*pz8Aask-L^yQ15A&~p5WUi;~ztunf+ zT9nJ~=vBu{n_I`KQlaL{c$D3>;bC^Hw{TY*CW|G%E7QC&A*JmBsn^}>3J2IhqSdaq zS6j|t+f6B~u}e1Z%5w_f9Y_ww%PSfe$<8!E`*@EwDK9BV_8qSNbLpG`-!3E*3DLh& z_N8fB`u!Voluq*hbQkma94i!aG**)%8IOOe`=XqbDbxxXw8}M@P?1Up8hPyF<`>pT y2##m#*SEb~nn4cw`MyvF9a0(5zUrW}7{MFmC9DF}PF4SZ{q(*+|Ic@7^Zf~!$@Dn@ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/16.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/16.bin new file mode 100644 index 0000000000000000000000000000000000000000..2e0d7c93901b3e391dafb4d9a2607fc4f3fec7e7 GIT binary patch literal 2424 zcmeHITSyd982;wcI@Y$XZDNHqN2OX*aH}nnwwhTZ4YYRJE(Dd*MY=*4qrzg(x>0La zm!ca*g9Vk)4UC8gX0y`lAu0-bs3x(i1eK&z+B8~0^s+3}OZ1K7Z>|_A{Ox(= zsC$C@=dxWu=A$(IF3fTF>HZ(6#Pi!-jidJBM(7WF_qi+JN(nitU`kpPZoclS&6n z+bu@-XtPk#dVz-)y3T=`sA+NUTe-VKC{jhI4gR#P#+Tnz}L z$&j-bseIUV_*Tn72knbV#TAEZ=FS{$(xpYD+=f{Fe$V@>veZ<*{GHcC>7<_>zvtui z<>d>pB(d57o}<+%L*K@_FOPU{rR3zT_1ms9YS6_O-yWR&R1`fYoe6#IXnCqAtwR%+ zrWCoe6?4Y%hZJ1QZOpIx{=R(yODx~}YrSD$y3)F6*t6!z8D_WeBS($5ad2eZktr*Op`gXgHyp U?-iA?@c!rj?f>$>zJFHVZ~5Ti`2YX_ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/17.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/17.bin new file mode 100644 index 0000000000000000000000000000000000000000..1b2d8a2f5a53fd913f1d17d0e25309ae4c3b4d3c GIT binary patch literal 2424 zcmeH|TSyd90EYiLGmK+x>#n)frnzHwSyR|yFkZgqN~_h6-Z6ABL$nj{{-=_}zXL z7NniShdpSk68zo9Jl}TlcG@v!Oum5OcmsKG7IqsKAAS(^*vt$;wVayk<#R@Fv$WNt zfst}1tt&vWi9y~VSFBlTWV6+D2(+`jH=AH|f%7j-C-uB@+}@Qucbxwc5CW#eKD@}G=W-K3DJaq- z_2ju+NPG$yW8T^*3lOu%fVHzLA62}$cf5QE^2-D|jGPKSS}_fYbox*IMCwO!*dKNn z5aL&LM}OAl$tlw|d0jw(B~G9~=@0wOF9nf0_n)JzA2Cj}vyPsOen$_3MeF*sc1>x? zEH7%UvhR!2Lk-?qqN2{xoPEKe6X10717@{rZ0^LiS?7~gT_D{$u_bX+d~u~#`mDpY z_40bRtX^$Q{n&5wM1k5xLrJ9HNS33MRVhgfbethZ+QdLfSvdds{!s#t4+mrP6Xdcf zsw*iFAhpCouK;Q%7b3MCg;EmWa;Ky9E3a7UN^;T7TY#a>PdRw$u7FK%6y%q`XIUMb zCYFkJ;uj7Wu`z*o4(t63)@3CMyuA*Ms7=?T6#cBIyS{Rh6E;f?pTiqp+|pn1c=^z1 tpQ&c{S(9O8)82U4vE`KfiZ_dZU#bb{@At<(BlG#s|JMKWf8PV^`wOEu*>eB@ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/18.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/18.bin new file mode 100644 index 0000000000000000000000000000000000000000..402347baafcc872b5bca94f51ee0e772864289ad GIT binary patch literal 2424 zcmeHIeQZ-z96h~#w6EJ++jSe;7+GH#&US5F8(cEnLf`EW7e(mXmO!GgMuOm1khn;U zklxPll>yQS2?ioVBsd^|QPeF_-Y5)8y*ZeMZlK=eN7E+Kkg7<~Wp znol`4eAOs+EGsC+IZ~VNO+SCHSnHQyjlc#BKGhU{?Wys8c_?>=RxoXx)A?jqzUNk+ zv7#hP$9aPcSAXHYtrQwZzW0wf-0_`88m~U~ep~K$sXM!WH9|?sI97h9=9BWVh=XCn zJ!3gp`lRoh*&mn48bxKHFJ8Q|X!TCD`C7u>bo`Ytl}~lK2UGT_5zHwHk#xW5n3_st z$su+p4ihswtwX@IVD9ynX}kdgZ(B44y75stD>)kKDe8Sp~ qE`dG!7+aLdXX9K;hA>+o;!Cv*I^KELeBZC$|L6Z(|M!2}eg6(|gSP$v literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/19.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/19.bin new file mode 100644 index 0000000000000000000000000000000000000000..65c145f0a1f3f9107c98f3f43f0ba2928e34dec5 GIT binary patch literal 2424 zcmeHJZERCj7=G@#cXxN}=5pJVZi9y2x;a(^*3pG@xXj*8GM&@x(g{B_tYLf^A!uR( ziI|=)I-L_;{Tfjdi|~g{*@Ia1V+axsj$*Rc8LL%Mk zdW)x;5gOy-9Mno`;}JOWskNXmWl3Nm&3LZ&MK-I2HGoDm;t`0o@0XD?tCG`^fl3z= ztxL%Gs{&%{+Fo&J&>X-&tvA4fYzOubqz7?eSYTNB3=;xE1mJ+6yI!+H38rTT8s2tb zjOANXVei#m6A35O-2vWDpgx3sXECKvudu$oYs;b@kDaaoud@1rdl%CpfQmiHxxrk> zreE(DB{5@6CK$glSToKq#%e&jGlQ13h~?(f-!9(nPp5X@sHp1Re02M>9x8y*sV%ie z9sJn#E87YY+v=F!fEmG;&4MQg6_v-1$Y;5K;z;%g3r{z zbCdV(!TAO3x$e-TJ#t9xIuU-qBPZsO=J;nkDh$b6#W#h$Y5ARKjQxiY@LCJg!HVRPmwFAwu}xqiC3_md;G3+dFy*K!e08t5%QRr^IbD+Oo_ zi}S`tvb4V9=Z8NpHrN5aqKeZ?pI@@?L$h^s#QDPUU18lg@!bQr(#~iuXqhHQX6v1e z^}J%k@6r+@M~OmDatOFLHjH)L$9nYUTMHS3-d<^hT!{oZHejQJtY5DP)(zA@{lYpyM9UlCzbtef99+2|MmZ^ K|ABjb-@gOQ_OtE) literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/2.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/2.bin new file mode 100644 index 0000000000000000000000000000000000000000..d969f1490cd219b6f5903c353d1ab94be5e977e7 GIT binary patch literal 2424 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 J|GWP;zXQV+rr!Vn literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/22.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/22.bin new file mode 100644 index 0000000000000000000000000000000000000000..de173e30cd029eeac7c2608f58c1802f797ea1b2 GIT binary patch literal 2424 zcmds2T}&KR7(F{PtOHD!Sy@}K2(t?!wdgK{G+1alGuy%<(C$DQ(^zGt*tAhAL`{l5 z?1eR^TeXE2f7-^f0%_A4ZLw|48WR`V1Zrz5ZH)1OWCUu8ys%(xRGRTFO?|+J&4%#e zH_0R?_ulWEd%kbJfdZ7%$6)#LY44-BA9Ht&`M8G-T;qGtJEZEq&X(-(;O zYSHMv-6sqasy4PC5H8Os+9(f5O!(n&DiJxPC(m%um9ZCW*b~c|sD5=I-<3blOka!$ zm4#Z~%|~W~DDOt(hP#Eu)OZdNz~Nl0+W&3N$1dj^nXi&%a((cX(1Uo_cKmV$bTAZ*01qbMT)gEoaedo)k&Z>p|QZNRlWVT6xhFYIAX$ zFJ~8?bcJ`0d^z1_*N-35w5j~$T@Tfitft=u)*aSx-Z|_(=cEAe`pt>rI&G@yv0uh2 z9Q63!pVND;UCQo%>zlF$c7yw9-Oa99C72T3KEe8a+Vd4dAjGYYlANo_c1a)mg0YYx z6Vz4D)J#-6cr$JvNTVD|utf9Ob)7jqXd@Q@?G_hhPLDOncEIN^{SQ{Go%vp1dD%t_ z3Q8>r*K?uYik4a^wMzv|gn!?H<}9Z3kbs?h=JRbTLUT@o(S}ZWsTT6UjsEvUFSOxg zEg+6}lXlutX!hG}eP)l@^6NDbD1>Av)(-?x%;U&A9iR3hGQN;+vH1F6#|-iXvTZGS zDwVfVJ=rbeB70N{=zPqtP2Xo<*?uT+R_+T`Y}s-O*9XN};7Ufu*Qsh5E7}*!AMgBt z!vs`7rlp+^c9PR3ZUtWh zmyiBb*jT;yk9d;u5YmtBt8-{WDGsV58a&M75gp2;*-D{LYSeQG(7rI=Qe&-iS78S# dvYzM=FJ=%k>IUWqHDV!vS#)E{=kVzjg|B|fP! zdke%s*Xm*=Vw>nnc`!WClGd22sSBEb(ne{U7$Y?!5F@Qop&{4;9q(dz**^E$y1C~W8?o<^MqNaK);8g6 zd+c3eKP2$*MZyHO97scDe7T?irSLPE3p|v5=X4<@Gy|#n_l&p|H>HaQgEZ7~ zV6XXkWpyvE`Jr6*nF5G~xqPg^m4halSK1$0GD5zl2~iG%__Q{ZT+c8(H81W$6@KvT zqdtzaILpMciGvi>+Do8>kMATov0c@F5zfOfHWa|NCKv@t+3%zouA%TM0~wvjVSVMV z;19JOcRjbidgDf+!tEYx?kW{p`T!Qu8{af)k3xsH;Sd#caZ`WN{f!z&VfZbH1}u14$EOL8#^sp30UNUYq#R5x7J9d!fgb%kprB zUMM6Gxn%sl@+YHPkq0;+GcgtFgDp{^tL)^ym;bp+GST9H^<;nV;e)iutc4Y_*kpW( zc{NIee&M~ajBNnD?Z)k8s;Gb3BTbC}#FTu#gT!L}&d&_Bd(977>idx;uq3UAYAV*0B3YjvVzbB?gWB?^pO}5z zDGFG8C!1=h-IZFPNY~jj?0w{GK>MAaXU|Ogl_DSza^HhhYtMEsV5{Dng)(hn06pTxX6Lg&D`9_THM_xtV1 z`m_>6^$(9VI<>J3C-pJk{eg%Fbf|NJmBN7BtkZdf_C&tT##+z89TC(yc1Gy`H!47D Yy~xA*EK>rU<2%zgeEv7v|3>-$1&Wr2KmY&$ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/24.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/24.bin new file mode 100644 index 0000000000000000000000000000000000000000..b6ede91f290030c2d82105f43a9dd3d963cb4de1 GIT binary patch literal 2424 zcmds2T}&KR7(Mf|(^+j4~7R?VvVU9T~Gr`tI{?xMruYNMp~nVhS2iU@h*m!?Zal%5EH*i zCOP@$o^$T^&HXMkpoTssC)V8XZo*nDub8XxFE-8p8`d8=-PHYDHnDG$hn+-)-ZJKB zdGcLi-zUR0EUN3h-v-apqf^CPth_{`FU>yB!*kG@tw0xB8Dv^h1}A%2qiSifux!I9 zli8V~bKAJ+$%&;xkuZUcyDX@TEf-Xv6n-Xkj)&Uom@K4(HXvF5?je`zqI9ufU_mVh z_KKfZSGMDdAL><~HGpWC%fm99nP{YWwe_(DGvsR=6O}NCPj5lV)fCfR^U@Yn;YZ&N z>f;cLvrIId0|o8KWPRnY z;!mv=cigwXeDhkN%5Cj$>L?YOdjJ-ZYhO3$Pr!h;elHbtaua{i{SBK3VEU!t&Fj+9 z1>Z~_l+RcYjzD!O6UqAV+rQ(bj$a2k5Q`WMLbHYNOu91n`q=0BfkoQi^WDxYmWLzs zVj+RZCF1v$KOMo&WWhZvLa_cflMYI346TQdw?WRR$C00md6Y<68 zwQ#v%Ios3N76k6^Do*GpetkUF_6A`~?b-;Q!}uoQVthUxYu1$6;4~M>IlsV?s1x;L z1^RN$@)yCrsrMY}g311}C(`(>wrhYVw~vuGcpV>CjJnTNto|?FkdQ2H(62X_{x(^s zP=XJC&g+fo<-agN^|&5K`zNN>x$1{3^!&sUND1qqS&MbGNHHb{*fcW2ptk(kr>4UW zQNaA+bgH3sR_cKw!(h*__mQsv{SSVYJu~T7i-17Lbr;q$x;J})?CR}lD08JHeSYt% zuYPAwm&}8_)paV2{rPP75eYAg_QnIXh%8r_tUl83rC!K}%Y$#rUg)D%y-l9_fV6_1 zsQsa$tUkdbr2YPb3_JwI)H04qvRuN)_)a4_6|Z-%_|kCK95zej`6{y2CT5`iV!?&r zk+zT2zDV89o&D5bLCciPomAQkF;>4z!}3kwLT>J-w%Te=F1lC!MC*qf3{VG^wstkR z8D5{BZ&M8wWHbagIx90g5c|%#>t`g9_J4@aV%I)alAp(k{KV(AAvy=v^gvHxtl#g9 zdn_f081El!aOfi`4(emJ^SFoy3}`b#2898o$)NKHt?_*8jZYojEt#<7w0l%MegpX4 XzL+K4`i97po)G8POO?~xEt5(>SE$g`wJ%$|2OR9;GAc0B^{qxp^Eso`{VqV z+1|phc&fKZ(g0Vi6gXnU6d}$`VlTAArIGj#@$@Y$3&H`~K-=V|Dled*fpzd`EVFoe zEh6%A@wh;fq}oq?{wObv_fuJ5W7O@8tK}dsZ2p5@iWp(IAsP%ppzU^Q#32eAQVKj&wn5!xaeU&R z#b+5fO=)C7Q zKBU%d7~M-n0B<^P?XWfC8sl>&}+mqYJHfBIMTb(aI6maeA|;H5fvw*r}f{+4WOhu$w+B zGV@wR{k!*nn^-vU-3yhEeGUY=oX5@_%-hCDbQOp)(qyxK&HP$dg{~GOI{2PFlMDg+ zuY8Psf3lgL!DFnt0c$pYNds`(nsrvJSY-^_|~5G57l6xrm5+j8}P)SdcIW zYE%UoF#vm4h0P5yc-*ydTB7?>3-dYbwO}RneVl52T9}po;RATi-y`9rh&ydL0?`A{ zH`?`+8FpGntZToBf+)0U!A7A+*%D3e17E6qHyhu#uSH5A?e^!~D%Q>bU*B;hM~HvP R!|f6}rS9;}=Krt%{|Cmnr3C;0 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/4.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/4.bin new file mode 100644 index 0000000000000000000000000000000000000000..b1f6cf436ed8b928eb9a0f047cecf784ca4782ce GIT binary patch literal 2424 zcmds2Z){Ul6#us)B_`8s zNiW@4Ixwsi6bOWDY{Y~F9Ec(Csht=Y8G?K;YWAVPoGwIZw`_>IJ?}R0!~F2l%*5z< z$;{M+>f z)AQyllg%!l?zk>s&-9Ak0EtS~bzWTKT(q$a_6Xb1InD(STx=;)_NvaUKs&ePrFx|z zGN+%*yPlxyEzoyII30AsF~+AQyG26V5_jAw&J&QJ3xr?vEO3g)gbf?G7kgq&0&2~M z`axBg^k27`hzbAs?_R&sDL>+X_VOVGe4IXB|NVAaqKL+OtJ)P-%ROS#`H}avE=)99jkvXd7_H(`Lc|U@MO8ddLQCUfZeRT2Y!A{7$mOFg;$*~D8zGi@n zr#<4*-lDok8xNVWTQ}YBjBku;#gX+-FF)vLn>t8vn7{;XO>Kr8;;uZ#kz6Z zzq9}OuC`KuW_Ohty+x&?haE<@I))z?mK18O1-aS*fu23EpQn&5&&R4CGxzn@{lnh2 z7*DXAOx92{BN*pw8j>Y8?`cux?>l>}?~mE))zZBDS3Y*h3dy}P_Iwqx`Ouy@va8x_TrBW1 z9l6$n5*B8l4cVOxMm(D`ZVJR^n?K+9j(uBY6Sjw&LjX%9B)}5TKkP2@GKKI8qJd;n`omhH+m=^>I)1wb61P9hMjG`_ zGRc|Tx#ygFZ!Rb>mp`_o&P~@>;C|d2v9s|fw(b8rraNaDUnni7%8~*Y(Q#gH#z>iIAj*#?=XWnTZNj>7KeDj{ph3hX|=!SgkpZAyc&qLvJyr2)B z$sJXoiT17S8KIdFIKM=ik&2MvFXtQs^sS<4_#g@ToJ zJYT%~F7`EQ@u7Y!z7<>>#ww6R=c7+&{pZ`i+=`U20=#f~CA!g%pIwN8eGRDUAv*pwD@;J1oc=)}_i`k;2S-^-2cZK zbA9>)ef&^PFh0^WbR&L!i_fX!+Qa5Qm+TmXM`KH$VLq2?VE(D8-77Y4*iX8)*ETfl z8img#^&y~p%9L+i0l%b|J#0O>^%8DAq*{>sBa`}MtM|qRk|JOyB7D(XtBerTu2^t> zpT-X#O~^$L`e%;)JpZy!d|p!LW)1CULymH6Pkq+5&}|)ey19;l)=yPDkpk^g3=YHQ w@)W;EXwLOJ)_BK?fdBvi literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/6.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/6.bin new file mode 100644 index 0000000000000000000000000000000000000000..a5c68753c7a87ea47683268b92601635e35aed73 GIT binary patch literal 2424 zcmZQ{WMHrX!vD-1HXj017+~Pf-~V6$;s5_X${*R`VRZ2}i$d-g@@C|1crvRPx20o3yhl;0a zdCst~IlSdzR6C$?gTe2t+?nLb&6^#TEN}}AUBz(ekicgKhBFcpySSaKnFSPS9Uljk zfGN?9!2y)~K!EurOW>2Q%?=M77#dF0GcYK1nh1I@a4gy4?DvufR308=5n+NTWdM~x zw0584K_(u!eGI@{IB_x$L*GRYRuzT?59W0RDFq(qQUbc;W9Li`2H6J;jxX5+f!qXz zqzCd13=B=Qb|1R=3#VlA{AXYlZ}D(ou>HWma8B}<2-}aNEDRpbY#luP2hr6JH$DKX C!4(n! literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/7.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/7.bin new file mode 100644 index 0000000000000000000000000000000000000000..567cced3d1ae34d4bbf2a0e8fe6a8318dbca21ac GIT binary patch literal 2424 zcmeHIT}V@57=Cun+3~baHg%MuwzZ^Iiq3vOL2GA{E|l0$NI~KfyXYz-2?=XwrZA1P zX#`P3K}3ZY1xDo6PG%C$C!e@Sn&CS2ywrEov&>@EJAu#I*=q;Y5;eHictY7`}PqfPXc*Dv^-k0 zF?`6OL-V-#eGe@Xd2q{G_eVdJ41QM(jE6UBiCmtvI1^Pb$}4^@+75W)tSq>~0#wRU z+9zMXr3@_O`pn@+EZmnq*SH8^Q^jiQ>rd#V(0lA4pkRn3In3GnAO}5MsEfbZpY4_I zH9e(@ia#|=z=$;})0j;KVx^83pB0&w{4%L0d1BsL0b5>4G2fKzGD;!ID{Mt&6IfotqxK44o9*OQ%*rP*B@WD|s+vxcK^KR=6Kd zDXkJ{A=8pvYPF8mRJ5ELUpPO)pq3M4Y~W-eFk$s_0?h<&%MvJySMH*!bpv~_872I@ zFPxrmc0Gw#@DcDvV@`^TUE%yW@15S%=|zd7U{vA|R8(fqwsVQqxBWHWzA7tyB{scj zVrN~_lkZJwqGFFe%Y^3{-Fa;pLH$M>9VrjSJ6V(vh{ykGSHumCm!IgnAj{vuTX!GA zBxmY;BkEB)qrhuatUa9mb^F@R!{zn;=ver`T$4bDD&iewgsG!(0EoR_6uV(+lu)Uc z`>!?^)Z&=U7t=3+9HUI5zpv=rI`G{#KwZB-#sKC)Ti(&Jz{BJON+Axu5L5{JK3A%j z6A1QSK7b;fEi4)b4bl|cbKh++t4&=pwWz~ee~Uq~8{8Nj_+PB5GPgL7P_xqfk?y~L j;|%MEbZf0ahg=WPmoTTGXFDkv@@NO!Bt#nTfAjwXLHp-8 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/8.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/8.bin new file mode 100644 index 0000000000000000000000000000000000000000..ee82fda24c6b86e5a98964b4325c53ec88f6e70c GIT binary patch literal 2424 zcmeHIT}V@57=E^Mww+|oZ7Qy$b{YxNOt%!2vN+o=G!t=CP$9_#`@<-u2*KD>pghrG&jKqsQhbge6E*qSN^#N!H~OZOY2v5F*noX} zf@X`gFQNp_5CL%Zkz=hdIlAkWk%CMJtvA~Igi!;xUeBsrAA@@4W4QMUlQgf;8_Oz| zB$mf*CLK+~;H=Q|V5m@jS$oUCDHim^Y!f0(R8TL}dVZhNAua^&y|K*6+XNo0$?PY5 zcp8##e2U?rYw+@fZ;L;Y@L9QZh8@gNi-Q?)1EJ1`S`YR^`iiu5UWH{D`iCtg?KJ8- zO-NE%nMBnFzb*53M~&ZpNL*Pn5|@Xi%_BRi;%nQ*`gd>j=T}Re(uva@g`<*^2Q+Gw z{3F_qffTQ;KZTSQ$al*B7`t;TlQIrgdrGT-j*NKgAz5ps<4g7KS@=aUD%WBkdQSA{ z+Z5mvS!G?Qd^gv_I}iW$`fANhja>;3$<+g|B`sxer)jdm-0!#L%_+&qiS|y@;JBSW zJ=p;1hW-zCegz+Ll)J3?owtLJMVSz1un$KVSYY0LhrxCq$o$X{SjLw7g7c$3+-Ya}_$R=?`NRMK literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/9.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/UV/9.bin new file mode 100644 index 0000000000000000000000000000000000000000..70187e6fdd814723ec2aded2ad7091e3c21e8bb6 GIT binary patch literal 2424 zcmeH|T}V@59LAsXF?Y63>kuMpV>^DupqfW1TxfRAF;J|?MNkpc=!3ebR7MyX>{U=I zj1od3B8FXM2w7STFE%$zFQQK}!Hb0!3EpUeBehOv6ECt03GK#w->W}=-iPP;{oj`t z3Q(kPjp2&MD{?TuW`AgjHCJoeO0PQxzqJO=-;2lP>97k*4`=4)VTizT=g(|zXK{Pz z>lu<%4}$9(5ztAQDUGeUEbf0o#zId!URiWJRX6Vt;ER#TUc#7Qg!g$a4Er z9$4~Z5#lH}Y9|m_l>vRqYsORw4%rc^RT(+_B<8CLzRE7(h*$5+^o+0YRNJImy23Zh<3U9mVAG7 ze_^ji7tC0irVZ%qQv*&AnrtHzURrlD&25Z}w8=G~gy?Hzk(JK>7dLhRNB{r; literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/1.bin new file mode 100644 index 0000000000000000000000000000000000000000..105641d595a406e5adf3d57fe16e6432be6cdf3f GIT binary patch literal 2424 zcmeHITWAwm82;ws_F`z$Bw(@8jIFg7Y)KVY7OG|@ur_R!CP5Jd9S|Qx@lss8JebiA zp%-thKFA7fYz24K2P=q*3P~-RMky)vQmmL!>#nK7suk*`<#;CDzKkp)KI%VkhHw7s z`Og2Jfe2L6hj8hYuWAZ0DP!X#B@>vCANc#`L%O_OnFe%l^>DHa1xV3WbtI8IodGBS zA&+uYb;MEnBEtc&cy+|rycrrZd(U>-K$#kx5(jBVU~m5{q^DZS-;*onA>acr7y;OVpB1y zrs^6V=HGoKdc8FGMHAjH!<{9)YnvK*ge&@UpvWvIz*`?|dAu}|ibb8+HBEo>Yiv6tDy z+2B1bqPJoAQe}`)2+2N_NQ1cF{M12491Pwy6KYBEy0Ke$nNLxHG znxOo3!8a<8uHNn7N3tMB=9JIT6Hmxz`;$Bad`P*y>1B&1Kx2J$^ zOJ7g-aOusWf9RpGfb0d%{ufJs)qV*xcYC^Gu~;IOsq-6OB9<)d)I!jr$!LxOgp7QN z6|Z?0qUnF;(eo0)*9{Dp_Ll5hRntDBDcUyZU)$4~(YtYaZ`;{M`!bSUWyJl_*6y(j z%ct)2e0Y%WakaRce}NOpw|mz!sy;E^>sfKI1<3z7^gyki4S!dt-|qS;=j!f%Pu$Hk zOTG>5Je*g8N0IAF6F%=(W4+&s{o86${4nD=rxjrbt0au^#0VXXNpaGPptz!XpbQI! zs)?)o5{?<|zZUx==fmfL)CB5j#E8jkn#?Bv{)Y7MG%OAU!r6=+?^uapSeW!ypu(9c zp9lLO*_8Zybz2J4gmHKBI3HYJu!xR?j39UJYwI!EyE|nZUg@BhS2qfwqAxa6wxTwa h$o)%GI?(P<=0O;gXfZBmi{dkl{y*^d{r@zc|0fPur1by* literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/10.bin new file mode 100644 index 0000000000000000000000000000000000000000..be3a15ed6fe29de74995d261ca603ac2c85fd385 GIT binary patch literal 2424 zcmeH|T}V@57{~wT?5Oi2-G_z7bj!rl&|DHKNbGD7E;O7H1ST7#kOY$66hiEkhWOEi zjz~k8rZ*{Gs89wKO!H#SkNlvh5H<_J6_Fo>QmfN@G;ijGh+b9Cxj5&?^SuA}d7ty= z9EJyS=_N>{xyyx#*be_sVKcT^5dQPOJ&zat2H>?qS|5aH5-f$u<*==Je7&L6AR1h^ z>Lt+AM`z1@iy)A$-u?PTnP=l*f!?bI2m>g5HpRjsi4*!jQ){haiTs!qhM_GdmCmB6K)g*B1FZvMc^^ ztDnI}i$L>%tSl7kSJdzdYN^qlNY}q#S=EZ%F>PJ<(D{v^Xx*}2QlsY9BEb(Qr6*CH zKS2WfmJovDOj(jU#DrUw;Kc4R~`shoc{b!qizU?HvSMSEm zWW%i6?cVf@4ATOik~QG%gxBSB$qCT8qaW=G=S5^xrAh}456(R12%Y*IJEfkq#}{~_ zWTlf1pX$@CbL|!GvWwPiZ04^Wo$BaoR22wOd2=qusQ=N0@SDc(?-GnUyP+iq8Ss6r zEoW??8=fAEpOBYVwCz^E-#p(Wbp|~tY{oYU!ibj% z)Z-idcIGm5f(#Lab7>8}cCN1ccpUu#SWqYF53E0EE|MppF!hHdhqk~p*H#>~{(rr{ H>;L;3OoQql literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/11.bin new file mode 100644 index 0000000000000000000000000000000000000000..04cd932de7264d9d6379e228f483379ba3e0e92e GIT binary patch literal 2424 zcmeHIT}V@57=F&#$sKL9xfxkaH-9pP2+N=%tNlc{%4!=C5#b=aup-KvQiy%U7+PKE zin@sAvTh15@**NCnr5*r6|*0;f=$ixl##YbE$j51SvTuK!n^7{@WFGQ=Y78Sd(V5$ zVT?c_y+j#bIJ`9*zhdH>7>h|PivRJy-H&_M%)m1>Uo`_MB!P!D;B`gA!qr4NAbK2h z8hhTZ^PbCFIt#B@o_zS)l*trf86;W~z;va-R*l_TIK$j5n_}-Q`nM|H5`c9X4VjTt5>vE zP2x+M*zwCVQZBn4SH@8Q3pk5MZLMy8)Y+H@ zBG&oOMF)(hRQ)-4hR;6Tf(x-#7AciNx1+I7h>@ zf6cIsI!1R^>bU4E7@Kky=SUk*28plFWa;L7q;>z0M-r$QW8U(Sj6R0sohXwNz{NZb zw!GbN#Ujv$LQfL00u7T^v9)|EtPWOphC)d+TZ-W^>fadgArcS*$prAl*YhZUg!6ZI zy$M65XBaRgL2qLF`?>A9HcxtSSgG38<`uN>j;=pn7AoE5T!9$BZ(e&{!wGG%s4RLM z@U~1`-#qh(<;(L-i@{^AU5R`MpN{QeT%a2+4W_pymx8SZoK4|78hf+vvDT1~e7o|) z#ivOsldY_tL;fxI8KfHI`l;tPzWzVO_Cw{!eVI5Yi!8)pmV~FuudgZCG&G>h;|b3Z zxqNsk{d9SIHSeE;H9n_b$!Iag#`|Rjk1Ez5$KHj8S81PTB)}}3=iGa;R?|<118&*1 sc>Q#-saD`qx3_2$$k`5gtsZt^KJ+h4bhZqLtnNskuK)l1zx#jt0|x5aNPf(?R=B}(K6Xk$|g16Et5m9ga2 zFsE-w;&vJ0$Ez>Oy=*lta(;M5N}@zHCrRL*9&av2J0*Z) zcRWt2Z*&d}b}azQwb{>w-=)Mzbj}%&=qn?h<;kV22>M_-52;6fLK9Mpp5QT zf%o$~ue|R}VP!xhuIXzH6?{6n`9htiw%WWN3ICq?-nMHe3o1ELx!={=9lO0X`>^i& z%Y{1i8SUu}P$3jKwu`cWBwXb#?3L7lZUoGZz(bkAY4aDTGb9g=e7QK3CDv5cU1FfR zZ#|1Vb*3Wyex%lKw%D-09?I8(QC@H<4$*92CcSoLamDi$So^MmQ?I;>^E2^h>o+v= z?Q^loX10r{0!-4WdV@}JgrAYq-1|cM=!;OS)P^oF)?JG>l23;TR^H82{@-F_cKrUI x>dzs~+t-2&(%;Lm8@+UgceM2EsIbEj%7@~WhK!;b!HvGczt#WG|F{0HzX1K5)WZM( literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/13.bin new file mode 100644 index 0000000000000000000000000000000000000000..c57ce8168fc25869da3ffc3aff7806d97c9a7550 GIT binary patch literal 2424 zcmeHIT})GF7=F&_$v9<5fii{B(Nl2zc(D|>WGumPPMaC(hM_dv=#16PMCXlgA;x6s zhmrFxGnZbf>M7nDw_HO`TR~RH+4xbb~)a2 zaq^t^{hs&z-uL;w0|jVc57mhcOD*qX%~n=v%F>w9b-dmWtpjU%;BVa@s2}*T7#49; z4_$7wg~}6@{vM5=*Asx!=9hCLU$#{NO^`vlIGYZ^q^B!tftaFjg-hIJ@L7{wLmng` zQ(sDe&*js}01haMcNg7RkV~~s{y`m#iyBtVsSpRB6)WL=?UDtmbXheM>%ZhXRfB`+ z(s1mEx0cmwW8}Z&;dwJ|Hcsz7)hEDT7cB&F^EwI69`CF?h7GSvkt)EXkuG8X& zBc5bTn>SjM?&R*{W??xWN}%ckriL|pV}HtcemikPx>|kDOn^M4_Tz+Qomd6D7n zqM7jI{T<_uI2#JnMZFW4SR-Taj%=6@_s&jD?MUkd5z6>4sy?Wpc&L!^`!f5b)FlK} z$~WvZ$&eHXd&5Ke=|`p0<{SOx%`rp4o*P4P(}QofpFK47b(^OiDgWVjr-vu{OwH8L z6b%hcuKc|7?PHD?e^xl;e*2kEU`6~%*8#2@ETQvKegu3aDt7sH8JYyRg1)Fpeyi}e zlbxuH9C0`%f>fy`ok|CE*NS> zA_^oYXDM5JHoq%y^u$rX!e*H=B_QU#K8~pab6LEHokTL|NDRX3d1?RA^-pY literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/14.bin new file mode 100644 index 0000000000000000000000000000000000000000..93c6d78a6fa7c6525f3262b8a12cb08690c5f9be GIT binary patch literal 2424 zcmeHIZD?C%6n^f9?QI*9G^yCNp}FbWuAN%jb@&0D=H9?;q*aqR6-0LZm@qm}!(?+H zdFw)KIzO_qf0Z`t<`3t@RS*$%+;l^l%+|(i{h@=#X?4ND+I7%wO}V}|8iZS641aFt z!i9(PyyraUyyu<^3FxGc#tEJCPd1`x`Bkl8e`8I%jc@IK_`lk%)*@D7h3Zf_5&ra9 zfwOe4BOpQbo%uWDRFk2vF3;Sff(E%eT>XO-V^G}xF8fpDv+#J zY7uW+VmeI_0ponxyTUva$XO>q7=X)#ZNJQs68-Se1Yp0YW8F*5%ia*n-WA*7IYnoi z^_MZ9bf6hs6}pFq^$mZEu9pV?(u8Y0IQz)d_5%Yv)b>mzh{DqPef^Ouu9RfaPf%mq zeWxBfUtxx|_k_&jsW*N7F&@O@KVpYoUeI~x(TK8s{P&qE;2vSH!Bs`^2G4f|j8ScD z@3&ju8+g>r(O~5eiBX>sZ+dP2g;i~JLUZEnX@I%+1FFxxdE0I)0o?5OM!t0DQ>rJE z$N}|wj*f*Dfm|Kxg;{+9ym!#r44Fp*(}-gBs=k2maNm zEjo*Sn=g7{;Yzy`S#4xGv@}cmHxB=jvh>_OC%kYwOU?)XUpK z4`O?AxNNGoW@_a4fTKsVbY&)nPv^gQykf8S`cL&<_n_zCLuf`Q_inFWCa)@r=V=Qu)ok%ZJaETV?;wQ66nyM-HLdT`I1fSEJtlivzC*(R{w_ zBA4BOJuI0u#*-5C!zfxCFdFOVzBFfP5s1K(($aY&|7Nl4+;v*-N8Qgr+@z65645Qg>hh+l^KSP1=s?Gv%+`k{WRn%Qa`i*)y7hB)sq|IBRke_p{qkd zggbGwdW?L}n1a~TPP)8KqY+`GQ+0|R!T42+xXW0 Ie;V)qFVA+SMF0Q* literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/15.bin new file mode 100644 index 0000000000000000000000000000000000000000..aabb74339d910d6b6dd5c30fca73845e81536f9b GIT binary patch literal 2424 zcmeHIZ)g)|82?@F)?Q=Ro@t$NExGGoTNxTRPzUXHcPZL16_cPKB8I6S{G=<6l!@eO zvyfURwTN>FF6;KCokA-Nkuki)qHRQNtW=pwPodIGKeU~YZl>JcyHbSn!w^5}bMSJ% z_xU}~^SkGs_YM-!KrWqT8>Y6@V8L>8x@q%R*Wcl{yC42b2h}ey!gEl|HJU}Bzz&hh z0|t?!PqT_N?3&i~%cGf80TfK>n_i54`QfcKKo>+PZInzy4u#uBE5Mo~6&Q8~%Mf>G zsfI!bfOWn~nj;K?kTo7qD1i1oT;U{<%!ayH-f0?+OvLeMf}|j(-lb78X<&m*%xilE z%ib4`pC*Eax5!wm^`y=^G%qqd47jiT^@d)O>|!DQ*@Qcv-`sVnEvaV@f+Gx@Q=xpZ z=nU0YQEWsIv-z%Y&*yJBq|5Ltwd9v*uqyRrtkj0Ot=TYd;v~VqM{IX>MJe$w_gpnG zdh~(TKh}SDbVCtMlGq_AR()3d@qzZobNbwn&f~}kK<(;0%0M~w{Ri(W&UU7D(#p4D zPoh8BPinDHP1%*(zjd>52=>Kbd&T#VurGtgtL?4F4w-)G7`HojJ)EO3dqO8WC0ja@ z>D$vhG@WO?-PI0X$K&al)dv1?B%B>5{Y%214Q6+I!!v&uK}yuFtTi*4%l|%~lyFtL zUh)~a_dFAiT1eTH$8g8(RLVX-ADEhz>emiv zacD!Cp~WOVZtah>dYaLMm8*)%MF;AAo~_|^7#%u0nEP$>qE_#}e^z?MZqJEN;YQ|p+g>U{4hYi8CVwLltg6je zK?xx9GXr}S`ewA@rD8Sw`+69-e~+GoQ_L4$omZ>gH^qUkT2S|(V3O9BBV<#?t@)$` zIT#D(270QtNv3I=reVvpOKy|4Ye6(t_etB`djr*sxwQ>*gZ*e2`cJfz4Xb~8 zx`txfO&TYDAZXP3qyG}!7=w-GMt?LJ>l&3hKOlEPwUIH>x{*2?uIHu{;qJ!}_D|mn zm;0RaocDd+_dVxaNI)xnG|tjm=xo4>EtRygEn`i4j-Ty%T#EaF8N1~m2L~}(AV+sY zFejM}wSW&5DtF^P|7Y}&gigjXR(oX4wnsCcuKD$KU=$+A03&md_w^54t%Ie!rGjZ^ zXf0yCBGYPx02udI&DJoF5Mg;M=Ej%Pv>ZJn!_?o= zV=q<^=OEuWXXG2PUx}yUG?oQP`UW<3MN-)-iB~|hp56nCnA-odo+=94bA7}INaO1g z3m01|MLI^PNPC&T(G68Qoh&{mQG929VHr>N7jv|JDRdV@#ZL~n`3IGdl*aXqy2EAr z&-^6C<#DaBX;av2I(+}#@j#w7MS%FXq;zz4Jeenw(%#Yj1oPFuM6P5q8R|j+I{P2m z(>h+YygyJ_l$zg2s4=LM`N?Vm#EkXH`sVrMZ`beTU=tVyj5qDt)%rnC#Kx)TV@DPz z6pymBqb;uc6B$~ct`qBVjgPao>r*YgCfR&-^3>&}@7`bC7x?F&gI zPA053yz7#68oU?Yqv}nESdaGCCQKd)k?J22W5=2yMTK=fR<%{^`IyI>7S^cm|Hi@3 z_M++b3v-pdLn2 ztTyXPJOKzsEXkM99_vq5F|}A^Wrks41zV z9U%;H@u$^eM6196 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/17.bin new file mode 100644 index 0000000000000000000000000000000000000000..9eed55491960fde222493d96036e74b6a8368ce1 GIT binary patch literal 2424 zcmeHIU1$?o6#nkam`*h`$)wcQpJduyZ7M2J7u|KMW)iGTmqMGM6ntm$mw^h@j)oi-KVFL4_43-MS`4t7(_6qL8Q*tv^uzsAB7QZ`{6&4}J1U&%nTU z&-urB0Ih|v_@?HTfkKEGNktR+>P+bVQBrD$ z3|RH$E^if}BAE698Ue_&R_Vcz;ihEypdE-65!C%kku#GH?(lN~@^PCY;L=&TY=xx9XMqHG3yW4Fu*$wC=ypS|FWCD~W|J2z*VRo5Hlw8Gp| zZEA7opTS(fhbFUY`<1fa_pQm{DPt;R&Dx(8FRtJ7aNHb^n_ld`O^;{6AGE)~Piwb2 zbvhL8hBZD?um##KGPFWKs&4O2_IJ&OW*#&Cd_AOGzA#@r zTlZkcD1ooVfk;fsml%=Gk4?~;KX{kU8hSB&S9v-frjKq!M%B^vJG{c{94N853+K}H z|Lu$YDdCz1O$DxJ73XO{z7q2kc_yOiP^4s{=V`_1@Gu<;2mGvb9ulGVR$N;>1vLJR zwI3^%sz0)}^`~d%IYf*QrDR!GT1PrQ9CuN^ZjDd+Ukb*Z{~o8{lnDXZkT{y%_oATB zd-I^DGUae8%WJ5#OWYed$kOIe+{z!QDxyc_LM^tF9$Glm`3wArkG0fNNDD4bcy72h zfolhvW2r0dXx&Qtyxn*|JwZ1U$Z}fqeQg|VXoT;6_7gr`j3!P?S?eh=dNC%<5A>IB z-Tzl_eU(iKET|84(IKLIqhpeXbGDuCSua7*1)_S09d(g5 zE7Bf%C~CXB7!evl2nDm8J!D&<0ynuMVvY~_j#%w+o_Gg9kj}6@H;+}d?Q3ad%seO zy?V%SMr<@J0nAaaxu;K=$$Zu8I&iL+Ipr*rvsOMP7$5~Wfn!Dns!ti!N34_$#uidp z$#?U)KABmQ*h`yFs>??4RA$jb*jq7&)k{-fH{xpM^c%-^j?>R zL-zX51+><{$UNHnI94J@Ht5*PhN#RJ>}!yl$;t z+I@b&bO10cI6YDqPauV^7z^dQ8}e#vh~Lh`?DE|TJ!+l_C3aRlIn*Z|5w;FL@C*}t zsgJP(x_rH+pD^s}O*yP-!`JK0PehH@eWGIM@! z7fd)G*Afuuq@fyG5)>2?sWHhV7b0Ts?Xf9<*BlDo8Cca=5~V|-F&DXj%QW;j_Lze{ zbs%A!wn2)<)%$6n{+0dAU)Ao01SaeSSPZk#)q4KG5i8FC8t_`}x5h;jkv-O)6NFPyX(dTEzD%+UJ( L=l}NqQ#=2k?;yHm literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/19.bin new file mode 100644 index 0000000000000000000000000000000000000000..0ab7eba2f4a0682db86be423c788c920122ee74b GIT binary patch literal 2424 zcmeHIOH30{6g|@!b-V7C5)~;K-_)=v3u15wXOfwB=H8og-+lMa zFcOeUFNNiEzZBari|C9J!(Xl_OMG$H!`JTuUKshtWmrX)^N?Oo_H?#qelvh$dGdMM z<)}t~-|7OjU(yIC2Ft^|ov}AWe4GHGSah;*o_5!cS;5Czs?47vuY=A0lgZUW0OI@0 zR8Yr3hBKTF5C$+t>Wt$P#G(d!?z1p`P`PTQDAYjmAE_3s2#dqvbYce#E4w*#S*vRC zVY}+$ESxspn2^<_PQAtJNf$PvV5Mr|pg&of={&HTt}Pqz1%!P_8shy+8tcDV15A<{ zL7}O*(8__hN?j&G>9`W(BKM4^7Mu;bQPKruC z-zTINeP#5CJIdf!n?n8P5oW~cC=zE-~MtQXJ%+lu=a)Om3i-Y?f|g~ zRAnTuRv$Yml?Ze9?_?Maw6RtOSUn`4`M8A;p7b9s?$F`kLi34_cMZsB-JecBUPH)0 q9fE;0AsIDYA@dcvwi`D~9XlZR&M;-P8VOQ*a4!f5KA5UYCK0u_b&eWgwvE1+#ha)P#$`^jMMJjq zA`PMVC!lUVm|%sy%$aCOj1Ri3V6&CZ5wL2E8o6p%xN5YFC7_m^oeOD9E)T@`sK1-s zbHDuleBU|ecg}?f)Y69-jJ4@4706mI@{$p9e_tf9~ZzwBuq53op|@OORj!rnZs!nNk+MRTSc5Ppzs2%%tF*NKkHI+5ezU{oYwO@3d;C3i zXwz#fEu{V>{r}u91gfx=h~YPWnaYVC{B7gW_RsSTRDlVCtkH=Uz_4?iw2lh9j>VDpsL0O6etURKxC-%{Uku@jK-LY!(v(bWTqip2l+}yN2 z{%vufuQ%2U%$z`tM(i_NOj$mG-WOqGtO)BO!B_!Pj49U5Ff7dUs?p3~f$!R}VYmzB zvfC~DDsqKsk9wMG-MwTjy)Y!S8ZN%A9(}wgDxqT=PkS$p3WPA6ERpPJjEp#bQRE(U b2h_z7?zyQL7nHR_CHnji`2GHW>i7SDNT;@X literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/20.bin new file mode 100644 index 0000000000000000000000000000000000000000..ff8502eccc22404239ac0d9cc72c8919c271d3ea GIT binary patch literal 2424 zcmeH|U1$?o6vzK}W}2ooB-2E9qee4r^`Q?!S{JM+GBW{b1tDpv2(sHOR%jJVH~1t- zZkJG-Rir7)?!!ur9}iahP<>JGD`|_gwT+~Uq7T}nP-!gU`TZo^#Kc8KM9?*`@L3o&WhZp&*N&w7e{_rhVsc`#gpRy})C;xw{CfsmTogXkYl< zboNRK8xRQ{p~k34@0)yp(^nn4M~8xv+)N>&7I?HB8o?doe@{cP8|Eap1{ny#NwMoAl z_hW%F0?s{83PHf9QT=S_O0o2>zbx^jH(fr*@e9@tw4}$ixOI?A= zxfhQ|csi6BUZ|{^toePO6~=^v32IyA>0ZY#qh0wWA{+NJvQiTCcPb>Fe0au5Sw%{M z6AA_B8yfA^wFe-B?h0((mM_#>pBq{C(?wE(gy>{B*!_{A)YP>NpxU|k-|uFX)8fI! z2cboRg{a2#D>3JfR5Wa@aU-p{&7`AAPh{g0JAE=Y0Q`-vZ@`sqI52*?Py9=3}(? mUJIaSpPPMIMz9%SG)9V`4{Qes@N@?}M*HvlZT~M<>i_?}U!y+& literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/21.bin new file mode 100644 index 0000000000000000000000000000000000000000..360551b4624b9904b8451446ea4022c0a929d254 GIT binary patch literal 2424 zcmeH|T}V@59LAsboHLsrxXpRd$8=_58faQX3KIK(aG~KQT||je3P~g?MIpt`V2EFY z4k1BM%d5l-y$Fj6rg<@!4pWQ_Wk*GDhNaHXa&>yAc{2%-yej|a;_&1DywCfd|9Lov zXn_oRiL5kZF((dN<@+IS)FzAKKL6kIc+;f^-bYBQB#7jLq%b;KtX{XLBbWvx2Bl_p zeBS!G{-FV-MB3YEv6&i5AdtBGcW6IEK+10Oqs+8&D1c5-13UpDJl2S*Sw702M|%$o z<(!}WU0Mca8|wy|Y`r(=Lhus5WVie4STNMQCk#tLDCFRJVY${ic?)vt#mGU7Rh7#} zokZsMrp4sf)^p(XCcToUI3*gZHo0BtpAX6dS(liUH4&QUU>GX5V{O;x8>gd~$v~#$ z^di_UF6|RGjt?MDO<_dK>z%Orv?vwDfCGM zBha~JM(^c2F&U~JaXOtFd68pSr2gGP8w7{Pp`iZT=A}(t;sk`tN>m!eXu;(Vv;?~r z4!P7rw&-lPOrAH?;!%BiaK5?NS$N5uhK>Hs!>-oO8dbI^%N%vI^!uJ&483Rg{xQ~| zvFRJqkpj<(rHEKTH#{{EJ*X%IQw^AV-LI9oeQl#EO_1VM#h1rpA#$Cm_z8!Umz9k; zs5ua``}_vZcPGv*D@Vda@Ej`~$6bbZ@1$=}NX`0?gfoSMKQ+mVXxd5tw|#A`)Gm3R zQ;)AKLU@4$`e|!?Hgc6FL5?t1kmLNsDn5dPzTdmeYMSb!lF+mHkem&~F((CVHF@t386I-O3Nw+4MwUfltbmxW<4U+SrZQ|GEU~Q4xz-5>|RHj`G7a$#Or7=jzAzGj(cn zv{A9>i7`uHCgRuSm@UPl;`>!M>W_`QIRYg~(}f&e-r$+c?x7UFOX#W-O$<1T&7$VW ztye;MLkwR~i}QgqTXWIl$nAPRqybi-LTGO~C6@_a%f2U3atoO$&dB8-3d$w&xFJw<`43bsmn$1{3$51X?} zLkeZ(!&YAV;b=)qbLEgyc=Ku zKV83@a)UHn6U=&$x(jq8;OY$BR@=LLgIZ&9>aDs@=O4?IW?OYT1H(JPWc)E}a<4bxa8$!gZwDf46Iw(7|35bX!VkJRhAsbk~zM-hMOxj$Z> z_dMr0=brbx_cBhPjvhtF*FD)-iGM9WsT6DqE6RKPZujHLSvPRg%(s33t60Rto9GIU zXXNkoG$7?@4zagJD!V)7F@R(Fml?&^-UNxM+_#JT#S&^mTv;`L+ zT9aeyN=X3P`Le7Fa|psEIRKFX%yQT~^iW)=2FEVwV9Baj^^$qmY54zq;Xd&bL;vZ4 zou1G8k_s#R@!pbIwA$vmba0XQg;G3gz#sMLz@-CmCASMkO2^tn#@iYht4J}1LVnr` z96828bo<;Ek+y~uZ|fB9v8eq)ONI4hB)B;K_f0EMjZKQFfUjOnTUnGm`TPfO^#ljF zQWc~~d_mg}EnePyXn0bYOehW<8~~WWk;9b#tIoNzMcW~+Dy!xDb}k~8wJEe#q&$Gz z^P*3`qKDC=ce{$s-nRJf*Uv44sC36V#~(V68o$W@8p<f{-^_z;@~|U zl@vcbI##RV?txG)L;Z`xmkZ`L?{#qFbKvZ)T2`ednle#aU;5b#Be`dOou{mB6)$+ueH>rWhPAV@l-06NfpyPVxXS%&q+~8 z2{~aR{iwDcXYD8_VUD56E}+~AE|BcfrytEvJFaz15z&0ifO1L~()^FMhwhajN zW`42w#&0>){1iD3n=q?<`u)(>`?lD>vjx?6^;we>x|F2%|R8x&#LMSMLI|84#LHa<2FYonorGhCUrZM097h{5Qpc61rcpFMpd&hu3@zMRdL=^Jn_mQ|WB|@oecSzq|nD WcU&}z0;DwqWpAqgp8szBUta-DBi7Ua literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/24.bin new file mode 100644 index 0000000000000000000000000000000000000000..a1cec350c2525a479a98d24df5bd29cb926413d0 GIT binary patch literal 2424 zcmeHIU1$?o6#gceHIrJ*FKpGANm_MVA0({{Dpbu(U@>adB>1!}&7y+YU20oIMbKO| zgw~4KvLLR|#&-9?p9dAh2NjaGLXxeewQJE`F=M5RQ5RDqrn)WTon-eVB6;vp&%g}d zJ>Nawx#yhAKmh9LBdfXk%+@9N-)3gzycMu4f5xA7Jq9khfN>+&_65vj4hK)XJCseO z&ui&`*w7q&Xb6R}{IX{OE1*JVi?_2060`Ww9_lZX;1Jd5&jk;U*}>&U%9p6{FGR$V zW9rLk02I%cX?=)=AELwqgaM4{knzzZS)^=^UQ@&LM8S%enp;&83yJSrY<5VtTM|zk z@9PO2)!0=?4f~tJH8fw52ESI0Hx2k>-Ed>aF&5Fza>F%*wNIna7b4fT@nffW-KJ$BU=0lk7pO|`C%R`cT zMuNGN(rpJ1YarwNV# zA?9vk@acwg?lf%*J&EK2E*3)N->s#vG0}b}nJg>J3o_F*{$(iwDV~lSX#7ZVK0@sj zD`B3l$>M}f0Na@8)(-zOf0)1BWo=05^xxg?PFtQG{N_v`xno;!74rTc7Yz4YJZ5Q- zb?e9C-Geh%H_zSge*0&o+u7ynTnz`(uMY2ILZE_m3G0wy2UP7qFqXP$^7Ti?EY3NG z8wXyTy<4Uiy@6g9j_cu{QQ_3s-k;avd_NZZT3S*4K>I{3eT980k}4Ii_vDIA&nI;? z9N}1^(PT>TOZk1Vy+`%}_Ix+#ONeph|6RxY1@g6X(J!$!5{&8?3#L`EN(TOQ1-6QQ zJOd|2A(~0$_|e_JX|UUsKEsB0R;{5|!jG`}QYrmXe)0ZBs`3L_HbmRVW-ywx`c1eJ gNmZPaNFREA>4mWUB~p$P(wY%#sd%6LpZ5Rs9dw(rO8@`> literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/3.bin new file mode 100644 index 0000000000000000000000000000000000000000..de995cc70bc7605d15a97c4838e191f7d4f7af4b GIT binary patch literal 2424 zcmeHIZ)h8382{bnx?Zx7f9{TPrd|gi9RKola7_4YsK{3zfxINLwZTS%~komcjLd3_otq z!NHH`d4BKjeV*riUx+{}`6?E+wbCA(FwEZ8EhRPN!syB@L6I#nKK0d%U(mc&v@(hZbKI&^NqJ57=c~2ABkVv!G}X^QX^Wk#fwA2VvF|ok zh@6qGFSfpWXq&@A$ZX&hvpzF^?A3#lV=yVY_f&RuEFP<5m z>;C(e=wpR3H_1;gt5;~2fxqd|CZ7Oa1hc#Ohj16I zKJdI#K{@Y)|LgLc;6PEF3~uD+-@=QRP8598-CK|E)n3}s^Ef8PPF%S4>GqXfk-x6j zM}&d4BbyLJ;kVvBR03qd=$H1hKs}VBD6S$Ck zqE4vhm(QzN@BhW|{T*2Mz4fL=e+UO?C2!^vGvr__Sr8cNZ+>QG${Ao4mQkv!i{|({ z#qrFjItnbDKw}v(V|S5OEgBER`&jjUJelrMosQr1%8yM_7;82%xy!UY9j{gq!8 z6`?~jX+FXMp{j!?G6~70@FH>141D662&HABFLFMcFaKS1^6NgEO{1Czi?!+>lUw?9 zdo|ZSvGvqM8LB4PD=1Qk$s_{kv{A zb)-8eUqaHBp?K3#zhpq6S)}&Bgfa6OqmQ2@A7wH@LUC5l)yCfpej1cvTCy`-Sxe`a zMrcSM+I&D3Kj%VC&6+nW%gmns`h052TkQSA7q#{)q7l89c;B48IgRay#lG5Gw$Wkl_FmRi2J(==dq^>=v)FlJurfXqbp6~Bo6f^a{lNcqKiK-?#o;}BQT8(DonX#JJx_XBy_%vg#%TC~ z*2YCOANumj3$=+NaX1E8{&=zP$#)U{OEnvzEVRq0DVN(hT2BGOaVa?!%Z$UxJgx{| zd5zD(R;~M@;A#Z$B(Q*r}s&gG{}2 s2c?Ljr`xONW3SO$*ldyuXbtzzfbv44%>-apX1uKaKmND>pX~ns0=o&bO8@`> literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/5.bin new file mode 100644 index 0000000000000000000000000000000000000000..33a193a3bfdfc609c4fbadd23bcc3a1229bbfd5b GIT binary patch literal 2424 zcmeHIT}V@57=F%na?_66+$LEqJ<}OUP_vu7Sh#aW>LRU8uuFH*by@UdTI?*BnO4k@ z2I7s@OdFdclsXqIM4UK&-=aK`*RK> z01on`)LKXKxD9DpTuLp=3Qnaq@y5LwUZP=(f)@4h}p(_m`oijAQ4uozwuect@cVC37uSl zmuNnXy$vm&4>#xZ_(}5km!j&J>5-Dyr@nm|w%~<>gS0)3U2=FJObA*;$O@EtZVbfU z^zVX{s&8moz{sUxgR-Bjn{1TqtMf(sqp={fT2hd-u(WI>)jK80ngn?%mFtOx=-4@qkmG1hBlCyq1mJ8*@ zlZV1ee>s_d$d4z=y#`x^qPy{rW~UAHdjnorS1u%Rj#d3h$M?Un5Dn#aLQAG+MQHzm zOa>z@vB~&hRG~9;iLTOIcqsyZyXA zP=Fn3kzrKepi*q1Hoz0T9fN3=3ddSb7i;(>PoIVx=T!FZTodUYOL)EU(Dtr=A3}8n wWX7JO7(t90*zR2DF;zZY-Zi)->7BXH^7;X}m3*#{4D{0cO}w%HpLG3y1C+1Q9RL6T literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/weather/weather60x60gif/WindSpeed/6.bin new file mode 100644 index 0000000000000000000000000000000000000000..f29776e7a2400da7326de7617143a4141c42546b GIT binary patch literal 2424 zcmeHI-%Aux6#nkasG}~sjc>nH}RL|71nS?rx9Qz_D2s9vHidJqcn!Ac@YpZZ2K}kglJEC1`d3j@0{<>oOA9F z3e>R2b9Iy zkKXX1F5ij>kS+u(LPpo^E(@mZsgvJyz3Xe~4DtMpb6mlr>_l~IalCdLe9N!RAjv^3 zvNK`bnXiri)%lLDo)zD$xy>3u{BSdvQkeagoDc(1!lYiI(7Hlpr(mh>}2B|H=eEa tJkI<;ER5b`CG7H=#&$#yN>qoleC_j&68QqCKD2(sYd3tJ9;Fk`}IYqV$y<1;+NfV1o{Z!LF#372HA^?N| z_?01kDMuQL{U|>+fOjQ0U?~S9z$#4HeHx$0JtclH{FT3#ix%nj;-b&r?eb!5;s-MP&jYH|AoTRzTkm*Y68;MW9e3fbdQAg$5g`9NF zxh$v!fx(xAO8vLG;w)eDNPwcY+NeTl;)=JweG+vdaj|}`te(~CmC_!sM^mOP9P>Ie zyV~&}yh8iI3n&p_{Er)F`Al41wU$oiA+4AaW3;%>+dc?{w#?t^k(%?IBHH)vsSiMu zz@5z8wPe?}Wrc;Cp3X&wQ^TjXXGh0J>N{0Odt;%VChs|j<~Vt4d;hUgzI_?byz3O$ zIB+?=I8`$}U3cyd2^{i0y*T+~ODtB2|G)iG8g$-%o4`!8F2AUc-^3gHe_84K{{$j-{G1H&~Tjt*7^kp?yn2FIJP zmdu~7`ALw0g_)z_{cop_bCk{tGiUtZWMF7u6ln;Wn8$E|QKhOBn1Hw*Fc^@UeuO<* zSQru*oF2%7%wu2>df6iM@M(iAC_Nt7&debE0>lT&0)ZzJgX77>LIp*J2M$Lc$Tt`; zFpz2=spD6*t2LEZV-IS~d1Er!xnF#a_lUxT6izv0KjZVj9P zNlRuiI50ABG>~c^wbeTx+;C_E(D57$2f$ts3hX>|@zO?FhKB$14^033)Uih(`OoS4 zKa31NCjJMi5Doyzf0So<@L!(8bCL?Wyy9m620;d41_r~<1_s56E|j|0@t~ZN9N1-G zf<@@!$s@14R(ie!#yArLgGC?%!y1G%LlGgqW2iL)!-8X64h|q)2mTOppQGVNmIn%a z{C+YH3<{16Eb%Ajah`iCc~1W9Bst&v`~tCO=e?A9UF$YG^HfS`y#)hUK3nSC{54%N zzW@0>ly1IS(Zw)1>Q@=lp;dqU|HlU&edO>kfdync2Lm6Y(Mh>8f+-A4oeT{12k-9{ zK6Gf#Gf4+OmlEsUmd4B-9YL9kSQrd;xAibcIIt_wK0Ol(4|I8_mAX7C%?v-qD}f$r TU?w?#qnkI%AKCTGNQ-{}cIq1H&~Tjt*7^kp?ynhQJf^ zT0Y-@xr!5*Kol4X>YbPwoIq(sVJ3sXe+GwDl%^M9j}{h&1O}%E@(c_Oj0_AyFI$8j zK5dW%*>PYyGlTF85FaE91fEO`jITj_2M!?5U=om|)P6$x13TJ2DV}2F2iwoUz!cv- zfrX*LImlVK0VwqFe_#iMzgQR)J`6=df=k*GlwUl%c7(a%(8I$&2$@ev-jTB?u+fq6 zz`65%5)Et&42}nxSeT%W0a=KyU+HGif;WN*z>qm`naLig{^B|wgM_0IMy$?^3lupR zgaSJcUA(kWmZ9PQ`~%ZJKXvR8Nd9xW{tqL=kBR?*=3?PLmjC}*9wyHe*r^m`Y$VU{ z;J-WvV?n4BvjY>uoZkt*ql?5@{_+9c$0fi8b008D(cS0h8By4fz~J!Qon5wpfk7hp zpq!E%O#K1I2F9x=kG%3)>G={E<4Oz+4+0q&*1)8JbP*xG(8F-x v%SRjxj0bM&t_I~N2S!5XF|E`sOi*Mvkd(*70gPV@Lh485M|S;2@AwA*D*Xf| literal 0 HcmV?d00001 -- 2.17.1