录音视图实现删除录音功能
authorluozheng <1732036298@qq.com>
Thu, 7 Mar 2024 10:27:31 +0000 (18:27 +0800)
committerluozheng <1732036298@qq.com>
Thu, 7 Mar 2024 10:27:31 +0000 (18:27 +0800)
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingModel.h
code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPlayerView.h
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordListView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPlayerView.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingView.cpp

index ebf3053..aeafcbf 100644 (file)
@@ -65,11 +65,15 @@ namespace OHOS
         int RecordingPlayerStat();
         /* -------------------------------------------------------------------------- */
         void InitRecordingListItem();
-        const RecordingListItem *GetRecordinglistItems() const;
-        uint8_t GetRecordingListNum() const;
+        std::vector<RecordingListItem> &GetRecordinglistItems();
+        int &GetRecordingListNum();
         std::string GetCleanFileName(const std::string &filePath);
         void SearchFiles(const std::string &directory, std::vector<std::string> &fileNames, int &mp3FileCount);
-
+        void KeepClickRecordingIndex(int index_);
+        int GetClickRecordingIndex(void);
+        std::vector<std::string> &GetFileNames(void);
+        void KeepTotalRecordDuration(std::string time);
+        const char *GetTotalRecordDuration(void);
         /* ----------------------------------- 定时器 ---------------------------------- */
         void Recording_StartTimer(uint32_t interval);
         void Recording_StopTimer(void);
@@ -94,13 +98,14 @@ namespace OHOS
         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;
-
-        /* ----------------------------------- 定时器 ---------------------------------- */
-        std::string recordDuration; // 录音时长
+        std::vector<std::string> fileNames;                          // 文件名
+        int RecordingMp3FileCount = 0;                               // 录音MP3数量
+        const std::string directory = "/user/res/record/recording/"; // 录音目录
+        std::vector<RecordingListItem> Recordings;                   // 存放录音信息的动态数组
+        std::string recordDuration;                                  // 录音时长
+        int index;                                                   // 保存被点击录音的下标
+        std::string yyyymmhhh_date;                                  // 保存年月日时间
+        std::string TotalRecordDuration;                             // 保存录音的总时长
     };
 }
 
index 44eab9d..9524bf2 100644 (file)
@@ -52,7 +52,8 @@ namespace OHOS
         static RecordingPlayerView *GetInstance(void);\r
         UIScrollView *RecordingPlayerViewInit(void);\r
         void ClearAll(void);\r
-\r
+        UILabelExt * GetRecordingFileNameLabel(void);\r
+        UILabelExt *GetRecordingTimeAndDurationLabel(void);\r
     private:\r
         UILabelExt *SetUpLabel(LabelConfig &labelconfig); // 设置标签\r
         UIButton *SetTheButton(ButtonConfig &buttonconfig, UIView::OnClickListener *clickListener);\r
index afcd9c7..011de86 100644 (file)
@@ -47,7 +47,7 @@ namespace OHOS
                 delete clicklister;\r
                 clicklister = nullptr;\r
             }\r
-            \r
+\r
             delete recordList;\r
             recordList = nullptr;\r
 \r
@@ -174,14 +174,16 @@ namespace OHOS
     // 把录音信息数据拿到存储到list中\r
     void RecordListView::InitRecordingInfo(void)\r
     {\r
-        const RecordingListItem *itemInfo = RecordingModel::GetInstance()->GetRecordinglistItems();\r
+        std::vector<OHOS::RecordingListItem> &item = RecordingModel::GetInstance()->GetRecordinglistItems();\r
         for (int i = 0; i < RecordingModel::GetInstance()->GetRecordingListNum(); i++)\r
         {\r
-            AddRecordingToList(itemInfo[i]);\r
+            AddRecordingToList(item[i]);\r
         }\r
     }\r
 \r
-    // 每次录音完将数据刷新显示到list\r
+    /*\r
+     * @brief 每次录音完将数据刷新显示到list\r
+     */\r
     void RecordListView::RefreshRecordingListData(void)\r
     {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RefreshRecordingListData");\r
@@ -189,6 +191,15 @@ namespace OHOS
         p_RecordingListAdapter->ClearData();\r
         InitRecordingInfo();\r
         recordList->RefreshList();\r
+        if (RecordingModel::GetInstance()->GetRecordingListNum() == 0)\r
+        {\r
+            IsVisibleLabel(true);\r
+        }\r
+        else\r
+        {\r
+            IsVisibleLabel(false);\r
+        }\r
+        return;\r
     }\r
 \r
     // 设置提醒标签是否可见\r
index 0ba8acd..209c9ed 100644 (file)
@@ -5,7 +5,7 @@
 #include "bts_a2dp_source.h"
 #include "audio_manager.h"
 #include <wearable_log.h>
-#include "../../../../../../drivers/peripheral/utils/custom_utils.h"
+#include "custom_utils.h"
 #include <cmsis_os2.h>
 #include <service/graphic_service.h>
 #include "record/include/RecordGoingView.h"
@@ -135,7 +135,7 @@ namespace OHOS
     }
 
     /*
-     * @brief 获取纯净文件名
+     * @brief 获取纯净.mp3后缀文件名
      * @param 文件路径
      * @return 返回纯净文件名
      */
@@ -193,17 +193,21 @@ namespace OHOS
     }
 
     /*
-    * @brief 初始化录音列表数据 
-    */
+     * @brief 初始化录音列表数据
+     */
     void RecordingModel::InitRecordingListItem(void)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::InitRecordingListItem");
-        char *date = uapi_get_local_yyyymmdd_date(); // 获取日期
+        yyyymmhhh_date = uapi_get_local_yyyymmdd_date(); // 获取日期
         RecordingMp3FileCount = 0;
         if (!fileNames.empty())
         {
             fileNames.clear();
         }
+        if (!Recordings.empty())
+        {
+            Recordings.clear();
+        }
         SearchFiles(directory, fileNames, RecordingMp3FileCount);
         if (RecordingMp3FileCount != 0)
         {
@@ -212,41 +216,66 @@ namespace OHOS
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File Name::%s\n", filename.c_str());
             }
-            Recordings = new RecordingListItem[RecordingMp3FileCount];
-            if (Recordings == NULL)
+            // 对 Recordings 数组进行操作
+            for (int i = 0; i < RecordingMp3FileCount; i++)
             {
-                // 内存分配失败处理
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Recordings new fail!\n");
-            }
-            else
-            {
-                // 对 Recordings 数组进行操作
-                for (int i = 0; i < RecordingMp3FileCount; i++)
-                {
-                    Recordings[i] = {i, fileNames[i].c_str(), "09:51", date};
-                }
-                // 记得在不需要使用 Recordings 后释放内存
-                // free(Recordings);
+                Recordings.push_back({i, fileNames[i].c_str(), "09:51", yyyymmhhh_date.c_str()});
             }
         }
     }
 
-    /// @brief 获取存放录音的基本信息数组
-    /// @return
-    const RecordingListItem *RecordingModel::GetRecordinglistItems() const
+    /*
+     * @brief 获取存放录音的基本信息动态数组
+     * @return 返回该动态数组
+     */
+    std::vector<RecordingListItem> &RecordingModel::GetRecordinglistItems(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordinglistItems");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordinglistItems");
         return Recordings;
     }
 
-    /// @brief 获取录音数量
-    /// @return
-    uint8_t RecordingModel::GetRecordingListNum() const
+    /*
+     * @brief 获取录音数量
+     */
+    int &RecordingModel::GetRecordingListNum(void)
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordingListNum");
         return RecordingMp3FileCount;
     }
 
+    /*
+     * @brief 保存被点击录音下标
+     */
+    void RecordingModel::KeepClickRecordingIndex(int index_)
+    {
+        index = index_;
+    }
+
+    /*
+     * @brief 获取被点击录音下标
+     */
+    int RecordingModel::GetClickRecordingIndex(void)
+    {
+        return index;
+    }
+
+    /*
+     *@brief 获取保存文件名的动态数组
+     */
+    std::vector<std::string> &RecordingModel::GetFileNames(void)
+    {
+        return fileNames;
+    }
+
+    void RecordingModel::KeepTotalRecordDuration(std::string time)
+    {
+        TotalRecordDuration = time;
+    }
+
+    const char *RecordingModel::GetTotalRecordDuration(void)
+    {
+        return TotalRecordDuration.c_str();
+    }
     /* ----------------------------------- 定时器 ---------------------------------- */
     // 声明定时器变量
     osTimerId_t g_timer = NULL;
@@ -258,7 +287,9 @@ namespace OHOS
     static constexpr int16 NUM_TIME_HOUR = 3600;
     static constexpr int32 NUM_TIME_DAY = 86400;
 
-    /// @brief 显示录音时长
+    /*
+     * @brief 显示录音时长
+     */
     char *RecordingModel::DisplayRecordDuration()
     {
         recordDuration.erase();
@@ -311,7 +342,9 @@ namespace OHOS
         return (char *)recordDuration.c_str();
     }
 
-    // 在这里添加定时器到期后的处理逻辑
+    /*
+     * @brief 在这里添加定时器到期后的处理逻辑
+     */
     static void Recording_TimerCallbackProc(int data)
     {
         g_RecordingTimes++;
@@ -338,14 +371,18 @@ namespace OHOS
         RecordGoingView::GetInstance()->GetRecordingDurationLabel()->SetText(RecordingModel::GetInstance()->DisplayRecordDuration());
     }
 
-    // 回调函数
+    /*
+     * @brief 录音回调函数
+     */
     static void Recording_TimerCallback(int data)
     {
         GraphicService::GetInstance()->PostGraphicEvent(std::bind(Recording_TimerCallbackProc, data));
     }
 
-    /// @brief 开启定时器函数
-    /// @param interval 时间间隔,单位ms
+    /*
+     *  @brief 开启定时器函数
+     *  @param interval 时间间隔,单位ms
+     */
     void RecordingModel::Recording_StartTimer(uint32_t interval)
     {
         /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
@@ -383,7 +420,9 @@ namespace OHOS
         return;
     }
 
-    // 停止定时器函数
+    /*
+     * @brief 停止定时器
+     */
     void RecordingModel::Recording_StopTimer(void)
     {
         // 检查定时器是否存在
index 21a0c89..0ab7dd7 100644 (file)
@@ -317,6 +317,22 @@ namespace OHOS
         return true;\r
     }\r
 \r
+    /*\r
+     * @brief 获取录音文件名标签\r
+    */\r
+    UILabelExt *RecordingPlayerView::GetRecordingFileNameLabel(void)\r
+    {\r
+        return RecordingFileName;\r
+    }\r
+\r
+    /*\r
+     * @brief 获取录音时间和时长标签\r
+    */\r
+    UILabelExt *RecordingPlayerView::GetRecordingTimeAndDurationLabel(void)\r
+    {\r
+        return RecordingTimeAndDuration;\r
+    }\r
+\r
     UIScrollView *RecordingPlayerView::RecordingPlayerViewInit()\r
     {\r
         if (!SetUpScrollView())\r
index 84160cc..b75c190 100644 (file)
@@ -127,7 +127,7 @@ namespace OHOS
     {\r
         if (std::remove(filepath) == 0)\r
         {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Deleted file: %s", filepath);\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Deleted file: %s successed!", filepath);\r
         }\r
         else\r
         {\r
@@ -204,8 +204,15 @@ namespace OHOS
         }\r
         else if (strcmp(view.GetViewId(), RECORD_DELETE_ON_BUTTON_VIEWID) == 0)\r
         {\r
-            deleteFile("/user/res/record/recording/record_test.mp3");\r
-            p_RecordingView->ChangeView(RECORDINGDELETEVIEW, RECORDINGPLAYERVIEW);\r
+            RecordingModel *p_RecordingModel = RecordingModel::GetInstance();\r
+            std::string fileName = "/user/res/record/recording/" + p_RecordingModel->GetFileNames()[p_RecordingModel->GetClickRecordingIndex()] + ".mp3";\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fileName:%s\n", fileName.c_str());\r
+            deleteFile(fileName.c_str());\r
+            if (--p_RecordingModel->GetRecordingListNum() < 0)\r
+            {\r
+                p_RecordingModel->GetRecordingListNum() = 0;\r
+            }\r
+            p_RecordingView->ChangeView(RECORDINGDELETEVIEW, RECORDINGVIEW);\r
             return true;\r
         }\r
         else if (strcmp(view.GetViewId(), RECORD_DELETE_OFF_BUTTON_VIEWID) == 0)\r
@@ -252,13 +259,20 @@ namespace OHOS
         UNUSED(event);\r
         RecordingListitemView *p_RecordingListitemView = static_cast<RecordingListitemView *>(&view);\r
         int index = p_RecordingListitemView->GetRecordingListIndex();\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListViewOnClickListener::OnClick index:%d\n", index);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListViewOnClickListener::OnClick index:%d\n", index);\r
         if (index >= RecordingModel::GetInstance()->GetRecordingListNum())\r
         {\r
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordListViewOnClickListener::OnClick is no index");\r
             return false;\r
         }\r
-\r
+        // 保存被点击录音下标\r
+        RecordingModel *p_RecordingModel = RecordingModel::GetInstance();\r
+        p_RecordingModel->KeepClickRecordingIndex(index);\r
+        if (p_RecordingModel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel GetInstance fail");\r
+            return false;\r
+        }\r
         RecordingView *p_RecordingView = RecordingView::GetInstance();\r
         if (p_RecordingView == nullptr)\r
         {\r
@@ -266,6 +280,8 @@ namespace OHOS
             return false;\r
         }\r
         p_RecordingView->ChangeView(RECORDINGLISTVIEW, RECORDINGPLAYERVIEW);\r
+       \r
+        \r
         return true;\r
     }\r
 \r
index 5314e21..e70eb18 100644 (file)
@@ -2,6 +2,7 @@
 #include "record/include/RecordingPresenter.h"\r
 #include "UiConfig.h"\r
 #include "wearable_log.h"\r
+#include "../include/RecordingModel.h"\r
 namespace OHOS\r
 {\r
     static ImageAnimatorInfo RecordingViewImageAnimatorInfo[2] = {\r
@@ -274,6 +275,8 @@ namespace OHOS
             RecordingViewScrollView[thisView] = p_RecordingPlayerView->RecordingPlayerViewInit();\r
             RootView::GetInstance()->Add(RecordingViewScrollView[thisView]);\r
         }\r
+        // 设置“录音播放器”【录音文件名标签】的"文本内容"为被点击的"录音"的录音名\r
+        p_RecordingPlayerView->GetRecordingFileNameLabel()->SetText(RecordingModel::GetInstance()->GetFileNames()[RecordingModel::GetInstance()->GetClickRecordingIndex()].c_str());\r
         return true;\r
     }\r
 \r