日程slice合并提交 1709/4
authorluozheng <1732036298@qq.com>
Wed, 26 Mar 2025 03:49:01 +0000 (11:49 +0800)
committerluozheng <1732036298@qq.com>
Wed, 26 Mar 2025 03:49:01 +0000 (11:49 +0800)
12 files changed:
code/sdk/application/wearable/fd230/nativeapp/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleData.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleListAdapter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleListItem.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/SchedulePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleListAdapter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleListItem.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/SchedulePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleView.cpp [new file with mode: 0644]

index cf9d615..96c027d 100644 (file)
@@ -119,7 +119,7 @@ typedef enum : uint16_t
   VIEW_DIALING_METHOD, // 拨号方式
   VIEW_TEST,           // 测试
   VIEW_CALCULATOR,     // 计算器
-  VIEW_SCHEDULE,       // schedule
+  VIEW_SCHEDULE,       // 日程
   VIEW_SLEEPMODE,      // sleep mode
   VIEW_SET_DESKTOP,    // 设置主题
   /*屏蔽Slice*/
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleData.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleData.h
new file mode 100644 (file)
index 0000000..72e7a26
--- /dev/null
@@ -0,0 +1,54 @@
+
+#ifndef __SCHEDULEDATA_H__
+#define __SCHEDULEDATA_H__
+
+// #include "ohos_types.h"
+#include <string>
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C" {
+#endif
+#endif
+
+// namespace OHOS
+// {
+    #define SCHEDULE_DATA_FILE "/user/userdata/scheduleData.bin"
+    #define SCHEDULE_DATA_DIRECTORY "/user/userdata/"
+
+    #define SCHEDULE_DATE_STR_MAX (8)
+    #define SCHEDULE_TOPIC_STR_MAX (64)
+    #define SCHEDULE_TIME_STR_MAX (16)
+    #define SCHEDULE_CONTENT_STR_MAX (256)
+
+    typedef struct
+    {
+        char date[SCHEDULE_DATE_STR_MAX];
+        char topic[SCHEDULE_TOPIC_STR_MAX];
+        char time[SCHEDULE_TIME_STR_MAX];
+        char content[SCHEDULE_CONTENT_STR_MAX];
+    }C_ScheduleRevData;
+
+    typedef struct
+    {
+        std::string date; // 7/8
+        std::string topic; // xxxx
+        std::string time; //10:30-14:00
+        std::string content; // yyyyyyy
+    }ScheduleRevData;
+
+    #define SCHEDULE_DATA_COUNT_MAX (20)
+
+    void C_ScheduleSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish);
+    int C_ScheduleDataReadFromFile(void);
+    int C_ScheduleDataWriteToFile(void); 
+// }
+
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleListAdapter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleListAdapter.h
new file mode 100644 (file)
index 0000000..e60be86
--- /dev/null
@@ -0,0 +1,32 @@
+
+#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 ClearListItem(void);
+
+        void SetItemClickListener(UIView::OnClickListener *itemClickListener);
+
+    private:
+        List<ScheduleListItemInfo> nodeList_;
+        UIView::OnClickListener * itemClickListener_;
+    };
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleListItem.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleListItem.h
new file mode 100644 (file)
index 0000000..3a3c125
--- /dev/null
@@ -0,0 +1,62 @@
+
+#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 ContentStr;
+        uint8_t OriginalDataIndex;
+        bool IsDateItem;
+        uint8_t ChildIndex;  // if(false == IsDateItem)
+    } ScheduleListItemInfo;
+
+
+    class ScheduleListItem : public UIViewGroup
+    {
+    public:
+        ScheduleListItem();
+        ~ScheduleListItem() override;
+        void SetItemInfo(const ScheduleListItemInfo &itemInfo);
+        void ResetItemStyle(const ScheduleListItemInfo &itemInfo);
+        void ResetHeight(bool val);
+
+
+    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"
+    };
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleModel.h
new file mode 100644 (file)
index 0000000..3e028f7
--- /dev/null
@@ -0,0 +1,56 @@
+\r
+#ifndef __SCHEDULEMODEL_H__\r
+#define __SCHEDULEMODEL_H__\r
+\r
+#include "ohos_types.h"\r
+#include "schedule/include/ScheduleListItem.h"\r
+#include "schedule/include/ScheduleData.h"\r
+\r
+\r
+namespace OHOS\r
+{\r
+    class ScheduleModel\r
+    {\r
+    public:\r
+        static ScheduleModel &GetInstance(void);\r
+\r
+        ScheduleListItemInfo * ScheduleAllItemDataGet(void);\r
+        uint8_t ScheduleItemDataCountGet(void);\r
+        uint8_t ScheduleOriginalDataCountGet(void);\r
+\r
+        std::string ScheduleItemDataDateStrGet(uint8_t index);\r
+        std::string ScheduleItemDataTopicStrGet(uint8_t index);\r
+        std::string ScheduleItemDataTimeStrGet(uint8_t index);\r
+        std::string ScheduleItemDataContentStrGet(uint8_t index);\r
+        uint8_t ScheduleItemDataOriginalDataIndexGet(uint8_t index);\r
+        \r
+        void ScheduleOriginalDataSetByApp(ScheduleRevData * data, uint8_t index, bool is_finish);\r
+        void ScheduleOriginalDataSetByUI(uint8_t index);\r
+\r
+        int ScheduleDataReadFromFile(void);\r
+        int ScheduleDataWriteToFile(void);\r
+\r
+        void DataStringToCharArray(void);\r
+        void DataCharArrayToString(uint8_t DataCount);\r
+\r
+    private:\r
+        ScheduleModel();\r
+        ~ScheduleModel();\r
+        ScheduleModel(const ScheduleModel &) = delete;\r
+        ScheduleModel &operator=(const ScheduleModel &) = delete;\r
+\r
+        void ScheduleItemDataCountSet(uint8_t count);\r
+        void ScheduleOriginalDataCountSet(uint8_t count);\r
+        void ScheduleOriginalDataToItemData(uint8_t DataCount);\r
+\r
+        // original data\r
+        ScheduleRevData ScheduleOriginalData_[SCHEDULE_DATA_COUNT_MAX] = {nullptr, nullptr, nullptr, nullptr};\r
+        C_ScheduleRevData C_ScheduleOriginalData_[SCHEDULE_DATA_COUNT_MAX] = {0};\r
+        // item data\r
+        ScheduleListItemInfo ScheduleItemData_[SCHEDULE_DATA_COUNT_MAX*2] = {nullptr, nullptr, nullptr, nullptr, 0, false, 0};\r
+        uint8_t ItemCount_{0};\r
+        uint8_t DataCount_{0};\r
+    };\r
+}\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/SchedulePresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/SchedulePresenter.h
new file mode 100644 (file)
index 0000000..a4e9ed1
--- /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>,\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/fd230/nativeapp/nativeui/schedule/include/ScheduleView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/include/ScheduleView.h
new file mode 100644 (file)
index 0000000..fe44f2b
--- /dev/null
@@ -0,0 +1,129 @@
+\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 "components/ui_label_button_ext.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
+    #define SCHEDULE_ViewId_NoDataGroup_ "SCHEDULE_ViewId_ContentDeleteButton_"\r
+    #define SCHEDULE_ViewId_DataGroup_ "SCHEDULE_ViewId_DataGroup_"\r
+    #define SCHEDULE_ViewId_ContentGroup_ "SCHEDULE_ViewId_ContentGroup_"\r
+    #define SCHEDULE_ViewId_DeleteGroup_ "SCHEDULE_ViewId_DeleteGroup_"\r
+\r
+    #define SCHEDULE_ViewId_ContentDeleteButton_ "SCHEDULE_ViewId_ContentDeleteButton_"\r
+    #define SCHEDULE_ViewId_ContentCloseButton_ "SCHEDULE_ViewId_ContentCloseButton_"\r
+    #define SCHEDULE_ViewId_DeleteCancelButton_ "SCHEDULE_ViewId_DeleteCancelButton_"\r
+    #define SCHEDULE_ViewId_DeleteOKButton_ "SCHEDULE_ViewId_DeleteOKButton_"\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 OnStop() override;\r
+\r
+        void ItemListAdd(const ScheduleListItemInfo &item);\r
+        void ItemListClear(void);\r
+        void ItemListContentUpdate(void);\r
+        void ItemListScrollByUpdate(bool isUpScroll = false);\r
+        \r
+        void ContentScreenItemIndexSet(uint8_t index);\r
+        uint8_t ContentScreenItemIndexGet(void);\r
+\r
+        void DisplayDataOrNoScreen(void);\r
+        void DisplayContentScreen(void);\r
+        void DisplayDeleteScreen(void);\r
+\r
+        void SetViewFocus(bool val);\r
+\r
+    private:\r
+\r
+        void ResetScheduleList(void);\r
+\r
+        UIViewGroup * InitNoDataScreen();\r
+        void DeinitNoDataScreen();\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
+\r
+        UIViewGroup * NoDataGroup_{nullptr};\r
+        UILabelExt * LabelExt0_{nullptr};\r
+        UIImageView * ImageView_{nullptr};\r
+        UILabelExt * LabelExt1_{nullptr};\r
+        UILabelExt * LabelExt2_{nullptr};\r
+\r
+\r
+        UIViewGroup * InitDataScreen();\r
+        void DeinitDataScreen();\r
+        UIViewGroup * DataGroup_{nullptr};\r
+        UIList * ScheduleList_{nullptr};\r
+        ScheduleListAdapter * ScheduleListAdapter_{nullptr};\r
+\r
+\r
+        UIScrollView * InitContentScreen();\r
+        void DeinitContentScreen();\r
+        UIScrollView * ContentGroup_{nullptr};\r
+        UILabelExt * ContentDateLabelExt_{nullptr};\r
+        UILabelExt * ContentTopicLabelExt_{nullptr};\r
+        UILabelExt * ContentTopicLabelExt1_{nullptr};\r
+        UILabelExt * ContentTimeLabelExt_{nullptr};\r
+        UILabelExt * ContentTimeLabelExt1_{nullptr};\r
+        UILabelExt * ContentContentLabelExt_{nullptr};\r
+        UILabelExt * ContentContentLabelExt1_{nullptr};\r
+        UILabelButtonExt * ContentDeleteButton_{nullptr};\r
+        UILabelButtonExt * ContentCloseButton_{nullptr};\r
+        uint8_t ContentItemIndex_{0};\r
+\r
+\r
+        UIViewGroup * InitDeleteScreen();\r
+        void DeinitDeleteScreen();\r
+        UIViewGroup * DeleteGroup_{nullptr};\r
+        UILabelExt * DeleteTitleLabelExt_{nullptr};\r
+        UILabelExt * DeletePromptLabelExt_{nullptr};\r
+        UILabelButtonExt * DeleteCancelButton_{nullptr};\r
+        UILabelButtonExt * DeleteOKButton_{nullptr};\r
+\r
+\r
+        void DisplaySelectScreen(uint8_t ScreenIndex);\r
+        typedef enum\r
+        {\r
+            ENUM_SCHEDULE_SCREEN_NO_DATA,\r
+            ENUM_SCHEDULE_SCREEN_LIST,\r
+            ENUM_SCHEDULE_SCREEN_CONTENT,\r
+            ENUM_SCHEDULE_SCREEN_DELETE,\r
+\r
+            ENUM_SCHEDULE_SCREEN_MAX\r
+        }ENUM_SCHEDULE_SCREEN;\r
+        UIViewGroup * ScreenGroupArray_[ENUM_SCHEDULE_SCREEN_MAX]{nullptr};\r
+\r
+\r
+        #define SCREEN_WIDTH (Screen::GetInstance().GetWidth())\r
+        #define SCREEN_HEIGHT (Screen::GetInstance().GetHeight())\r
+        #define LIST_LEFT (43)\r
+        #define LIST_TOP (50)\r
+        #define LIST_WIDTH (SCREEN_WIDTH - LIST_LEFT * 2)\r
+        #define LIST_HEIGHT (SCREEN_HEIGHT - 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/fd230/nativeapp/nativeui/schedule/src/ScheduleListAdapter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleListAdapter.cpp
new file mode 100644 (file)
index 0000000..83e52d7
--- /dev/null
@@ -0,0 +1,88 @@
+#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_LOGD(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_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:GetView", __LINE__);
+            item = new ScheduleListItem();
+            if (nullptr == item)
+                return nullptr;
+        } 
+        else 
+        {
+            WEARABLE_LOGD(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_);
+        }
+        if(nodeList_.Size() > 2 && index == nodeList_.Size() - 1)
+            item->ResetHeight(true);
+        else
+            item->ResetHeight(false);
+
+        return item;
+    }
+
+    uint16_t ScheduleListAdapter::GetCount()
+    {
+        return nodeList_.Size();
+    }
+
+    void ScheduleListAdapter::AddListItem(const ScheduleListItemInfo &item)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:AddListItem", __LINE__);
+        nodeList_.PushBack(item);
+    }
+
+    void ScheduleListAdapter::ClearListItem(void)
+    {
+        nodeList_.Clear();
+    }
+
+    void ScheduleListAdapter::SetItemClickListener(UIView::OnClickListener *itemClickListener)
+    {
+        itemClickListener_ = itemClickListener;
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleListItem.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleListItem.cpp
new file mode 100644 (file)
index 0000000..4163402
--- /dev/null
@@ -0,0 +1,157 @@
+
+#include "schedule/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(23);
+        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(23);
+        LabelExtTopic_.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        // LabelExtTopic_.SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);
+
+        LabelExtTime_.SetPosition(47, 57, 115, 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(23);
+        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_TRANSPARENT);
+        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();
+        InfoGroup_.RemoveAll();
+    }
+
+    void ScheduleListItem::SetItemInfo(const ScheduleListItemInfo &itemInfo)
+    {
+        if(true == itemInfo.IsDateItem)
+        {
+            LabelExtDate_.SetText(itemInfo.DateStr.c_str());
+        }
+        else
+        {
+            if(0 == (itemInfo.ChildIndex % 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_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:ResetItemStyle,%d,%d",
+                                    __LINE__, itemInfo.IsDateItem, itemInfo.ChildIndex);
+
+        if(true == itemInfo.IsDateItem)
+        {
+            // SetHeight(ITEM_HEIGHT- ITEM_GAP);
+
+            // InfoGroup_.SetHeight(ITEM_HEIGHT- ITEM_GAP);
+            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.ChildIndex % 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);
+            }
+        }
+    }
+
+    void ScheduleListItem::ResetHeight(bool val)
+    {
+        //防止list中元素超过3个后最后一个被遮住,且仅在最后一个元素设置其高度为160
+        if (val)
+        {
+            SetHeight(ITEM_HEIGHT + ITEM_GAP*3);
+        }
+        else
+        {
+            SetHeight(ITEM_HEIGHT + ITEM_GAP);
+        }
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleModel.cpp
new file mode 100644 (file)
index 0000000..fcfd984
--- /dev/null
@@ -0,0 +1,299 @@
+\r
+// #include <sys/stat.h>\r
+// #include <iostream>\r
+// #include <fstream>\r
+#include "schedule/include/ScheduleModel.h"\r
+#include "wearable_log.h"\r
+\r
+namespace OHOS\r
+{\r
+    ScheduleModel::ScheduleModel(){}\r
+\r
+    ScheduleModel::~ScheduleModel(){}\r
+\r
+    ScheduleModel &ScheduleModel::GetInstance()\r
+    {\r
+        static ScheduleModel instance;\r
+        return instance;\r
+    }\r
+\r
+    uint8_t ScheduleModel::ScheduleItemDataCountGet(void)\r
+    {\r
+        return ItemCount_;\r
+    }\r
+\r
+    void ScheduleModel::ScheduleItemDataCountSet(uint8_t count)\r
+    {\r
+        ItemCount_ = count;\r
+    }\r
+\r
+    uint8_t ScheduleModel::ScheduleOriginalDataCountGet(void)\r
+    {\r
+        return DataCount_;\r
+    }\r
+\r
+    void ScheduleModel::ScheduleOriginalDataCountSet(uint8_t count)\r
+    {\r
+        DataCount_ = count;\r
+    }\r
+\r
+    ScheduleListItemInfo *ScheduleModel::ScheduleAllItemDataGet(void)\r
+    {\r
+        return ScheduleItemData_;\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleItemDataDateStrGet(uint8_t index)\r
+    {\r
+        return ScheduleItemData_[index].DateStr.c_str();\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleItemDataTopicStrGet(uint8_t index)\r
+    {\r
+        return ScheduleItemData_[index].TopicStr.c_str();\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleItemDataTimeStrGet(uint8_t index)\r
+    {\r
+        return ScheduleItemData_[index].TimeStr.c_str();\r
+    }\r
+\r
+    std::string ScheduleModel::ScheduleItemDataContentStrGet(uint8_t index)\r
+    {\r
+        return ScheduleItemData_[index].ContentStr.c_str();\r
+    }\r
+\r
+    uint8_t ScheduleModel::ScheduleItemDataOriginalDataIndexGet(uint8_t index)\r
+    {\r
+        return ScheduleItemData_[index].OriginalDataIndex;\r
+    }\r
+\r
+    void ScheduleModel::ScheduleOriginalDataSetByApp(ScheduleRevData *data, uint8_t index, bool is_finish)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScheduleOriginalDataSetByApp,%d,%d", index, is_finish);\r
+        uint8_t len = 0;\r
+        if (index >= SCHEDULE_DATA_COUNT_MAX)\r
+        {\r
+            return;\r
+        }\r
+\r
+        ScheduleOriginalData_[index].date.assign(data->date);\r
+\r
+        len = ((SCHEDULE_TOPIC_STR_MAX - 1 > data->topic.length()) ? data->topic.length() : SCHEDULE_TOPIC_STR_MAX - 1);\r
+        ScheduleOriginalData_[index].topic.assign(data->topic, 0, len);\r
+\r
+        ScheduleOriginalData_[index].time.assign(data->time);\r
+\r
+        len = ((SCHEDULE_CONTENT_STR_MAX - 1 > data->content.length()) ? data->content.length() : SCHEDULE_CONTENT_STR_MAX - 1);\r
+        ScheduleOriginalData_[index].content.assign(data->content, 0, len);\r
+\r
+        if (true == is_finish)\r
+        {\r
+            uint8_t DataCount = index + 1;\r
+            ScheduleOriginalDataCountSet(DataCount);\r
+            ScheduleOriginalDataToItemData(DataCount);\r
+        }\r
+    }\r
+\r
+    void ScheduleModel::ScheduleOriginalDataSetByUI(uint8_t index)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleOriginalDataSetByUI,%d", index);\r
+\r
+        uint8_t DataCount = ScheduleOriginalDataCountGet();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScheduleModel::DataCount:%d", DataCount);\r
+        uint8_t i = 0;\r
+        for (i = index; i < (DataCount - 1); i++)\r
+        {\r
+            ScheduleOriginalData_[i].date.assign(ScheduleOriginalData_[i + 1].date);\r
+            ScheduleOriginalData_[i].topic.assign(ScheduleOriginalData_[i + 1].topic);\r
+            ScheduleOriginalData_[i].time.assign(ScheduleOriginalData_[i + 1].time);\r
+            ScheduleOriginalData_[i].content.assign(ScheduleOriginalData_[i + 1].content);\r
+        }\r
+\r
+        ScheduleOriginalData_[i].date.clear();\r
+        ScheduleOriginalData_[i].topic.clear();\r
+        ScheduleOriginalData_[i].time.clear();\r
+        ScheduleOriginalData_[i].content.clear();\r
+\r
+        DataCount -= 1;\r
+        ScheduleOriginalDataCountSet(DataCount);\r
+        ScheduleOriginalDataToItemData(DataCount);\r
+    }\r
+\r
+    void ScheduleModel::ScheduleOriginalDataToItemData(uint8_t DataCount)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleOriginalDataToItemData,%d", DataCount);\r
+        uint8_t i = 0;\r
+        uint8_t j = 0;\r
+\r
+        memset(ScheduleItemData_, 0x0, sizeof(ScheduleListItemInfo) * SCHEDULE_DATA_COUNT_MAX * 2);\r
+        ScheduleItemDataCountSet(0);\r
+\r
+        for (i = 0, j = 0; i < DataCount; i++)\r
+        {\r
+            if (0 == i)\r
+            {\r
+                ScheduleItemData_[j].DateStr.assign(ScheduleOriginalData_[i].date);\r
+                ScheduleItemData_[j].OriginalDataIndex = i;\r
+                ScheduleItemData_[j].IsDateItem = true;\r
+\r
+                j++;\r
+                ScheduleItemData_[j].DateStr.assign(ScheduleOriginalData_[i].date);\r
+                ScheduleItemData_[j].TopicStr.assign(ScheduleOriginalData_[i].topic);\r
+                ScheduleItemData_[j].TimeStr.assign(ScheduleOriginalData_[i].time);\r
+                ScheduleItemData_[j].ContentStr.assign(ScheduleOriginalData_[i].content);\r
+                ScheduleItemData_[j].OriginalDataIndex = i;\r
+                ScheduleItemData_[j].IsDateItem = false;\r
+                ScheduleItemData_[j].ChildIndex = 0;\r
+            }\r
+            else\r
+            {\r
+                if (0 == ScheduleOriginalData_[i].date.compare(ScheduleOriginalData_[i - 1].date))\r
+                {\r
+                    j++;\r
+                    ScheduleItemData_[j].DateStr.assign(ScheduleOriginalData_[i].date);\r
+                    ScheduleItemData_[j].TopicStr.assign(ScheduleOriginalData_[i].topic);\r
+                    ScheduleItemData_[j].TimeStr.assign(ScheduleOriginalData_[i].time);\r
+                    ScheduleItemData_[j].ContentStr.assign(ScheduleOriginalData_[i].content);\r
+                    ScheduleItemData_[j].OriginalDataIndex = i;\r
+                    ScheduleItemData_[j].IsDateItem = false;\r
+                    ScheduleItemData_[j].ChildIndex = ScheduleItemData_[j - 1].ChildIndex + 1;\r
+                }\r
+                else\r
+                {\r
+                    j++;\r
+                    ScheduleItemData_[j].DateStr.assign(ScheduleOriginalData_[i].date);\r
+                    ScheduleItemData_[j].OriginalDataIndex = i;\r
+                    ScheduleItemData_[j].IsDateItem = true;\r
+\r
+                    j++;\r
+                    ScheduleItemData_[j].DateStr.assign(ScheduleOriginalData_[i].date);\r
+                    ScheduleItemData_[j].TopicStr.assign(ScheduleOriginalData_[i].topic);\r
+                    ScheduleItemData_[j].TimeStr.assign(ScheduleOriginalData_[i].time);\r
+                    ScheduleItemData_[j].ContentStr.assign(ScheduleOriginalData_[i].content);\r
+                    ScheduleItemData_[j].OriginalDataIndex = i;\r
+                    ScheduleItemData_[j].IsDateItem = false;\r
+                    ScheduleItemData_[j].ChildIndex = 0;\r
+                }\r
+            }\r
+\r
+            if ((SCHEDULE_DATA_COUNT_MAX * 2) <= j)\r
+            {\r
+                break;\r
+            }\r
+        }\r
+\r
+        if (0 != DataCount)\r
+        {\r
+            uint8_t ItemCount = j + 1;\r
+            ScheduleItemDataCountSet(ItemCount);\r
+        }\r
+\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScheduleModel::ScheduleOriginalDataToItemData,%d,%s", j, ScheduleItemData_[0].DateStr.c_str());\r
+    }\r
+\r
+    void ScheduleModel::DataStringToCharArray(void)\r
+    {\r
+        uint8_t DataCount = ScheduleOriginalDataCountGet();\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:DataStringToCharArray,%d", __LINE__, DataCount);\r
+\r
+        memset(C_ScheduleOriginalData_, 0x0, sizeof(C_ScheduleRevData) * SCHEDULE_DATA_COUNT_MAX);\r
+\r
+        uint8_t i = 0;\r
+        for (i = 0; i < DataCount; i++)\r
+        {\r
+            memcpy(C_ScheduleOriginalData_[i].date, ScheduleOriginalData_[i].date.c_str(), SCHEDULE_DATE_STR_MAX - 1);\r
+            memcpy(C_ScheduleOriginalData_[i].topic, ScheduleOriginalData_[i].topic.c_str(), SCHEDULE_TOPIC_STR_MAX - 1);\r
+            memcpy(C_ScheduleOriginalData_[i].time, ScheduleOriginalData_[i].time.c_str(), SCHEDULE_TIME_STR_MAX - 1);\r
+            memcpy(C_ScheduleOriginalData_[i].content, ScheduleOriginalData_[i].content.c_str(), SCHEDULE_CONTENT_STR_MAX - 1);\r
+        }\r
+    }\r
+\r
+    void ScheduleModel::DataCharArrayToString(uint8_t DataCount)\r
+    {\r
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:DataCharArrayToString,%d", __LINE__, DataCount);\r
+\r
+        uint8_t i = 0;\r
+        for (i = 0; i < DataCount; i++)\r
+        {\r
+            ScheduleOriginalData_[i].date.assign(C_ScheduleOriginalData_[i].date);\r
+            ScheduleOriginalData_[i].topic.assign(C_ScheduleOriginalData_[i].topic);\r
+            ScheduleOriginalData_[i].time.assign(C_ScheduleOriginalData_[i].time);\r
+            ScheduleOriginalData_[i].content.assign(C_ScheduleOriginalData_[i].content);\r
+        }\r
+        ScheduleOriginalDataCountSet(DataCount);\r
+    }\r
+\r
+    // int C_ScheduleDataReadFromFile(void)\r
+    int ScheduleModel::ScheduleDataReadFromFile(void)\r
+    {\r
+        FILE *fp = fopen(SCHEDULE_DATA_FILE, "rb");\r
+        if (fp == nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:C_ScheduleDataReadFromFile", __LINE__);\r
+            return OHOS_FAILURE;\r
+        }\r
+\r
+        fseek(fp, 0, SEEK_END);\r
+        int len = ftell(fp);\r
+        fseek(fp, 0, SEEK_SET);\r
+        uint8_t DataCount = len / sizeof(C_ScheduleRevData);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:%d,%d", __LINE__, DataCount, len);\r
+        fread((char *)C_ScheduleOriginalData_, sizeof(C_ScheduleRevData), DataCount, fp);\r
+        fclose(fp);\r
+\r
+        DataCharArrayToString(DataCount);\r
+\r
+        ScheduleOriginalDataCountSet(DataCount);\r
+        ScheduleOriginalDataToItemData(DataCount);\r
+\r
+        return OHOS_SUCCESS;\r
+    }\r
+\r
+    // int C_ScheduleDataWriteToFile(void)\r
+    int ScheduleModel::ScheduleDataWriteToFile(void)\r
+    {\r
+        uint8_t DataCount = ScheduleOriginalDataCountGet();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile,%d", __LINE__, DataCount);\r
+        if (0 == DataCount)\r
+        {\r
+            return OHOS_FAILURE;\r
+        }\r
+\r
+        FILE *fp = fopen(SCHEDULE_DATA_FILE, "wb+");\r
+        if (nullptr == fp)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile fail", __LINE__);\r
+            return OHOS_FAILURE;\r
+        }\r
+\r
+        DataStringToCharArray();\r
+\r
+        size_t ret = fwrite(C_ScheduleOriginalData_, sizeof(C_ScheduleRevData), DataCount, fp);\r
+        if (DataCount != ret)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile fail", __LINE__);\r
+        }\r
+        fclose(fp);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:ScheduleDataWriteToFile success", __LINE__);\r
+\r
+        return OHOS_SUCCESS;\r
+    }\r
+}\r
+\r
+// c func\r
+void C_ScheduleSetByApp(ScheduleRevData *data, uint8_t index, bool is_finish)\r
+{\r
+    OHOS::ScheduleModel::GetInstance().ScheduleOriginalDataSetByApp(data, index, is_finish);\r
+}\r
+\r
+int C_ScheduleDataReadFromFile(void)\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:C_ScheduleDataReadFromFile", __LINE__);\r
+    return OHOS::ScheduleModel::GetInstance().ScheduleDataReadFromFile();\r
+}\r
+\r
+int C_ScheduleDataWriteToFile(void)\r
+{\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:C_ScheduleDataWriteToFile", __LINE__);\r
+    return OHOS::ScheduleModel::GetInstance().ScheduleDataWriteToFile();\r
+}\r
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/SchedulePresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/SchedulePresenter.cpp
new file mode 100644 (file)
index 0000000..15504ed
--- /dev/null
@@ -0,0 +1,159 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-06-20 15:11:17\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-12-13 16:28:48\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
+#include "schedule/include/ScheduleView.h"\r
+#include "NativeRegisterManager.h"\r
+namespace OHOS\r
+{\r
+    REGIST_MENU_PRO(VIEW_SCHEDULE, ScheduleView, SchedulePresenter,\r
+        PNG_APPLIST_SCHEDULE_IMAGE_BIG, PNG_APPLIST_SCHEDULE_IMAGE,PNG_APPLIST_SCHEDULE_IMAGE, "日程", STR_SCHEDULE);\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
+    }\r
+\r
+    // 页面已经展示后的调用逻辑\r
+    void SchedulePresenter::OnResume(void)\r
+    {\r
+        Presenter<ScheduleView>::OnResume();\r
+        if (nullptr == view_)\r
+        {\r
+            return;\r
+        }\r
+\r
+        view_->ItemListContentUpdate();\r
+    }\r
+\r
+    // 页面准备切换到后台前执行的逻辑\r
+    void SchedulePresenter::OnPause(void)\r
+    {\r
+        Presenter<ScheduleView>::OnPause();\r
+    }\r
+\r
+    // 页面完全置于后台时的逻辑。\r
+    void SchedulePresenter::OnStop(void)\r
+    {\r
+    }\r
+\r
+    bool SchedulePresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        UNUSED(event);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:OnClick", __LINE__);\r
+\r
+        // if (nullptr == &view) \r
+        // {\r
+        //     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:OnClick", __LINE__);\r
+        //     return false;\r
+        // }\r
+\r
+        if(0 == strcmp(view.GetViewId(), SCHEDULE_ViewId_ContentDeleteButton_))\r
+        {\r
+            view_->DisplayDeleteScreen();\r
+            return true;\r
+        }\r
+        if(0 == strcmp(view.GetViewId(), SCHEDULE_ViewId_ContentCloseButton_))\r
+        {\r
+            view_->DisplayDataOrNoScreen();\r
+            return true;\r
+        }\r
+\r
+        if(0 == strcmp(view.GetViewId(), SCHEDULE_ViewId_DeleteCancelButton_))\r
+        {\r
+            view_->DisplayContentScreen();\r
+            return true;\r
+        }\r
+        if(0 == strcmp(view.GetViewId(), SCHEDULE_ViewId_DeleteOKButton_))\r
+        {\r
+            ScheduleModel_->ScheduleOriginalDataSetByUI(view_->ContentScreenItemIndexGet() / 2);\r
+            view_->ItemListContentUpdate();\r
+            view_->DisplayDataOrNoScreen();\r
+            view_->ItemListScrollByUpdate();\r
+            return true;\r
+        }\r
+\r
+        ScheduleListItem * item = static_cast<ScheduleListItem *>(&view);\r
+        view_->ContentScreenItemIndexSet(item->GetViewIndex());\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:OnClick,index:%d", __LINE__,item->GetViewIndex());\r
+        view_->DisplayContentScreen();\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
+            if(0 == strcmp(view.GetViewId(), SCHEDULE_ViewId_ContentGroup_))\r
+            {\r
+                view_->DisplayDataOrNoScreen();\r
+                return true;\r
+            }\r
+            if(0 == strcmp(view.GetViewId(), SCHEDULE_ViewId_DeleteGroup_))\r
+            {\r
+                view_->DisplayContentScreen();\r
+                return true;\r
+            }\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 == 1 && 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/fd230/nativeapp/nativeui/schedule/src/ScheduleView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/schedule/src/ScheduleView.cpp
new file mode 100644 (file)
index 0000000..e1d50d8
--- /dev/null
@@ -0,0 +1,802 @@
+\r
+#include "schedule/include/ScheduleView.h"\r
+#include "UiConfig.h"\r
+#include "wearable_log.h"\r
+\r
+namespace OHOS\r
+{\r
+    static ScheduleView * p_ScheduleViewInstance = nullptr;\r
+\r
+    ScheduleView::ScheduleView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScheduleView::ScheduleView");\r
+        p_ScheduleViewInstance = this;\r
+    }\r
+\r
+    ScheduleView::~ScheduleView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScheduleView::~ScheduleView");\r
+        DeinitNoDataScreen();\r
+        DeinitDataScreen();\r
+        DeinitContentScreen();\r
+        DeinitDeleteScreen();\r
+        p_ScheduleViewInstance = nullptr;\r
+    }\r
+\r
+    ScheduleView * ScheduleView::GetInstance()\r
+    {\r
+        return p_ScheduleViewInstance;\r
+    }\r
+\r
+    void ScheduleView::OnStart()\r
+    {\r
+        ScreenGroupArray_[ENUM_SCHEDULE_SCREEN_NO_DATA] = InitNoDataScreen();\r
+        ScreenGroupArray_[ENUM_SCHEDULE_SCREEN_LIST] = InitDataScreen();\r
+        ScreenGroupArray_[ENUM_SCHEDULE_SCREEN_CONTENT] = InitContentScreen();\r
+        ScreenGroupArray_[ENUM_SCHEDULE_SCREEN_DELETE] = InitDeleteScreen();\r
+\r
+        uint8_t i = 0;\r
+        for(i = 0; i < ENUM_SCHEDULE_SCREEN_MAX; i++)\r
+        {\r
+            if(nullptr != ScreenGroupArray_[i])\r
+            {\r
+                AddViewToRootContainer(ScreenGroupArray_[i]);\r
+            }\r
+        }\r
+\r
+        DisplayDataOrNoScreen();\r
+    }\r
+\r
+    void ScheduleView::OnStop()\r
+    {\r
+        \r
+    }\r
+\r
+    void ScheduleView::DisplaySelectScreen(uint8_t ScreenIndex)\r
+    {\r
+        if(ENUM_SCHEDULE_SCREEN_MAX <= ScreenIndex)\r
+        {\r
+            return;\r
+        }\r
+\r
+        uint8_t i = 0;\r
+        for(i = 0; i < ENUM_SCHEDULE_SCREEN_MAX; i++)\r
+        {\r
+            if(nullptr != ScreenGroupArray_[i])\r
+            {\r
+                if(i == ScreenIndex)\r
+                {\r
+                    ScreenGroupArray_[i]->SetVisible(true);\r
+                }\r
+                else\r
+                {\r
+                    ScreenGroupArray_[i]->SetVisible(false);\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    void ScheduleView::DisplayDataOrNoScreen(void)\r
+    {\r
+        if(0 == ScheduleModel::GetInstance().ScheduleItemDataCountGet())\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:DisplayMainScreen", __LINE__);\r
+            DisplaySelectScreen(ENUM_SCHEDULE_SCREEN_NO_DATA);\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]:DisplayMainScreen", __LINE__);\r
+            DisplaySelectScreen(ENUM_SCHEDULE_SCREEN_LIST);\r
+\r
+            ResetScheduleList();\r
+            SetViewFocus(true);//列表获取聚焦\r
+            ScheduleList_->RefreshList();\r
+        }\r
+    }\r
+\r
+    void ScheduleView::DisplayContentScreen(void)\r
+    {\r
+        DisplaySelectScreen(ENUM_SCHEDULE_SCREEN_CONTENT);\r
+        SetViewFocus(false);//数据显示视图获取聚焦\r
+\r
+        uint8_t index = ContentScreenItemIndexGet();\r
+        ContentDateLabelExt_->SetText(ScheduleModel::GetInstance().ScheduleItemDataDateStrGet(index).c_str());\r
+\r
+        int16_t temp_y = 0;\r
+        temp_y = ContentDateLabelExt_->GetY() + ContentDateLabelExt_->GetHeight() + 50;\r
+        ContentTopicLabelExt_->SetY(temp_y);\r
+        ContentTopicLabelExt1_->SetY(temp_y);\r
+        ContentTopicLabelExt1_->SetText(ScheduleModel::GetInstance().ScheduleItemDataTopicStrGet(index).c_str());\r
+\r
+        temp_y = ContentTopicLabelExt_->GetY() + ContentTopicLabelExt_->GetHeight() + 20;\r
+        ContentTimeLabelExt_->SetY(temp_y);\r
+        ContentTimeLabelExt1_->SetY(temp_y);\r
+        ContentTimeLabelExt1_->SetText(ScheduleModel::GetInstance().ScheduleItemDataTimeStrGet(index).c_str());\r
+\r
+        if(true == ScheduleModel::GetInstance().ScheduleItemDataContentStrGet(index).empty())\r
+        {\r
+            ContentContentLabelExt_->SetVisible(false);\r
+            ContentContentLabelExt1_->SetVisible(false);\r
+\r
+            temp_y = ContentTimeLabelExt_->GetY() + ContentTimeLabelExt_->GetHeight() + 50;\r
+            ContentDeleteButton_->SetY(temp_y);\r
+        }\r
+        else\r
+        {\r
+            ContentContentLabelExt_->SetVisible(true);\r
+            ContentContentLabelExt1_->SetVisible(true);\r
+\r
+            temp_y = ContentTimeLabelExt_->GetY() + ContentTimeLabelExt_->GetHeight() + 20;\r
+            ContentContentLabelExt_->SetY(temp_y);\r
+            ContentContentLabelExt1_->SetY(temp_y);\r
+            ContentContentLabelExt1_->SetText(ScheduleModel::GetInstance().ScheduleItemDataContentStrGet(index).c_str());\r
+\r
+            temp_y = ContentContentLabelExt1_->GetY() + ContentContentLabelExt1_->GetHeight() + 50;\r
+            ContentDeleteButton_->SetY(temp_y);\r
+        }\r
+\r
+        temp_y = ContentDeleteButton_->GetY() + ContentDeleteButton_->GetHeight() + 20;\r
+        ContentCloseButton_->SetY(temp_y);\r
+    }\r
+\r
+    void ScheduleView::DisplayDeleteScreen(void)\r
+    {\r
+        DisplaySelectScreen(ENUM_SCHEDULE_SCREEN_DELETE);\r
+    }\r
+\r
+    void ScheduleView::DeinitNoDataScreen()\r
+    {\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
+    }\r
+\r
+    UIViewGroup * ScheduleView::InitNoDataScreen()\r
+    {\r
+        WEARABLE_LOGD(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_WIDTH, SCREEN_HEIGHT);\r
+            NoDataGroup_->SetViewId(SCHEDULE_ViewId_NoDataGroup_);\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_->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
+\r
+        return NoDataGroup_;\r
+    }\r
+\r
+    void ScheduleView::DeinitDataScreen()\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
+    }\r
+\r
+    UIViewGroup * ScheduleView::InitDataScreen()\r
+    {\r
+        WEARABLE_LOGD(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_WIDTH, SCREEN_HEIGHT);\r
+            DataGroup_->SetViewId(SCHEDULE_ViewId_DataGroup_);\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_->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(200); // 800: compensation distance\r
+            ScheduleList_->SetDragACCLevel(5); // 5: drag acceleration\r
+            ScheduleList_->SetYScrollBarVisible(false);\r
+\r
+            // ScheduleList_->SetScrollBlankSize(40);\r
+            ScheduleList_->SetReboundSize(30);\r
+\r
+            ScheduleList_->SetRotateFactor(2); // 增加表冠控制\r
+            ScheduleList_->RequestFocus();\r
+            ResetScheduleList();\r
+\r
+            DataGroup_->Add(ScheduleList_);\r
+        }\r
+\r
+        return DataGroup_;\r
+    }\r
+\r
+    void ScheduleView::DeinitContentScreen()\r
+    {\r
+        if(nullptr != ContentGroup_)\r
+        {\r
+            ContentGroup_->RemoveAll();\r
+            if(nullptr != ContentDateLabelExt_)\r
+            {\r
+                delete ContentDateLabelExt_;\r
+                ContentDateLabelExt_ = nullptr;\r
+            }\r
+            if(nullptr != ContentTopicLabelExt_)\r
+            {\r
+                delete ContentTopicLabelExt_;\r
+                ContentTopicLabelExt_ = nullptr;\r
+            }\r
+            if(nullptr != ContentTopicLabelExt1_)\r
+            {\r
+                delete ContentTopicLabelExt1_;\r
+                ContentTopicLabelExt1_ = nullptr;\r
+            }\r
+            if(nullptr != ContentTimeLabelExt_)\r
+            {\r
+                delete ContentTimeLabelExt_;\r
+                ContentTimeLabelExt_ = nullptr;\r
+            }\r
+            if(nullptr != ContentTimeLabelExt1_)\r
+            {\r
+                delete ContentTimeLabelExt1_;\r
+                ContentTimeLabelExt1_ = nullptr;\r
+            }\r
+            if(nullptr != ContentContentLabelExt_)\r
+            {\r
+                delete ContentContentLabelExt_;\r
+                ContentContentLabelExt_ = nullptr;\r
+            }\r
+            if(nullptr != ContentContentLabelExt1_)\r
+            {\r
+                delete ContentContentLabelExt1_;\r
+                ContentContentLabelExt1_ = nullptr;\r
+            }\r
+            if(nullptr != ContentDeleteButton_)\r
+            {\r
+                delete ContentDeleteButton_;\r
+                ContentDeleteButton_ = nullptr;\r
+            }\r
+            if(nullptr != ContentCloseButton_)\r
+            {\r
+                delete ContentCloseButton_;\r
+                ContentCloseButton_ = nullptr;\r
+            }\r
+            \r
+            delete ContentGroup_;\r
+            ContentGroup_ = nullptr;\r
+        }\r
+    }\r
+\r
+    UIScrollView * ScheduleView::InitContentScreen()\r
+    {\r
+        WEARABLE_LOGD(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_WIDTH, SCREEN_HEIGHT);\r
+            ContentGroup_->SetViewId(SCHEDULE_ViewId_ContentGroup_);\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 == ContentDateLabelExt_)\r
+            {\r
+                ContentDateLabelExt_ = new UILabelExt();\r
+                if(nullptr == ContentDateLabelExt_)\r
+                    return nullptr;\r
+\r
+                ContentDateLabelExt_->SetPosition(83, 50, 300, 35);\r
+                ContentDateLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                ContentDateLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                // ContentDateLabelExt_->SetTextId(text_id);\r
+                ContentDateLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                ContentDateLabelExt_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+                ContentDateLabelExt_->SetRollSpeed(23);\r
+                ContentDateLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                ContentDateLabelExt_->SetStyle(STYLE_TEXT_COLOR, 0xffff5a36);\r
+            }\r
+\r
+            if(nullptr == ContentTopicLabelExt_)\r
+            {\r
+                ContentTopicLabelExt_ = new UILabelExt();\r
+                if(nullptr == ContentTopicLabelExt_)\r
+                    return nullptr;\r
+\r
+                ContentTopicLabelExt_->SetPosition(53, 0, 360, 35);\r
+                ContentTopicLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                ContentTopicLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                ContentTopicLabelExt_->SetTextId(STR_SCHEDULE_TOPIC);\r
+                // ContentTopicLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                ContentTopicLabelExt_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+                ContentTopicLabelExt_->SetRollSpeed(23);\r
+                ContentTopicLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                ContentTopicLabelExt_->SetStyle(STYLE_TEXT_COLOR, 0xff999999);\r
+            \r
+                if(nullptr == ContentTopicLabelExt1_)\r
+                {\r
+                    ContentTopicLabelExt1_ = new UILabelExt();\r
+                    if(nullptr == ContentTopicLabelExt1_)\r
+                        return nullptr;\r
+\r
+                    uint16 x = ContentTopicLabelExt_->GetX();\r
+                    uint16 w = ContentTopicLabelExt_->GetTextWidth();\r
+                    ContentTopicLabelExt1_->SetPosition(x + w + 5, 0, 360 - w - 5, 35);\r
+                    ContentTopicLabelExt1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                    ContentTopicLabelExt1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                    ContentTopicLabelExt1_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                    ContentTopicLabelExt1_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+                    ContentTopicLabelExt1_->SetRollSpeed(23);\r
+                    ContentTopicLabelExt1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                    ContentTopicLabelExt1_->SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
+                }\r
+            }\r
+\r
+            if(nullptr == ContentTimeLabelExt_)\r
+            {\r
+                ContentTimeLabelExt_ = new UILabelExt();\r
+                if(nullptr == ContentTimeLabelExt_)\r
+                    return nullptr;\r
+\r
+                ContentTimeLabelExt_->SetPosition(53, 0, 360, 35);\r
+                ContentTimeLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                ContentTimeLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                ContentTimeLabelExt_->SetTextId(STR_SCHEDULE_TIME);\r
+                // ContentTimeLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                ContentTimeLabelExt_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+                ContentTimeLabelExt_->SetRollSpeed(23);\r
+                ContentTimeLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                ContentTimeLabelExt_->SetStyle(STYLE_TEXT_COLOR, 0xff999999);\r
+\r
+                if(nullptr == ContentTimeLabelExt1_)\r
+                {\r
+                    ContentTimeLabelExt1_ = new UILabelExt();\r
+                    if(nullptr == ContentTimeLabelExt1_)\r
+                        return nullptr;\r
+\r
+                    uint16 x = ContentTimeLabelExt_->GetX();\r
+                    uint16 w = ContentTimeLabelExt_->GetTextWidth();\r
+                    ContentTimeLabelExt1_->SetPosition(x + w + 5, 0, 360 - w - 5, 35);\r
+                    ContentTimeLabelExt1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                    ContentTimeLabelExt1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                    ContentTimeLabelExt1_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                    ContentTimeLabelExt1_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+                    ContentTimeLabelExt1_->SetRollSpeed(23);\r
+                    ContentTimeLabelExt1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                    ContentTimeLabelExt1_->SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
+                }\r
+            }\r
+\r
+            if(nullptr == ContentContentLabelExt_)\r
+            {\r
+                ContentContentLabelExt_ = new UILabelExt();\r
+                if(nullptr == ContentContentLabelExt_)\r
+                    return nullptr;\r
+\r
+                ContentContentLabelExt_->SetPosition(53, 0, 360, 35);\r
+                ContentContentLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                ContentContentLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                ContentContentLabelExt_->SetTextId(STR_SCHEDULE_NOTES);\r
+                // ContentContentLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+                ContentContentLabelExt_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+                ContentContentLabelExt_->SetRollSpeed(23);\r
+                ContentContentLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                ContentContentLabelExt_->SetStyle(STYLE_TEXT_COLOR, 0xff999999);\r
+\r
+                if(nullptr == ContentContentLabelExt1_)\r
+                {\r
+                    ContentContentLabelExt1_ = new UILabelExt();\r
+                    if(nullptr == ContentContentLabelExt1_)\r
+                        return nullptr;\r
+\r
+                    uint16 x = ContentContentLabelExt_->GetX();\r
+                    uint16 w = ContentContentLabelExt_->GetTextWidth();\r
+                    ContentContentLabelExt1_->SetPosition(x + w + 5, 0, 360 - w - 5, 35);\r
+                    ContentContentLabelExt1_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                    ContentContentLabelExt1_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                    ContentContentLabelExt1_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+                    ContentContentLabelExt1_->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_TOP);\r
+                    ContentContentLabelExt1_->SetRollSpeed(23);\r
+                    ContentContentLabelExt1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                    ContentContentLabelExt1_->SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
+                }\r
+            }\r
+\r
+            if(nullptr == ContentDeleteButton_)\r
+            {\r
+                ContentDeleteButton_ = new UILabelButtonExt();\r
+                if(nullptr == ContentDeleteButton_)\r
+                    return nullptr;\r
+\r
+                ContentDeleteButton_->SetPosition(93, 0, 280, 90);\r
+                ContentDeleteButton_->SetViewId(SCHEDULE_ViewId_ContentDeleteButton_);\r
+                ContentDeleteButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xfffd5213);\r
+                ContentDeleteButton_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+                ContentDeleteButton_->SetStyle(STYLE_BORDER_RADIUS, 100);\r
+                ContentDeleteButton_->SetTextId(STR_DELETE);\r
+                ContentDeleteButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                ContentDeleteButton_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                ContentDeleteButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xfffd5213, UIButton::PRESSED);\r
+                ContentDeleteButton_->SetOnClickListener(presenter_);\r
+            }\r
+\r
+            if(nullptr == ContentCloseButton_)\r
+            {\r
+                ContentCloseButton_ = new UILabelButtonExt();\r
+                if(nullptr == ContentCloseButton_)\r
+                    return nullptr;\r
+\r
+                ContentCloseButton_->SetPosition(93, 0, 280, 90);\r
+                ContentCloseButton_->SetViewId(SCHEDULE_ViewId_ContentCloseButton_);\r
+                ContentCloseButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+                ContentCloseButton_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+                ContentCloseButton_->SetStyle(STYLE_BORDER_RADIUS, 100);\r
+                ContentCloseButton_->SetTextId(STR_CLOSE);\r
+                ContentCloseButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                ContentCloseButton_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                ContentCloseButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);\r
+                ContentCloseButton_->SetOnClickListener(presenter_);\r
+            }\r
+\r
+            ContentGroup_->Add(ContentDateLabelExt_);\r
+            ContentGroup_->Add(ContentTopicLabelExt_);\r
+            ContentGroup_->Add(ContentTopicLabelExt1_);\r
+            ContentGroup_->Add(ContentTimeLabelExt_);\r
+            ContentGroup_->Add(ContentTimeLabelExt1_);\r
+            ContentGroup_->Add(ContentContentLabelExt_);\r
+            ContentGroup_->Add(ContentContentLabelExt1_);\r
+            ContentGroup_->Add(ContentDeleteButton_);\r
+            ContentGroup_->Add(ContentCloseButton_);\r
+        }\r
+\r
+        return ContentGroup_;\r
+    }\r
+\r
+    void ScheduleView::DeinitDeleteScreen()\r
+    {\r
+        if(nullptr != DeleteGroup_)\r
+        {\r
+            DeleteGroup_->RemoveAll();\r
+            if(nullptr != DeleteTitleLabelExt_)\r
+            {\r
+                delete DeleteTitleLabelExt_;\r
+                DeleteTitleLabelExt_ = nullptr;\r
+            }\r
+            if(nullptr != DeletePromptLabelExt_)\r
+            {\r
+                delete DeletePromptLabelExt_;\r
+                DeletePromptLabelExt_ = nullptr;\r
+            }\r
+            if(nullptr != DeleteCancelButton_)\r
+            {\r
+                delete DeleteCancelButton_;\r
+                DeleteCancelButton_ = nullptr;\r
+            }\r
+            if(nullptr != DeleteOKButton_)\r
+            {\r
+                delete DeleteOKButton_;\r
+                DeleteOKButton_ = nullptr;\r
+            }\r
+            \r
+            delete DeleteGroup_;\r
+            DeleteGroup_ = nullptr;\r
+        }\r
+    }\r
+\r
+    UIViewGroup * ScheduleView::InitDeleteScreen()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%d]", __LINE__);\r
+        if(nullptr == DeleteGroup_)\r
+        {\r
+            DeleteGroup_ = new UIViewGroup();\r
+            if(nullptr == DeleteGroup_)\r
+                return nullptr;\r
+\r
+            DeleteGroup_->SetPosition(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);\r
+            DeleteGroup_->SetViewId(SCHEDULE_ViewId_DeleteGroup_);\r
+            DeleteGroup_->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);\r
+            DeleteGroup_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
+            DeleteGroup_->SetTouchable(true);\r
+            DeleteGroup_->SetDraggable(true);\r
+            DeleteGroup_->SetOnDragListener(presenter_);\r
+\r
+            if(nullptr == DeleteTitleLabelExt_)\r
+            {\r
+                DeleteTitleLabelExt_ = new UILabelExt();\r
+                if(nullptr == DeleteTitleLabelExt_)\r
+                    return nullptr;\r
+\r
+                DeleteTitleLabelExt_->SetPosition(83, 50, 300, 35);\r
+                DeleteTitleLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                DeleteTitleLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                DeleteTitleLabelExt_->SetTextId(STR_DELETE);\r
+                DeleteTitleLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+                DeleteTitleLabelExt_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+                DeleteTitleLabelExt_->SetRollSpeed(23);\r
+                DeleteTitleLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                DeleteTitleLabelExt_->SetStyle(STYLE_TEXT_COLOR, Color::White().full);\r
+            }\r
+\r
+            if(nullptr == DeletePromptLabelExt_)\r
+            {\r
+                DeletePromptLabelExt_ = new UILabelExt();\r
+                if(nullptr == DeletePromptLabelExt_)\r
+                    return nullptr;\r
+\r
+                DeletePromptLabelExt_->SetPosition(98, 187, 270, 35);\r
+                DeletePromptLabelExt_->SetStyle(STYLE_TEXT_FONT, 30);\r
+                DeletePromptLabelExt_->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+                DeletePromptLabelExt_->SetTextId(STR_SCHEDULE_DELETE_PROMPT);\r
+                DeletePromptLabelExt_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+                DeletePromptLabelExt_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+                DeletePromptLabelExt_->SetRollSpeed(23);\r
+                DeletePromptLabelExt_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+                DeletePromptLabelExt_->SetStyle(STYLE_TEXT_COLOR, 0xff999999);\r
+            }\r
+\r
+            if(nullptr == DeleteCancelButton_)\r
+            {\r
+                DeleteCancelButton_ = new UILabelButtonExt();\r
+                if(nullptr == DeleteCancelButton_)\r
+                    return nullptr;\r
+\r
+                DeleteCancelButton_->SetPosition(111, 299, 100, 100);\r
+                DeleteCancelButton_->SetViewId(SCHEDULE_ViewId_DeleteCancelButton_);\r
+                DeleteCancelButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+                DeleteCancelButton_->SetStyle(STYLE_BACKGROUND_OPA, 25); // 10%\r
+                DeleteCancelButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
+                DeleteCancelButton_->SetStyleForState(STYLE_BACKGROUND_OPA, 25, UIButton::PRESSED);\r
+                DeleteCancelButton_->SetStyle(STYLE_BORDER_RADIUS, 100);\r
+                DeleteCancelButton_->SetImagePosition(0, 0);\r
+                DeleteCancelButton_->SetImageSrc(PNG_SYSTEM_CHECK_OFF_IMAGE, PNG_SYSTEM_CHECK_OFF_IMAGE);\r
+                DeleteCancelButton_->SetOnClickListener(presenter_);\r
+            }\r
+\r
+            if(nullptr == DeleteOKButton_)\r
+            {\r
+                DeleteOKButton_ = new UILabelButtonExt();\r
+                if(nullptr == DeleteOKButton_)\r
+                    return nullptr;\r
+\r
+                DeleteOKButton_->SetPosition(256, 299, 100, 100);\r
+                DeleteOKButton_->SetViewId(SCHEDULE_ViewId_DeleteOKButton_);\r
+                DeleteOKButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+                DeleteOKButton_->SetStyle(STYLE_BACKGROUND_OPA, 25); // 10%\r
+                DeleteOKButton_->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
+                DeleteOKButton_->SetStyleForState(STYLE_BACKGROUND_OPA, 25, UIButton::PRESSED);\r
+                DeleteOKButton_->SetStyle(STYLE_BORDER_RADIUS, 100);\r
+                DeleteOKButton_->SetImagePosition(0, 0);\r
+                DeleteOKButton_->SetImageSrc(PNG_SYSTEM_CHECK_ON_IMAGE, PNG_SYSTEM_CHECK_ON_IMAGE);\r
+                DeleteOKButton_->SetOnClickListener(presenter_);\r
+            }\r
+\r
+            DeleteGroup_->Add(DeleteTitleLabelExt_);\r
+            DeleteGroup_->Add(DeletePromptLabelExt_);\r
+            DeleteGroup_->Add(DeleteCancelButton_);\r
+            DeleteGroup_->Add(DeleteOKButton_);\r
+        }\r
+\r
+        return DeleteGroup_;\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(23);\r
+        LabelExt->SetFont(DEFAULT_VECTOR_FONT_FILENAME, font_size);\r
+        LabelExt->SetStyle(STYLE_TEXT_COLOR, text_color);\r
+\r
+        return LabelExt;\r
+    }\r
+\r
+    void ScheduleView::ContentScreenItemIndexSet(uint8_t index)\r
+    {\r
+        ContentItemIndex_ = index;\r
+    }\r
+\r
+    uint8_t ScheduleView::ContentScreenItemIndexGet(void)\r
+    {\r
+        return ContentItemIndex_;\r
+    }\r
+\r
+    void ScheduleView::ItemListAdd(const ScheduleListItemInfo &item)\r
+    {\r
+        ScheduleListAdapter_->AddListItem(item);\r
+    }\r
+\r
+    void ScheduleView::ItemListClear(void)\r
+    {\r
+        ScheduleListAdapter_->ClearListItem();\r
+    }\r
+\r
+    void ScheduleView::ItemListContentUpdate(void)\r
+    {\r
+        uint8_t ItemCount = ScheduleModel::GetInstance().ScheduleItemDataCountGet();\r
+        if(0 != ItemCount)\r
+        {\r
+            ItemListClear();\r
+            ScheduleListItemInfo * ItemInfo = ScheduleModel::GetInstance().ScheduleAllItemDataGet();\r
+            for (uint8_t i = 0; i < ItemCount; i++)\r
+            {\r
+                ItemListAdd(ItemInfo[i]);\r
+            }\r
+        }\r
+    }\r
+\r
+    /// @brief 列表滚动更新\r
+    /// @param isUpScroll true 向上滚动,反之向下滚动\r
+    void ScheduleView::ItemListScrollByUpdate(bool isUpScroll)\r
+    {\r
+        if(ScheduleList_)\r
+        {\r
+            ScheduleList_->ScrollBy(isUpScroll ? -240 : 240);\r
+        }\r
+    }\r
+\r
+    void ScheduleView::ResetScheduleList(void)\r
+    {\r
+        if(ScheduleListAdapter_ == nullptr || ScheduleList_== nullptr)\r
+        {\r
+            return;\r
+        }\r
+\r
+        if(ScheduleListAdapter_->GetCount() > 2)\r
+        {\r
+            ScheduleList_->SetReboundSize(30);\r
+        }\r
+        else\r
+        {\r
+            ScheduleList_->SetReboundSize(0);\r
+        }\r
+    }\r
+\r
+    void ScheduleView::SetViewFocus(bool val)\r
+    {\r
+        if(!ContentGroup_ || !ScheduleList_)\r
+        {\r
+            return;\r
+        }\r
+        if(val)\r
+        {\r
+            ScheduleList_->RequestFocus();\r
+        }\r
+        else\r
+        {\r
+            ContentGroup_->RequestFocus();\r
+        }\r
+    }\r
+}
\ No newline at end of file