添加录音列表功能,能够查看录得音
authorluozheng <1732036298@qq.com>
Sun, 3 Mar 2024 07:45:40 +0000 (15:45 +0800)
committerluozheng <1732036298@qq.com>
Sun, 3 Mar 2024 07:45:40 +0000 (15:45 +0800)
20 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/AppViewIDs.h
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordListPresenter.h [deleted file]
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordListView.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingListAdapter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingListitemView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingModel.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPresenter.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingView.h
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListPresenter.cpp [deleted file]
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListAdapter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPlayerPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingView.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/recording/animator1.bin [deleted file]

index 6057fa5..e1502b3 100644 (file)
@@ -310,10 +310,12 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordDeleteView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordGoingPresenter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordGoingView.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordListPresenter.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordListView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingPlayerPresenter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingPlayerView.cpp
+
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingListAdapter.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingListitemView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordListView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingPresenter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingModel.cpp
index 41701dd..838d872 100644 (file)
@@ -58,7 +58,6 @@ typedef enum : uint16_t
     VIEW_FAST_TRAINING_ATTENTION, // 快速训练项目选择超出提示
     /* ----------------------------------- 录音 ----------------------------------- */
     VIEW_RECORD,
-    VIEW_RECORD_LIST,
     VIEW_RECORD_PLAY,
     VIEW_RECORD_DELETE,
     VIEW_RECORD_GOING,
index 538454c..067ac99 100644 (file)
@@ -32,7 +32,6 @@ namespace OHOS
         void InitUISampleSlice(void);
         /* ----------------------------------- 录音 ----------------------------------- */
         void InitRecordingSlice(void);
-        void InitRecordingListSlice(void);
         void InitRecordingPlaySlice(void);
         void InitRecordingDeleteSlice(void);
         void InitRecordingGoingSlice(void);
index d5cef16..b33f261 100644 (file)
@@ -98,8 +98,6 @@
 
 #include "record/include/RecordingPresenter.h"
 #include "record/include/RecordingView.h"
-#include "record/include/RecordListPresenter.h"
-#include "record/include/RecordListView.h"
 #include "record/include/RecordingPlayerPresenter.h"
 #include "record/include/RecordingPlayerView.h"
 #include "record/include/RecordDeletePresenter.h"
@@ -168,7 +166,6 @@ namespace OHOS
         {VIEW_FAST_TRAINING_ATTENTION, &NativeLauncher::InitFastTrainingAttentionSlice},
 
         {VIEW_RECORD, &NativeLauncher::InitRecordingSlice}, // 录音实例化地址
-        {VIEW_RECORD_LIST, &NativeLauncher::InitRecordingListSlice},
         {VIEW_RECORD_PLAY, &NativeLauncher::InitRecordingPlaySlice},
         {VIEW_RECORD_DELETE, &NativeLauncher::InitRecordingDeleteSlice},
         {VIEW_RECORD_DELETE, &NativeLauncher::InitRecordingDeleteSlice},
@@ -648,16 +645,6 @@ namespace OHOS
         NativeAbility::GetInstance().AddSliceProxy(VIEW_RECORD, record);
     }
 
-    void NativeLauncher::InitRecordingListSlice(void)
-    {
-        SliceProxy *recordlist = new AbilitySliceProxy<RecordListView, RecordListPresenter>;
-        if (recordlist == nullptr)
-        {
-            return;
-        }
-        NativeAbility::GetInstance().AddSliceProxy(VIEW_RECORD_LIST, recordlist);
-    }
-
     void NativeLauncher::InitRecordingPlaySlice(void)
     {
         SliceProxy *recordplay = new AbilitySliceProxy<RecordingPlayerView, RecordingPlayerPresenter>;
diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordListPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordListPresenter.h
deleted file mode 100644 (file)
index ca33ea8..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef RECORD_LIST_PRESENTER_H\r
-#define RECORD_LIST_PRESENTER_H\r
-\r
-#include "Presenter.h"\r
- \r
-#include "RecordListView.h"\r
- \r
-namespace OHOS\r
-{\r
-    class RecordListView;\r
-       \r
-    class RecordListPresenter : public Presenter<RecordListView>,\r
-                                 public UIView::OnClickListener,\r
-                                 public UIView::OnDragListener,\r
-                                 public UIView::OnLongPressListener\r
-    {\r
-    public:\r
-        RecordListPresenter();\r
-        virtual ~RecordListPresenter();\r
- \r
-        void OnStart() override;  \r
-        void OnPause() override;  \r
-        void OnResume() override; \r
-        void OnStop() override;   \r
- \r
-        static RecordListPresenter *GetInstance();     \r
- \r
-    private:\r
-        //因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
-        bool OnClick(UIView &view, const ClickEvent &event) override; \r
-        bool OnDrag(UIView &view, const DragEvent &event) override;   \r
-        bool OnLongPress(UIView& view, const LongPressEvent& event) override;\r
-    };\r
-} //namespace OHOS\r
-\r
-\r
-\r
-\r
-\r
-\r
-#endif
\ No newline at end of file
index 1869c7f..610055b 100644 (file)
@@ -9,47 +9,46 @@
 #include "components/ui_label.h"\r
 #include "components/ui_image_view.h"\r
 #include "components/ui_button.h"\r
+#include "components/ui_list.h"\r
+#include "record/include/RecordingListAdapter.h"\r
 namespace OHOS\r
 {\r
-    class RecordListPresenter;\r
-    class RecordListView : public View<RecordListPresenter>\r
+\r
+    class RecordListView\r
     {\r
 \r
     public:\r
+        struct LabelConfig\r
+        {\r
+            int16_t left;\r
+            int16_t top;\r
+            int16_t width;\r
+            int16_t height;\r
+            int16_t fontSize;      // 字体大小\r
+            int16_t lineHeigh;     // 行高\r
+            const char *text;      // 文本\r
+            uint8_t lineBreakMode; // 断行模式。\r
+        };\r
         RecordListView();\r
         virtual ~RecordListView();\r
         static RecordListView *GetInstance(void);\r
-\r
-        void OnStart() override;\r
-        void OnSetUpView() override;\r
-        void OnTearDownView() override;\r
-        void OnStop() override;\r
+        UIScrollView *RecordListViewInit(void);\r
+        void ClearAll(void);\r
+        void IsVisibleLabel(bool value);\r
 \r
     private:\r
-        UIView::OnDragListener *draglistener{nullptr};\r
-\r
-        void InitView(void);\r
-        void DeInitView(void);\r
-\r
-        UIViewGroup *container_ = nullptr;\r
-        UIScrollView *RecordListScrollView = nullptr;\r
-        UILabel *RecordListlabel1 = nullptr;\r
-        UIImageView *RecordImage = nullptr;\r
-        UIButton *RecordButton = nullptr;\r
-\r
-        UIImageView *image6_ = nullptr;\r
-        UIButton *button3 = nullptr;\r
-        UIButton *button1 = nullptr;\r
-        UILabel *label3 = nullptr;\r
-        UILabel *label2 = nullptr;\r
-        UILabel *label1 = nullptr;\r
-        UIButton *button2 = nullptr;\r
-        UILabel *label9 = nullptr;\r
-        UILabel *label6 = nullptr;\r
-        UILabel *label8 = nullptr;\r
-        UILabel *label5 = nullptr;\r
-        UILabel *label7 = nullptr;\r
-        UILabel *label4 = nullptr;\r
+        bool SetUpScrollView(void);\r
+        UILabel *SetUpLabel(LabelConfig &labelconfig); // 设置标签\r
+        bool SetUpRecordListViewLabel(void);\r
+        bool SetUpRecordingList(void);\r
+        void AddRecordingToList(const RecordingListItem &item);\r
+        void InitRecordingInfo(void);\r
+        UIScrollView *RecordListScrollView{nullptr};\r
+        UILabel *RecordListViewTitleLabel{nullptr};            // "录音列表"\r
+        UILabel *RecordListViewAttentionLabel{nullptr};        //"当前录音列表为空"\r
+        UIList *recordList{nullptr};                           // 录音列表\r
+        RecordingListAdapter *p_RecordingListAdapter{nullptr}; // 录音列表适配器\r
+        bool initViewStatus{false};\r
     };\r
 } // namespace OHOS\r
 \r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingListAdapter.h b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingListAdapter.h
new file mode 100644 (file)
index 0000000..923e3c0
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef RECORDING_LIST_ADAPTER_H
+#define RECORDING_LIST_ADAPTER_H
+
+#include "components/abstract_adapter.h"
+#include "components/ui_list.h"
+#include "list.h"
+#include <list>
+namespace OHOS
+{
+    typedef struct
+    {
+        int index;
+        const char *recordId;        // 录音编号
+        const char *recordTotalTime; // 录音总时长
+        const char *recordTime;      // 录音时间
+    } RecordingListItem;
+
+    class RecordingListAdapter : public AbstractAdapter
+    {
+    public:
+        explicit RecordingListAdapter();
+        virtual ~RecordingListAdapter();
+
+        /* *
+         * @brief Sets the UIView adapter data, which is a RecordingListItem linked list.
+         *
+         * @param data Indicates the RecordingListItem linked list data.
+         * @since 1.0
+         * @version 1.0
+         */
+        void SetData(std::list<RecordingListItem> &data);
+
+        /* *
+         * @brief Obtains the <b>data</b> size of the UILabel adapter.
+         *
+         * @return Returns the <b>data</b> size of the UILabel adapter.
+         * @since 1.0
+         * @version 1.0
+         */
+        virtual uint16_t GetCount(void) override;
+
+        virtual UIView *GetView(UIView *inView, int16_t index) override;
+
+        virtual void AddListItem(const RecordingListItem &item);
+
+        void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+        {
+            itemClickListener = itemclicklistener;
+        }
+
+    private:
+        std::list<RecordingListItem> listData;
+        UIView::OnClickListener *itemClickListener{nullptr};
+    };
+
+}
+
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingListitemView.h b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingListitemView.h
new file mode 100644 (file)
index 0000000..6cba24d
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef RECORDING_LIST_ITEM_VIEW
+#define RECORDING_LIST_ITEM_VIEW
+
+#include "components/ui_view_group.h"
+#include "components/ui_button.h"
+#include "components/ui_label.h"
+#include "record/include/RecordingListAdapter.h"
+
+namespace OHOS
+{
+    class RecordingListitemView : public UIViewGroup
+    {
+    public:
+        RecordingListitemView();
+        virtual ~RecordingListitemView();
+        virtual void SetItemInfo(const RecordingListItem itemInfo);
+        virtual void SetUpChild();
+        int GetRecordingListIndex();
+
+    private:
+        RecordingListitemView(const RecordingListitemView &);
+        void SetLabelStyle(UILabel &label, int x, int y, int width, int height, OHOS::ColorType textColor, int fontSize);
+        UIButton m_button;
+        UILabel m_recordId;        // 录音编号
+        UILabel m_recordTotalTime; // 录音总时长
+        UILabel m_recordTime;      // 录音时间
+        RecordingListItem m_ItemInfo{0, nullptr,nullptr,nullptr};
+    };
+
+}
+
+#endif
index 0534663..8eda2b7 100644 (file)
@@ -9,6 +9,13 @@
 #include "audio_manager.h"
 #include "audio_base_type.h"
 #include "record/include/RecordingPresenter.h"
+#include "record/include/RecordingListAdapter.h"
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <sys/types.h>
+#include <dirent.h>
 namespace OHOS
 {
     using OHOS::Media::Player;
@@ -18,34 +25,35 @@ namespace OHOS
     using Audio::AudioManager;
 
     // 播放器
-class RecordingPlayerInterruptListener : public InterruptListener {
-public:
-    RecordingPlayerInterruptListener(){}
-    ~RecordingPlayerInterruptListener(){}
+    class RecordingPlayerInterruptListener : public InterruptListener
+    {
+    public:
+        RecordingPlayerInterruptListener() {}
+        ~RecordingPlayerInterruptListener() {}
 
-    void SetOwner(std::shared_ptr<Player> player);
-    void SetPaused(bool value);
-    void SetResumed(bool value);
-    void RestFlag();
-    bool IsPaused();
-    bool IsDelayed();
-    bool IsResumed();
-    bool IsBeginStopped();
-    bool IsEndStopped();
-    void OnInterrupt(int32_t type, int32_t hint) override;
-    void PausePlayer(void);
-    void ResumePlayer(void);
-    void StopPlayer(void);
-    std::shared_ptr<Player> GetPlayer();
+        void SetOwner(std::shared_ptr<Player> player);
+        void SetPaused(bool value);
+        void SetResumed(bool value);
+        void RestFlag();
+        bool IsPaused();
+        bool IsDelayed();
+        bool IsResumed();
+        bool IsBeginStopped();
+        bool IsEndStopped();
+        void OnInterrupt(int32_t type, int32_t hint) override;
+        void PausePlayer(void);
+        void ResumePlayer(void);
+        void StopPlayer(void);
+        std::shared_ptr<Player> GetPlayer();
 
-private:
-    std::shared_ptr<Player> player_{nullptr};
-    bool isPaused_{false};
-    bool isDelayed_{false};
-    bool isResumed_{false};
-    bool isBeginStopped_{false};
-    bool isEndStopped_{false};
-};
+    private:
+        std::shared_ptr<Player> player_{nullptr};
+        bool isPaused_{false};
+        bool isDelayed_{false};
+        bool isResumed_{false};
+        bool isBeginStopped_{false};
+        bool isEndStopped_{false};
+    };
 
     class RecordingModel
     {
@@ -55,13 +63,17 @@ private:
         void SetRecordingPlayerUri(std::string src);
         void SetRecordingPlayButtonState(bool state);
         int RecordingPlayerStat();
-
+        /* -------------------------------------------------------------------------- */
+        void InitRecordingListItem();
+        const RecordingListItem *GetRecordinglistItems() const;
+        uint8_t GetRecordingListNum() const;
+        std::string GetCleanFileName(const std::string &filePath);
+        void SearchFiles(const std::string &directory, std::vector<std::string> &fileNames, int &mp3FileCount);
     private:
         RecordingModel();
         RecordingModel(const RecordingModel &) = delete;
         RecordingModel &operator=(const RecordingModel &) = delete;
         virtual ~RecordingModel();
-
     private:
         int64_t DurationTime{0};                                                                       // 播放时长,单位ms
         bool PlayButtonState{false};                                                                   // 播放按钮状态
@@ -74,6 +86,11 @@ private:
         std::string Uri;                                                                               // 唯一标识一个资源的字符串。
         std::map<std::string, std::string> Header;
         std::shared_ptr<Source> Resource{nullptr};
+        /* -------------------------------------------------------------------------- */
+        std::vector<std::string> fileNames; // 文件名
+        int RecordingMp3FileCount = 0;      // 录音MP3数量
+        const std::string directory = "/user/res/record/recording/";
+        RecordingListItem *Recordings = nullptr;
     };
 }
 
index 59841a3..e16a37d 100644 (file)
@@ -3,14 +3,20 @@
 \r
 #include "Presenter.h"\r
 #include "RecordingView.h"\r
-\r
 #include "KeyInputListener.h"\r
 #include "common/key_code.h"\r
 \r
 namespace OHOS\r
 {\r
-    class RecordingView;\r
+    typedef enum\r
+    {\r
+        RECORDINGVIEW = 0, // 录音视图(slice)\r
+        RECORDINGLISTVIEW, // 录音列表视图(subView)\r
 \r
+        MAX_RECORDINGVIEWID,\r
+    } RECORDINGVIEWID;\r
+\r
+    class RecordingView;\r
     class RecordingPresenter : public Presenter<RecordingView>,\r
                                public UIView::OnClickListener,\r
                                public RootView::OnKeyActListener,\r
@@ -31,7 +37,8 @@ namespace OHOS
         // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
         bool OnClick(UIView &view, const ClickEvent &event) override;\r
         bool OnDrag(UIView &view, const DragEvent &event) override;\r
-        bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;\r
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; \r
     };\r
 }\r
 \r
index 3ca9e42..12d8220 100644 (file)
@@ -11,6 +11,7 @@
 #include "components/ui_button.h"\r
 #include "components/ui_image_animator.h"\r
 \r
+#include "record/include/RecordListView.h"\r
 namespace OHOS\r
 {\r
     static const char *RECORD_BUTTON = "RecordButton";  //录音按钮\r
@@ -32,18 +33,28 @@ namespace OHOS
         virtual ~RecordingView();\r
         static RecordingView *GetInstance(void);\r
 \r
+        bool ChangeRecordingView(int16_t thisView); // 切换到“录音”视图\r
+        bool ChangeRecordListView(int16_t thisView);//切换到"录音列表"视图\r
+        bool ClickFunc(int16_t interface);\r
+        void ChangeView(int16_t hideView, int16_t showView);\r
+        UIScrollView *GetRecordingViewScrollView(int i);\r
+\r
+    public:\r
         void OnStart() override;\r
         void OnSetUpView() override;\r
         void OnTearDownView() override;\r
         void OnStop() override;\r
 \r
+    private:\r
+        RecordListView *p_RecordListView{nullptr};\r
+\r
     private:\r
         void RecordingViewInit(void);\r
         void ClearAll(void);\r
         bool SetUpScrollView(void);\r
         bool SetTheTitle(void);\r
         UIButton *SetTheButton(ButtonConfig &buttonconfig, UIView::OnClickListener *clickListener);\r
-        UIScrollView *RecordingViewScrollView{nullptr};\r
+        UIScrollView *RecordingViewScrollView[2]{nullptr};\r
         UILabel *RecordingViewTitleLabel{nullptr};\r
         UIButton *RecordingViewButton{nullptr};\r
         UILabel *AttentionLabel{nullptr};\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListPresenter.cpp
deleted file mode 100644 (file)
index a009e80..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "AppViewIDs.h"\r
-#include "NativeAbility.h"\r
-#include "graphic_math.h"\r
-#include "string.h"\r
-#include "record/include/RecordListPresenter.h"\r
-\r
-namespace OHOS\r
-{\r
-\r
-    // 当前Presenter属性实例化的内存指针\r
-    static RecordListPresenter *g_pRecordListPresenter = nullptr;\r
-\r
-    RecordListPresenter::RecordListPresenter()\r
-    {\r
-\r
-        g_pRecordListPresenter = this;\r
-    }\r
-\r
-    RecordListPresenter::~RecordListPresenter()\r
-    {\r
-\r
-        g_pRecordListPresenter = nullptr;\r
-    }\r
-\r
-    RecordListPresenter *RecordListPresenter::GetInstance()\r
-    {\r
-\r
-        return g_pRecordListPresenter;\r
-    }\r
-\r
-    void RecordListPresenter::OnStart()\r
-    {\r
-\r
-        Presenter<RecordListView>::OnStart();\r
-    }\r
-\r
-    void RecordListPresenter::OnPause(void)\r
-    {\r
-\r
-        Presenter<RecordListView>::OnPause();\r
-    }\r
-\r
-    void RecordListPresenter::OnResume(void)\r
-    {\r
-\r
-        Presenter<RecordListView>::OnResume();\r
-    }\r
-\r
-    void RecordListPresenter::OnStop(void)\r
-    {\r
-\r
-        Presenter<RecordListView>::OnStop();\r
-    }\r
-\r
-    bool RecordListPresenter::OnDrag(UIView &view, const DragEvent &event)\r
-    {\r
-\r
-        if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM &&\r
-            (event.GetDeltaY() > 30) && (event.GetDeltaY() > (2 * MATH_ABS(event.GetDeltaX()))))\r
-        {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD);\r
-        }\r
-        return true;\r
-    }\r
-\r
-    bool RecordListPresenter::OnLongPress(UIView &view, const LongPressEvent &event)\r
-    {\r
-\r
-        return false;\r
-    }\r
-\r
-    bool RecordListPresenter::OnClick(UIView &view, const ClickEvent &event)\r
-    {\r
-        if (strcmp(view.GetViewId(), "button1") == 0)\r
-        {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_PLAY);\r
-            return true;\r
-        }\r
-        else if(strcmp(view.GetViewId(), "button2") == 0)\r
-        {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_PLAY);\r
-            return true;\r
-        }\r
-        else if(strcmp(view.GetViewId(), "button3") == 0)\r
-        {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_PLAY);\r
-            return true;\r
-        }\r
-        return true;\r
-    }\r
-}
\ No newline at end of file
index 1eb2c5c..39492d1 100644 (file)
@@ -1,8 +1,7 @@
 #include "record/include/RecordListView.h"\r
-#include "record/include/RecordListPresenter.h"\r
-\r
-#include "UiConfig.h"\r
-\r
+#include "record/include/RecordingPresenter.h"\r
+#include "wearable_log.h"\r
+#include "record/include/RecordingModel.h"\r
 namespace OHOS\r
 {\r
 \r
@@ -10,12 +9,14 @@ namespace OHOS
 \r
     RecordListView::RecordListView()\r
     {\r
-\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListView");\r
         g_pRecordListView = this;\r
     }\r
 \r
     RecordListView::~RecordListView()\r
     {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::~RecordListView");\r
+        ClearAll();\r
         g_pRecordListView = nullptr;\r
     }\r
 \r
@@ -25,502 +26,198 @@ namespace OHOS
         return g_pRecordListView;\r
     }\r
 \r
-    void RecordListView::InitView()\r
+    void RecordListView::ClearAll()\r
     {\r
-        if (container_ == nullptr)\r
+        if (initViewStatus == true)\r
         {\r
-            container_ = new UIViewGroup();\r
-            container_->SetPosition(0, 0, 466, 466);\r
-            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
-            draglistener = static_cast<UIView::OnDragListener *>(RecordListPresenter::GetInstance());\r
-            if (draglistener == nullptr)\r
-            {\r
-                return;\r
-            }\r
-            container_->SetOnDragListener(draglistener);\r
-            container_->SetTouchable(true);\r
-            container_->SetDraggable(true);\r
-        }\r
+            RecordListScrollView->RemoveAll();\r
 \r
-        // Add ScrollView to App\r
-        if (RecordListScrollView == nullptr)\r
-        {\r
-            RecordListScrollView = new UIScrollView();\r
-        }\r
-        RecordListScrollView->SetPosition(0, 0);\r
-        RecordListScrollView->Resize(466, 466);\r
-        RecordListScrollView->SetViewId("RecordListScrollView");\r
-        RecordListScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
-        // Add to rootView\r
-        container_->Add(RecordListScrollView);\r
-        RecordListScrollView->SetVisible(true);\r
+            delete RecordListViewAttentionLabel;\r
+            RecordListViewAttentionLabel = nullptr;\r
 \r
-        // Add Label to App\r
-        if (RecordListlabel1 == nullptr)\r
-        {\r
-            RecordListlabel1 = new UILabel();\r
-        }\r
-        RecordListlabel1->SetPosition(188, 52);\r
-        RecordListlabel1->Resize(90, 35);\r
-        RecordListlabel1->SetViewId("RecordListlabel1");\r
-        RecordListlabel1->SetStyle(STYLE_TEXT_FONT, 30);\r
-        RecordListlabel1->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+            delete RecordListViewTitleLabel;\r
+            RecordListViewTitleLabel = nullptr;\r
 \r
-        // Set additional property\r
-        RecordListlabel1->SetText("录音机");\r
-        RecordListlabel1->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        RecordListlabel1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        RecordListlabel1->SetRollSpeed(0);\r
-        RecordListlabel1->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+            delete p_RecordingListAdapter;\r
+            p_RecordingListAdapter = nullptr;\r
 \r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(RecordListlabel1);\r
-        RecordListlabel1->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add ImageView to App\r
-        if (RecordImage == nullptr)\r
-        {\r
-            RecordImage = new UIImageView();\r
-        }\r
-        RecordImage->SetPosition(158, 129);\r
-        RecordImage->Resize(150, 150);\r
-        RecordImage->SetViewId("RecordImage");\r
-        RecordImage->SetStyle(STYLE_BORDER_RADIUS, 10);\r
-        RecordImage->SetSrc(PNG_RECORD1_IMAGE);\r
+            delete recordList;\r
+            recordList = nullptr;\r
 \r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(RecordImage);\r
-        RecordImage->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Button to App\r
-        if (RecordButton == nullptr)\r
-        {\r
-            RecordButton = new UIButton();\r
-        }\r
-        RecordButton->SetPosition(178, 150);\r
-        RecordButton->Resize(120, 120);\r
-        RecordButton->SetViewId("RecordButton");\r
-        RecordButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);\r
-        RecordButton->SetStyle(STYLE_BORDER_RADIUS, 100);\r
-\r
-        // Set additional property\r
-        RecordButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffff5a36, UIButton::PRESSED);\r
-        RecordButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
-        RecordButton->SetStyleForState(STYLE_BORDER_RADIUS, 100, UIButton::PRESSED);\r
-\r
-        // Add the CallBack about events\r
-        UIView::OnClickListener *button4Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
-        RecordButton->SetOnClickListener(button4Click);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(RecordButton);\r
-        RecordButton->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Button to App\r
-        if (button1 == nullptr)\r
-        {\r
-            button1 = new UIButton();\r
-        }\r
-        button1->SetPosition(43, 323);\r
-        button1->Resize(380, 100);\r
-        button1->SetViewId("button1");\r
-        button1->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
-        button1->SetStyle(STYLE_BORDER_RADIUS, 50);\r
-        button1->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
-        button1->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
-        button1->SetStyleForState(STYLE_BACKGROUND_OPA, 0x82, UIButton::PRESSED);\r
-        button1->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
-        button1->SetStyleForState(STYLE_BORDER_RADIUS, 50, UIButton::PRESSED);\r
-\r
-        // Add the CallBack about events\r
-        UIView::OnClickListener *button1Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
-        button1->SetOnClickListener(button1Click);\r
-        UIView::OnLongPressListener *button1LongPress = static_cast<UIView::OnLongPressListener *>(RecordListPresenter::GetInstance());\r
-        button1->SetOnLongPressListener(button1LongPress);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(button1);\r
-        button1->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label1 == nullptr)\r
-        {\r
-            label1 = new UILabel();\r
-        }\r
-        label1->SetPosition(88, 356);\r
-        label1->Resize(200, 60);\r
-        label1->SetViewId("label1");\r
-        label1->SetStyle(STYLE_TEXT_FONT, 30);\r
-        label1->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-\r
-        // Set additional property\r
-        label1->SetText("录音 3");\r
-        label1->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label1->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
-        label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label1->SetRollSpeed(0);\r
-        label1->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label1);\r
-        label1->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label2 == nullptr)\r
-        {\r
-            label2 = new UILabel();\r
+            delete RecordListScrollView;\r
+            RecordListScrollView = nullptr;\r
         }\r
-        label2->SetPosition(301, 342); // widget's left position and top position\r
-        label2->Resize(200, 60);       // widget's width and height\r
-        label2->SetViewId("label2");   // Set style\r
-        label2->SetStyle(STYLE_TEXT_FONT, 30);\r
-        label2->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+    }\r
 \r
-        // Set additional property\r
-        label2->SetText("20:57");\r
-        label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label2->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
-        label2->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);\r
-        label2->SetRollSpeed(0);\r
-        label2->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label2);\r
-        label2->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label3 == nullptr)\r
+    // 亮屏时长视图“scrollView”初始化\r
+    bool RecordListView::SetUpScrollView(void)\r
+    {\r
+        RecordListScrollView = new UIScrollView();\r
+        if (RecordListScrollView == nullptr)\r
         {\r
-            label3 = new UILabel();\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::RecordListScrollView new fail!");\r
+            return false;\r
         }\r
-        label3->SetPosition(280, 380); // widget's left position and top position\r
-        label3->Resize(200, 60);       // widget's width and height\r
-        label3->SetViewId("label3");   // Set style\r
-        label3->SetStyle(STYLE_TEXT_FONT, 20);\r
-        label3->SetStyle(STYLE_LINE_HEIGHT, 23);\r
-\r
-        // Set additional property\r
-        label3->SetText("2022.04.21");\r
-        label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label3->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
-        label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label3->SetRollSpeed(0);\r
-        label3->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
-\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label3);\r
-        label3->SetVisible(true);\r
-\r
-        /********************************************************************************************************/\r
-        // Add Button to App\r
-        if (button2 == nullptr)\r
+        RecordListScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        RecordListScrollView->SetScrollBlankSize(35);\r
+        RecordListScrollView->SetReboundSize(50);\r
+        RecordListScrollView->SetDirection(1);\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(RecordingPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
         {\r
-            button2 = new UIButton();\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::draglistener can not be nullptr!");\r
+            return false;\r
         }\r
-        button2->SetPosition(43, 443); // widget's left position and top position\r
-        button2->Resize(380, 100);     // widget's width and height\r
-        button2->SetViewId("button2"); // Set style\r
-        button2->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
-        button2->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
-        button2->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
-        button2->SetStyleForState(STYLE_BACKGROUND_OPA, 0x82, UIButton::PRESSED);\r
-        button2->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+        RecordListScrollView->SetOnDragListener(draglistener);\r
+        RecordListScrollView->SetTouchable(true);\r
+        RecordListScrollView->SetDraggable(true);\r
+        return true;\r
+    }\r
 \r
-        // Add the CallBack about events\r
-        UIView::OnClickListener *button2Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
-        button2->SetOnClickListener(button2Click);\r
-        UIView::OnLongPressListener *button2LongPress = static_cast<UIView::OnLongPressListener *>(RecordListPresenter::GetInstance());\r
-        button2->SetOnLongPressListener(button2LongPress);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(button2);\r
-        button2->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label4 == nullptr)\r
-        {\r
-            label4 = new UILabel();\r
-        }\r
-        label4->SetPosition(88, 480);\r
-        label4->Resize(200, 60);\r
-        label4->SetViewId("label4");\r
-        label4->SetStyle(STYLE_TEXT_FONT, 30);\r
-        label4->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+    // 设置标签\r
+    UILabel *RecordListView::SetUpLabel(LabelConfig &labelconfig)\r
+    {\r
+        UILabel *label = new UILabel();\r
+        if (label == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); // 位置大小\r
+        label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);                                       // 字体大小\r
+        label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);                                    // 字体行高\r
+        label->SetText(labelconfig.text);                                                             // 内容\r
+        label->SetLineBreakMode(labelconfig.lineBreakMode);                                           // 断行模式。\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+        return label;\r
+    }\r
 \r
-        // Set additional property\r
-        label4->SetText("录音 2");\r
-        label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label4->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
-        label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label4->SetRollSpeed(0);\r
-        label4->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label4);\r
-        label4->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label5 == nullptr)\r
-        {\r
-            label5 = new UILabel();\r
-        }\r
-        label5->SetPosition(301, 462);\r
-        label5->Resize(200, 60);\r
-        label5->SetViewId("label5");\r
-        label5->SetStyle(STYLE_TEXT_FONT, 30);\r
-        label5->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+    bool RecordListView::SetUpRecordListViewLabel(void)\r
+    {\r
+        // 创建ScreenDurationTitleLabel\r
+        LabelConfig labelconfig = {\r
+            .left = 173,\r
+            .top = 52,\r
+            .width = 120,\r
+            .height = 35,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .text = "音乐列表",\r
+            .lineBreakMode = UILabel::LINE_BREAK_ADAPT,\r
+        };\r
+\r
+        RecordListViewTitleLabel = SetUpLabel(labelconfig);\r
+        if (nullptr == RecordListViewTitleLabel)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListViewTitleLabel is nullptr!");\r
+            return false;\r
+        }\r
+\r
+        labelconfig = {\r
+            .left = 33,\r
+            .top = 273,\r
+            .width = 400,\r
+            .height = 124,\r
+            .fontSize = 26,\r
+            .lineHeigh = 30,\r
+            .text = "当前音乐列表为空",\r
+            .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS,\r
+        };\r
+        RecordListViewAttentionLabel = SetUpLabel(labelconfig);\r
+        if (nullptr == RecordListViewAttentionLabel)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListViewAttentionLabel is nullptr!");\r
+            return false;\r
+        }\r
+        RecordListViewAttentionLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+\r
+        RecordListScrollView->Add(RecordListViewTitleLabel);\r
+        RecordListScrollView->Add(RecordListViewAttentionLabel);\r
+\r
+        return true;\r
+    }\r
 \r
-        // Set additional property\r
-        label5->SetText("09:51");\r
-        label5->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label5->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
-        label5->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label5->SetRollSpeed(0);\r
-        label5->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+    bool RecordListView::SetUpRecordingList(void)\r
+    {\r
+        // UIList 的适配器\r
+        p_RecordingListAdapter = new RecordingListAdapter();\r
+        p_RecordingListAdapter->SetItemClickListener(RecordingPresenter::GetInstance());\r
+        recordList = new UIList();\r
+        if (recordList == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::recordList is nullptr!");\r
+            return false;\r
+        }\r
+        recordList->SetPosition(43, 120, 380, 120 + 120 * RecordingModel::GetInstance()->GetRecordingListNum());\r
+        recordList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+        recordList->SetAdapter(p_RecordingListAdapter);\r
+        InitRecordingInfo();\r
+        recordList->RefreshList();\r
+        RecordListScrollView->Add(recordList);\r
+        return true;\r
+    }\r
 \r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label5);\r
-        label5->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label6 == nullptr)\r
-        {\r
-            label6 = new UILabel();\r
-        }\r
-        label6->SetPosition(280, 500);\r
-        label6->Resize(200, 60);\r
-        label6->SetViewId("label6");\r
-        label6->SetStyle(STYLE_TEXT_FONT, 20);\r
-        label6->SetStyle(STYLE_LINE_HEIGHT, 23);\r
+    /// @brief 添加录音到list\r
+    /// @param item\r
+    void RecordListView::AddRecordingToList(const RecordingListItem &item)\r
+    {\r
+        p_RecordingListAdapter->AddListItem(item);\r
+    }\r
 \r
-        // Set additional property\r
-        label6->SetText("2023.05.20");\r
-        label6->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label6->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
-        label6->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label6->SetRollSpeed(0);\r
-        label6->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label6);\r
-        label6->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Button to App\r
-        if (button3 == nullptr)\r
-        {\r
-            button3 = new UIButton();\r
-        }\r
-        button3->SetPosition(43, 563); // widget's left position and top position\r
-        button3->Resize(380, 100);     // widget's width and height\r
-        button3->SetViewId("button3"); // Set style\r
-        button3->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
-        button3->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
-        button3->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
-        button3->SetStyleForState(STYLE_BACKGROUND_OPA, 0x82, UIButton::PRESSED);\r
-        button3->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
-        // Add the CallBack about events\r
-        UIView::OnClickListener *button3Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
-        button3->SetOnClickListener(button3Click);\r
-        UIView::OnLongPressListener *button3LongPress = static_cast<UIView::OnLongPressListener *>(RecordListPresenter::GetInstance());\r
-        button3->SetOnLongPressListener(button3LongPress);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(button3);\r
-        button3->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label7 == nullptr)\r
-        {\r
-            label7 = new UILabel();\r
-        }\r
-        label7->SetPosition(88, 596); // widget's left position and top position\r
-        label7->Resize(200, 60);      // widget's width and height\r
-        label7->SetViewId("label7");  // Set style\r
-        label7->SetStyle(STYLE_TEXT_FONT, 30);\r
-        label7->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-        label7->SetText("录音 1");\r
-        label7->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label7->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
-        label7->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label7->SetRollSpeed(0);\r
-        label7->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label7);\r
-        label7->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label8 == nullptr)\r
+    // 把录音信息数据拿到存储到list中\r
+    void RecordListView::InitRecordingInfo(void)\r
+    {\r
+        const RecordingListItem *itemInfo = RecordingModel::GetInstance()->GetRecordinglistItems();\r
+        for (int i = 0; i < RecordingModel::GetInstance()->GetRecordingListNum(); i++)\r
         {\r
-            label8 = new UILabel();\r
+            AddRecordingToList(itemInfo[i]);\r
         }\r
-        label8->SetPosition(301, 582); // widget's left position and top position\r
-        label8->Resize(200, 60);       // widget's width and height\r
-        label8->SetViewId("label8");   // Set style\r
-        label8->SetStyle(STYLE_TEXT_FONT, 30);\r
-        label8->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+    }\r
 \r
-        // Set additional property\r
-        label8->SetText("12:33");\r
-        label8->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label8->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
-        label8->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label8->SetRollSpeed(0);\r
-        label8->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label8);\r
-        label8->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add Label to App\r
-        if (label9 == nullptr)\r
+    // 设置提醒标签是否可见\r
+    void RecordListView::IsVisibleLabel(bool value)\r
+    {\r
+        if (value == true)\r
         {\r
-            label9 = new UILabel();\r
+            RecordListViewAttentionLabel->SetVisible(true);\r
+            recordList->SetVisible(false); // 列表设置不可见\r
+            RecordListScrollView->SetVerticalScrollState(false);\r
         }\r
-        label9->SetPosition(280, 620); // widget's left position and top position\r
-        label9->Resize(200, 60);       // widget's width and height\r
-        label9->SetViewId("label9");   // Set style\r
-        label9->SetStyle(STYLE_TEXT_FONT, 20);\r
-        label9->SetStyle(STYLE_LINE_HEIGHT, 23);\r
-        // Set additional property\r
-        label9->SetText("2022.04.21");\r
-        label9->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
-        label9->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
-        label9->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-        label9->SetRollSpeed(0);\r
-        label9->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(label9);\r
-        label9->SetVisible(true);\r
-        /********************************************************************************************************/\r
-        // Add ImageView to App\r
-        if (image6_ == nullptr)\r
+        else\r
         {\r
-            image6_ = new UIImageView();\r
+            RecordListViewAttentionLabel->SetVisible(false);\r
+            recordList->SetVisible(true); // 列表设置可见\r
+            RecordListScrollView->SetVerticalScrollState(true);\r
         }\r
-        image6_->SetPosition(183, 632); // widget's left position and top position\r
-        image6_->Resize(100, 100);      // widget's width and height\r
-        image6_->SetViewId("image6");   // Set style\r
-\r
-        // Set additional property\r
-\r
-        // Add to scrollView1\r
-        RecordListScrollView->Add(image6_);\r
-        image6_->SetVisible(true);\r
     }\r
 \r
-    void RecordListView::DeInitView()\r
+    UIScrollView *RecordListView::RecordListViewInit()\r
     {\r
-        if (container_ != nullptr)\r
+        if (!SetUpScrollView())\r
         {\r
-            container_->RemoveAll();\r
+            return nullptr;\r
         }\r
-        if (RecordListScrollView != nullptr)\r
-        {\r
-            delete RecordListScrollView;\r
-            RecordListScrollView = nullptr;\r
-        }\r
-        if (RecordListlabel1 != nullptr)\r
-        {\r
-            delete RecordListlabel1;\r
-            RecordListlabel1 = nullptr;\r
-        }\r
-        if (RecordImage != nullptr)\r
-        {\r
-            delete RecordImage;\r
-            RecordImage = nullptr;\r
-        }\r
-        if (RecordButton != nullptr)\r
-        {\r
-            delete RecordButton;\r
-            RecordButton = nullptr;\r
-        }\r
-        if (image6_ != nullptr)\r
-        {\r
-            delete image6_;\r
-            image6_ = nullptr;\r
-        }\r
-        if (button3 != nullptr)\r
-        {\r
-            delete button3;\r
-            button3 = nullptr;\r
-        }\r
-        if (button1 != nullptr)\r
-        {\r
-            delete button1;\r
-            button1 = nullptr;\r
-        }\r
-        if (label3 != nullptr)\r
-        {\r
-            delete label3;\r
-            label3 = nullptr;\r
-        }\r
-        if (label2 != nullptr)\r
-        {\r
-            delete label2;\r
-            label2 = nullptr;\r
-        }\r
-        if (label1 != nullptr)\r
-        {\r
-            delete label1;\r
-            label1 = nullptr;\r
-        }\r
-        if (button2 != nullptr)\r
-        {\r
-            delete button2;\r
-            button2 = nullptr;\r
-        }\r
-        if (label9 != nullptr)\r
-        {\r
-            delete label9;\r
-            label9 = nullptr;\r
-        }\r
-        if (label6 != nullptr)\r
-        {\r
-            delete label6;\r
-            label6 = nullptr;\r
-        }\r
-        if (label8 != nullptr)\r
+\r
+        if (!SetUpRecordingList())\r
         {\r
-            delete label8;\r
-            label8 = nullptr;\r
+            return nullptr;\r
         }\r
-        if (label5 != nullptr)\r
+\r
+        if (!SetUpRecordListViewLabel())\r
         {\r
-            delete label5;\r
-            label5 = nullptr;\r
+            return nullptr;\r
         }\r
-        if (label7 != nullptr)\r
+        if (RecordingModel::GetInstance()->GetRecordingListNum() == 0)\r
         {\r
-            delete label7;\r
-            label7 = nullptr;\r
+            IsVisibleLabel(true);\r
         }\r
-        if (label4 != nullptr)\r
+        else\r
         {\r
-            delete label4;\r
-            label4 = nullptr;\r
+            IsVisibleLabel(false);\r
         }\r
-        delete container_;\r
-        container_ = nullptr;\r
-    }\r
 \r
-    void RecordListView::OnStart()\r
-    {\r
-        View<RecordListPresenter>::OnStart();\r
-        InitView();\r
-        RootView::GetInstance()->Add(container_);\r
-    }\r
-\r
-    void RecordListView::OnSetUpView()\r
-    {\r
-\r
-        View<RecordListPresenter>::OnSetUpView();\r
-        Draw();\r
-    }\r
-\r
-    void RecordListView::OnTearDownView()\r
-    {\r
-\r
-        View<RecordListPresenter>::OnTearDownView();\r
-        return;\r
+        initViewStatus = true;\r
+        return RecordListScrollView;\r
     }\r
 \r
-    void RecordListView::OnStop()\r
-    {\r
-\r
-        View<RecordListPresenter>::OnStop();\r
-        RootView::GetInstance()->RemoveAll();\r
-        return;\r
-    }\r
 }
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListAdapter.cpp b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListAdapter.cpp
new file mode 100644 (file)
index 0000000..05841ae
--- /dev/null
@@ -0,0 +1,78 @@
+#include "record/include/RecordingListAdapter.h"
+#include "record/include/RecordingListitemView.h"
+namespace OHOS
+{
+
+    RecordingListAdapter::RecordingListAdapter()
+    {
+    }
+
+    RecordingListAdapter::~RecordingListAdapter()
+    {
+        listData.clear();
+    }
+
+    uint16_t RecordingListAdapter::GetCount(void)
+    {
+        return listData.size();
+    }
+
+    void RecordingListAdapter::SetData(std::list<RecordingListItem> &data)
+    {
+        if (!listData.empty())
+        {
+            listData.clear();
+        }
+        std::list<RecordingListItem>::iterator it;
+        for (it = data.begin(); it != data.end(); it++)
+        {
+            listData.push_back(*it);
+        }
+    }
+
+    UIView *RecordingListAdapter::GetView(UIView *inView, int16_t index)
+    {
+        // 1.先检查列表数据是否为空,若为空则返回空指针
+        if (listData.empty())
+        {
+            return nullptr;
+        }
+        // 2.接着检查索引是否小于0,若小于0则返回空指针
+        if (index < 0)
+        {
+            return nullptr;
+        }
+        // 3.检查是否超出列表数据大小,若超出则返回空指针
+        size_t uindex = index;
+        if (uindex >= listData.size())
+        {
+            return nullptr;
+        }
+        // 4.通过迭代器访问列表中指定索引位置的元素,将其赋值给itemData变量
+        std::list<RecordingListItem>::iterator it = listData.begin();
+        for (int i = 0; i < index; i++)
+        {
+            it++;
+        }
+        RecordingListItem itemData = *it;
+        RecordingListitemView *item = nullptr;
+        // 5.根据传入的inView参数是否已经存在一个视图对象,若为空则创建一个新的RecordingListItemView对象,否则将inView转换成RecordingListItemView类型的指针
+        if (inView == nullptr)
+        {
+            item = new RecordingListitemView();
+            
+        }
+        else
+        {
+            item = static_cast<RecordingListitemView *>(inView);
+        }
+        item->SetItemInfo(itemData);
+        item->SetOnClickListener(itemClickListener);
+        return item;
+    }
+
+    void RecordingListAdapter::AddListItem(const RecordingListItem &item)
+    {
+        listData.push_front(item);
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingListitemView.cpp
new file mode 100644 (file)
index 0000000..6486bed
--- /dev/null
@@ -0,0 +1,69 @@
+#include "record/include/RecordingListitemView.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+
+    RecordingListitemView::RecordingListitemView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingListitemView::RecordingListitemView");
+        SetPosition(43, 100, 380, 120);
+        SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        SetStyle(STYLE_BACKGROUND_OPA, 255);
+        SetTouchable(true);
+        SetUpChild();
+        Add(&m_button);
+        Add(&m_recordId);
+        Add(&m_recordTotalTime);
+        Add(&m_recordTime);
+    }
+
+    RecordingListitemView::~RecordingListitemView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingListitemView::~RecordingListitemView");
+        Remove(&m_button);
+        Remove(&m_recordId);
+        Remove(&m_recordTotalTime);
+        Remove(&m_recordTime);
+    }
+
+    void RecordingListitemView::SetItemInfo(const RecordingListItem itemInfo)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingListitemView::SetItemInfo");
+        m_ItemInfo = itemInfo;
+        m_recordId.SetText(itemInfo.recordId);
+        m_recordTotalTime.SetText(itemInfo.recordTotalTime);
+        m_recordTime.SetText(itemInfo.recordTime);
+    }
+
+    void RecordingListitemView::SetUpChild()
+    {
+        OHOS::ColorType textColor = Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xcc);
+        OHOS::ColorType subTextColor = Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff);
+
+        m_button.SetPosition(0, 0, 380, 100);
+        m_button.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        m_button.SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff4FC34C, UIButton::PRESSED);
+
+        SetLabelStyle(m_recordId, 45, 33, 96, 35, textColor, 30);
+        SetLabelStyle(m_recordTotalTime, 258, 19, 73, 35, textColor, 30);
+        SetLabelStyle(m_recordTime, 237, 57, 94, 23, subTextColor, 20);
+    }
+
+    void RecordingListitemView::SetLabelStyle(UILabel &label, int x, int y, int width, int height, OHOS::ColorType textColor, int fontSize)
+    {
+        label.SetPosition(x, y, width, height);
+        label.SetTextColor(textColor);
+        label.SetStyle(STYLE_TEXT_FONT, fontSize);
+        label.SetStyle(STYLE_LINE_HEIGHT, height);
+        label.SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label.SetFont(DEFAULT_VECTOR_FONT_FILENAME, fontSize);
+    }
+
+    int RecordingListitemView::GetRecordingListIndex()
+    {
+        return m_ItemInfo.index;
+    }
+
+}
\ No newline at end of file
index df6da91..9561353 100644 (file)
@@ -46,8 +46,7 @@ namespace OHOS
     {
         PlayButtonState = state;
     }
-
-    //播放器状态的控制
+    // 播放器状态的控制
     int RecordingModel::RecordingPlayerStat()
     {
         /* ------------------------------ 1.设置播放器的回调函数。 ----------------------------- */
@@ -132,4 +131,105 @@ namespace OHOS
         player_ = player;
     }
 
+    std::string RecordingModel::GetCleanFileName(const std::string &filePath)
+    {
+        size_t found = filePath.find_last_of("/\\");
+
+        std::string fileName = (found != std::string::npos) ? filePath.substr(found + 1) : filePath;
+
+        if (fileName.size() >= 4 && fileName.substr(fileName.size() - 4) == ".mp3")
+        {
+            // 去除文件名的 .mp3 后缀
+            return fileName.substr(0, fileName.size() - 4);
+        }
+        return ""; // 返回空字符串表示不是 .mp3 文件
+    }
+
+    void RecordingModel::SearchFiles(const std::string &directory, std::vector<std::string> &fileNames, int &mp3FileCount)
+    {
+        DIR *dir;
+        struct dirent *ent;
+        if ((dir = opendir(directory.c_str())) != NULL)
+        {
+            while ((ent = readdir(dir)) != NULL)
+            {
+                std::string fileName = ent->d_name;
+                if (fileName != "." && fileName != "..")
+                {
+                    std::string filePath = directory + fileName;
+                    if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN) // 普通文件
+                    {
+                        std::string cleanFileName = GetCleanFileName(filePath);
+                        if (!cleanFileName.empty())
+                        {
+                            mp3FileCount++;
+                            fileNames.push_back(cleanFileName);
+                        }
+                    }
+                    else if (ent->d_type == DT_DIR) // 目录
+                    {
+                        std::string subDirectory = directory + fileName + "/";
+                        SearchFiles(subDirectory, fileNames, mp3FileCount); // 递归搜索子目录
+                    }
+                }
+            }
+            closedir(dir);
+        }
+    }
+
+    /// @brief 初始化录音列表数据
+    void RecordingModel::InitRecordingListItem()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::InitRecordingListItem");
+        RecordingMp3FileCount = 0;
+        if (!fileNames.empty())
+        {
+            fileNames.clear();
+        }
+        SearchFiles(directory, fileNames, RecordingMp3FileCount);
+        if (RecordingMp3FileCount != 0)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Total .mp3 Files Count:%d\n", RecordingMp3FileCount);
+            for (const auto &filename : fileNames)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File Name::%s\n", filename.c_str());
+            }
+            Recordings = new RecordingListItem[RecordingMp3FileCount];
+            if (Recordings == NULL)
+            {
+                // 内存分配失败处理
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Recordings new fail!\n");
+            }
+            else
+            {
+                int cnt = 1;
+                // 对 Recordings 数组进行操作
+                for (int i = 0; i < RecordingMp3FileCount; i++)
+                {
+                    Recordings[i] = {i,fileNames[i].c_str(),"09:51", "2022.04.21"};
+                    //std::string Id = "recording" + std::to_string(cnt++);
+                    //Recordings[i] = {i, Id.c_str(), "09:51", "2022.04.21"};
+                }
+                // 记得在不需要使用 Recordings 后释放内存
+                // free(Recordings);
+            }
+        }
+    }
+
+    /// @brief 获取存放录音的基本信息数组
+    /// @return
+    const RecordingListItem *RecordingModel::GetRecordinglistItems() const
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordinglistItems");
+        return Recordings;
+    }
+
+    /// @brief 获取录音数量
+    /// @return
+    uint8_t RecordingModel::GetRecordingListNum() const
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordingListNum");
+        return RecordingMp3FileCount;
+    }
+
 }
\ No newline at end of file
index f0cc860..3a5f7a7 100644 (file)
@@ -58,7 +58,7 @@ namespace OHOS
         if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
             (event.GetDeltaX() > 30) && (event.GetDeltaX() > (3 * MATH_ABS(event.GetDeltaY()))))\r
         {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_LIST);\r
+            \r
             return true;\r
         }\r
     }\r
index 0b4d3fb..ff460be 100644 (file)
@@ -3,6 +3,8 @@
 #include "graphic_math.h"\r
 #include "string.h"\r
 #include "record/include/RecordingPresenter.h"\r
+#include "record/include/RecordingModel.h"\r
+#include <wearable_log.h>\r
 namespace OHOS\r
 {\r
 \r
@@ -11,7 +13,6 @@ namespace OHOS
 \r
     RecordingPresenter::RecordingPresenter()\r
     {\r
-\r
         g_pRecordPresenter = this;\r
     }\r
 \r
@@ -29,13 +30,13 @@ namespace OHOS
 \r
     void RecordingPresenter::OnStart()\r
     {\r
-\r
+        // 初始化录音信息\r
+        RecordingModel::GetInstance()->InitRecordingListItem();\r
         Presenter<RecordingView>::OnStart();\r
     }\r
 \r
     void RecordingPresenter::OnPause(void)\r
     {\r
-\r
         Presenter<RecordingView>::OnPause();\r
     }\r
 \r
@@ -53,16 +54,40 @@ namespace OHOS
 \r
     bool RecordingPresenter::OnDrag(UIView &view, const DragEvent &event)\r
     {\r
+        return true;\r
+    }\r
 \r
-        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
-            (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+    bool RecordingPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
+    {\r
+        RecordingView *p_RecordingView = RecordingView::GetInstance();\r
+        if (p_RecordingView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView GetInstance fail");\r
+            return false;\r
+        }\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
         {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
+            for (int i = 0; i < MAX_RECORDINGVIEWID; i++)\r
+            {\r
+                if (p_RecordingView->GetRecordingViewScrollView(i) != nullptr &&\r
+                    p_RecordingView->GetRecordingViewScrollView(i)->IsVisible() == true)\r
+                {\r
+                    if (i == RECORDINGVIEW)\r
+                    {\r
+                        NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
+                    }\r
+                    else\r
+                    {\r
+                        p_RecordingView->ChangeView(i, RECORDINGVIEW);\r
+                    }\r
+                    break;\r
+                }\r
+            }\r
             return true;\r
         }\r
         else if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
         {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_LIST);\r
+            p_RecordingView->ChangeView(RECORDINGVIEW, RECORDINGLISTVIEW);\r
             return true;\r
         }\r
         return false;\r
@@ -82,7 +107,7 @@ namespace OHOS
     {\r
 \r
         // 将参数保存到数组中\r
-        const char *args[] = {"01", "mp3", "16000", "1", "16", "/user/res/record/recording/record_test.mp3"};\r
+        const char *args[] = {"01", "mp3", "16000", "1", "16", "/user/res/record/recording/record.mp3"};\r
         int argc = sizeof(args) / sizeof(args[0]);\r
 \r
         // 根据控件id查找是哪个控件触发了点击回调\r
index 3782b65..c819088 100644 (file)
@@ -33,51 +33,54 @@ namespace OHOS
     {\r
         if (initViewStatus == true)\r
         {\r
-            RecordingViewScrollView->RemoveAll();\r
+            RecordingViewScrollView[RECORDINGVIEW]->RemoveAll();\r
 \r
             RecordingViewImageAnimator->Stop();\r
             delete RecordingViewImageAnimator;\r
-            RecordingViewImageAnimator =nullptr;\r
+            RecordingViewImageAnimator = nullptr;\r
 \r
             delete RecordingViewTitleLabel;\r
-            RecordingViewTitleLabel =nullptr;\r
+            RecordingViewTitleLabel = nullptr;\r
 \r
             delete RecordingViewButton;\r
-            RecordingViewButton =nullptr;\r
+            RecordingViewButton = nullptr;\r
 \r
             delete AttentionLabel;\r
-            AttentionLabel =nullptr;\r
+            AttentionLabel = nullptr;\r
 \r
             delete RECORD1_Image;\r
-            RECORD1_Image =nullptr;\r
+            RECORD1_Image = nullptr;\r
 \r
-            delete RecordingViewScrollView;\r
-            RecordingViewScrollView =nullptr;\r
+            delete p_RecordListView;\r
+            p_RecordListView = nullptr;\r
+\r
+            delete RecordingViewScrollView[RECORDINGVIEW];\r
+            RecordingViewScrollView[RECORDINGVIEW] = nullptr;\r
         }\r
     }\r
 \r
     // 录音视图scrollView初始化\r
     bool RecordingView::SetUpScrollView(void)\r
     {\r
-        RecordingViewScrollView = new UIScrollView();\r
-        if (RecordingViewScrollView == nullptr)\r
+        RecordingViewScrollView[RECORDINGVIEW] = new UIScrollView();\r
+        if (RecordingViewScrollView[RECORDINGVIEW] == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingViewScrollView new fail!");\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingViewScrollView[RECORDINGVIEW] new fail!");\r
             return false;\r
         }\r
-        RecordingViewScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        RecordingViewScrollView->SetScrollBlankSize(35);\r
-        RecordingViewScrollView->SetReboundSize(50);\r
-        RecordingViewScrollView->SetDirection(1);\r
+        RecordingViewScrollView[RECORDINGVIEW]->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        RecordingViewScrollView[RECORDINGVIEW]->SetScrollBlankSize(35);\r
+        RecordingViewScrollView[RECORDINGVIEW]->SetReboundSize(50);\r
+        RecordingViewScrollView[RECORDINGVIEW]->SetDirection(1);\r
         UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(RecordingPresenter::GetInstance());\r
         if (draglistener == nullptr)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::draglistener can not be nullptr!");\r
             return false;\r
         }\r
-        RecordingViewScrollView->SetOnDragListener(draglistener);\r
-        RecordingViewScrollView->SetTouchable(true);\r
-        RecordingViewScrollView->SetDraggable(true);\r
+        RecordingViewScrollView[RECORDINGVIEW]->SetOnDragListener(draglistener);\r
+        RecordingViewScrollView[RECORDINGVIEW]->SetTouchable(true);\r
+        RecordingViewScrollView[RECORDINGVIEW]->SetDraggable(true);\r
         return true;\r
     }\r
 \r
@@ -105,7 +108,7 @@ namespace OHOS
         UIButton *button = new UIButton();\r
         if (button == nullptr)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " DisplayBrightnessView::SetTheButton: button new  fail!");\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " RecordingView::SetTheButton: button new  fail!");\r
             return nullptr;\r
         }\r
         button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);\r
@@ -183,6 +186,88 @@ namespace OHOS
         initViewStatus = true;\r
     }\r
 \r
+    UIScrollView *RecordingView::GetRecordingViewScrollView(int i)\r
+    {\r
+        return RecordingViewScrollView[i];\r
+    }\r
+\r
+    // 切换到“录音”视图\r
+    bool RecordingView::ChangeRecordingView(int16_t thisView)\r
+    {\r
+        if (RecordingViewScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::ChangeRecordingView");\r
+            RootView::GetInstance()->Add(RecordingViewScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 切换到录音列表视图\r
+    bool RecordingView::ChangeRecordListView(int16_t thisView)\r
+    {\r
+        if (RecordingViewScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::ChangeRecordListView");\r
+            p_RecordListView = new RecordListView();\r
+            if (p_RecordListView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView:: new scrollView[%d] fail", thisView);\r
+                return false;\r
+            }\r
+            RecordingViewScrollView[thisView] = p_RecordListView->RecordListViewInit();\r
+            RootView::GetInstance()->Add(RecordingViewScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    /* -------------------------------------------------------------------------- */\r
+    // 1.RecordingViewMapper:结构体定义了一个将视图ID映射到特定成员函数指针的映射表。\r
+    struct RecordingViewMapper\r
+    {\r
+        const int16_t viewId;\r
+        bool (RecordingView::*func)(int16_t thisView);\r
+    };\r
+\r
+    // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与RecordingViewMapper类中的特定成员函数指针进行了绑定。\r
+    static const RecordingViewMapper ViewMapper[] = {\r
+        {RECORDINGVIEW, &RecordingView::ChangeRecordingView},\r
+        {RECORDINGLISTVIEW, &RecordingView::ChangeRecordListView},\r
+    };\r
+\r
+    // 3.根据传入的interface参数执行相应视图ID关联的成员函数。\r
+    bool RecordingView::ClickFunc(int16_t interface)\r
+    {\r
+        int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]);\r
+        for (int i = 0; i < funcSize; i++)\r
+        {\r
+            if (interface == ViewMapper[i].viewId)\r
+            {\r
+                bool jug = (this->*(ViewMapper[i].func))(interface);\r
+                if (jug == false)\r
+                {\r
+                    return false;\r
+                }\r
+                return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+\r
+    // 4.切换视图\r
+    void RecordingView::ChangeView(int16_t hideView, int16_t showView)\r
+    {\r
+        if (hideView > MAX_RECORDINGVIEWID)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView:: RecordingViewID Overstep ones bounds");\r
+            return;\r
+        }\r
+        RecordingViewScrollView[hideView]->SetVisible(false);\r
+        ClickFunc(showView);\r
+        RecordingViewScrollView[showView]->SetVisible(true);\r
+        Draw();\r
+    }\r
+    /* -------------------------------------------------------------------------- */\r
+\r
     void RecordingView::OnStart()\r
     {\r
         View<RecordingPresenter>::OnStart();\r
@@ -192,12 +277,12 @@ namespace OHOS
     void RecordingView::OnSetUpView()\r
     {\r
         View<RecordingPresenter>::OnSetUpView();\r
-        RecordingViewScrollView->Add(RecordingViewTitleLabel);\r
-        RecordingViewScrollView->Add(RECORD1_Image);\r
-        RecordingViewScrollView->Add(RecordingViewButton);\r
-        RecordingViewScrollView->Add(AttentionLabel);\r
-        RecordingViewScrollView->Add(RecordingViewImageAnimator);\r
-        RootView::GetInstance()->Add(RecordingViewScrollView);\r
+        RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewTitleLabel);\r
+        RecordingViewScrollView[RECORDINGVIEW]->Add(RECORD1_Image);\r
+        RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewButton);\r
+        RecordingViewScrollView[RECORDINGVIEW]->Add(AttentionLabel);\r
+        RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewImageAnimator);\r
+        RootView::GetInstance()->Add(RecordingViewScrollView[RECORDINGVIEW]);\r
         Draw();\r
     }\r
 \r
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/recording/animator1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/recording/animator1.bin
deleted file mode 100644 (file)
index 96f8969..0000000
Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/record/recording/animator1.bin and /dev/null differ