From e66aeef08858decd653b112e8f65c3a47c0e167f Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E7=BD=97=E6=AD=A3yun?= <1732036298@qq.com> Date: Fri, 19 Jan 2024 17:51:24 +0800 Subject: [PATCH] =?utf8?q?=E4=B8=BB=E7=95=8C=E9=9D=A2=E5=92=8Capplist?= =?utf8?q?=E5=A4=A9=E6=B0=94=E8=A7=86=E5=9B=BE=E6=B7=BB=E5=8A=A0=E5=B9=B6?= =?utf8?q?=E5=90=8C=E6=AD=A5=E6=B7=BB=E5=8A=A0=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../wearable/nativeapp/CMakeLists.txt | 12 + .../nativelauncher/include/AppViewIDs.h | 5 + .../nativelauncher/include/NativeLauncher.h | 7 +- .../nativelauncher/include/UiConfig.h | 15 +- .../nativelauncher/src/NativeLauncher.cpp | 59 ++- .../nativeui/applist/src/ApplistModel.cpp | 1 + .../nativeui/main/include/MainViewSample.h | 2 + .../nativeui/main/src/MainViewSample.cpp | 13 + .../screensetting/include/ScreenModels.h | 1 + .../weather/include/FutureWeatherPresenter.h | 34 ++ .../weather/include/FutureWeatherView.h | 66 +++ .../include/GetWeatherDataErrorPresenter.h | 33 ++ .../weather/include/GetWeatherDataErrorView.h | 40 ++ .../weather/include/MainWeatherPresenter.h | 34 ++ .../weather/include/MainWeatherView.h | 65 +++ .../weather/include/WeatherControlView.h | 26 ++ .../weather/include/WeatherReportPresenter.h | 33 ++ .../weather/include/WeatherReportView.h | 48 ++ .../nativeui/weather/include/WeatherView.h | 79 ++++ .../weather/src/FutureWeatherPresenter.cpp | 72 +++ .../weather/src/FutureWeatherView.cpp | 200 ++++++++ .../src/GetWeatherDataErrorPresenter.cpp | 71 +++ .../weather/src/GetWeatherDataErrorView.cpp | 162 +++++++ .../weather/src/MainWeatherPresenter.cpp | 76 ++++ .../nativeui/weather/src/MainWeatherView.cpp | 285 ++++++++++++ .../weather/src/WeatherControlView.cpp | 63 +++ .../weather/src/WeatherReportPresenter.cpp | 78 ++++ .../weather/src/WeatherReportView.cpp | 427 ++++++++++++++++++ .../nativeui/weather/src/WeatherView.cpp | 242 ++++++++++ .../fs/user/res/APPLIST_COMPASS_IMAGE.bin | Bin 12824 -> 4504 bytes .../fs/user/res/APPLIST_WEATHER_IMAGE.bin | Bin 0 -> 4504 bytes .../user/res/weather/WEATHER_BACKGROUND.bin | Bin 0 -> 146040 bytes .../user/res/weather/WEATHER_CLEAR-CLOUDY.bin | Bin 0 -> 11640 bytes .../user/res/weather/WEATHER_CLEAR-SUNNY.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_DUSTSTORM.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_FOGGY.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_HAZE.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_HUMIDITY.bin | Bin 0 -> 2424 bytes .../fs/user/res/weather/WEATHER_OVERCAST.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_RAIN.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_SNOW.bin | Bin 0 -> 11640 bytes .../res/weather/WEATHER_SUNNY-CLOUNDY.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_SUNNY.bin | Bin 0 -> 11640 bytes .../res/weather/WEATHER_THUNDERSHOWER.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_UNKNOWN.bin | Bin 0 -> 11640 bytes .../fs/user/res/weather/WEATHER_UVI.bin | Bin 0 -> 2424 bytes .../fs/user/res/weather/WEATHER_WINDSPEED.bin | Bin 0 -> 2424 bytes .../user/res/weather/weather_clear-cloudy.bin | Bin 0 -> 3016 bytes .../user/res/weather/weather_clear-sunny.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_duststorm.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_foggy.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_haze.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_overcast.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_rain.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_snow.bin | Bin 0 -> 3016 bytes .../user/res/weather/weather_sunny-cloudy.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_sunny.bin | Bin 0 -> 3016 bytes .../res/weather/weather_thundershower.bin | Bin 0 -> 3016 bytes .../fs/user/res/weather/weather_unknown.bin | Bin 0 -> 3016 bytes 59 files changed, 2241 insertions(+), 8 deletions(-) create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherPresenter.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherView.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorPresenter.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorView.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherPresenter.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherView.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherControlView.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherReportPresenter.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherReportView.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherView.h create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/FutureWeatherPresenter.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/FutureWeatherView.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/GetWeatherDataErrorPresenter.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/GetWeatherDataErrorView.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherPresenter.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherView.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherControlView.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherReportPresenter.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherReportView.cpp create mode 100644 code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherView.cpp create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/APPLIST_WEATHER_IMAGE.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_BACKGROUND.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_CLEAR-CLOUDY.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_CLEAR-SUNNY.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_DUSTSTORM.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_FOGGY.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_HAZE.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_HUMIDITY.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_OVERCAST.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_RAIN.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SNOW.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SUNNY-CLOUNDY.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SUNNY.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_THUNDERSHOWER.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_UNKNOWN.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_UVI.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_WINDSPEED.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_clear-cloudy.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_clear-sunny.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_duststorm.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_foggy.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_haze.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_overcast.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_rain.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_snow.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_sunny-cloudy.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_sunny.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_thundershower.bin create mode 100644 code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_unknown.bin diff --git a/code/sdk/application/wearable/nativeapp/CMakeLists.txt b/code/sdk/application/wearable/nativeapp/CMakeLists.txt index 9207ae679..0708deb71 100755 --- a/code/sdk/application/wearable/nativeapp/CMakeLists.txt +++ b/code/sdk/application/wearable/nativeapp/CMakeLists.txt @@ -202,6 +202,18 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/src/TraingView.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 + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/GetWeatherDataErrorPresenter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/GetWeatherDataErrorView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherControlView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/weather/src/WeatherView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassControlView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassCalibrationView.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/compass/src/CompassModel.cpp diff --git a/code/sdk/application/wearable/nativeapp/nativelauncher/include/AppViewIDs.h b/code/sdk/application/wearable/nativeapp/nativelauncher/include/AppViewIDs.h index bacf7b3f3..1af2dd963 100755 --- a/code/sdk/application/wearable/nativeapp/nativelauncher/include/AppViewIDs.h +++ b/code/sdk/application/wearable/nativeapp/nativelauncher/include/AppViewIDs.h @@ -47,6 +47,11 @@ typedef enum : uint16_t { VIEW_UISAMPLE, VIEW_DIAL,//切换表盘 + VIEW_WEATHER, // 天气 + VIEW_WEATHER_REPORT, // 气象报告 + VIEW_FUTURE_WEATHER, // 未来天气 + VIEW_GET_WEATHER_DATA_ERROR, // 获取天气数据失败 + VIEW_MAX_INTER_APP, // 在此之前添加native应用ID. VIEW_EXTERN_APP = 0xFFFE, // 三方应用 VIEW_INVALIDE_APP = 0xFFFF, diff --git a/code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h b/code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h index 93cb6f5fd..8870ce8fc 100755 --- a/code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h +++ b/code/sdk/application/wearable/nativeapp/nativelauncher/include/NativeLauncher.h @@ -42,7 +42,12 @@ namespace OHOS void InitRebootSlice(void); void InitUISampleSlice(void); void InitDialSlice(void); - + /* ----------------------------------- 天气 ----------------------------------- */ + void InitWeatherSlice(void); + void InitWeatherReportSlice(void); + void InitFutureWeatherSlice(void); + void InitGetWeatherDataErrorSlice(void); + /* -------------------------------------------------------------------------- */ private: void InitAllNativeSlices(void); diff --git a/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h b/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h index ae607fe77..b275a696e 100755 --- a/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h +++ b/code/sdk/application/wearable/nativeapp/nativelauncher/include/UiConfig.h @@ -166,11 +166,12 @@ namespace OHOS static constexpr const char *PNG_A019_095_IMAGE_PATH = APP_RES_PATH "/BLUETOOTH_IMAGE_16.bin"; static constexpr const char *PNG_BLUETOOTHEAR = APP_RES_PATH "/BLUETOOTHEAR.bin"; /* --------------------------------- AppList -------------------------------- */ - static constexpr const char *PNG_APPLIST_ALARM_IMAGE = APP_RES_PATH "/APPLIST_ALARM.bin"; // 闹钟 - static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_RES_PATH "/APPLIST_SPO2.bin"; // 血氧 - static constexpr const char *PNG_APPLIST_SETTING_IMAGE = APP_RES_PATH "/APPLIST_SETTING.bin"; // 设置 - static constexpr const char *PNG_APPLIST_CALLER_IMAGE = APP_RES_PATH "/APPLIST_CALLER_IMAGE.bin"; - static constexpr const char *PNG_APPLIST_COMPASS_IMAGE = APP_RES_PATH "/APPLIST_COMPASS_IMAGE.bin"; + static constexpr const char *PNG_APPLIST_ALARM_IMAGE = APP_RES_PATH "/APPLIST_ALARM.bin"; // 闹钟 + static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_RES_PATH "/APPLIST_SPO2.bin"; // 血氧 + static constexpr const char *PNG_APPLIST_SETTING_IMAGE = APP_RES_PATH "/APPLIST_SETTING.bin"; // 设置 + static constexpr const char *PNG_APPLIST_CALLER_IMAGE = APP_RES_PATH "/APPLIST_CALLER_IMAGE.bin"; // 打电话 + static constexpr const char *PNG_APPLIST_COMPASS_IMAGE = APP_RES_PATH "/APPLIST_COMPASS_IMAGE.bin"; // 指南针 + static constexpr const char *PNG_APPLIST_WEATHER_IMAGE = APP_RES_PATH "/APPLIST_WEATHER_IMAGE.bin"; // 天气 /* ---------------------------------- 快速训练 ---------------------------------- */ static constexpr const char *PNG_TRAING_BOUTTONMORE_IMAGE = APP_RES_PATH "/Training/More.bin"; static constexpr const char *PNG_TRAING_BUTTONGRONG_IMAGE = APP_RES_PATH "/Training/Bouttonground.bin"; @@ -197,7 +198,7 @@ namespace OHOS static constexpr const char *PNG_SETTINGS_DISPLAY_BRIGHTNESS = APP_RES_PATH "/settings/SETTINGS_DISPLAY_BRIGHTNESS.bin"; // 显示与亮度 static constexpr const char *PNG_SETTINGS_BLUETOOTH = APP_RES_PATH "/settings/SETTINGS_BLUETOOTH.bin"; // 蓝牙 static constexpr const char *PNG_SETTINGS_SOUND_VIBRATION = APP_RES_PATH "/settings/SETTINGS_SOUND_VIBRATION.bin"; // 声音与震动 - static constexpr const char *PNG_SETTINGS_SECONDARY_FUNCTION = APP_RES_PATH "/settings/SETTINGS_QUICK_ACCESS.bin"; // 辅助功能 + static constexpr const char *PNG_SETTINGS_SECONDARY_FUNCTION = APP_RES_PATH "/settings/SETTINGS_QUICK_ACCESS.bin"; // 辅助功能 static constexpr const char *PNG_SETTINGS_SYSTEM = APP_RES_PATH "/settings/SETTINGS_SYSTEM.bin"; // 系统 /* ---------------------------------- 通用图片 ---------------------------------- */ static constexpr const char *PNG_CHECKBOX_OFF_IMAGE = APP_RES_PATH "/CHECKBOX_OFF.bin"; // checkbox未选中图片 @@ -205,6 +206,8 @@ namespace OHOS static constexpr const char *PNG_SETTING_NEXT_IMAGE = APP_RES_PATH "/SETTING_NEXT.bin"; // 箭头图片 static constexpr const char *PNG_SETTING_BACKGROUND_IMAGE = APP_RES_PATH "/SETTING_BACKGROUND.bin"; // 按钮的背景图片 static constexpr const char *PNG_VOLUME_CONTROL_VECTOR = APP_RES_PATH "/VolumeControlVector.bin"; // 调节音量图片 + static constexpr const char *PNG_ANIMATOR1_IMAGE = APP_RES_PATH "/Record/animator1.bin"; + static constexpr const char *PNG_ANIMATOR2_IMAGE = APP_RES_PATH "/Record/animator2.bin"; /* -------------------------------- 已删除的不必要图片 ------------------------------- */ static constexpr const char *PNG_APPLIST_UI_SAMPLE_IMAGE = APP_RES_PATH "/APPLIST_UI_SAMPLE.bin"; // Applist图标 static constexpr const char *PNG_APPLIST_TEMP_IMAGE = APP_RES_PATH "/TEMP_IMAGE.bin"; diff --git a/code/sdk/application/wearable/nativeapp/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/nativeapp/nativelauncher/src/NativeLauncher.cpp index 166278f68..3f47fcef7 100755 --- a/code/sdk/application/wearable/nativeapp/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/nativeapp/nativelauncher/src/NativeLauncher.cpp @@ -62,6 +62,15 @@ #include "dial/include/DialPresenter.h" #include "dial/include/DialView.h" +#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" +#include "weather/include/GetWeatherDataErrorView.h" + #include "BluetoothHeadsetEvent.h" #include "graphic_hardware_config.h" #include "graphic_service.h" @@ -101,6 +110,10 @@ namespace OHOS {VIEW_REBOOT, &NativeLauncher::InitRebootSlice}, {VIEW_DIAL, &NativeLauncher::InitDialSlice}, + {VIEW_WEATHER,&NativeLauncher::InitWeatherSlice}, //天气 + {VIEW_WEATHER_REPORT,&NativeLauncher::InitWeatherReportSlice}, //气象报告 + {VIEW_FUTURE_WEATHER,&NativeLauncher::InitFutureWeatherSlice}, //未来天气 + {VIEW_GET_WEATHER_DATA_ERROR,&NativeLauncher::InitGetWeatherDataErrorSlice}, //获取天气数据失败 {VIEW_UISAMPLE, &NativeLauncher::InitUISampleSlice}}; static const ViewIdToString VIEW_MAPPER[] = { @@ -380,7 +393,7 @@ namespace OHOS } void NativeLauncher::InitDialSlice(void) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitBloodSlice"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitDialSlice"); SliceProxy *dialview = new AbilitySliceProxy; if (dialview == nullptr) { @@ -390,4 +403,48 @@ namespace OHOS NativeAbility::GetInstance().AddSliceProxy(VIEW_DIAL, dialview); } + void NativeLauncher::InitWeatherSlice(void) // 天气 + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitWeatherSlice"); + SliceProxy *mainweather = new AbilitySliceProxy; + if (mainweather == nullptr) + { + return; + } + 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"); + SliceProxy *futureweather = new AbilitySliceProxy; + if (futureweather == nullptr) + { + return; + } + NativeAbility::GetInstance().AddSliceProxy(VIEW_FUTURE_WEATHER, futureweather); + } + + void NativeLauncher::InitGetWeatherDataErrorSlice(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitGetWeatherDataErrorSlice"); + SliceProxy *getweatherdataerror = new AbilitySliceProxy; + if (getweatherdataerror == nullptr) + { + return; + } + NativeAbility::GetInstance().AddSliceProxy(VIEW_GET_WEATHER_DATA_ERROR, getweatherdataerror); + } + } diff --git a/code/sdk/application/wearable/nativeapp/nativeui/applist/src/ApplistModel.cpp b/code/sdk/application/wearable/nativeapp/nativeui/applist/src/ApplistModel.cpp index 877edb6a4..a9d386af3 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/applist/src/ApplistModel.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/applist/src/ApplistModel.cpp @@ -24,6 +24,7 @@ namespace OHOS {VIEW_BLOODOXY_SAMPLE, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_SPO2_IMAGE, "血氧饱和度", nullptr}, {VIEW_COMPASS, PNG_APPLIST_COMPASS_IMAGE, PNG_APPLIST_COMPASS_IMAGE, "指南针", nullptr}, {VIEW_INDOORWALK, PNG_APPLIST_WALK_IMAGE, PNG_APPLIST_WALK_IMAGE, "室内步行", nullptr}, + {VIEW_WEATHER, PNG_APPLIST_WEATHER_IMAGE, PNG_APPLIST_WEATHER_IMAGE, "天气", nullptr}, {VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, "设置", nullptr}, #if 0 {VIEW_MAIN_TEMP, PNG_APPLIST_TEMP_IMAGE, PNG_APPLIST_TEMP_IMAGE, "体温", nullptr}, diff --git a/code/sdk/application/wearable/nativeapp/nativeui/main/include/MainViewSample.h b/code/sdk/application/wearable/nativeapp/nativeui/main/include/MainViewSample.h index 21689df0e..2d4a462cd 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/main/include/MainViewSample.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/main/include/MainViewSample.h @@ -32,6 +32,7 @@ #include "blood/include/BloodView.h" #include "traing/include/TraingView.h" #include "ApplistCardView.h" +#include "weather/include/WeatherControlView.h" namespace OHOS { class MainPresenterSample; @@ -83,6 +84,7 @@ namespace OHOS HeartRateView *heartRateView{nullptr}; Digital_clockView *dialView{nullptr}; BloodView *bloodView{nullptr}; + WeatherControlView *weatherControlView{nullptr}; TraingView *traingView{nullptr}; ApplistCardView *applistCardView{nullptr}; /* -------------------------------------------------------------------------- */ diff --git a/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp b/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp index 9d15a22b1..b19bcc4ae 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp +++ b/code/sdk/application/wearable/nativeapp/nativeui/main/src/MainViewSample.cpp @@ -31,6 +31,7 @@ namespace OHOS {BloodOxygen, &MainViewSample::InitBloodOxygenPage}, {TRAINING, &MainViewSample::InitTrainingPage}, {COMPASS, &MainViewSample::InitCompassPage}, + {WEATHER, &MainViewSample::InitWeatherPage}, {PLAYER,&MainViewSample::InitMusicPlayerPage}, #if 0 {APPLIST,&MainViewSample::InitApplistPage} @@ -379,6 +380,18 @@ namespace OHOS return traingView; } + //主界面天气卡片 + UICardPage *MainViewSample::InitWeatherPage(void) + { + weatherControlView = new WeatherControlView(); + if(weatherControlView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainweatherView new fail"); + return nullptr; + } + return weatherControlView; + } + // 主界面功能列表界面 UICardPage *MainViewSample::InitApplistPage(void) { diff --git a/code/sdk/application/wearable/nativeapp/nativeui/screensetting/include/ScreenModels.h b/code/sdk/application/wearable/nativeapp/nativeui/screensetting/include/ScreenModels.h index 4e0f8de4b..b38f6f484 100755 --- a/code/sdk/application/wearable/nativeapp/nativeui/screensetting/include/ScreenModels.h +++ b/code/sdk/application/wearable/nativeapp/nativeui/screensetting/include/ScreenModels.h @@ -28,6 +28,7 @@ typedef enum { TRAINING, BloodOxygen, COMPASS, + WEATHER, PLAYER, //APPLIST, MAX_CARD, diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherPresenter.h new file mode 100644 index 000000000..645130639 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherPresenter.h @@ -0,0 +1,34 @@ +#ifndef FUTURE_WEATHER_PRESENTER_H +#define FUTURE_WEATHER_PRESENTER_H + +#include "Presenter.h" + +#include "FutureWeatherView.h" + +namespace OHOS +{ + class FutureWeatherView; + + class FutureWeatherPresenter : public Presenter, + public UIView::OnClickListener, + public UIView::OnDragListener + { + public: + FutureWeatherPresenter(); + virtual ~FutureWeatherPresenter(); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() override; + + static FutureWeatherPresenter *GetInstance(); + + private: + // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + }; +} // namespace OHOS + +#endif // FutureWeather_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherView.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherView.h new file mode 100644 index 000000000..d4ba47d16 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/FutureWeatherView.h @@ -0,0 +1,66 @@ +#ifndef FUTURE_WEATHER_VIEW_H +#define FUTURE_WEATHER_VIEW_H + +#include "BaseView.h" +#include "View.h" +#include "components/ui_view_group.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label.h" +#include "components/ui_list.h" +#include "components/icon_adapter.h" + +namespace OHOS +{ +#define weather_src "/user/res/weather/" +static const char *weather65x65[] = +{ +weather_src"weather_sunny.bin", //晴天 +weather_src"weather_clear-cloudy.bin", //多云 +weather_src"weather_rain.bin", //阵雨 +weather_src"weather_thundershower.bin", +weather_src"weather_foggy.bin", +weather_src"weather_unknown.bin", +weather_src"weather_overcast.bin", +weather_src"weather_clear-sunny.bin", +weather_src"weather_duststorm.bin", +weather_src"weather_haze.bin", +weather_src"weather_snow.bin", +weather_src"weather_sunny-cloudy.bin", +}; + + +} + +namespace OHOS +{ + class FutureWeatherPresenter; + class FutureWeatherView : public View + { + + public: + FutureWeatherView(); + virtual ~FutureWeatherView(); + static FutureWeatherView *GetInstance(void); + + void OnStart() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStop() override; + + private: + void InitView(void); + void DeInitView(void); + void PreLoad(void); + + private: + UIView::OnDragListener *draglistener{nullptr}; + UIViewGroup *container_ = nullptr; + UIScrollView *scrollView1_ = nullptr; + UILabel *label1_ = nullptr; + UIList *list = nullptr; + IconAdapter *listadapter = nullptr; + List *listdata = nullptr; + bool viewInitStatus{false}; + }; +} // namespace OHOS +#endif // FutureWeather_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorPresenter.h new file mode 100644 index 000000000..2bda7b5ee --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorPresenter.h @@ -0,0 +1,33 @@ +#ifndef Get_WEATHER_DATA_ERROR_PRESENTER_H +#define Get_WEATHER_DATA_ERROR_PRESENTER_H + +#include "Presenter.h" +#include "GetWeatherDataErrorView.h" + +namespace OHOS +{ + class GetWeatherDataErrorView; + + class GetWeatherDataErrorPresenter : public Presenter, + public UIView::OnClickListener, + public UIView::OnDragListener + { + public: + GetWeatherDataErrorPresenter(); + virtual ~GetWeatherDataErrorPresenter(); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() override; + + static GetWeatherDataErrorPresenter *GetInstance(); + + private: + // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + }; +} // namespace OHOS + +#endif // GetWeatherDataError_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorView.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorView.h new file mode 100644 index 000000000..b22d63314 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/GetWeatherDataErrorView.h @@ -0,0 +1,40 @@ +#ifndef Get_WEATHER_DATA_ERROR_VIEW_H +#define Get_WEATHER_DATA_ERROR_VIEW_H + +#include "BaseView.h" +#include "View.h" +#include "components/ui_view_group.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label.h" +#include "components/ui_image_view.h" +namespace OHOS +{ + class GetWeatherDataErrorPresenter; + class GetWeatherDataErrorView : public View + { + + public: + GetWeatherDataErrorView(); + virtual ~GetWeatherDataErrorView(); + static GetWeatherDataErrorView *GetInstance(void); + + void OnStart() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStop() override; + + private: + void InitView(void); + void DeInitView(void); + void PreLoad(void); + + private: + UIView::OnDragListener *draglistener{nullptr}; + UIViewGroup *container_ = nullptr; + UIScrollView *scrollView1_ = nullptr; + UILabel *label1_ = nullptr; + UIImageView *image1_ = nullptr; + bool viewInitStatus{false}; + }; +} // namespace OHOS +#endif // GetWeatherDataError_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherPresenter.h new file mode 100644 index 000000000..70bbd4ec2 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherPresenter.h @@ -0,0 +1,34 @@ +#ifndef MAIN_WEATHER_PRESENTER_H +#define MAIN_WEATHER_PRESENTER_H + +#include "Presenter.h" +#include "MainWeatherView.h" + +/*主天气视图*/ +namespace OHOS +{ + class MainWeatherView; + + class MainWeatherPresenter : public Presenter, + public UIView::OnClickListener, + public UIView::OnDragListener + { + public: + MainWeatherPresenter(); + virtual ~MainWeatherPresenter(); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() override; + + static MainWeatherPresenter *GetInstance(); + + private: + // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + }; +} // namespace OHOS + +#endif // MainWeather_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherView.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherView.h new file mode 100644 index 000000000..37bd30567 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherView.h @@ -0,0 +1,65 @@ +#ifndef MAIN_WEATHER_VIEW_H +#define MAIN_WEATHER_VIEW_H + +#include "BaseView.h" +#include "View.h" + +#include "components/ui_view_group.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label.h" +#include "components/ui_image_view.h" +#include "components/ui_image_animator.h" +#include "weather/include/WeatherView.h" +#include + + +namespace OHOS +{ + class MainWeatherPresenter; + class MainWeatherView : public View + { + + public: + MainWeatherView(); + virtual ~MainWeatherView(); + static MainWeatherView *GetInstance(void); + + void OnStart() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStop() override; + + private: + void InitView(void); + void DeInitView(void); + UILabel *InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight); + void PreLoad(void); + + private: + std::string GetTime(); + std::string GetWeatherImage(); + std::string GetWeatherTemperature(); + std::string GetWeatherDescription(); + std::string GetWeatherArea(); + std::string GetWeatherMaxAndMinTemperature(); + + std::string Time; // 时间 + std::string WeatherImag; // 天气图片 + std::string Temperature; // 温度 + std::string WeatherDescription; // 天气描述 + std::string WeatherArea; // 天气地区 + std::string MaxandMinTemperature; // 最高与最低气温 + private: + UIViewGroup *container_ = nullptr; + UIScrollView *scrollView1_ = nullptr; + UILabel *label1_ = nullptr; + UILabel *label2_ = nullptr; + UIImageView *image1_ = nullptr; + UILabel *label3_ = nullptr; + UILabel *label4_ = nullptr; + UILabel *label5_ = nullptr; + UIImageAnimatorView *imageAnimator1_ = nullptr; + bool viewInitStatus{false}; + }; +} // namespace OHOS +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherControlView.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherControlView.h new file mode 100644 index 000000000..488253a81 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherControlView.h @@ -0,0 +1,26 @@ +#ifndef WEATHER_CONTROL_VIEW_H +#define WEATHER_CONTROL_VIEW_H +/*该视图主要放在主视图*/ + +#include "components/root_view.h" +#include "components/ui_card_page.h" +#include "wearable_log.h" +#include "weather/include/WeatherView.h" +namespace OHOS +{ + class WeatherControlView : public UICardPage + { + public: + WeatherControlView(); + virtual ~WeatherControlView(); + bool InitView(void); + void PreLoad(void) override; + void UnLoad(void) override; + + private: + void ClearAll(void); + WeatherView *weatherView{nullptr}; + bool viewiInitStatus{false}; + }; +} +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherReportPresenter.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherReportPresenter.h new file mode 100644 index 000000000..a6049260a --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherReportPresenter.h @@ -0,0 +1,33 @@ +#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/nativeapp/nativeui/weather/include/WeatherReportView.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherReportView.h new file mode 100644 index 000000000..31c90825f --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherReportView.h @@ -0,0 +1,48 @@ +#ifndef WEATHER_REPORT_VIEW_H +#define WEATHER_REPORT_VIEW_H + +#include "BaseView.h" +#include "View.h" +#include "components/ui_view_group.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label.h" +#include "components/ui_image_animator.h" +namespace OHOS +{ + class WeatherReportPresenter; + class WeatherReportView : public View + { + + public: + 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); + + 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; + bool viewInitStatus{false}; + }; +} // namespace OHOS +#endif // WeatherReport_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherView.h b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherView.h new file mode 100644 index 000000000..24b8e64d4 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/include/WeatherView.h @@ -0,0 +1,79 @@ +#ifndef WEATHER_VIEW_H +#define WEATHER_VIEW_H + +#include "BaseView.h" +#include "View.h" + +#include "components/root_view.h" +#include "components/ui_view_group.h" +#include "components/ui_scroll_view.h" +#include "components/ui_label.h" +#include "components/ui_image_view.h" +#include "components/ui_image_animator.h" +#include "wearable_log.h" +#include "AppGroupView.h" +#include + +namespace OHOS +{ +#define weather_src "/user/res/weather/" + static const char *background = weather_src "WEATHER_BACKGROUND.bin"; + static const char *weather130x130[] = + { + weather_src "WEATHER_CLEAR-CLOUDY.bin", + weather_src "WEATHER_CLEAR-SUNNY.bin", + weather_src "WEATHER_DUSTSTORM.bin", + weather_src "WEATHER_FOGGY.bin", + weather_src "WEATHER_HAZE.bin", + weather_src "WEATHER_OVERCAST.bin", + weather_src "WEATHER_RAIN.bin", + weather_src "WEATHER_SNOW.bin", + weather_src "WEATHER_SUNNY.bin", + weather_src "WEATHER_SUNNY-CLOUNDY.bin", + weather_src "WEATHER_THUNDERSHOWER.bin", + weather_src "WEATHER_UNKNOWN.bin"}; +} + +namespace OHOS +{ + class WeatherView : public UIViewGroup + { + + public: + WeatherView(); + virtual ~WeatherView(); + static WeatherView *GetInstance(void); + bool InitPage(void); + bool InitView(void); + void ClearAll(); + bool GetInitViewState(void); + + private: + UILabel *InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight); + + private: + std::string GetTime(); + std::string GetWeatherImage(); + std::string GetWeatherTemperature(); + std::string GetWeatherDescription(); + std::string GetWeatherArea(); + std::string GetWeatherMaxAndMinTemperature(); + + std::string Time; // 时间 + std::string WeatherImag; // 天气图片 + std::string Temperature; // 温度 + std::string WeatherDescription; // 天气描述 + std::string WeatherArea; // 天气地区 + std::string MaxandMinTemperature; // 最高与最低气温 + private: + UIImageView *showWeatherImage = nullptr; // 显示天气图片 + UILabel *showCurrentTimeLabel{nullptr}; // 显示当前时间 + UILabel *showTemperatureLabel{nullptr}; // 显示天气温度 + UILabel *showWeatherDescriptionLabel{nullptr}; // 显示天气描述 + UILabel *showWeatherAreaLabel{nullptr}; // 显示天气地区 + UILabel *showMaxandMinTemperatureLabel{nullptr}; // 显示最高与最低气温 + bool viewInitStatus{false}; + }; +} // namespace OHOS + +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/src/FutureWeatherPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/FutureWeatherPresenter.cpp new file mode 100644 index 000000000..8c2d22b4a --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/FutureWeatherPresenter.cpp @@ -0,0 +1,72 @@ +#include "AppViewIDs.h" +#include "NativeAbility.h" + +#include "weather/include/FutureWeatherPresenter.h" + +namespace OHOS +{ + + // 当前Presenter属性实例化的内存指针 + static FutureWeatherPresenter *g_pFutureWeatherPresenter = nullptr; + + FutureWeatherPresenter::FutureWeatherPresenter() + { + + g_pFutureWeatherPresenter = this; + } + + FutureWeatherPresenter::~FutureWeatherPresenter() + { + + g_pFutureWeatherPresenter = nullptr; + } + + FutureWeatherPresenter *FutureWeatherPresenter::GetInstance() + { + + return g_pFutureWeatherPresenter; + } + + void FutureWeatherPresenter::OnStart() + { + + Presenter::OnStart(); + } + + void FutureWeatherPresenter::OnPause(void) + { + + Presenter::OnPause(); + } + + void FutureWeatherPresenter::OnResume(void) + { + + Presenter::OnResume(); + } + + void FutureWeatherPresenter::OnStop(void) + { + + Presenter::OnStop(); + } + + bool FutureWeatherPresenter::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_REPORT); // 未来天气界面从上往下滑进入气象报告界面 + } + return true; + } + + bool FutureWeatherPresenter::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/nativeapp/nativeui/weather/src/FutureWeatherView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/FutureWeatherView.cpp new file mode 100644 index 000000000..093399a4e --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/FutureWeatherView.cpp @@ -0,0 +1,200 @@ +#include "weather/include/FutureWeatherView.h" +#include "weather/include/FutureWeatherPresenter.h" + +#include "common/image_cache_manager.h" +#include "UiConfig.h" +#include "ui_resource_image.h" + +namespace OHOS +{ + + static FutureWeatherView *g_pFutureWeatherView{nullptr}; + + FutureWeatherView::FutureWeatherView() + { + + g_pFutureWeatherView = this; + } + + FutureWeatherView::~FutureWeatherView() + { + DeInitView(); + g_pFutureWeatherView = nullptr; + } + + FutureWeatherView *FutureWeatherView::GetInstance() + { + + return g_pFutureWeatherView; + } + + void FutureWeatherView::InitView() + { + if (scrollView1_ == nullptr) + { + 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); + scrollView1_->SetReboundSize(50); // 设置回弹大小 + scrollView1_->SetScrollBarCenter({200, 200}); + container_->Add(scrollView1_); + scrollView1_->SetVisible(true); + + if (label1_ == nullptr) + { + label1_ = new UILabel(); + } + label1_->SetPosition(179, 52); + label1_->Resize(108, 35); + label1_->SetViewId("label1"); + label1_->SetStyle(STYLE_TEXT_FONT, 30); + label1_->SetStyle(STYLE_LINE_HEIGHT, 35); + label1_->SetText("未来7天"); + label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label1_->SetRollSpeed(0); + label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + scrollView1_->Add(label1_); + label1_->SetVisible(true); + + if (list == nullptr) + { + list = new UIList(); + } + list->SetPosition(65, 140); + list->Resize(354, 520); + list->SetViewId("list1"); + list->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000); + list->SetReboundSize(50); // 设置回弹值 + if (listdata == nullptr) + { + listdata = new List(); + } + IconItemNode *list3data1 = new IconItemNode(); + list3data1->imagePath = "/user/res/weather/weather_sunny.bin"; + list3data1->txt = "周一 晴天 18°/24°"; + listdata->PushBack(list3data1); + + IconItemNode *list3data2 = new IconItemNode(); + list3data2->imagePath = "/user/res/weather/weather_clear-cloudy.bin"; + list3data2->txt = "周二 多云 19°/24°"; + listdata->PushBack(list3data2); + + IconItemNode *list3data3 = new IconItemNode(); + list3data3->imagePath = "/user/res/weather/weather_rain.bin"; + list3data3->txt = " 周三 阵雨 -11°/-12°"; + listdata->PushBack(list3data3); + + IconItemNode *list3data4 = new IconItemNode(); + list3data4->imagePath = "/user/res/weather/weather_sunny.bin"; + list3data4->txt = "周四 晴天 18°/22°"; + listdata->PushBack(list3data4); + + IconItemNode *list3data5 = new IconItemNode(); + list3data5->imagePath = "/user/res/weather/weather_foggy.bin"; + list3data5->txt = "周五 阴天 16°/20°"; + listdata->PushBack(list3data5); + + IconItemNode *list3data6 = new IconItemNode(); + list3data6->imagePath = "/user/res/weather/weather_thundershower.bin"; + list3data6->txt = " 周六 雷阵雨 10°/15°"; + listdata->PushBack(list3data6); + + IconItemNode *list3data7 = new IconItemNode(); + list3data7->imagePath = "/user/res/weather/weather_overcast.bin"; + list3data7->txt = "周日 阴 20°/24°"; + listdata->PushBack(list3data7); + if (listadapter == nullptr) + { + listadapter = new IconAdapter(); + } + listadapter->SetItemSize(355, 65); + listadapter->SetImageSize(65, 65); + listadapter->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 26); + listadapter->SetData(listdata); + list->SetAdapter(listadapter); + + // Add to scrollView1 + scrollView1_->Add(list); + list->SetVisible(true); + } + + void FutureWeatherView::DeInitView() + { + if (viewInitStatus == true) + { + container_->RemoveAll(); + scrollView1_->RemoveAll(); + delete label1_; + label1_ = nullptr; + + delete list; + list = nullptr; + + delete listadapter; + listadapter = nullptr; + + delete draglistener; + draglistener = nullptr; + + listdata->Clear(); + delete listdata; + listdata = nullptr; + + delete scrollView1_; + scrollView1_ = nullptr; + + delete container_; + container_ = nullptr; + } + } + + void FutureWeatherView::PreLoad(void) + { + if (!viewInitStatus) + { + InitView(); + viewInitStatus = true; + } + } + void FutureWeatherView::OnStart() + { + View::OnStart(); + if (container_ == nullptr) + { + container_ = new UIViewGroup(); + container_->Resize(466, 466); + container_->SetTouchable(true); + container_->SetDraggable(true); + draglistener = static_cast(FutureWeatherPresenter::GetInstance()); + container_->SetOnDragListener(draglistener); + } + PreLoad(); + RootView::GetInstance()->Add(container_); + } + + void FutureWeatherView::OnSetUpView() + { + + View::OnSetUpView(); + Draw(); + } + + void FutureWeatherView::OnTearDownView() + { + + View::OnTearDownView(); + return; + } + + void FutureWeatherView::OnStop() + { + + View::OnStop(); + RootView::GetInstance()->RemoveAll(); + return; + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/src/GetWeatherDataErrorPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/GetWeatherDataErrorPresenter.cpp new file mode 100644 index 000000000..6fffd0098 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/GetWeatherDataErrorPresenter.cpp @@ -0,0 +1,71 @@ +#include "AppViewIDs.h" +#include "NativeAbility.h" +#include "weather/include/GetWeatherDataErrorPresenter.h" + +namespace OHOS +{ + + // 当前Presenter属性实例化的内存指针 + static GetWeatherDataErrorPresenter *g_pGetWeatherDataErrorPresenter = nullptr; + + GetWeatherDataErrorPresenter::GetWeatherDataErrorPresenter() + { + + g_pGetWeatherDataErrorPresenter = this; + } + + GetWeatherDataErrorPresenter::~GetWeatherDataErrorPresenter() + { + + g_pGetWeatherDataErrorPresenter = nullptr; + } + + GetWeatherDataErrorPresenter *GetWeatherDataErrorPresenter::GetInstance() + { + + return g_pGetWeatherDataErrorPresenter; + } + + void GetWeatherDataErrorPresenter::OnStart() + { + + Presenter::OnStart(); + } + + void GetWeatherDataErrorPresenter::OnPause(void) + { + + Presenter::OnPause(); + } + + void GetWeatherDataErrorPresenter::OnResume(void) + { + + Presenter::OnResume(); + } + + void GetWeatherDataErrorPresenter::OnStop(void) + { + + Presenter::OnStop(); + } + + bool GetWeatherDataErrorPresenter::OnDrag(UIView &view, const DragEvent &event) + { + + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && + (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY())))) + { + NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER); + } + return true; + } + + bool GetWeatherDataErrorPresenter::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/nativeapp/nativeui/weather/src/GetWeatherDataErrorView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/GetWeatherDataErrorView.cpp new file mode 100644 index 000000000..55a43f67c --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/GetWeatherDataErrorView.cpp @@ -0,0 +1,162 @@ +#include "weather/include/GetWeatherDataErrorView.h" +#include "weather/include/GetWeatherDataErrorPresenter.h" +#include "UiConfig.h" + +/* 天气获取数据失败后会调用该视图*/ +namespace OHOS +{ + + static GetWeatherDataErrorView *g_pGetWeatherDataErrorView{nullptr}; + + GetWeatherDataErrorView::GetWeatherDataErrorView() + { + + g_pGetWeatherDataErrorView = this; + } + + GetWeatherDataErrorView::~GetWeatherDataErrorView() + { + if (viewInitStatus == true) + { + DeInitView(); + } + g_pGetWeatherDataErrorView = nullptr; + } + + GetWeatherDataErrorView *GetWeatherDataErrorView::GetInstance() + { + + return g_pGetWeatherDataErrorView; + } + + void GetWeatherDataErrorView::InitView() + { + // Add ScrollView to App + if (scrollView1_ == nullptr) + { + scrollView1_ = new UIScrollView(); + } + scrollView1_->SetPosition(0, 0); + scrollView1_->Resize(466, 466); + scrollView1_->SetViewId("scrollView1"); + scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + container_->Add(scrollView1_); + scrollView1_->SetVisible(true); + + // Add Label to App + if (label1_ == nullptr) + { + label1_ = new UILabel(); + } + label1_->SetPosition(113, 268); + label1_->Resize(240, 70); + label1_->SetViewId("label1"); + label1_->SetStyle(STYLE_TEXT_FONT, 30); + label1_->SetStyle(STYLE_LINE_HEIGHT, 35); + + // Set additional property + label1_->SetText("未获取到天气信息\n请前往APP更新"); + label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label1_->SetRollSpeed(0); + label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + // Add to scrollView1 + scrollView1_->Add(label1_); + label1_->SetVisible(true); + + // Add ImageView to App + if (image1_ == nullptr) + { + image1_ = new UIImageView(); + } + image1_->SetPosition(168, 127); + image1_->Resize(130, 130); + image1_->SetViewId("image1"); + image1_->SetSrc("/user/res/weather/WEATHER_UNKNOWN.bin"); + + // Add to scrollView1 + scrollView1_->Add(image1_); + image1_->SetVisible(true); + } + + void GetWeatherDataErrorView::DeInitView() + { + container_->RemoveAll(); + scrollView1_->RemoveAll(); + if (label1_ != nullptr) + { + delete label1_; + label1_ = nullptr; + } + if (image1_ != nullptr) + { + delete image1_; + image1_ = nullptr; + } + if (scrollView1_ != nullptr) + { + delete scrollView1_; + scrollView1_ = nullptr; + } + if (container_ != nullptr) + { + delete container_; + container_ = nullptr; + } + } + + void GetWeatherDataErrorView::PreLoad(void) + { + if (!viewInitStatus) + { + InitView(); + viewInitStatus = true; + } + } + void GetWeatherDataErrorView::OnStart() + { + container_ = new UIViewGroup(); + if (container_ == nullptr) + { + return; + } + // container_容器属性 扩展 + container_->SetPosition(0, 0); + container_->SetWidth(Screen::GetInstance().GetWidth()); + container_->SetHeight(Screen::GetInstance().GetHeight()); + + draglistener = static_cast(GetWeatherDataErrorPresenter::GetInstance()); + if (draglistener == nullptr) + { + return; + } + container_->SetOnDragListener(draglistener); + container_->SetTouchable(true); + container_->SetDraggable(true); + PreLoad(); + RootView::GetInstance()->Add(container_); + } + + void GetWeatherDataErrorView::OnSetUpView() + { + + View::OnSetUpView(); + Draw(); + } + + void GetWeatherDataErrorView::OnTearDownView() + { + + View::OnTearDownView(); + return; + } + + void GetWeatherDataErrorView::OnStop() + { + + View::OnStop(); + RootView::GetInstance()->RemoveAll(); + return; + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherPresenter.cpp new file mode 100644 index 000000000..d065faf1f --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherPresenter.cpp @@ -0,0 +1,76 @@ +#include "AppViewIDs.h" +#include "NativeAbility.h" +#include "weather/include/MainWeatherPresenter.h" + +namespace OHOS +{ + + // 当前Presenter属性实例化的内存指针 + static MainWeatherPresenter *g_pMainWeatherPresenter = nullptr; + + MainWeatherPresenter::MainWeatherPresenter() + { + + g_pMainWeatherPresenter = this; + } + + MainWeatherPresenter::~MainWeatherPresenter() + { + + g_pMainWeatherPresenter = nullptr; + } + + MainWeatherPresenter *MainWeatherPresenter::GetInstance() + { + + return g_pMainWeatherPresenter; + } + + void MainWeatherPresenter::OnStart() + { + + Presenter::OnStart(); + } + + void MainWeatherPresenter::OnPause(void) + { + + Presenter::OnPause(); + } + + void MainWeatherPresenter::OnResume(void) + { + + Presenter::OnResume(); + } + + void MainWeatherPresenter::OnStop(void) + { + + Presenter::OnStop(); + } + + 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())))) + { + 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; + } + + bool MainWeatherPresenter::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/nativeapp/nativeui/weather/src/MainWeatherView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherView.cpp new file mode 100644 index 000000000..bf37ce375 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherView.cpp @@ -0,0 +1,285 @@ +#include "weather/include/MainWeatherView.h" +#include "weather/include/MainWeatherPresenter.h" +#include "UiConfig.h" +/* +当至天气界面时,主动获取最新天气数据。 +(此操作静默将进行,获取到则立刻更新显示,获取不到则重试 +重试3次无果结束更新) +在加载该视图时,需要加载:1时间,2天气图片,3温度,4天气描述,5,地点,6,温度范围 +*/ + +namespace OHOS +{ + static ImageAnimatorInfo g_imageAnimator1Info[2] = { + {PNG_ANIMATOR1_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH}, + {PNG_ANIMATOR2_IMAGE, {213, 400}, 40, 40, IMG_SRC_FILE_PATH}, + }; + static MainWeatherView *g_pMainWeatherView{nullptr}; + + MainWeatherView::MainWeatherView() + { + Time = GetTime(); + WeatherImag = GetWeatherImage(); + Temperature = GetWeatherTemperature(); + WeatherDescription = GetWeatherDescription(); + WeatherArea = GetWeatherArea(); + MaxandMinTemperature = GetWeatherMaxAndMinTemperature(); + g_pMainWeatherView = this; + } + + MainWeatherView::~MainWeatherView() + { + if (viewInitStatus == true) + { + DeInitView(); + } + g_pMainWeatherView = nullptr; + } + + MainWeatherView *MainWeatherView::GetInstance() + { + return g_pMainWeatherView; + } + + // 获取时间 + std::string MainWeatherView::GetTime() + { + srand(time(0)); + std::string area[] = {"23:54", "12:00", "7:25"}; + int num = rand() % (sizeof(area) / sizeof(area[0])); + return area[1]; + } + + // 获取天气图片 + std::string MainWeatherView::GetWeatherImage() + { + int size = sizeof(weather130x130) / sizeof(weather130x130[0]); + return weather130x130[8]; + } + // 获取温度 + + std::string MainWeatherView::GetWeatherTemperature() + { + // 使用系统时间作为种子 + srand(time(0)); + int temperature = rand() % 50; + return std::to_string(22) + "°"; + } + // 获取天气描述 + + std::string MainWeatherView::GetWeatherDescription() + { + srand(time(0)); + std::string area[] = {"晴", "雨夹雪", "雷阵雨伴有冰雹"}; + int num = rand() % (sizeof(area) / sizeof(area[0])); + return area[0]; + } + // 获取天气地区 + + std::string MainWeatherView::GetWeatherArea() + { + srand(time(0)); + std::string area[] = {"北京市东城区", "深圳市保安区"}; + int num = rand() % (sizeof(area) / sizeof(area[0])); + return area[1]; + } + // 获取最高气温和最低气温 + + std::string MainWeatherView::GetWeatherMaxAndMinTemperature() + { + // 使用系统时间作为种子 + srand(time(0)); + // 生成随机数 + int maxtemperature = 20 + rand() % 40; // 最高气温:20°~60° + int mintemperature = -5 + rand() % 20; + std::string MaxandMinTemperature = "最高" + std::to_string(22) + "°" + " " + "最低" + std::to_string(18) + "°"; + return MaxandMinTemperature; + } + + // 初始化标签 + UILabel *MainWeatherView::InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight) + { + UILabel *label = new UILabel(); + label->SetPosition(x, y); + label->Resize(200, 30); + label->SetViewId(id); + label->SetStyle(STYLE_TEXT_FONT, textfont); + label->SetStyle(STYLE_LINE_HEIGHT, lineheight); + label->SetText(text); + label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label->SetRollSpeed(0); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, textfont); + label->SetVisible(true); + return label; + } + + void MainWeatherView::InitView(void) + { + if (container_ == nullptr) + { + return; + } + // Add ScrollView to App + if (scrollView1_ == nullptr) + { + scrollView1_ = new UIScrollView(); + } + scrollView1_->SetPosition(0, 0); + scrollView1_->Resize(466, 466); + scrollView1_->SetViewId("scrollView1"); + scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + scrollView1_->SetVerticalScrollState(false); // 设置纵向是否可滚动。 + scrollView1_->SetHorizontalScrollState(false); // 设置横向是否可滚动。 + container_->Add(scrollView1_); + scrollView1_->SetVisible(true); + /* -------------------------------------------------------------------------- */ + if (image1_ == nullptr) + { + image1_ = new UIImageView(); + } + image1_->SetPosition(109, 124); + image1_->Resize(100, 100); + image1_->SetViewId("image1"); + image1_->SetSrc(WeatherImag.c_str()); + scrollView1_->Add(image1_); + image1_->SetVisible(true); + /* -------------------------------------------------------------------------- */ + label1_ = InitLabel(185, 52, Time.c_str(), "label1", 40, 47); + scrollView1_->Add(label1_); + /* -------------------------------------------------------------------------- */ + label2_ = InitLabel(249, 126, Temperature.c_str(), "label2", 100, 125); + scrollView1_->Add(label2_); + /* -------------------------------------------------------------------------- */ + label3_ = InitLabel(111, 264, WeatherDescription.c_str(), "label3", 35, 41); + scrollView1_->Add(label3_); + /* -------------------------------------------------------------------------- */ + label4_ = InitLabel(155, 330, WeatherArea.c_str(), "label4", 26, 30); + label4_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + scrollView1_->Add(label4_); + /* -------------------------------------------------------------------------- */ + label5_ = InitLabel(158, 368, MaxandMinTemperature.c_str(), "label5", 20, 23); + label5_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + scrollView1_->Add(label5_); + /* -------------------------------------------------------------------------- */ + #if 0 + // Add ImageAnimatorView to App + if (imageAnimator1_ == nullptr) + { + imageAnimator1_ = new UIImageAnimatorView(); + } + imageAnimator1_->SetPosition(213, 400); + imageAnimator1_->Resize(40, 40); + imageAnimator1_->SetViewId("imageAnimator1"); + imageAnimator1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + + // Set additional property + imageAnimator1_->SetImageAnimatorSrc(g_imageAnimator1Info, 2, 200); + imageAnimator1_->SetTimeOfPause(200); + imageAnimator1_->SetRepeatTimes(1); + imageAnimator1_->SetReverse(true); + imageAnimator1_->Start(); + + // Add to scrollView1 + scrollView1_->Add(imageAnimator1_); + imageAnimator1_->SetVisible(true); + #endif + } + + void MainWeatherView::DeInitView() + { + container_->RemoveAll(); + scrollView1_->RemoveAll(); + if (label1_ != nullptr) + { + delete label1_; + label1_ = nullptr; + } + if (label2_ != nullptr) + { + delete label2_; + label2_ = nullptr; + } + if (image1_ != nullptr) + { + delete image1_; + image1_ = nullptr; + } + if (label3_ != nullptr) + { + delete label3_; + label3_ = nullptr; + } + if (label4_ != nullptr) + { + delete label4_; + label4_ = nullptr; + } + if (label5_ != nullptr) + { + delete label5_; + label5_ = nullptr; + } + if (imageAnimator1_ != nullptr) + { + imageAnimator1_->Stop(); // 视图退出后动画停止 + delete imageAnimator1_; + imageAnimator1_ = nullptr; + } + if (scrollView1_ != nullptr) + { + delete scrollView1_; + scrollView1_ = nullptr; + } + if (container_ != nullptr) + { + delete container_; + container_ = nullptr; + } + } + + void MainWeatherView::PreLoad(void) + { + if (!viewInitStatus) + { + InitView(); + viewInitStatus = true; + } + } + void MainWeatherView::OnStart() + { + View::OnStart(); + if (container_ == nullptr) + { + container_ = new UIViewGroup(); + container_->Resize(466, 466); + container_->SetTouchable(true); + container_->SetDraggable(true); + UIView::OnDragListener *draglistener = static_cast(MainWeatherPresenter::GetInstance()); + container_->SetOnDragListener(draglistener); + } + PreLoad(); + RootView::GetInstance()->Add(container_); + } + + void MainWeatherView::OnSetUpView() + { + View::OnSetUpView(); + Draw(); + } + + void MainWeatherView::OnTearDownView() + { + + View::OnTearDownView(); + return; + } + + void MainWeatherView::OnStop() + { + + View::OnStop(); + RootView::GetInstance()->RemoveAll(); + return; + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherControlView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherControlView.cpp new file mode 100644 index 000000000..43affebe3 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherControlView.cpp @@ -0,0 +1,63 @@ +#include "weather/include/WeatherControlView.h" + +namespace OHOS +{ + WeatherControlView::WeatherControlView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherControlView::WeatherControlView()"); + SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + } + + WeatherControlView::~WeatherControlView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherControlView::~WeatherControlView()"); + ClearAll(); + } + + void WeatherControlView::ClearAll(void) + { + if (viewiInitStatus == true) + { + RemoveAll(); + if (weatherView != nullptr) + { + delete weatherView; + weatherView = nullptr; + } + } + } + + bool WeatherControlView::InitView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherControlView::InitView()"); + weatherView = new WeatherView(); + if (weatherView == nullptr) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new mainweatherView fail!"); + return false; + } + if (weatherView->InitPage() == false) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView->InitPage() == false!"); + return false; + } + Add(weatherView); + viewiInitStatus = true; + return true; + } + + void WeatherControlView::PreLoad(void) + { + if (!viewiInitStatus) + { + InitView(); + viewiInitStatus = true; + } + } + + void WeatherControlView::UnLoad(void) + { + // Weather's usage scenes is complicated, so we do not release it's resources inner slice. + } + +} \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherReportPresenter.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherReportPresenter.cpp new file mode 100644 index 000000000..22ef28cdb --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherReportPresenter.cpp @@ -0,0 +1,78 @@ +#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/nativeapp/nativeui/weather/src/WeatherReportView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherReportView.cpp new file mode 100644 index 000000000..9207a8995 --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherReportView.cpp @@ -0,0 +1,427 @@ +#include "weather/include/WeatherReportView.h" +#include "weather/include/WeatherReportPresenter.h" +#include "UiConfig.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() + { + + g_pWeatherReportView = this; + } + + WeatherReportView::~WeatherReportView() + { + if (viewInitStatus == true) + { + DeInitView(); + } + g_pWeatherReportView = nullptr; + } + + WeatherReportView *WeatherReportView::GetInstance() + { + + return g_pWeatherReportView; + } + + void WeatherReportView::InitView() + { + if (container_ == nullptr) + { + 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); + } + + // Add ScrollView to App + if (scrollView1_ == nullptr) + { + 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); + + // Set additional property + + // Add to rootView + container_->Add(scrollView1_); + scrollView1_->SetVisible(true); + + // 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(); + } + 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() + { + 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) + { + delete label6_; + label6_ = nullptr; + } + if (label7_ != nullptr) + { + delete label7_; + label7_ = nullptr; + } + if (label8_ != nullptr) + { + delete label8_; + label8_ = nullptr; + } + if (label9_ != nullptr) + { + delete label9_; + label9_ = nullptr; + } + if (label10_ != nullptr) + { + delete label10_; + label10_ = nullptr; + } + if (label11_ != nullptr) + { + delete label11_; + label11_ = nullptr; + } + if (scrollView1_ != nullptr) + { + delete scrollView1_; + scrollView1_ = nullptr; + } + if (container_ != nullptr) + { + container_->RemoveAll(); + delete container_; + container_ = nullptr; + } + } + + void WeatherReportView::PreLoad(void) + { + if (!viewInitStatus) + { + InitView(); + viewInitStatus = true; + } + } + void WeatherReportView::OnStart() + { + View::OnStart(); + PreLoad(); + RootView::GetInstance()->Add(container_); + } + + void WeatherReportView::OnSetUpView() + { + + View::OnSetUpView(); + Draw(); + } + + void WeatherReportView::OnTearDownView() + { + + View::OnTearDownView(); + return; + } + + void WeatherReportView::OnStop() + { + + View::OnStop(); + RootView::GetInstance()->RemoveAll(); + return; + } +} \ No newline at end of file diff --git a/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherView.cpp new file mode 100644 index 000000000..273ba54de --- /dev/null +++ b/code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherView.cpp @@ -0,0 +1,242 @@ +#include "weather/include/WeatherView.h" +#include "UiConfig.h" + +/* +当至天气界面时,主动获取最新天气数据。 +(此操作静默将进行,获取到则立刻更新显示,获取不到则重试 +重试3次无果结束更新) +在加载该视图时,需要加载:1时间,2天气图片,3温度,4天气描述,5,地点,6,温度范围 +*/ + +namespace OHOS +{ + static WeatherView *g_pWeatherView{nullptr}; + WeatherView::WeatherView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::WeatherView()"); + SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + Time = GetTime(); + WeatherImag = GetWeatherImage(); + Temperature = GetWeatherTemperature(); + WeatherDescription = GetWeatherDescription(); + WeatherArea = GetWeatherArea(); + MaxandMinTemperature = GetWeatherMaxAndMinTemperature(); + g_pWeatherView = this; + } + + WeatherView::~WeatherView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::~WeatherView()"); + ClearAll(); + g_pWeatherView = nullptr; + } + + void WeatherView::ClearAll() + { + if (viewInitStatus == true) + { + RemoveAll(); + if (showCurrentTimeLabel != nullptr) + { + delete showCurrentTimeLabel; + showCurrentTimeLabel = nullptr; + } + if (showTemperatureLabel != nullptr) + { + delete showTemperatureLabel; + showTemperatureLabel = nullptr; + } + if (showWeatherImage != nullptr) + { + delete showWeatherImage; + showWeatherImage = nullptr; + } + if (showWeatherDescriptionLabel != nullptr) + { + delete showWeatherDescriptionLabel; + showWeatherDescriptionLabel = nullptr; + } + if (showWeatherAreaLabel != nullptr) + { + delete showWeatherAreaLabel; + showWeatherAreaLabel = nullptr; + } + if (showMaxandMinTemperatureLabel != nullptr) + { + delete showMaxandMinTemperatureLabel; + showMaxandMinTemperatureLabel = nullptr; + } + } + } + + WeatherView *WeatherView::GetInstance() + { + return g_pWeatherView; + } + + // 获取时间 + std::string WeatherView::GetTime() + { + srand(time(0)); + std::string area[] = {"23:54", "12:00", "7:25"}; + int num = rand() % (sizeof(area) / sizeof(area[0])); + return area[1]; + } + + // 获取天气图片 + std::string WeatherView::GetWeatherImage() + { + int size = sizeof(weather130x130) / sizeof(weather130x130[0]); + return weather130x130[8]; + } + // 获取温度 + + std::string WeatherView::GetWeatherTemperature() + { + // 使用系统时间作为种子 + srand(time(0)); + int temperature = rand() % 50; + return std::to_string(22) + "°"; + } + // 获取天气描述 + + std::string WeatherView::GetWeatherDescription() + { + srand(time(0)); + std::string area[] = {"晴", "雨夹雪", "雷阵雨伴有冰雹"}; + int num = rand() % (sizeof(area) / sizeof(area[0])); + return area[0]; + } + // 获取天气地区 + + std::string WeatherView::GetWeatherArea() + { + srand(time(0)); + std::string area[] = {"北京市东城区", "深圳市保安区"}; + int num = rand() % (sizeof(area) / sizeof(area[0])); + return area[1]; + } + // 获取最高气温和最低气温 + + std::string WeatherView::GetWeatherMaxAndMinTemperature() + { + // 使用系统时间作为种子 + srand(time(0)); + // 生成随机数 + int maxtemperature = 20 + rand() % 40; // 最高气温:20°~60° + int mintemperature = -5 + rand() % 20; + std::string MaxandMinTemperature = "最高" + std::to_string(22) + "°" + " " + "最低" + std::to_string(18) + "°"; + return MaxandMinTemperature; + } + + // 初始化标签 + UILabel *WeatherView::InitLabel(int x, int y, const char *text, const char *id, int textfont, int lineheight) + { + UILabel *label = new UILabel(); + if (label == nullptr) + { + return nullptr; + } + label->SetPosition(x, y); + label->Resize(200, 30); + label->SetViewId(id); + label->SetStyle(STYLE_TEXT_FONT, textfont); + label->SetStyle(STYLE_LINE_HEIGHT, lineheight); + label->SetText(text); + label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label->SetRollSpeed(0); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, textfont); + label->SetVisible(true); + return label; + } + + // 初始化天气页面 + bool WeatherView::InitPage(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " WeatherView::InitPage()"); + /* -------------------------------------------------------------------------- */ + showWeatherImage = new UIImageView(); + if (showWeatherImage == nullptr) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherImage fail!"); + return false; + } + showWeatherImage->SetPosition(109, 124, 100, 100); + showWeatherImage->SetSrc(WeatherImag.c_str()); + /* -------------------------------------------------------------------------- */ + showCurrentTimeLabel = InitLabel(185, 52, Time.c_str(), "showCurrentTimeLabel", 40, 47); + if (showCurrentTimeLabel == nullptr) + { + WEARABLE_LOGD(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!"); + return false; + } + /* -------------------------------------------------------------------------- */ + UILabel *showWeatherDescriptionLabel = new UILabel(); + showWeatherDescriptionLabel->SetPosition(83, 264,300,40); + showWeatherDescriptionLabel->SetViewId("showWeatherDescriptionLabel"); + showWeatherDescriptionLabel->SetStyle(STYLE_TEXT_FONT, 35); + showWeatherDescriptionLabel->SetStyle(STYLE_LINE_HEIGHT, 41); + showWeatherDescriptionLabel->SetText(WeatherDescription.c_str()); + showWeatherDescriptionLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + showWeatherDescriptionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + showWeatherDescriptionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35); + if (showWeatherDescriptionLabel == nullptr) + { + WEARABLE_LOGD(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!"); + return false; + } + showWeatherAreaLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + /* -------------------------------------------------------------------------- */ + showMaxandMinTemperatureLabel = InitLabel(158, 368, MaxandMinTemperature.c_str(), "showMaxandMinTemperatureLabel", 20, 23); + if (showMaxandMinTemperatureLabel == nullptr) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showMaxandMinTemperatureLabel fail!"); + return false; + } + showMaxandMinTemperatureLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + + /* -------------------------------- 将组件添加到根视图 ------------------------------- */ + Add(showWeatherImage); + Add(showCurrentTimeLabel); + Add(showTemperatureLabel); + Add(showWeatherDescriptionLabel); + Add(showWeatherAreaLabel); + Add(showMaxandMinTemperatureLabel); + viewInitStatus = true; + return true; + } + + bool WeatherView::InitView() + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::InitView"); + if (InitPage() == false) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitPage fail"); + return false; + } + SetDraggable(true); + SetTouchable(true); + return true; + } + + // 获取视图初始化状态 + bool WeatherView::GetInitViewState(void) + { + return viewInitStatus; + } +} \ No newline at end of file diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/APPLIST_COMPASS_IMAGE.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/APPLIST_COMPASS_IMAGE.bin index d1fa4b53c2c0864843ba8e6e3b37595effbf292a..381dbe9d6ea540aba4d6d1364837b1c8a83cd5b0 100644 GIT binary patch literal 4504 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 b8}uIFmfWf?%&1DW#{? literal 12824 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 gr-kxNnhS+ztUqAWwm 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%0A*Bb?%%Y?ernEm8#On%r&@ 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 Jc=LO_`5%_{{AvII literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_CLEAR-CLOUDY.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_CLEAR-CLOUDY.bin new file mode 100644 index 0000000000000000000000000000000000000000..f253a7ea1a434625114f34c1a25c4367daa4e03f GIT binary patch literal 11640 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 K@Pq$sKlndlz`fD{ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_CLEAR-SUNNY.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_CLEAR-SUNNY.bin new file mode 100644 index 0000000000000000000000000000000000000000..150f9023d2ab5edb06cecb5e396e6e269ca75575 GIT binary patch literal 11640 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 Tls)h)H2cBq2eTjk^?vvViKFH? literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_DUSTSTORM.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_DUSTSTORM.bin new file mode 100644 index 0000000000000000000000000000000000000000..f1a9c607e1c64acfbf95306bb0296bf1523e593e GIT binary patch literal 11640 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 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_HAZE.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_HAZE.bin new file mode 100644 index 0000000000000000000000000000000000000000..a77f3a7ad6ad49b236b0856cc2010cdbfccab49c GIT binary patch literal 11640 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 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_HUMIDITY.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_HUMIDITY.bin new file mode 100644 index 0000000000000000000000000000000000000000..678ff935d4f9532a262a36409dc94de3542a5093 GIT binary patch literal 2424 zcmd5-ZD=Gqxz->*MQzSxhm!Ox&j$F7ov@MrU zKHv3e*Mq|%K#)q@2`mPh1Ap$k@J@z&Gk1m;{FlChcV_9B$7ZoTKdEs>LbEaz>55hdrat7b|;Ggrq!!mjGE7dGzAvzrPp6GWrZ+PJSmcLQVN3L z&UX<*xD-DC3OBDr2X{$MtS5CsWw#>843$P@u$#^z&PU{2k|!RgIf$y4PQos@}aG-8U%aF=kGg(^>UP5=)tVeSLdmVhp#QA=&I|R;A zXt+N;pAjw@AFcTObiynG1BKsX+UWZcyCY8>BeC6i+X@E&?v)KcetFhw#a4#8UL5|! zD1W)}in#Z>ScRfz+sNzIPTFjgug#xlM#HoF2M?u*GmS|4HqVQvuNH(D%D`p$)rik1 z?v3a3y`toc97NiTDjIQbndo~X>FP1DCch$L<=`;SSg@o^0()!Pj!2^O4?x%=wYo12 zwSVg|;(yrjVA*q#RHKd2ikdxuJrEp!m4CCQrRTs6)$jh_GWn@C6U5nH?$1Bt|G~r7 I_h0k<4Zszx!Tx~! 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 aj{J4xuOojQ`RmAEJApU&?lmbxTRR3eJT z1)&zhB4WS@h)5}oAy7nq5kh2A#54&h#Y~DJEJcJ$?wruYd6++(K3%4r$IBC*=gs}j zx%a&HJ@5COlM5ICB*H)3hLlK(oB@73o(|(9$M+b=U*H#fSQ&Vs2P*?F=EI-O4+tqY zP*8<#!g!n!2@^V#?)iSReLMi&Bcf*2>(Q))+aU&bfV>VP{%qs>t?!o=mV{<8y8U|H zL5-EbnmgLKKsFso_Lz}(c(xP#axXva+`S?|nUQzt>{+4~i;ul=pfeZdwwf z=4G!m3iWiTC!cycxq@F^eR0AOuy-HPvJW`f1K@f`j{>mWuG1X=9w7YB^Y0p(gaUel zxXU_T1b|@Uh3m5(+K=<`ol$lPa|aUdpvC2~uSuWIH{>_FIld|;o`}!QP^)S;baG~4 z03f#f_@WGr3fVe*$erj+mv{%rTYBDUdf2~T$~n0?rV%^L%@%4}5MGx!3FU$6YMSS1 zFn}+^ao)gK&^N+&%$-o<|0v%KUuWf*R7ddAX9rz*I)9W+JbAD%Q`hQI`hH4?j80kV zJ+P>(WO+JXAzAYJ53zE_fU2U(C6W~gQ`Yx0!5;v}jd;G>Qej%Kxz-E@ZpQ%ea zAc@BpZ=i<}yowfE_5@2B6w!$$OJMB}ZnZvZA+* zr+vsMDMA5dX!29XDum+q-}i4v>UJp;tMj!7xIM(uUx$p5fe+ZYby-;_)pEd`pO#s zn^=}#UukSd(i$v7>QJcX>GFnq8`3K(Rng4P&g}poNLpo=vH)oN!IF9sq_+dr(H^5;DQBta?=`otUb`AgOZq~C zqB8X7oY&u#cy}%;(MLsW=*KHKnQM11_1?0m;dC#F>pX9o=9_5G9D=M=S!XizNc9)C zP2Nlr6EzY;gV`8%^U&REz3)Rln`_n0W)pHiUDmanW~0TFwQ5z5DdB*2Fx&@8l6b3a zML9jZ-pTQ%L+YIe=c00{T4C-)3@y@Cjy~sd&>BfI>~D3nCL=F3s{rDP=K4+}D|+}! znynQ}%N2E<23EB0*k+89%&LjYBpy#*(B|SBN=+0b|JrKtPZEJw5fmVR zV9X4A)U31Au{&ZpoR54wY=kN0BAr^c|Fwg23~Yi8R#Yx@J({$0P%>@buJv%fmk4Xi zjP3D9CgumInf_-`>4={Cxv|r)mCS(tsa|Bf9_i*)elxzsU}A`g&GkA}pNa7%_u9gN zzx#=a>Slwk-@NUzS!#)x3YgU9kbJ?O&=temRRt@ua>T?|g}$Z7ToS+^`gCkUZw{)g z)3o-Ov*QOQM`9FbCRH6$m=&39uq=3-e28~52d$H;AphG|Sn{HYqR<>vCQ(5CMVhX( zhqjk4Ysq$d)Ru>^&=!?m1NqxJ^Qu^P zV}OCFTiSJfeXvyK6%64x18Y&~^nH-uTT*T0GKf`5y`~4^re$9=jg4nuN`*#k<@fP2 z{M^`8EL0)awV2JwDcwcg$Hb34Y!o$C|54`frMhF>B3A8}?Ph#0mm9>jZL|ljk)o{Y zep7A%;5Yxs*fyJ(Ut7N{{;|1%w}Pg?RCe`B-ia{;uQ~Ek!E(~T_|@5}^|pi@G*4Jr z-k}?erLn#4or8RpqyT*6;bEAYbz46zi1K^NAwqdM7?r zBsS09<)WmnWQwGFNG=GhUUu^=Olk`g>OVRB^CZii`lQbx-_07GwZDR*&H`G&PkhsH z1zux+slkLgADV`{TR&M`6!FKDay5J&j0fCDd^-{vj5N!we&g#qW9_mX>q)`sJF0St z6abptvH&{e7q9>Pt@<5T>apnKqc-nlpP0JDTAzybI>ggBYl__pj|4CAdqwLSPd=Jn zdHejupm|KHA*4tU70U5q(^ir>c3P~mR1Wh;LMwgVs@ea*VE&gV<)%)Cgvq%-^GOnu zx;CV+I5M=5Q0QBZoF_y7lw18Yj|K|t+P?8rQYQx2H?fkrZ%TWhrnt}aIX+?@Cql}= znpHXt)Gr;0#<1w1XL#k?=Mu2-&*Jfe!+#yW=^56!uS9LYGmPu{VL|>c7(d8DffiFY zw_E#vtbK2FxEm5#e1`8YPde(d46yQR*9Y!Kx`I*wPc0F7# zsWuf9P_iFI@0r53aNlBUg}1VroO94pQJu`t(ZB1k?ppW7WQljXttlbyb(%1LP0RHD z&00(*Q9^%6czhu+B5-*MlgddftcpApo3|^Cb2xTWFarGo`eXce@33+F?0gpb!~97A4*W53zO1sNoi)teTSVaj7FtwTBZYpusuCBAMd%r{ zTx{jH$Grdaz-k8@=nvoP*D|?8dzpQh1@m{ayt5ODm~OgcaO1;zwHor9+}-Ba7C_k( z1LtGC)gLR|Mj|3ueYbXZ*La2Uq_b>Hh*DI+g z$jYs0AKCwK0<3L0*Z=R}v?)9cJlGwzKS<`;UUx#tOn+2RD1B@Rfc}sh($Ew~!lT)n zHWlO%nADBc;w*^Gx{t)iPLPyTVYR$?L$aCw7Gg%IP=9qJ`5Xb<9&BPa(H~RPsUg1% zZc3bFc_o^IwkoXtr|de?mHPF&$D%9X-au{+@lCwp>n5 zCb=&`Y&QhrCbkMwQmjhJ?m=M0}U9XtVy znh9s@d6$TE&&4B~fa|mT03pNrTZ^e+JvP{r@ZhX} z4Ddm;n5M<3@9#r~H!9M{c@bEsUTvMv$a3jkvDg=lL<~BU0qSwMC1Bff8dyT?(f33C zkeqp6cI54Z^>oU@nx@?(oXt7M7KsR{kk4z7&qE(*EJtyi6GbM2wt+-A);o?*gDk)M z?`KTk2A9PtGa=j7qZrgg6z1&XAm9WUJ}6{Wt(<^H0`1Z~Tmm<}a>>-eku3&2&7b=$pzCR5j5@LEU2+gQ0h?-d{8|eN4>?CvdWFbo^)>$q%@jo}H7AUKce z%&JP4wVr;S7huem1Pm^2BN%s<=jSn<-2B7m*kti20ZM8xj7?LDpj zv1$_G!%8p&5I?Bz1ZG;w6*yC1^#mW-ADyqCdwkyLhx>1f(kyU2+2r>Tzv||^ z(c^h}?}uK|Z|{A_XswTUl{6jMj`fh{#9ODh$G=qX;ypTkG-hO^G(vyvwcC$4(G)#X z8{>tISMN~B>0@jFtqE@*9sg&?{;a}ddy@dj+BSub(nAJa|8WG?r-$uFet(A+J9>O0 z>%*$g$&Y?mANmW(eb14y(=rjLz`o+Io^kcfL0M+A>Tq{1bMil kwEzU*(dhUW_{IBmFW#?v@qXcmJG^+m@OR%Y`Mv%3pNgPqK>z>% literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SNOW.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SNOW.bin new file mode 100644 index 0000000000000000000000000000000000000000..27d521ee216c7f1be6bfe422c2e3d642df92df02 GIT binary patch literal 11640 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 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SUNNY-CLOUNDY.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SUNNY-CLOUNDY.bin new file mode 100644 index 0000000000000000000000000000000000000000..4460e9254b39d0a831faaa97e44ad4cba9ed7131 GIT binary patch literal 11640 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 McjJEW@9hWw1Qo$mDgXcg literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SUNNY.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_SUNNY.bin new file mode 100644 index 0000000000000000000000000000000000000000..75c954299ac4473988231a5e9c3411574131cfc1 GIT binary patch literal 11640 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 Ty{-3;_4MxlEB?Xnzsv96c&10{ literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_THUNDERSHOWER.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_THUNDERSHOWER.bin new file mode 100644 index 0000000000000000000000000000000000000000..4954d5ee1f6fde1c6b0c4104078048d1b17c7d4b GIT binary patch literal 11640 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 Oe_!~=zc2Zt^Y7p7EzrP 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 Q%=E*VeyAhxzt4kz0vHwDivR!s literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_UVI.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_UVI.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a1e8cee20d2c4ddf555ab32189ecdb79a858a74 GIT binary patch literal 2424 zcmds2U2GIp7(Mf|^zQ5+`_m>wVs~6>Xw`>lQ=pK_&dfdtF%qV={6+2h6QYSt7UGME zrk6rs7fjiOkVs<4WHnJpOw-sHP$ILnQVKL-6JxY5E(;HuM%`Mqi?$u_V*9c@tecHK z_|4PFx%bYw-}%lAbfA+xjzBsKJ08Ju%`Z6j>Tm2g|2M4fKP)5X+?|f(Vd)U{{nsCT z{=_&(4(f=jGX1yjt53Y((*VuZazUyBdZK-Ob}P33dD{U$v@jlD7y6KOeuM(U_kc(`iCucii0&<*% zI1WU70jrn|YRL|1o%Pxbs?}G%K61|TXT3>*z>9jp5tm6fd_%iS30kp*N?a4M3n?-8t^AWu5!Lw%=*t` zLBw4Nzq{<2qm}lvejWL7-?Si5Sj|)w^@+2$7H6Hs#NfANI|`2Z%(UpJ{8X5S@=E`O zsplpeA1lZwGXVus)0NnY6869Pfhqn&Y?#yU4^lGOsxT9r-p=y(>E@TxmZNi=o6SdD z5f4?;?{~i^B4-SZO2E}RHvid$yfGA7U79ZP1nX&H%ay{eA{7a07 zdDT6ad>Up z?L9WjQnbJ0KHMGO_4cLfQE~+8VBc0x&HbuYuRptx&iC;F<|d^n0fCa=R{rU91K3xD z%|nL8a=Db+{j63W&-@0}9-7i$hV`tgq17ChnpiKrTMn3FR9~TI_yi>0E~o?q*F k!#BqI^LXPKiUQ9D%E*3Q!h2H#Hi~fl=YH0DpKAC21xP@eng9R* literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_WINDSPEED.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/WEATHER_WINDSPEED.bin new file mode 100644 index 0000000000000000000000000000000000000000..1b02cdeb42354d68d095312a5764dcf0897efef3 GIT binary patch literal 2424 zcmeHIZAepL6n=Jhm7Co}w`C*Dt!1HNF)Pwi!n;1u&~mOoGHQlFU-U&qQM8+yX$DP$ zKFJ13TE8R+ihk%yrD@PyAeB&8GV_CCevm1}?M#v27L4d;oqPX0=Q-~==brPtTnIoK zJ+hih^XDwYw0-+7Pudig<^TBKo`)rD&?p&whOO`?#7HKwrp#x+#kKR6qahYYco(W*3z63WDK1l>f6`<)axu0HQ zj}E}5F*US(0W28;7?})gWfLq=@DXCyxIV`tvNpeF)4GcJwIcp~Tyd74Mv=E~MKV z*IcLLGB#CQU?Fvm9iIgjI@c>@yjA~+k#SpPz8I2n2ovw+D!F+z1UIjn z9u}1omHjc9d9wpw9{p-Ys|sca@yW9zfUVrMnsekY(Rw{BpE!^(Kua;wYb6Mvl|4N2(xOmxVYH5NDf`(mljdnmS*3>vR-y&J9!S`b1hkyUSDWOq z#_aZ(!PM`28+|QnRNgEG!t%o0mt1@Wx;6hqB+l z#iVyj#6j2%NO$lUDh`%!S^w#a2Uztw4t=5i5RnfSAB?xToz*1EP~Unq@a-N7cqb%)P#zh{dX}q;2@mp8V7N|KtCy|LYI?+qVe- literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_clear-cloudy.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_clear-cloudy.bin new file mode 100644 index 0000000000000000000000000000000000000000..96d16533d37709adb808140cef30f3e6dc17d3e8 GIT binary patch literal 3016 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 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_haze.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_haze.bin new file mode 100644 index 0000000000000000000000000000000000000000..6f795a16ef4826c5e409dac839ade63fd30efd7d GIT binary patch literal 3016 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 literal 0 HcmV?d00001 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_thundershower.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/res/weather/weather_thundershower.bin new file mode 100644 index 0000000000000000000000000000000000000000..148c18b451753d807046e101b4d2487dcfa09772 GIT binary patch literal 3016 zcmeH}drVVz6vuzJEqzRo7UYeT*9szPi;tjF+lwL(H?#!=!a86+aA7J{2{??sXo3~d zS#(o}fWvZlTyKiVZZ*UFqmaq1EAr`_T{p@^%P>PH(bx2LJc_*oPBrFsx@f6CIa> zWrjxzRgW@JRFgD!MQLE2-?b=3!JpxyznLnFAqM6jSg1Yz zm#D@tg$4$c-(-_&C92vHwZogN$CEfH1*Y`VlqTWyfukhkI9oR`UtZW0ZUwHC$6SqA z;!06&2PGtlu(o8dd#$kiX>QT}qf5uJd&S-zQP>MtW1f zF&gTOUM1Nt8s^K(V}`Ee%jmA9g&v!kQUwjis8A};50KFs?w&&qFIym@tU~!fHwXoE zrZp|=1C^xiI-iCxU_a{|)tdH-V)BK+sE5d(>i_f@ye?>(1fa%7t8!6@y zl-?KOdoiq8#T8{{re=!n0|c(!?|S`xf;(eWAL-q%?7qUr(e)%!_AB z_>o1{T2SW~7day4kzcN!2tK)L6B8~A+)XMj)*snuHlH->P?n$#66MCBs5G07NPk^qXMVU^GAg!E($lWG;^- zJE+>DG3dc;sG}`n^}hbOp+zoWQJ4^S7|&UUHDvC7#{=zFUh))RlQG=~j9CM?+VQnZ zeV-c`a{>fro<)7m-OrK@tCC*-0ll1rIwny!x!9AdCoC$QtcIv=h#V6PhkGjQ&Y-P4 z_S&A8D&p=}gi32%?OG3d#u53g$to zCSbup6+5U=Q4tm2Vlx^DOnGFG2t=ibAySHI1_Q)E6NKdUTJ0CVFb?)h$Fs8^&Yan^ z|MT0kI|~>9Mhu)x#n2VA;9ncFy%TqaK;Dd8fdCsu#(>^P7sR&!~2L#0}P*Ib4!| zX>4=h?~)FM(h}Wxr!k6BBX3ajb$_B|)c+)*(pdr1Uetg0dx1@j+uZDLsuxQ`XAizSXQ6n#W{PqyfIu|&JDe@ zTGg^s-qt8B^y%U=zI~tRX0i^pevRxie3!RP0FIy$d;rHQD0Nq~b!MY6zn~?1zp8NA zB$pd}z16r=$rwK5Xn143tblZFy*1KCpdG5lEtgJ`Dr7Yky*l&ii~90;Nv>qt+#7LI zL|Yf^->~#V)xG&`ji>&2I2uvK_YLwZ3p_NVl~lGUTk_t+bM@!*!H1L{LZ*M2-&;c$ zKR#1lo&MCjJ@p(yCBtve)@v#9sj+VQz%X>+T^tq<$gQpOFV(9`8zAqj{ zOt}M(GIRWj7pq&=Q*pgccW$%rET%|hpQinsDnwm9nN!&(uKQj zJNP{LZ+R()mt+(E$H#mHk20s@j-H_1EgZl2oL*TPw_l^Vv;PN)L^=EJzSFYx?pr$3 zk2dXrP+l5Yoy7(aW;*QgbDiSG)vHLQE@Zlk#J{oP`$!{8V9UpKaWvr@5FfZx36;_FBoN@7?1;^uzt-u5M4Q^u^bw`*1fgOwLWa zFKLIze#v$eXLb6|BpW*VdaM>K6dw!nl%YjvpU&JnGHk~6L~s$rB~PMqRos9GU?(^u zfQ+a2^?2*$g-H7LU0?YEL<5A`mNn6aj~PZywg>=EU{WxtyHl|9?fwxv?v{fLl2<5# z*sL5RUR;EzqBEkP`A7E`_kU>A!5F#;$Jg-Gw1ax#Qr1yH-3Ku`U