schedule file 769/1 769/head 770/target/1
authorcheng <chengyf@zhihuishixun.com>
Thu, 22 Aug 2024 11:43:03 +0000 (19:43 +0800)
committercheng <chengyf@zhihuishixun.com>
Thu, 22 Aug 2024 11:43:03 +0000 (19:43 +0800)
15 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp
code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleListAdapter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleListItem.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/include/SchedulePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleListAdapter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleListItem.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/src/SchedulePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleView.cpp [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin [new file with mode: 0644]

index 63e6c48..46837da 100644 (file)
@@ -132,7 +132,7 @@ set(PRIVATE_HEADER
     ${ROOT_DIR}/open_source/openharmony/utils/native/lite/include
     ${ROOT_DIR}/open_source/openharmony/utils/native/lite/kv_store/innerkits
 
-    # ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/include
 )
 
 set(SOURCES
@@ -751,11 +751,12 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/goal/src/goalhint.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/goal/src/goalControlView.cpp
 
-    # #schedule
-    # ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/ScheduleView.cpp
-    # ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/SchedulePresenter.cpp
-    # ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/ScheduleModel.cpp
-    # ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/ScheduleListAdapter.cpp
+    #schedule
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/ScheduleView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/SchedulePresenter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/ScheduleModel.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/ScheduleListAdapter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/schedule/src/ScheduleListItem.cpp
 
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/calculator/src/CalculatorView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/calculator/src/CalculatorPresenter.cpp
index 9722f44..a3fd409 100644 (file)
@@ -120,7 +120,7 @@ namespace OHOS
         void InitDialingMethodSlice(void);
         /* -------------------------------------------------------------------------- */
         void InitCalculatorSlice(void);
-        // void InitScheduleSlice(void);
+        void InitScheduleSlice(void);
         void InittestSlice(void);
 
     private:
index 4ec1ca9..f46d765 100644 (file)
 #include "traing/training_card/include/TraingCardPresenter.h"
 #include "traing/training_card/include/TraingCardView.h"
 /* -------------------------------------------------------------------------- */
-// #include "schedule/include/SchedulePresenter.h"
+#include "schedule/include/SchedulePresenter.h"
 
 #ifdef SUPPORT_ALIPAY_SEC
 #include "AlipayMainView.h"
@@ -414,7 +414,7 @@ namespace OHOS
         /* -------------------------------------------------------------------------- */
         /*智能助手*/
         {VIEW_OFFLINEVOICE, &NativeLauncher::InitOfflineVoice},
-    // {VIEW_SCHEDULE, &NativeLauncher::InitScheduleSlice},
+        {VIEW_SCHEDULE, &NativeLauncher::InitScheduleSlice},
 
 #ifdef SUPPORT_ALIPAY_SEC
         {VIEW_MAIN_ALIPAY, &NativeLauncher::InitMainAlipaySlice},
@@ -1517,16 +1517,16 @@ namespace OHOS
         NativeAbility::GetInstance().AddSliceProxy(VIEW_SET_DIAL_STYLE, setDialStyleView);
     }
 
-    // void NativeLauncher::InitScheduleSlice(void)
-    // {
-    //     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitScheduleSlice");
-    //     SliceProxy * t_View = new AbilitySliceProxy<ScheduleView, SchedulePresenter>;
-    //     if (nullptr == t_View)
-    //     {
-    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "View is nullptr");
-    //         return;
-    //     }
-    //     NativeAbility::GetInstance().AddSliceProxy(VIEW_SCHEDULE, t_View);
-    // }
+    void NativeLauncher::InitScheduleSlice(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitScheduleSlice");
+        SliceProxy * t_View = new AbilitySliceProxy<ScheduleView, SchedulePresenter>;
+        if (nullptr == t_View)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "View is nullptr");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_SCHEDULE, t_View);
+    }
 
 }
index b84bc5e..9702822 100644 (file)
@@ -88,7 +88,7 @@ namespace OHOS
         /* -------------------------------------------------------------------------- */
         // {VIEW_MUSIC_PLAYER, PNG_APPLIST_MUSIC_IMAGE, PNG_APPLIST_MUSIC_IMAGE, PNG_APPLIST_DEFAULT_IMG, "音乐播放器", STR_MUSIC, nullptr},
         {VIEW_OFFLINEVOICE, PNG_APPLIST_VOCASSIST_IMAGE, PNG_APPLIST_VOCASSIST_IMAGE, PNG_APPLIST_DEFAULT_IMG, "语音助手", STR_VOICE_ASSISTANT, nullptr},
-        // {VIEW_SCHEDULE, PNG_APPLIST_SCHEDULE_IMAGE, PNG_APPLIST_SCHEDULE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "schedule", STR_SCHEDULE, nullptr},
+        {VIEW_SCHEDULE, PNG_APPLIST_SCHEDULE_IMAGE, PNG_APPLIST_SCHEDULE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "schedule", STR_SCHEDULE, nullptr},
         {VIEW_SETTING, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_SETTING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "设置", STR_SETTINGS, nullptr},
 #if 0
 /*屏蔽Slice*/
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleListAdapter.h b/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleListAdapter.h
new file mode 100644 (file)
index 0000000..e98c1ff
--- /dev/null
@@ -0,0 +1,31 @@
+
+#ifndef __SCHEDULELISTADAPTER_H__
+#define __SCHEDULELISTADAPTER_H__
+
+#include "View.h"
+#include "components/abstract_adapter.h"
+#include "schedule/include/ScheduleModel.h"
+#include "schedule/include/ScheduleListItem.h"
+
+
+namespace OHOS
+{
+    class ScheduleListAdapter : public AbstractAdapter
+    {
+    public:
+        ScheduleListAdapter();
+        ~ScheduleListAdapter() override;
+        ScheduleListAdapter * GetInstance();
+
+        UIView * GetView(UIView * inView, int16_t index) override;
+        uint16_t GetCount() override;
+        void AddListItem(const ScheduleListItemInfo &item);
+
+        void SetItemClickListener(UIView::OnClickListener *itemClickListener);
+
+    private:
+        List<ScheduleListItemInfo> nodeList_;
+        UIView::OnClickListener * itemClickListener_;
+    };
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleListItem.h b/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleListItem.h
new file mode 100644 (file)
index 0000000..09f5bef
--- /dev/null
@@ -0,0 +1,63 @@
+
+#ifndef __SCHEDULELISTITEM_H__
+#define __SCHEDULELISTITEM_H__
+
+#include "View.h"
+#include "ohos_types.h"
+#include "components/ui_view_group.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_image_view.h"
+
+
+namespace OHOS
+{
+    typedef struct
+    {
+        std::string DateStr;
+        std::string TopicStr;
+        std::string TimeStr;
+        std::string DataStr;
+        uint8_t index;
+        bool is_date_item;
+        uint8_t child_num; // if(true == is_date_item)
+        uint8_t child_index;  // if(false == is_date_item)
+    } ScheduleListItemInfo;
+
+
+    class ScheduleListItem : public UIViewGroup
+    {
+    public:
+        ScheduleListItem();
+        ~ScheduleListItem() override;
+        void SetItemInfo(const ScheduleListItemInfo &itemInfo);
+        void ResetItemStyle(const ScheduleListItemInfo &itemInfo);
+
+
+    private:
+        ScheduleListItem(const ScheduleListItem &);
+        ScheduleListItem &operator = (const ScheduleListItem &);
+
+        UIViewGroup InfoGroup_;
+        UILabelExt LabelExtDate_;
+        UILabelExt LabelExtTopic_;
+        UILabelExt LabelExtTime_;
+        UIImageView Image_;
+        // ScheduleListItemInfo itemInfo_ = { nullptr, nullptr, nullptr, nullptr, 0 };
+
+        #define ITEM_WIDTH (380)
+        #define ITEM_HEIGHT (100)
+        #define ITEM_GAP (20)
+
+        #define ODD_ITEM_BACKGROUND_COLOR (0Xff001833)
+        #define ODD_ITEM_TOPIC_COLOR (0Xff0176ff)
+        #define ODD_ITEM_TIME_COLOR (0Xff8bc0ff)
+
+        #define EVEN_ITEM_BACKGROUND_COLOR (0Xff331f00)
+        #define EVEN_ITEM_TOPIC_COLOR (0Xffff7b01)
+        #define EVEN_ITEM_TIME_COLOR (0Xffffc28b)
+
+        #define IMAGE_ITEM_ARROW "/user/res/Schedule/IMAGE_ITEM_ARROW.bin"
+        // #define IMAGE_ITEM_ARROW "/user/res/settings/SETTINGS_DISPLAY_MODE.bin"
+    };
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleModel.h b/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleModel.h
new file mode 100644 (file)
index 0000000..44e53e7
--- /dev/null
@@ -0,0 +1,50 @@
+\r
+#ifndef __SCHEDULEMODEL_H__\r
+#define __SCHEDULEMODEL_H__\r
+\r
+#include "ohos_types.h"\r
+#include "schedule/include/ScheduleListItem.h"\r
+\r
+\r
+namespace OHOS\r
+{\r
+    typedef struct\r
+    {\r
+        std::string date; // 7/8\r
+        std::string topic; // xxxx\r
+        std::string time; //10:30-14:00\r
+        std::string content; // yyyyyyy\r
+    }ScheduleRevData;\r
+\r
+    #define SCHEDULE_DATA_COUNT_MAX (20)\r
+\r
+    \r
+    class ScheduleModel\r
+    {\r
+    public:\r
+        static ScheduleModel &GetInstance(void);\r
+        uint8_t ScheduleDataInfoSet(void);\r
+        bool ScheduleDataIsEmpty(void);\r
+        ScheduleListItemInfo * ScheduleDataInfoGet(void);\r
+\r
+        std::string ScheduleInfoDateStrGet(uint8_t index);\r
+        std::string ScheduleInfoTopicStrGet(uint8_t index);\r
+        std::string ScheduleInfoTimeStrGet(uint8_t index);\r
+        std::string ScheduleInfoDataStrGet(uint8_t index);\r
+\r
+        void ScheduleSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish);\r
+\r
+        void ScheduleDataToInfo(void);\r
+\r
+    private:\r
+        ScheduleModel();\r
+        ~ScheduleModel();\r
+        ScheduleModel(const ScheduleModel &) = delete;\r
+        ScheduleModel &operator=(const ScheduleModel &) = delete;\r
+\r
+        ScheduleRevData ScheduleRevData_[SCHEDULE_DATA_COUNT_MAX] = {nullptr, nullptr, nullptr, nullptr};\r
+        ScheduleListItemInfo ScheduleDataInfo_[SCHEDULE_DATA_COUNT_MAX*2] = {nullptr, nullptr, nullptr, nullptr, 0, false, 0, 0};\r
+    };\r
+}\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/include/SchedulePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/schedule/include/SchedulePresenter.h
new file mode 100644 (file)
index 0000000..64dce38
--- /dev/null
@@ -0,0 +1,42 @@
+\r
+#ifndef __SCHEDULEPRESENTER_H__\r
+#define __SCHEDULEPRESENTER_H__\r
+\r
+#include "Presenter.h"\r
+#include "View.h"\r
+\r
+#include "schedule/include/ScheduleView.h"\r
+#include "schedule/include/ScheduleModel.h"\r
+\r
+\r
+namespace OHOS\r
+{\r
+    class ScheduleView;\r
+    class ScheduleModel;\r
+    class SchedulePresenter : public Presenter<ScheduleView, ScheduleModel>,\r
+                             public UIView::OnClickListener,\r
+                             public UIView::OnDragListener,\r
+                             public RootView::OnKeyActListener\r
+    {\r
+    public:\r
+        SchedulePresenter();\r
+        virtual ~SchedulePresenter();\r
+        static SchedulePresenter * GetInstance();\r
+\r
+        void OnStart() override;\r
+        void OnResume() override;\r
+        void OnPause() override;\r
+        void OnStop() override;\r
+\r
+    private:\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;\r
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
+\r
+        ScheduleModel * ScheduleModel_;\r
+        bool X_DRAG_FLAG{false};\r
+    };\r
+}\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleView.h b/code/sdk/application/wearable/fd230app/nativeui/schedule/include/ScheduleView.h
new file mode 100644 (file)
index 0000000..d6faf5c
--- /dev/null
@@ -0,0 +1,85 @@
+\r
+#ifndef __SCHEDULEVIEW_H__\r
+#define __SCHEDULEVIEW_H__\r
+\r
+#include "View.h"\r
+#include "ohos_types.h"\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_list.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_button.h"\r
+#include "common/screen.h"\r
+#include "ui_resource_string.h"\r
+\r
+#include "schedule/include/SchedulePresenter.h"\r
+#include "schedule/include/ScheduleListAdapter.h"\r
+#include "schedule/include/ScheduleListItem.h"\r
+\r
+\r
+namespace OHOS\r
+{\r
+    typedef enum\r
+    {\r
+        ENUM_SCHEDULE_NO_DATA_SCREEN,\r
+        ENUM_SCHEDULE_LIST_SCREEN,\r
+        ENUM_SCHEDULE_CONTENT_SCREEN,\r
+        ENUM_SCHEDULE_DELETE_SCREEN,\r
+\r
+        ENUM_SCHEDULE_MAX_SCREEN\r
+    }ENUM_SCHEDULE_SCREEN;\r
+\r
+    class SchedulePresenter;\r
+    class ScheduleView : public View<SchedulePresenter>\r
+    {\r
+    public:\r
+        ScheduleView();\r
+        ~ScheduleView();\r
+        static ScheduleView * GetInstance(void);\r
+\r
+        void OnStart() override;\r
+        void OnSetUpView() override;\r
+        void OnTearDownView() override;\r
+        void OnStop() override;\r
+        void AddItemToList(const ScheduleListItemInfo &item);\r
+        void DisplayContentScreen(uint8_t index);\r
+\r
+    private:\r
+        UIViewGroup * InitNoDataScreen();\r
+        UIViewGroup * InitDataScreen();\r
+        UILabelExt * InitLabel(int16_t x, int16_t y, int16_t width, int16_t height,\r
+                                uint16_t line_height, uint8_t font_size, uint16_t text_id, uint32_t text_color);\r
+        void DisplayMainScreen(void);\r
+\r
+        UIScrollView * InitContentScreen();\r
+\r
+        UIViewGroup * NoDataGroup_{nullptr};\r
+        UILabelExt * LabelExt0_{nullptr};\r
+        UIImageView * ImageView_{nullptr};\r
+        UILabelExt * LabelExt1_{nullptr};\r
+        UILabelExt * LabelExt2_{nullptr};\r
+\r
+        UIViewGroup * DataGroup_{nullptr};\r
+        UIList * ScheduleList_{nullptr};\r
+        ScheduleListAdapter * ScheduleListAdapter_{nullptr};\r
+\r
+        UIScrollView * ContentGroup_{nullptr};\r
+        UILabelExt * ContentLabelExt0_{nullptr};\r
+        UILabelExt * ContentLabelExt1_{nullptr};\r
+        UILabelExt * ContentLabelExt2_{nullptr};\r
+        UILabelExt * ContentLabelExt3_{nullptr};\r
+        UIButton * ContentButton0_{nullptr};\r
+        UIButton * ContentButton1_{nullptr};\r
+\r
+        UIViewGroup * GroupArray_[ENUM_SCHEDULE_MAX_SCREEN]{nullptr};\r
+\r
+        #define LIST_LEFT (43)\r
+        #define LIST_TOP (50)\r
+        #define LIST_WIDTH (Screen::GetInstance().GetWidth() - LIST_LEFT * 2)\r
+        #define LIST_HEIGHT (Screen::GetInstance().GetHeight() - LIST_TOP * 2)\r
+\r
+        #define NO_DATA_IMAGE "/user/res/Schedule/schedule_no_data.bin"\r
+    };\r
+}\r
+#endif\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleListAdapter.cpp b/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleListAdapter.cpp
new file mode 100644 (file)
index 0000000..d1312f2
--- /dev/null
@@ -0,0 +1,81 @@
+
+
+#include "schedule/include/ScheduleListAdapter.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+    static ScheduleListAdapter * p_ScheduleListAdapterInstance = nullptr;
+
+    ScheduleListAdapter::ScheduleListAdapter()
+    {
+        p_ScheduleListAdapterInstance = this;
+    }
+
+    ScheduleListAdapter::~ScheduleListAdapter()
+    {
+        p_ScheduleListAdapterInstance = nullptr;
+        nodeList_.Clear();
+    }
+
+    ScheduleListAdapter * ScheduleListAdapter::GetInstance()
+    {
+        return p_ScheduleListAdapterInstance;
+    }
+
+    UIView * ScheduleListAdapter::GetView(UIView * inView, int16_t index)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:GetView,%d", __LINE__, index);
+        if(nodeList_.IsEmpty() || nodeList_.Size() <= index || 0 > index)
+        {
+            return nullptr;
+        }
+
+        ScheduleListItem * item = nullptr;
+        ListNode<ScheduleListItemInfo> * node = nodeList_.Begin();
+        for (uint16_t i = 0; i < index; i++) 
+        {
+            node = node->next_;
+        }
+
+        if (nullptr == inView) 
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:GetView", __LINE__);
+            item = new ScheduleListItem();
+            if (nullptr == item)
+                return nullptr;
+        } 
+        else 
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:GetView", __LINE__);
+            item = static_cast<ScheduleListItem *>(inView);
+        }
+
+        if (item != nullptr) 
+        {
+            item->SetViewIndex(index);
+            item->ResetItemStyle(node->data_);
+            item->SetItemInfo(node->data_);
+            item->SetOnClickListener(itemClickListener_);
+        }
+
+        return item;
+    }
+
+    uint16_t ScheduleListAdapter::GetCount()
+    {
+        return nodeList_.Size();
+    }
+
+    void ScheduleListAdapter::AddListItem(const ScheduleListItemInfo &item)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:AddListItem", __LINE__);
+        nodeList_.PushBack(item);
+    }
+
+    void ScheduleListAdapter::SetItemClickListener(UIView::OnClickListener *itemClickListener)
+    {
+        itemClickListener_ = itemClickListener;
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleListItem.cpp b/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleListItem.cpp
new file mode 100644 (file)
index 0000000..b53ed61
--- /dev/null
@@ -0,0 +1,142 @@
+
+#include "ScheduleListItem.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+    ScheduleListItem::ScheduleListItem()
+    {
+        SetPosition(0, 0, ITEM_WIDTH, ITEM_HEIGHT + ITEM_GAP);
+        SetStyle(STYLE_BACKGROUND_COLOR, OHOS::Color::Black().full);
+        SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+        // SetStyle(STYLE_BORDER_RADIUS, 20);
+        // SetTouchable(true);
+
+        InfoGroup_.SetPosition(0, ITEM_GAP>>1, ITEM_WIDTH, ITEM_HEIGHT);
+        InfoGroup_.SetStyle(STYLE_BACKGROUND_COLOR, OHOS::Color::Black().full);
+        InfoGroup_.SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+        InfoGroup_.SetStyle(STYLE_BORDER_RADIUS, 20);
+        InfoGroup_.SetTouchable(true);
+
+        LabelExtDate_.SetPosition((ITEM_WIDTH - 300)>>1, (ITEM_HEIGHT - 55)>>1, 300, 55);
+        LabelExtDate_.SetStyle(STYLE_TEXT_FONT, 30);
+        LabelExtDate_.SetStyle(STYLE_LINE_HEIGHT, 35);
+        // LabelExtDate_.SetTextId(text_id);
+        LabelExtDate_.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+        LabelExtDate_.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        LabelExtDate_.SetRollSpeed(70);
+        LabelExtDate_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        LabelExtDate_.SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);
+
+        LabelExtTopic_.SetPosition(47, 22, 250, 35);
+        LabelExtTopic_.SetStyle(STYLE_TEXT_FONT, 30);
+        LabelExtTopic_.SetStyle(STYLE_LINE_HEIGHT, 35);
+        // LabelExtTopic_.SetTextId(text_id);
+        LabelExtTopic_.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+        LabelExtTopic_.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);
+        LabelExtTopic_.SetRollSpeed(70);
+        LabelExtTopic_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        // LabelExtTopic_.SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);
+
+        LabelExtTime_.SetPosition(47, 57, 105, 24);
+        LabelExtTime_.SetStyle(STYLE_TEXT_FONT, 20);
+        LabelExtTime_.SetStyle(STYLE_LINE_HEIGHT, 24);
+        // LabelExtTime_.SetTextId(text_id);
+        LabelExtTime_.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+        LabelExtTime_.SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);
+        LabelExtTime_.SetRollSpeed(70);
+        LabelExtTime_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);
+        // LabelExtTime_.SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);
+
+        Image_.SetPosition(326, 37, 14, 26);
+        Image_.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE);
+        Image_.SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+        Image_.SetResizeMode(UIImageView::CENTER);
+        Image_.SetAutoEnable(false);
+        Image_.SetSrc(IMAGE_ITEM_ARROW);
+
+        InfoGroup_.Add(&LabelExtDate_);
+        InfoGroup_.Add(&LabelExtTopic_);
+        InfoGroup_.Add(&LabelExtTime_);
+        InfoGroup_.Add(&Image_);
+        Add(&InfoGroup_);
+    }
+
+    ScheduleListItem::~ScheduleListItem()
+    {
+        RemoveAll();
+    }
+
+    void ScheduleListItem::SetItemInfo(const ScheduleListItemInfo &itemInfo)
+    {
+        if(true == itemInfo.is_date_item)
+        {
+            LabelExtDate_.SetText(itemInfo.DateStr.c_str());
+        }
+        else
+        {
+            if(0 == (itemInfo.child_index % 2))
+            {
+                LabelExtTopic_.SetText(itemInfo.TopicStr.c_str());
+                LabelExtTime_.SetText(itemInfo.TimeStr.c_str());
+            }
+            else
+            {
+                LabelExtTopic_.SetText(itemInfo.TopicStr.c_str());
+                LabelExtTime_.SetText(itemInfo.TimeStr.c_str());
+            }
+        }
+    }
+
+    void ScheduleListItem::ResetItemStyle(const ScheduleListItemInfo &itemInfo)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:ResetItemStyle,%d,%d,%d",
+                                    __LINE__, itemInfo.is_date_item, itemInfo.child_num, itemInfo.child_index);
+
+        if(true == itemInfo.is_date_item)
+        {
+            SetHeight(ITEM_HEIGHT);
+
+            InfoGroup_.SetStyle(STYLE_BACKGROUND_COLOR, OHOS::Color::Black().full);
+            InfoGroup_.SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+            InfoGroup_.SetTouchable(false);
+
+            LabelExtDate_.SetVisible(true);
+            LabelExtTopic_.SetVisible(false);
+            LabelExtTime_.SetVisible(false);
+            Image_.SetVisible(false);
+        }
+        else
+        {
+            if(0 == (itemInfo.child_index % 2))
+            {
+                InfoGroup_.SetStyle(STYLE_BACKGROUND_COLOR, ODD_ITEM_BACKGROUND_COLOR);
+                InfoGroup_.SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+                InfoGroup_.SetTouchable(true);
+
+                LabelExtDate_.SetVisible(false);
+                LabelExtTopic_.SetVisible(true);
+                LabelExtTime_.SetVisible(true);
+                Image_.SetVisible(true);
+                
+                LabelExtTopic_.SetStyle(STYLE_TEXT_COLOR, ODD_ITEM_TOPIC_COLOR);
+                LabelExtTime_.SetStyle(STYLE_TEXT_COLOR, ODD_ITEM_TIME_COLOR);
+            }
+            else
+            {
+                InfoGroup_.SetStyle(STYLE_BACKGROUND_COLOR, EVEN_ITEM_BACKGROUND_COLOR);
+                InfoGroup_.SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+                InfoGroup_.SetTouchable(true);
+
+                LabelExtDate_.SetVisible(false);
+                LabelExtTopic_.SetVisible(true);
+                LabelExtTime_.SetVisible(true);
+                Image_.SetVisible(true);
+
+                LabelExtTopic_.SetStyle(STYLE_TEXT_COLOR, EVEN_ITEM_TOPIC_COLOR);
+                LabelExtTime_.SetStyle(STYLE_TEXT_COLOR, EVEN_ITEM_TIME_COLOR);
+            }
+        }
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleModel.cpp
new file mode 100644 (file)
index 0000000..1d5d7c0
--- /dev/null
@@ -0,0 +1,167 @@
+\r
+#include "schedule/include/ScheduleModel.h"\r
+#include "wearable_log.h"\r
+\r
+namespace OHOS\r
+{\r
+    ScheduleModel::ScheduleModel()\r
+    {\r
+\r
+    }\r
+\r
+    ScheduleModel::~ScheduleModel()\r
+    {\r
+\r
+    }\r
+\r
+    ScheduleModel &ScheduleModel::GetInstance()\r
+    {\r
+        static ScheduleModel instance;\r
+        return instance;\r
+    }\r
+\r
+    static ScheduleListItemInfo t_data[10] = {\r
+                                        {"10-10", "date00", "a", "a", 0, true, 4, 0},\r
+                                        {"10-10", "date000", "05:05", "jkguqpfhklal", 0, false, 0, 0},\r
+                                        {"10-10", "date000", "06:06", "dalguqpfhklal", 0, false, 0, 1},\r
+                                        {"10-10", "date002", "07:07", "atzdflal", 0, false, 0, 2},\r
+                                        {"10-10", "date003", "08:08", "gjqpljkal", 0, false, 0, 3},\r
+\r
+                                        {"10-18", "date01", "b", "b", 0, true, 2, 0},\r
+                                        {"10-18", "date011", "09:09", "qpfal", 0, false, 0, 0},\r
+                                        {"10-18", "date011", "10:10", "tttccccccckgl", 0, false, 0, 1},\r
+\r
+                                        {"11-30", "date02", "c", "c", 0, true, 1, 0},\r
+                                        {"11-30", "date020", "11:11", "qyq4100000fg21al", 0, false, 0, 0}        \r
+                                    };\r
+\r
+    uint8_t ScheduleModel::ScheduleDataInfoSet(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleDataInfoSet 00");\r
+        uint8_t count = 0;\r
+\r
+        for(uint8_t i = 0; i < 10; i++)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleModel::ScheduleDataInfoSet", __LINE__);\r
+            ScheduleDataInfo_[i].DateStr.assign(t_data[i].DateStr);\r
+            ScheduleDataInfo_[i].TopicStr.assign(t_data[i].TopicStr);\r
+            ScheduleDataInfo_[i].TimeStr.assign(t_data[i].TimeStr);\r
+            ScheduleDataInfo_[i].DataStr.assign(t_data[i].DataStr);\r
+\r
+            ScheduleDataInfo_[i].index = t_data[i].index;\r
+            ScheduleDataInfo_[i].is_date_item = t_data[i].is_date_item;\r
+            ScheduleDataInfo_[i].child_num = t_data[i].child_num;\r
+            ScheduleDataInfo_[i].child_index = t_data[i].child_index;\r
+        }\r
+\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleDataInfoSet 10");\r
+\r
+        return count;\r
+    }\r
+\r
+    bool ScheduleModel::ScheduleDataIsEmpty(void)\r
+    {\r
+        if(ScheduleDataInfo_[0].DateStr.length())\r
+            return false;\r
+        \r
+        return true;\r
+    }\r
+\r
+    ScheduleListItemInfo * ScheduleModel::ScheduleDataInfoGet(void)\r
+    {\r
+        return ScheduleDataInfo_;\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleInfoDateStrGet(uint8_t index)\r
+    {\r
+        return ScheduleDataInfo_[index].DateStr.c_str();\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleInfoTopicStrGet(uint8_t index)\r
+    {\r
+        return ScheduleDataInfo_[index].TopicStr.c_str();\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleInfoTimeStrGet(uint8_t index)\r
+    {\r
+        return ScheduleDataInfo_[index].TimeStr.c_str();\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleInfoDataStrGet(uint8_t index)\r
+    {\r
+        return ScheduleDataInfo_[index].DataStr.c_str();\r
+    }\r
+\r
+    void ScheduleModel::ScheduleSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish)\r
+    {\r
+        ScheduleRevData_[index].date.assign(data->date);\r
+        ScheduleRevData_[index].topic.assign(data->topic);\r
+        ScheduleRevData_[index].time.assign(data->time);\r
+        ScheduleRevData_[index].content.assign(data->content);\r
+\r
+        if(true == is_finish)\r
+        {\r
+            ScheduleDataToInfo();\r
+        }\r
+    }\r
+\r
+    void ScheduleModel::ScheduleDataToInfo(void)\r
+    {\r
+        uint8_t i = 0;\r
+        uint8_t j = 0;\r
+        uint8_t count = 0;\r
+\r
+        memset(ScheduleDataInfo_, 0x0, sizeof(ScheduleListItemInfo) * SCHEDULE_DATA_COUNT_MAX*2);\r
+\r
+        count = 0;\r
+\r
+        for(i = 0, j = 0; i < count, j < SCHEDULE_DATA_COUNT_MAX * 2; i++)\r
+        {\r
+            if(0 == i)\r
+            {\r
+                ScheduleDataInfo_[j].DateStr.assign(ScheduleRevData_[i].date);\r
+                ScheduleDataInfo_[j].index = j;\r
+                ScheduleDataInfo_[j].is_date_item = true;\r
+\r
+                j++;\r
+                ScheduleDataInfo_[j].DateStr.assign(ScheduleRevData_[i].date);\r
+                ScheduleDataInfo_[j].TopicStr.assign(ScheduleRevData_[i].topic);\r
+                ScheduleDataInfo_[j].TimeStr.assign(ScheduleRevData_[i].time);\r
+                ScheduleDataInfo_[j].DataStr.assign(ScheduleRevData_[i].content);\r
+                ScheduleDataInfo_[j].index = j;\r
+                ScheduleDataInfo_[j].is_date_item = false;\r
+                ScheduleDataInfo_[j].child_index = 0;\r
+            }\r
+            else\r
+            {\r
+                if(0 == ScheduleRevData_[i].date.compare(ScheduleRevData_[i - 1].date))\r
+                {\r
+                    j++;\r
+                    ScheduleDataInfo_[j].DateStr.assign(ScheduleRevData_[i].date);\r
+                    ScheduleDataInfo_[j].TopicStr.assign(ScheduleRevData_[i].topic);\r
+                    ScheduleDataInfo_[j].TimeStr.assign(ScheduleRevData_[i].time);\r
+                    ScheduleDataInfo_[j].DataStr.assign(ScheduleRevData_[i].content);\r
+                    ScheduleDataInfo_[j].index = j;\r
+                    ScheduleDataInfo_[j].is_date_item = false;\r
+                    ScheduleDataInfo_[j].child_index = ScheduleDataInfo_[i - 1].child_index + 1;\r
+                }\r
+                else\r
+                {\r
+                    ScheduleDataInfo_[j].DateStr.assign(ScheduleRevData_[i].date);\r
+                    ScheduleDataInfo_[j].index = j;\r
+                    ScheduleDataInfo_[j].is_date_item = true;\r
+\r
+                    j++;\r
+                    ScheduleDataInfo_[j].DateStr.assign(ScheduleRevData_[i].date);\r
+                    ScheduleDataInfo_[j].TopicStr.assign(ScheduleRevData_[i].topic);\r
+                    ScheduleDataInfo_[j].TimeStr.assign(ScheduleRevData_[i].time);\r
+                    ScheduleDataInfo_[j].DataStr.assign(ScheduleRevData_[i].content);\r
+                    ScheduleDataInfo_[j].index = j;\r
+                    ScheduleDataInfo_[j].is_date_item = false;\r
+                    ScheduleDataInfo_[j].child_index = 0;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+}\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/src/SchedulePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/schedule/src/SchedulePresenter.cpp
new file mode 100644 (file)
index 0000000..c831d33
--- /dev/null
@@ -0,0 +1,132 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-06-20 15:11:17\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-07-08 09:45:02\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/SchedulePresenter.cpp\r
+ */\r
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+#include "common/key_code.h"\r
+#include <custom_utils.h>\r
+#include "UiConfig.h"\r
+#include "schedule/include/SchedulePresenter.h"\r
+\r
+\r
+namespace OHOS\r
+{\r
+    // 当前Presenter属性实例化的内存指针\r
+    static SchedulePresenter * p_SchedulePresenterInstance = nullptr;\r
+\r
+    SchedulePresenter::SchedulePresenter()\r
+    {\r
+        ScheduleModel_ = &ScheduleModel::GetInstance();\r
+        p_SchedulePresenterInstance = this;\r
+    }\r
+\r
+    SchedulePresenter::~SchedulePresenter()\r
+    {\r
+        p_SchedulePresenterInstance = nullptr;\r
+    }\r
+\r
+    SchedulePresenter *SchedulePresenter::GetInstance()\r
+    {\r
+        return p_SchedulePresenterInstance;\r
+    }\r
+\r
+    // 启动时执行的逻辑\r
+    void SchedulePresenter::OnStart()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnStart");\r
+        Presenter<ScheduleView, ScheduleModel>::OnStart();\r
+\r
+        ScheduleModel_->ScheduleDataInfoSet();\r
+    }\r
+\r
+    // 页面已经展示后的调用逻辑\r
+    void SchedulePresenter::OnResume(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnResume");\r
+        Presenter<ScheduleView, ScheduleModel>::OnResume();\r
+        if (nullptr == view_)\r
+        {\r
+            return;\r
+        }\r
+\r
+        ScheduleListItemInfo * ItemInfo = ScheduleModel_->ScheduleDataInfoGet();\r
+        for (uint8_t i = 0; i < 10; i++)\r
+        {\r
+            view_->AddItemToList(ItemInfo[i]);\r
+        }\r
+    }\r
+\r
+    // 页面准备切换到后台前执行的逻辑\r
+    void SchedulePresenter::OnPause(void)\r
+    {\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnPause");\r
+        Presenter<ScheduleView, ScheduleModel>::OnPause();\r
+    }\r
+\r
+    // 页面完全置于后台时的逻辑。\r
+    void SchedulePresenter::OnStop(void)\r
+    {\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnStop");\r
+        Presenter<ScheduleView, ScheduleModel>::OnStop();\r
+    }\r
+\r
+    bool SchedulePresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        UNUSED(event);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnClick");\r
+\r
+        if (nullptr == &view) \r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:OnClick", __LINE__);\r
+            return false;\r
+        } \r
+        else \r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:OnClick", __LINE__);\r
+            ScheduleListItem * item = static_cast<ScheduleListItem *>(&view);\r
+            view_->DisplayContentScreen(item->GetViewIndex());\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool SchedulePresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        UNUSED(view);\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnDrag");\r
+        if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动\r
+        {\r
+            SchedulePresenter::X_DRAG_FLAG = true;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool SchedulePresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
+    {\r
+        UNUSED(view);\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnDragEnd");\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && SchedulePresenter::X_DRAG_FLAG)\r
+        {\r
+            NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);\r
+            SchedulePresenter::X_DRAG_FLAG = false;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool SchedulePresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件\r
+    {\r
+        UNUSED(view);\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SchedulePresenter::OnKeyAct");\r
+        uint16_t keyID = event.GetKeyId();\r
+        uint16_t keyState = event.GetState();\r
+        // 如果是power键,且是亮屏状态,按键释放就返回上一级\r
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)\r
+        {\r
+            NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);\r
+        }\r
+        return true;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleView.cpp b/code/sdk/application/wearable/fd230app/nativeui/schedule/src/ScheduleView.cpp
new file mode 100644 (file)
index 0000000..aa22e2c
--- /dev/null
@@ -0,0 +1,448 @@
+\r
+#include "schedule/include/ScheduleView.h"\r
+#include "wearable_log.h"\r
+\r
+namespace OHOS\r
+{\r
+    static ScheduleView * p_ScheduleViewInstance = nullptr;\r
+\r
+    ScheduleView::ScheduleView()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleView::ScheduleView");\r
+        p_ScheduleViewInstance = this;\r
+    }\r
+\r
+    ScheduleView::~ScheduleView()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleView::~ScheduleView");\r
+        p_ScheduleViewInstance = nullptr;\r
+    }\r
+\r
+    ScheduleView * ScheduleView::GetInstance()\r
+    {\r
+        return p_ScheduleViewInstance;\r
+    }\r
+\r
+    void ScheduleView::OnStart()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleView::OnStart");\r
+        View<SchedulePresenter>::OnStart();\r
+\r
+        SetContainerView(new UIViewGroup());\r
+        if (nullptr == GetContainer())\r
+        {\r
+                       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);\r
+            return;\r
+        }\r
+        container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        container_->SetTouchable(true);\r
+        container_->SetDraggable(true);\r
+        container_->SetOnDragListener(presenter_);\r
+        container_->Add(InitNoDataScreen());\r
+        container_->Add(InitDataScreen());\r
+\r
+        RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
+    }\r
+\r
+    void ScheduleView::OnSetUpView()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleView::OnSetUpView");\r
+        View<SchedulePresenter>::OnSetUpView();\r
+\r
+        DisplayMainScreen();\r
+        // GroupArray_\r
+        Draw();\r
+    }\r
+\r
+    void ScheduleView::OnTearDownView()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleView::OnTearDownView");\r
+        View<SchedulePresenter>::OnTearDownView();\r
+    }\r
+\r
+    void ScheduleView::OnStop()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScheduleView::OnStop");\r
+        View<SchedulePresenter>::OnStop();\r
+        RootView::GetInstance()->ClearOnKeyActListener();\r
+\r
+        if (nullptr != container_)\r
+        {\r
+            container_->RemoveAll();\r
+            if (nullptr != NoDataGroup_)\r
+            {\r
+                NoDataGroup_->RemoveAll();\r
+                if (nullptr != LabelExt0_)\r
+                {\r
+                    delete LabelExt0_;\r
+                    LabelExt0_ = nullptr;\r
+                }\r
+                if (nullptr != ImageView_)\r
+                {\r
+                    delete ImageView_;\r
+                    ImageView_ = nullptr;\r
+                }\r
+                if (nullptr != LabelExt1_)\r
+                {\r
+                    delete LabelExt1_;\r
+                    LabelExt1_ = nullptr;\r
+                }\r
+                if (nullptr != LabelExt2_)\r
+                {\r
+                    delete LabelExt2_;\r
+                    LabelExt2_ = nullptr;\r
+                }\r
+\r
+                delete NoDataGroup_;\r
+                NoDataGroup_ = nullptr;\r
+            }\r
+            if (nullptr != DataGroup_)\r
+            {\r
+                DataGroup_->RemoveAll();\r
+                if (nullptr != ScheduleListAdapter_)\r
+                {\r
+                    delete ScheduleListAdapter_;\r
+                    ScheduleListAdapter_ = nullptr;\r
+                }\r
+                if (nullptr != ScheduleList_)\r
+                {\r
+                    delete ScheduleList_;\r
+                    ScheduleList_ = nullptr;\r
+                }\r
+\r
+                delete DataGroup_;\r
+                DataGroup_ = nullptr;\r
+            }\r
+            delete container_;\r
+            container_ = nullptr;\r
+        }\r
+    }\r
+\r
+    void ScheduleView::AddItemToList(const ScheduleListItemInfo &item)\r
+    {\r
+        ScheduleListAdapter_->AddListItem(item);\r
+    }\r
+\r
+    void ScheduleView::DisplayMainScreen(void)\r
+    {\r
+        if(true == ScheduleModel::GetInstance().ScheduleDataIsEmpty())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:DisplayMainScreen", __LINE__);\r
+            NoDataGroup_->SetVisible(true);\r
+            DataGroup_->SetVisible(false);\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]:DisplayMainScreen", __LINE__);\r
+            NoDataGroup_->SetVisible(false);\r
+            DataGroup_->SetVisible(true);\r
+            ScheduleList_->RefreshList();\r
+        }\r
+    }\r
+\r
+    void ScheduleView::DisplayContentScreen(uint8_t index)\r
+    {\r
+        NoDataGroup_->SetVisible(false);\r
+        DataGroup_->SetVisible(false);\r
+\r
+        UIScrollView * temp_group = InitContentScreen();\r
+        if(nullptr == temp_group)\r
+            return;\r
+\r
+        container_->Add(temp_group);\r
+\r
+        ContentLabelExt0_->SetText(ScheduleModel::GetInstance().ScheduleInfoDateStrGet(index).c_str());\r
+\r
+        int16_t temp_y = 0;\r
+        temp_y = ContentLabelExt0_->GetY() + ContentLabelExt0_->GetHeight() + 50;\r
+        ContentLabelExt1_->SetY(temp_y);\r
+        ContentLabelExt1_->SetText(ScheduleModel::GetInstance().ScheduleInfoTopicStrGet(index).c_str());\r
+\r
+        temp_y = ContentLabelExt1_->GetY() + ContentLabelExt1_->GetHeight() + 20;\r
+        ContentLabelExt2_->SetY(temp_y);\r
+        ContentLabelExt2_->SetText(ScheduleModel::GetInstance().ScheduleInfoTimeStrGet(index).c_str());\r
+\r
+        temp_y = ContentLabelExt2_->GetY() + ContentLabelExt2_->GetHeight() + 20;\r
+        ContentLabelExt3_->SetY(temp_y);\r
+        ContentLabelExt3_->SetText(ScheduleModel::GetInstance().ScheduleInfoDataStrGet(index).c_str());\r
+\r
+        temp_y = ContentLabelExt3_->GetY() + ContentLabelExt3_->GetHeight() + 50;\r
+        ContentButton0_->SetY(temp_y);\r
+\r
+        temp_y = ContentButton0_->GetY() + ContentButton0_->GetHeight() + 20;\r
+        ContentButton1_->SetY(temp_y);\r
+    }\r
+\r
+    UIViewGroup * ScheduleView::InitNoDataScreen()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);\r
+        if(nullptr == NoDataGroup_)\r
+        {\r
+            NoDataGroup_ = new UIViewGroup();\r
+            if(nullptr == NoDataGroup_)\r
+                return nullptr;\r
+        }\r
+        NoDataGroup_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        NoDataGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+        NoDataGroup_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
+        NoDataGroup_->SetOnDragListener(presenter_);\r
+        NoDataGroup_->SetTouchable(true);\r
+        NoDataGroup_->SetDraggable(true);\r
+\r
+        if(nullptr == LabelExt0_)\r
+        {\r
+            LabelExt0_ = InitLabel(83, 50, 300, 35, 35, 30, STR_SCHEDULE_TITLE, Color::White().full);\r
+            if(nullptr == LabelExt0_)\r
+            {\r
+                return nullptr;\r
+            }\r
+        }\r
+\r
+        if(nullptr == ImageView_)\r
+        {\r
+            ImageView_ = new UIImageView();\r
+            if(nullptr == ImageView_)\r
+            {\r
+                return nullptr;\r
+            }\r
+\r
+            ImageView_->SetPosition(175, 150, 116, 120);\r
+            // ImageView_->SetAutoEnable(true);\r
+            // ImageView_->SetViewId(viewId);\r
+            ImageView_->SetSrc(NO_DATA_IMAGE);\r
+        }\r
+\r
+        if(nullptr == LabelExt1_)\r
+        {\r
+            LabelExt1_ = InitLabel(53, 330, 360, 35, 35, 30, STR_SCHEDULE_NO_DATA, 0xff999999);\r
+            if(nullptr == LabelExt1_)\r
+            {\r
+                return nullptr;\r
+            }\r
+        }\r
+\r
+        if(nullptr == LabelExt2_)\r
+        {\r
+            LabelExt2_ = InitLabel(53, 370, 360, 35, 35, 30, STR_SCHEDULE_NO_DATA_PROMPT, 0xff999999);\r
+            if(nullptr == LabelExt2_)\r
+            {\r
+                return nullptr;\r
+            }\r
+        }\r
+\r
+        NoDataGroup_->Add(LabelExt0_);\r
+        NoDataGroup_->Add(ImageView_);\r
+        NoDataGroup_->Add(LabelExt1_);\r
+        NoDataGroup_->Add(LabelExt2_);\r
+\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);\r
+        return NoDataGroup_;\r
+    }\r
+\r
+    UIViewGroup * ScheduleView::InitDataScreen()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);\r
+        if(nullptr == DataGroup_)\r
+        {\r
+            DataGroup_ = new UIViewGroup();\r
+            if(nullptr == DataGroup_)\r
+                return nullptr;\r
+        }\r
+        DataGroup_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        DataGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+        DataGroup_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
+        DataGroup_->SetOnDragListener(presenter_);\r
+        DataGroup_->SetTouchable(true);\r
+        DataGroup_->SetDraggable(true);\r
+\r
+        if(nullptr == ScheduleListAdapter_)\r
+        {\r
+            ScheduleListAdapter_ = new ScheduleListAdapter();\r
+            if(nullptr == ScheduleListAdapter_)\r
+                return nullptr;\r
+            \r
+            ScheduleListAdapter_->SetItemClickListener(presenter_);\r
+        }\r
+\r
+        if(nullptr == ScheduleList_)\r
+        {\r
+            ScheduleList_ = new UIList();\r
+            if(nullptr == ScheduleList_)\r
+            {\r
+                return nullptr;\r
+            }\r
+        }\r
+        ScheduleList_->SetPosition(LIST_LEFT, LIST_TOP, LIST_WIDTH, LIST_HEIGHT);\r
+        // ScheduleList_->SetScrollBlankSize(30);\r
+        // ScheduleList_->SetSelectPosition(VERTICAL_RESOLUTION / 2);\r
+        ScheduleList_->SetDraggable(true);\r
+        ScheduleList_->SetThrowDrag(true);\r
+        // ScheduleList_->EnableAutoAlign(true);\r
+        ScheduleList_->SetAdapter(ScheduleListAdapter_);\r
+        // ScheduleList_->SetScrollStateListener(presenter_);\r
+        ScheduleList_->SetMaxScrollDistance(1000); // 1000: max scroll distance\r
+        ScheduleList_->SetSwipeACCLevel(800); // 800: compensation distance\r
+        ScheduleList_->SetDragACCLevel(5); // 5: drag acceleration\r
+        ScheduleList_->SetYScrollBarVisible(false);\r
+\r
+        ScheduleList_->SetRotateFactor(2); // 增加表冠控制\r
+        ScheduleList_->RequestFocus();\r
+\r
+        DataGroup_->Add(ScheduleList_);\r
+\r
+        return DataGroup_;\r
+    }\r
+\r
+    UIScrollView * ScheduleView::InitContentScreen()\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);\r
+        if(nullptr == ContentGroup_)\r
+        {\r
+            ContentGroup_ = new UIScrollView();\r
+            if(nullptr == ContentGroup_)\r
+                return nullptr;\r
+        }\r
+        // ContentGroup_->SetViewIndex(ENUM_SCHEDULE_CONTENT_SCREEN);\r
+        ContentGroup_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        ContentGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+        ContentGroup_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
+        ContentGroup_->SetOnDragListener(presenter_);\r
+        ContentGroup_->SetTouchable(true);\r
+        ContentGroup_->SetDraggable(true);\r
+\r
+        ContentGroup_->SetScrollBlankSize(40);\r
+        ContentGroup_->SetReboundSize(40);\r
+        ContentGroup_->SetDirection(1);\r
+        ContentGroup_->SetMaxScrollDistance(1000);\r
+        ContentGroup_->SetThrowDrag(true);\r
+        ContentGroup_->RequestFocus();\r
+        ContentGroup_->SetRotateFactor(2);\r
+\r
+        if(nullptr == ContentLabelExt0_)\r
+        {\r
+            ContentLabelExt0_ = new UILabelExt();\r
+            if(nullptr == ContentLabelExt0_)\r
+                return nullptr;\r
+\r
+            ContentLabelExt0_->SetPosition(83, 50, 300, 35);\r
+            ContentLabelExt0_->SetStyle(STYLE_TEXT_FONT, 30);\r
+            ContentLabelExt0_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+            // ContentLabelExt0_->SetTextId(text_id);\r
+            ContentLabelExt0_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+            ContentLabelExt0_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+            ContentLabelExt0_->SetRollSpeed(70);\r
+            ContentLabelExt0_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            ContentLabelExt0_->SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);\r
+        }\r
+\r
+        if(nullptr == ContentLabelExt1_)\r
+        {\r
+            ContentLabelExt1_ = new UILabelExt();\r
+            if(nullptr == ContentLabelExt1_)\r
+                return nullptr;\r
+\r
+            ContentLabelExt1_->SetPosition(53, 0, 360, 35);\r
+            ContentLabelExt1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+            ContentLabelExt1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+            // ContentLabelExt1_->SetTextId(text_id);\r
+            ContentLabelExt1_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+            ContentLabelExt1_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+            ContentLabelExt1_->SetRollSpeed(70);\r
+            ContentLabelExt1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            ContentLabelExt1_->SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
+        }\r
+\r
+        if(nullptr == ContentLabelExt2_)\r
+        {\r
+            ContentLabelExt2_ = new UILabelExt();\r
+            if(nullptr == ContentLabelExt2_)\r
+                return nullptr;\r
+\r
+            ContentLabelExt2_->SetPosition(53, 0, 360, 35);\r
+            ContentLabelExt2_->SetStyle(STYLE_TEXT_FONT, 30);\r
+            ContentLabelExt2_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+            // ContentLabelExt2_->SetTextId(text_id);\r
+            ContentLabelExt2_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+            ContentLabelExt2_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+            ContentLabelExt2_->SetRollSpeed(70);\r
+            ContentLabelExt2_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            ContentLabelExt2_->SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
+        }\r
+\r
+        if(nullptr == ContentLabelExt3_)\r
+        {\r
+            ContentLabelExt3_ = new UILabelExt();\r
+            if(nullptr == ContentLabelExt3_)\r
+                return nullptr;\r
+\r
+            int16_t y = ContentLabelExt2_->GetHeight();\r
+            ContentLabelExt3_->SetPosition(53, 0, 360, 35);\r
+            ContentLabelExt3_->SetStyle(STYLE_TEXT_FONT, 30);\r
+            ContentLabelExt3_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+            // ContentLabelExt3_->SetTextId(text_id);\r
+            ContentLabelExt3_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+            ContentLabelExt3_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+            ContentLabelExt3_->SetRollSpeed(70);\r
+            ContentLabelExt3_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            ContentLabelExt3_->SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
+        }\r
+\r
+        if(nullptr == ContentButton0_)\r
+        {\r
+            ContentButton0_ = new UIButton();\r
+            if(nullptr == ContentButton0_)\r
+                return nullptr;\r
+\r
+            ContentButton0_->SetPosition(93, 0, 280, 90);\r
+            // ContentButton0_->SetViewId();\r
+            ContentButton0_->SetStyle(STYLE_BACKGROUND_COLOR, 0xfffd5213);\r
+            ContentButton0_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+            ContentButton0_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xfffd5213, UIButton::PRESSED);\r
+        }\r
+\r
+        if(nullptr == ContentButton1_)\r
+        {\r
+            ContentButton1_ = new UIButton();\r
+            if(nullptr == ContentButton1_)\r
+                return nullptr;\r
+\r
+            ContentButton1_->SetPosition(93, 0, 280, 90);\r
+            // ContentButton1_->SetViewId();\r
+            ContentButton1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+            ContentButton1_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+            ContentButton1_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);\r
+        }\r
+\r
+        ContentGroup_->Add(ContentLabelExt0_);\r
+        ContentGroup_->Add(ContentLabelExt1_);\r
+        ContentGroup_->Add(ContentLabelExt2_);\r
+        ContentGroup_->Add(ContentLabelExt3_);\r
+        ContentGroup_->Add(ContentButton0_);\r
+        ContentGroup_->Add(ContentButton1_);\r
+\r
+        return ContentGroup_;\r
+    }\r
+\r
+    UILabelExt * ScheduleView::InitLabel(int16_t x, int16_t y, int16_t width, int16_t height,\r
+                                            uint16_t line_height, uint8_t font_size, uint16_t text_id, uint32_t text_color)\r
+    {\r
+        UILabelExt * LabelExt = new UILabelExt();\r
+        if(nullptr == LabelExt)\r
+        {\r
+            return nullptr;\r
+        }\r
+\r
+        LabelExt->SetPosition(x, y, width, height);\r
+        LabelExt->SetStyle(STYLE_TEXT_FONT, font_size);\r
+        LabelExt->SetStyle(STYLE_LINE_HEIGHT, line_height);\r
+        LabelExt->SetTextId(text_id);\r
+        LabelExt->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        LabelExt->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        LabelExt->SetRollSpeed(70);\r
+        LabelExt->SetFont(DEFAULT_VECTOR_FONT_FILENAME, font_size);\r
+        LabelExt->SetStyle(STYLE_TEXT_COLOR, text_color);\r
+\r
+        return LabelExt;\r
+    }\r
+\r
+}
\ No newline at end of file
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/Schedule/IMAGE_ITEM_ARROW.bin
new file mode 100644 (file)
index 0000000..4822819
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cba8ef0eaffc79e3918a64cac8e3e607f0f3522b827f2e02e855dd03017dd846
+size 360