录音界面实现上一首与下一首切换能正常播放,录音列表还需优化:录音完后录音列表第一时间未显示刚刚录的音
authorluozheng <1732036298@qq.com>
Wed, 13 Mar 2024 08:41:18 +0000 (16:41 +0800)
committerluozheng <1732036298@qq.com>
Wed, 13 Mar 2024 08:41:18 +0000 (16:41 +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/include/RecordingPresenter.h
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 3e0fa09..fee695f 100644 (file)
@@ -47,21 +47,21 @@ namespace OHOS
         void SetRecordingPlayerUri(std::string src);
         void SetRecordingPlayButtonState(bool state);
         void SetCircleProgress(int value);
+        int GetCircleProgress(void);
         void AudioInit(void);
         void ConvertMillisecondToTime(int32_t milliseconds);
-        int RecordingPlayerInit(void);
+        int RecordingPlayerInit(int index);
         int RecordingPlayerStat(void);
         int GetRecordingPlayerState(void);
-        int RecordingPlayerPlay(void);
-        int RecordingPlayerPause(void);
         int RecordingPlayerStop(void);
-        void NextSong(int index);
         void PreviousPlayout(void);
+        void NextPlayout(void);
         int ResetSourceAndPrepare(void);
         int ResetPlayerModuleStatus(void);
         /* -------------------------------------------------------------------------- */
         void InitRecordingListItem();
         std::vector<RecordingListItem> &GetRecordinglistItems();
+        std::string GetCurrentPlayRecordingName(void);
         int &GetRecordingListNum();
         std::string GetCleanFileName(const std::string &filePath);
         void SearchFiles(const std::string &directory, std::vector<std::string> &fileNames, int &mp3FileCount);
@@ -71,6 +71,7 @@ namespace OHOS
         void KeepTotalRecordDuration(std::string time);
         std::string GetTotalRecordDuration(void) const;
         std::string Getyyyymmhhh_date(void) const;
+        std::string &Getyyyymmhhh_dateAndTotalRecordDuration(void);
         std::shared_ptr<RecordingPlayerInterruptListener> GetRecordingPlayerIntrptListener(void);
         void ClearActivateAudioInterrupt(void);
         std::shared_ptr<Player> GetPlayerCtr(void);
@@ -110,6 +111,7 @@ namespace OHOS
         int index;                                                   // 保存被点击录音的下标
         std::string yyyymmhhh_date;                                  // 保存年月日时间
         std::string TotalRecordDuration;                             // 保存录音的总时长
+        std::string RecordingTimeAndDuration;                        // 录音日期和录音时长
     };
 }
 
index dae2180..e9d0b78 100644 (file)
@@ -56,6 +56,8 @@ namespace OHOS
         UILabelExt *GetRecordingTimeAndDurationLabel(void);\r
         UICheckBox * GetPlayerButton(void);\r
         void SetPlayerButtonState(UICheckBox::UICheckBoxState state);\r
+        UICheckBox::UICheckBoxState GetPlayerButtonState(void);\r
+        void ResetComponentStatus(void);\r
         UICircleProgress * GetPlayerProgressBar(void);\r
     private:\r
         UILabelExt *SetUpLabel(LabelConfig &labelconfig); // 设置标签\r
index 25c8443..5bec3da 100644 (file)
@@ -93,6 +93,7 @@ namespace OHOS
         ~RecordingPlayerViewOnClickListener() {}\r
 \r
         bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        void PlayerButtonOnClick(void);\r
     };\r
 \r
     /*\r
@@ -114,8 +115,7 @@ namespace OHOS
     class RecordingPresenter : public Presenter<RecordingView>,\r
                                public UIView::OnClickListener,\r
                                public RootView::OnKeyActListener,\r
-                               public UIView::OnDragListener,\r
-                               public UICheckBox::OnChangeListener\r
+                               public UIView::OnDragListener\r
     {\r
     public:\r
         RecordingPresenter();\r
@@ -135,7 +135,6 @@ namespace OHOS
         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 OnChange(UICheckBox::UICheckBoxState state) override;\r
         bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
         RecordingModel *p_RecordingModel{nullptr};\r
     };\r
index 6e9e39b..73cf1f2 100644 (file)
@@ -72,6 +72,15 @@ namespace OHOS
     {
         CircleProgress = value;
     }
+
+    /*
+     * @brief 获取播放进度
+     */
+    int RecordingModel::GetCircleProgress(void)
+    {
+        return CircleProgress;
+    }
+
     /*
      * @brief 获取录音播放器中断监听类
      */
@@ -157,11 +166,11 @@ namespace OHOS
     /*
      *  @brief 录音播放初始化,包括录音文件名,创建资源对象,录音时间和总时长
      */
-    int RecordingModel::RecordingPlayerInit(void)
+    int RecordingModel::RecordingPlayerInit(int index)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::RecordingPlayerInit");
         int32_t ret;
-        std::string recordingFileName = fileNames[GetClickRecordingIndex()];
+        std::string recordingFileName = fileNames[index];
         if (recordingFileName.c_str() == nullptr)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "No Recording files!!");
@@ -209,8 +218,11 @@ namespace OHOS
     {
         int ret;
         /* ------------------------------ 设置播放器的回调函数。 ----------------------------- */
-        ResetPlayerModuleStatus();
-        ResetSourceAndPrepare();
+        if (GetRecordingPlayerState() != PlayerStates::PLAYER_PREPARED) //如果录音播放器状态为Prepared状态无需重置回到IDLE状态和setsource,Prepare
+        {
+            ResetPlayerModuleStatus();
+            ResetSourceAndPrepare();
+        }
         PlayerCtr->SetPlayerCallback(PlayerCallback);
         /* ----------------------------- 如果未激活音频中断处理: ----------------------------- */
         if (!IsActivateAudioInterrupt)
@@ -314,92 +326,6 @@ namespace OHOS
         return OHOS_SUCCESS;
     }
 
-    /*
-     * @brief 录音播放器播放
-     */
-    int RecordingModel::RecordingPlayerPlay(void)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::RecordingPlayerPlay");
-        /* -------------------------------- 获取播放器状态 ------------------------------- */
-        int32_t ret;
-        int32_t state = GetRecordingPlayerState();
-        if (state == OHOS_FAILURE)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");
-            return OHOS_FAILURE;
-        }
-        if (state == PlayerStates::PLAYER_PAUSED) // 暂停状态则直接开始
-        {
-            ret = PlayerCtr->Play();
-            if (ret != 0)
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Play err, ret:%d", ret);
-                return OHOS_FAILURE;
-            }
-            SetRecordingPlayButtonState(true); // 播放控件图形同步
-            return OHOS_SUCCESS;
-        }
-        else if (state == PlayerStates::PLAYER_STARTED) // 已经在播放状态则不做操作
-        {
-            return RECORDER_ALREADY_PLAYING;
-        }
-        else // 其它情况的处理
-        {
-            ret = RecordingPlayerStat();
-            if (ret != OHOS_SUCCESS)
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret);
-                return OHOS_FAILURE;
-            }
-            SetRecordingPlayButtonState(true); // 播放控件图形同步
-            return OHOS_SUCCESS;
-        }
-    }
-
-    /*
-     * @brief 录音播放器暂停
-     */
-    int RecordingModel::RecordingPlayerPause(void)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::RecordingPlayerPause");
-        /* -------------------------------- 获取播放器状态 ------------------------------- */
-        int32_t state = GetRecordingPlayerState();
-        if (state == OHOS_FAILURE)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");
-            return OHOS_FAILURE;
-        }
-
-        if (state == PlayerStates::PLAYER_PAUSED) // 暂停状态则不操作
-        {
-            return RECORDER_ALREADY_PAUSED;
-        }
-        else if (state == PlayerStates::PLAYER_STOPPED) // 停止状态则不操作
-        {
-            return RECORDER_ALREADY_STOPPED;
-        }
-        else if (state == PlayerStates::PLAYER_PLAYBACK_COMPLETE)
-        {
-            return RECORDER_PLAYBACK_COMPLETED;
-        }
-        else if (state == PlayerStates::PLAYER_STARTED)
-        {
-            int ret = PlayerCtr->Pause();
-            if (ret != 0)
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Pause err, ret:%d!!", ret);
-                return OHOS_FAILURE;
-            }
-            else
-            {
-                SetRecordingPlayButtonState(false);
-                return OHOS_SUCCESS;
-            }
-        }
-
-        return OHOS_SUCCESS;
-    }
-
     /*
      * @brief 录音播放器停止
      */
@@ -459,55 +385,6 @@ namespace OHOS
         return OHOS_SUCCESS;
     }
 
-    void RecordingModel::NextSong(int index)
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " RecordingModel::NextSong");
-
-        std::string recordingFileName = fileNames[index];
-        if (recordingFileName.c_str() == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "No Recording files!!");
-            return;
-        };
-        SetRecordingPlayerUri(directory + recordingFileName + ".mp3");
-        /* -------------------------------------------------------------------------- */
-        int32_t playerState = GetRecordingPlayerState();
-        if (playerState == OHOS_FAILURE)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get playerState of player failed!!");
-            return;
-        }
-        int ret;
-        if ((playerState == PlayerStates::PLAYER_STARTED) || (playerState == PlayerStates::PLAYER_PLAYBACK_COMPLETE))
-        {
-            /* start play */
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "start play, 160.");
-            ret = PlayerCtr->Stop(); // 停止
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret);
-            ret = PlayerCtr->Reset();
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);
-            ret = RecordingPlayerStat(); // 播放
-            if (ret != 0)
-            {
-                /* stop and exit */
-                ret = PlayerCtr->Stop(); // 停止
-                ret = PlayerCtr->Reset();
-            }
-        }
-        else if (playerState == PlayerStates::PLAYER_PAUSED || (playerState == PlayerStates::PLAYER_IDLE) || PlayerStates::PLAYER_PAUSED)
-        {
-            ret = PlayerCtr->Reset();
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);
-        }
-        ret = RecordingPlayerStat();
-        if (ret != OHOS_SUCCESS)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret);
-            return;
-        }
-        SetRecordingPlayButtonState(true); // 播放控件图形同步
-    }
-
     /*
      * @brief 上一首录音播放
      */
@@ -527,7 +404,31 @@ namespace OHOS
             KeepClickRecordingIndex(GetRecordingListNum() - 1);
         }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PreviousPlayout, index %d.", GetClickRecordingIndex());
-        NextSong(GetClickRecordingIndex());
+        RecordingPlayerInit(GetClickRecordingIndex());
+        SetCircleProgress(0);
+    }
+
+    /*
+     * @brief 下一首录音播放
+     */
+    void RecordingModel::NextPlayout(void)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout, index %d.", GetClickRecordingIndex());
+        if ((GetClickRecordingIndex() > GetRecordingListNum() - 1) || (GetClickRecordingIndex() < 0))
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");
+            KeepClickRecordingIndex(0);
+            return;
+        }
+        GetClickRecordingIndex()++; // 下一曲
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout, index %d.", GetClickRecordingIndex());
+        if (GetClickRecordingIndex() > GetRecordingListNum() - 1)
+        {
+            KeepClickRecordingIndex(0);
+        }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NextPlayout, index %d.", GetClickRecordingIndex());
+        RecordingPlayerInit(GetClickRecordingIndex());
+        SetCircleProgress(0);
     }
 
     /*
@@ -630,6 +531,14 @@ namespace OHOS
         return Recordings;
     }
 
+    /*
+     * @brief 获取当前播放的录音文件名
+     */
+    std::string RecordingModel::GetCurrentPlayRecordingName(void)
+    {
+        return fileNames[GetClickRecordingIndex()];
+    }
+
     /*
      * @brief 获取录音数量
      */
@@ -687,6 +596,24 @@ namespace OHOS
         return yyyymmhhh_date;
     }
 
+    /*
+     * @brief 获取年月日时间和录音时长
+     */
+    std::string &RecordingModel::Getyyyymmhhh_dateAndTotalRecordDuration(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[RecordingModel] Getyyyymmhhh_dateAndTotalRecordDuration\n");
+        std::string yyyymmhhh_date = RecordingModel::GetInstance()->Getyyyymmhhh_date();
+        std::string TotalRecordDuration = RecordingModel::GetInstance()->GetTotalRecordDuration();
+        // 去掉日期字符串末尾的换行符
+        if (!yyyymmhhh_date.empty() && yyyymmhhh_date.back() == '\n')
+        {
+            yyyymmhhh_date.erase(yyyymmhhh_date.length() - 1);
+        }
+        RecordingTimeAndDuration = (yyyymmhhh_date + "-" + TotalRecordDuration);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingTimeAndDuration %s\n", RecordingTimeAndDuration.c_str());
+        return RecordingTimeAndDuration;
+    }
+
     /* ----------------------------------- 定时器 ---------------------------------- */
 
     /*
index 33bcde0..e70e20f 100644 (file)
@@ -218,8 +218,7 @@ namespace OHOS
         RecordingPlayPauseButton->SetViewId(RECORD_PLAY_PAUSE_CHECKBOX_VIEWID);\r
         RecordingPlayPauseButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
         RecordingPlayPauseButton->SetImages(PNG_UNIVERSAL_PAUSE_IMAGE, PNG_UNIVERSAL_PLAY_IMAGE);\r
-        UICheckBox::OnChangeListener *changelister = static_cast<UICheckBox::OnChangeListener *>(RecordingPresenter::GetInstance());\r
-        RecordingPlayPauseButton->SetOnChangeListener(changelister);\r
+        RecordingPlayPauseButton->SetOnClickListener(buttonClick);\r
 \r
         return true;\r
     }\r
@@ -320,7 +319,7 @@ namespace OHOS
 \r
     /*\r
      * @brief 获取录音文件名标签\r
-    */\r
+     */\r
     UILabelExt *RecordingPlayerView::GetRecordingFileNameLabel(void)\r
     {\r
         return RecordingFileName;\r
@@ -328,7 +327,7 @@ namespace OHOS
 \r
     /*\r
      * @brief 获取录音时间和时长标签\r
-    */\r
+     */\r
     UILabelExt *RecordingPlayerView::GetRecordingTimeAndDurationLabel(void)\r
     {\r
         return RecordingTimeAndDuration;\r
@@ -350,6 +349,14 @@ namespace OHOS
         RecordingPlayPauseButton->SetState(state);\r
     }\r
 \r
+    /*\r
+     * @brief 获取播放器状态\r
+     */\r
+    UICheckBox::UICheckBoxState RecordingPlayerView::GetPlayerButtonState(void)\r
+    {\r
+        return RecordingPlayPauseButton->GetState();\r
+    }\r
+\r
     /*\r
      * @brief 获取录音播放进度条\r
      */\r
@@ -358,6 +365,34 @@ namespace OHOS
         return PlayerProgressBar;\r
     }\r
 \r
+    /*\r
+     * @brief 重置组件状态\r
+     */\r
+    void RecordingPlayerView::ResetComponentStatus(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[RecordingPlayerView] ResetComponentStatus");\r
+\r
+        if (GetPlayerProgressBar() != nullptr)\r
+        {\r
+            GetPlayerProgressBar()->SetValue(0); // 0:进度0%\r
+            GetPlayerProgressBar()->Invalidate();\r
+        }\r
+        if (GetRecordingFileNameLabel() != nullptr)\r
+        {\r
+            GetRecordingFileNameLabel()->SetText(RecordingModel::GetInstance()->GetCurrentPlayRecordingName().c_str());\r
+            GetRecordingFileNameLabel()->Invalidate();\r
+        }\r
+        if (GetRecordingTimeAndDurationLabel() != nullptr)\r
+        {\r
+            GetRecordingTimeAndDurationLabel()->SetText(RecordingModel::GetInstance()->Getyyyymmhhh_dateAndTotalRecordDuration().c_str());\r
+            GetRecordingTimeAndDurationLabel()->Invalidate();\r
+        }\r
+        if (GetPlayerButton() != nullptr)\r
+        {\r
+            SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+        }\r
+    }\r
+\r
     UIScrollView *RecordingPlayerView::RecordingPlayerViewInit()\r
     {\r
         if (!SetUpScrollView())\r
index 7204cb7..2b856c7 100644 (file)
@@ -23,10 +23,6 @@ namespace OHOS
 \r
     RecordingPresenter::~RecordingPresenter()\r
     {\r
-        p_RecordingModel->GetPlayerCtr()->Stop();\r
-        p_RecordingModel->GetPlayerCtr()->Release();\r
-        p_RecordingModel->SetAudioInitStatus(false);\r
-        p_RecordingModel->GetPlayerCtr().reset();\r
         g_pRecordPresenter = nullptr;\r
     }\r
 \r
@@ -59,6 +55,14 @@ namespace OHOS
     void RecordingPresenter::OnStop(void)\r
     {\r
         Presenter<RecordingView>::OnStop();\r
+        if (p_RecordingModel->GetPlayerCtr() != nullptr)\r
+        {\r
+            p_RecordingModel->GetPlayerCtr()->Stop();\r
+            p_RecordingModel->GetPlayerCtr()->Reset();\r
+            p_RecordingModel->GetPlayerCtr()->Release();\r
+            p_RecordingModel->SetAudioInitStatus(false);\r
+            p_RecordingModel->GetPlayerCtr().reset();\r
+        }\r
         ScreenAlwaysOnCtr(0);\r
     }\r
 \r
@@ -232,24 +236,6 @@ namespace OHOS
         return true;\r
     }\r
 \r
-    bool RecordingPresenter::OnChange(UICheckBox::UICheckBoxState state)\r
-    {\r
-        switch (state)\r
-        {\r
-        case UICheckBox::SELECTED:\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording play start");\r
-            p_RecordingModel->RecordingPlayerPlay();\r
-            break;\r
-        case UICheckBox::UNSELECTED:\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording play stop");\r
-            p_RecordingModel->RecordingPlayerPause();\r
-            break;\r
-        default:\r
-            break;\r
-        }\r
-        return true;\r
-    }\r
-\r
     bool RecordingPresenter::OnKeyAct(UIView &view, const KeyEvent &event)\r
     {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingPresenter::OnKeyAct");\r
@@ -283,7 +269,7 @@ namespace OHOS
         }\r
         p_RecordingModel->KeepClickRecordingIndex(index);\r
         /* ------------------------ 录音播放初始化,包括录音文件名,录音时间和总时长 ------------------------ */\r
-        if (p_RecordingModel->RecordingPlayerInit() != OHOS_SUCCESS)\r
+        if (p_RecordingModel->RecordingPlayerInit(index) != OHOS_SUCCESS)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_RecordingModel->RecordingPlayerInit fail!!");\r
             return false;\r
@@ -316,6 +302,61 @@ namespace OHOS
         return true;\r
     }\r
 \r
+    /*\r
+     * @brief 播放按钮被点击\r
+     */\r
+    void RecordingPlayerViewOnClickListener::PlayerButtonOnClick(void)\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerViewOnClickListener PlayerButtonOnClick");\r
+\r
+        RecordingPlayerView *p_RecordingPlayerView = RecordingPlayerView::GetInstance();\r
+        if (p_RecordingPlayerView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerView GetInstance fail");\r
+            return;\r
+        }\r
+\r
+        RecordingModel *p_RecordingModel = RecordingModel::GetInstance();\r
+        if (p_RecordingModel == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_RecordingModel GetInstance fail");\r
+            return;\r
+        }\r
+\r
+        int ret;\r
+        uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
+        int32_t playerState;\r
+\r
+        state = p_RecordingPlayerView->GetPlayerButtonState();\r
+        playerState = p_RecordingModel->GetRecordingPlayerState();\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buttonState = %d playerState = %d", state, playerState);\r
+\r
+        if (state == UICheckBox::UICheckBoxState::SELECTED)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state == SELECTED");\r
+\r
+            if (playerState == PlayerStates::PLAYER_PAUSED)\r
+            {\r
+                ret = p_RecordingModel->GetPlayerCtr()->Play();\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Play, ret:%d", ret);\r
+            }\r
+            else\r
+            {\r
+                ret = p_RecordingModel->RecordingPlayerStat(); // 本地播放\r
+                if (ret != 0)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret);\r
+                }\r
+            }\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state == UNSELECTED");\r
+            ret = p_RecordingModel->GetPlayerCtr()->Pause(); // 本地暂停\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Pause, ret:%d", ret);\r
+        }\r
+    }\r
+\r
     bool RecordingPlayerViewOnClickListener::OnClick(UIView &view, const ClickEvent &event)\r
     {\r
         RecordingView *p_RecordingView = RecordingView::GetInstance();\r
@@ -339,28 +380,25 @@ namespace OHOS
             return false;\r
         }\r
 \r
-        if (strcmp(view.GetViewId(), RECORD_PLAY_PROVE_BUTTON_VIEWID) == 0)\r
+        if (strcmp(view.GetViewId(), RECORD_PLAY_PAUSE_CHECKBOX_VIEWID) == 0)\r
+        {\r
+            PlayerButtonOnClick();\r
+        }\r
+        else if (strcmp(view.GetViewId(), RECORD_PLAY_PROVE_BUTTON_VIEWID) == 0)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player prove button being clicked!");\r
 \r
-            // if (p_RecordingPlayerView->GetPlayerProgressBar() != nullptr)\r
-            // {\r
-            //     p_RecordingPlayerView->GetPlayerProgressBar()->SetValue(0); // 0:进度0%\r
-            //     p_RecordingPlayerView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
-            //     p_RecordingPlayerView->GetPlayerProgressBar()->Invalidate();\r
-            // }\r
-            // p_RecordingModel->PreviousPlayout();\r
+            p_RecordingModel->PreviousPlayout();\r
+\r
+            p_RecordingPlayerView->ResetComponentStatus();\r
         }\r
         else if (strcmp(view.GetViewId(), RECORD_PLAY_NEXT_BUTTON_VIEWID) == 0)\r
         {\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player next button being clicked!");\r
-            // if (p_RecordingPlayerView->GetPlayerProgressBar() != nullptr)\r
-            // {\r
-            //     p_RecordingPlayerView->GetPlayerProgressBar()->SetValue(0); // 0:进度0%\r
-            //     p_RecordingPlayerView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
-            //     p_RecordingPlayerView->GetPlayerProgressBar()->Invalidate();\r
-            // }\r
-            // p_RecordingModel->NextSong(p_RecordingModel->GetClickRecordingIndex() + 1);\r
+\r
+            p_RecordingModel->NextPlayout();\r
+\r
+            p_RecordingPlayerView->ResetComponentStatus();\r
         }\r
         else if (strcmp(view.GetViewId(), RECORD_PLAY_DELETE_BUTTON_VIEWID) == 0)\r
         {\r
@@ -673,6 +711,7 @@ namespace OHOS
     {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerCallbackImpl::OnPlaybackComplete");\r
         /* --------------------------- 处实现代码用于处理文件播放完成的事件 --------------------------- */\r
+        /* ----------------------- 用户在回调函数中不能有阻塞操作,也不能调用播放器接口 ----------------------- */\r
         // 此处实现代码用于处理文件播放完成的事件\r
         RecordingPlayerView *p_RecordingPlayerView = RecordingPlayerView::GetInstance();\r
         if (p_RecordingPlayerView != nullptr)\r
index 535eba9..681d47f 100644 (file)
@@ -52,17 +52,27 @@ namespace OHOS
             delete RECORD1_Image;\r
             RECORD1_Image = nullptr;\r
 \r
-            delete p_RecordListView;\r
-            p_RecordListView = nullptr;\r
-\r
-            delete p_RecordGoingView;\r
-            p_RecordGoingView = nullptr;\r
-\r
-            delete p_RecordingPlayerView;\r
-            p_RecordingPlayerView = nullptr;\r
+            if (p_RecordListView != nullptr)\r
+            {\r
+                delete p_RecordListView;\r
+                p_RecordListView = nullptr;\r
+            }\r
+            if (p_RecordGoingView != nullptr)\r
+            {\r
+                delete p_RecordGoingView;\r
+                p_RecordGoingView = nullptr;\r
+            }\r
+            if (p_RecordingPlayerView != nullptr)\r
+            {\r
+                delete p_RecordingPlayerView;\r
+                p_RecordingPlayerView = nullptr;\r
+            }\r
 \r
-            delete p_RecordDeleteView;\r
-            p_RecordDeleteView = nullptr;\r
+            if (p_RecordDeleteView != nullptr)\r
+            {\r
+                delete p_RecordDeleteView;\r
+                p_RecordDeleteView = nullptr;\r
+            }\r
 \r
             delete RecordingViewScrollView[RECORDINGVIEW];\r
             RecordingViewScrollView[RECORDINGVIEW] = nullptr;\r
@@ -276,18 +286,7 @@ namespace OHOS
             RootView::GetInstance()->Add(RecordingViewScrollView[thisView]);\r
         }\r
         // 设置“录音播放器”【录音文件名标签】的"文本内容"为被点击的"录音"的录音名\r
-        p_RecordingPlayerView->GetRecordingFileNameLabel()->SetText(RecordingModel::GetInstance()->GetFileNames()[RecordingModel::GetInstance()->GetClickRecordingIndex()].c_str());\r
-        std::string yyyymmhhh_date = RecordingModel::GetInstance()->Getyyyymmhhh_date();\r
-        std::string TotalRecordDuration = RecordingModel::GetInstance()->GetTotalRecordDuration();\r
-        // 去掉日期字符串末尾的换行符\r
-        if (!yyyymmhhh_date.empty() && yyyymmhhh_date.back() == '\n')\r
-        {\r
-            yyyymmhhh_date.erase(yyyymmhhh_date.length() - 1);\r
-        }\r
-        std::string RecordingTimeAndDuration = yyyymmhhh_date + "-" + TotalRecordDuration;\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingTimeAndDuration %s\n", RecordingTimeAndDuration.c_str());\r
-        p_RecordingPlayerView->GetRecordingTimeAndDurationLabel()->SetText(RecordingTimeAndDuration.c_str());\r
-        p_RecordingPlayerView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+        p_RecordingPlayerView->ResetComponentStatus();\r
         return true;\r
     }\r
 \r