From: luozheng <1732036298@qq.com> Date: Wed, 13 Mar 2024 08:41:18 +0000 (+0800) Subject: 录音界面实现上一首与下一首切换能正常播放,录音列表还需优化:录音完后录音列表第一时间未显示刚刚录的音 X-Git-Tag: release_V1.2.70_20241020_135402~1274^2~8^2~15 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=34114af6af33d5405e50fd880e3d276ee3fc6d61;p=mirrors%2FFD230.git 录音界面实现上一首与下一首切换能正常播放,录音列表还需优化:录音完后录音列表第一时间未显示刚刚录的音 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingModel.h b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingModel.h index 3e0fa09e8..fee695fb5 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingModel.h @@ -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 &GetRecordinglistItems(); + std::string GetCurrentPlayRecordingName(void); int &GetRecordingListNum(); std::string GetCleanFileName(const std::string &filePath); void SearchFiles(const std::string &directory, std::vector &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 GetRecordingPlayerIntrptListener(void); void ClearActivateAudioInterrupt(void); std::shared_ptr GetPlayerCtr(void); @@ -110,6 +111,7 @@ namespace OHOS int index; // 保存被点击录音的下标 std::string yyyymmhhh_date; // 保存年月日时间 std::string TotalRecordDuration; // 保存录音的总时长 + std::string RecordingTimeAndDuration; // 录音日期和录音时长 }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPlayerView.h b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPlayerView.h index dae2180f5..e9d0b7819 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPlayerView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPlayerView.h @@ -56,6 +56,8 @@ namespace OHOS UILabelExt *GetRecordingTimeAndDurationLabel(void); UICheckBox * GetPlayerButton(void); void SetPlayerButtonState(UICheckBox::UICheckBoxState state); + UICheckBox::UICheckBoxState GetPlayerButtonState(void); + void ResetComponentStatus(void); UICircleProgress * GetPlayerProgressBar(void); private: UILabelExt *SetUpLabel(LabelConfig &labelconfig); // 设置标签 diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPresenter.h index 25c844333..5bec3da31 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/record/include/RecordingPresenter.h @@ -93,6 +93,7 @@ namespace OHOS ~RecordingPlayerViewOnClickListener() {} bool OnClick(UIView &view, const ClickEvent &event) override; + void PlayerButtonOnClick(void); }; /* @@ -114,8 +115,7 @@ namespace OHOS class RecordingPresenter : public Presenter, public UIView::OnClickListener, public RootView::OnKeyActListener, - public UIView::OnDragListener, - public UICheckBox::OnChangeListener + public UIView::OnDragListener { public: RecordingPresenter(); @@ -135,7 +135,6 @@ namespace OHOS bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; bool OnDragEnd(UIView &view, const DragEvent &event) override; - bool OnChange(UICheckBox::UICheckBoxState state) override; bool OnKeyAct(UIView &view, const KeyEvent &event) override; RecordingModel *p_RecordingModel{nullptr}; }; diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingModel.cpp index 6e9e39baa..73cf1f2da 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingModel.cpp @@ -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; + } + /* ----------------------------------- 定时器 ---------------------------------- */ /* diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPlayerView.cpp b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPlayerView.cpp index 33bcde0ea..e70e20f76 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPlayerView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPlayerView.cpp @@ -218,8 +218,7 @@ namespace OHOS RecordingPlayPauseButton->SetViewId(RECORD_PLAY_PAUSE_CHECKBOX_VIEWID); RecordingPlayPauseButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff); RecordingPlayPauseButton->SetImages(PNG_UNIVERSAL_PAUSE_IMAGE, PNG_UNIVERSAL_PLAY_IMAGE); - UICheckBox::OnChangeListener *changelister = static_cast(RecordingPresenter::GetInstance()); - RecordingPlayPauseButton->SetOnChangeListener(changelister); + RecordingPlayPauseButton->SetOnClickListener(buttonClick); return true; } @@ -320,7 +319,7 @@ namespace OHOS /* * @brief 获取录音文件名标签 - */ + */ UILabelExt *RecordingPlayerView::GetRecordingFileNameLabel(void) { return RecordingFileName; @@ -328,7 +327,7 @@ namespace OHOS /* * @brief 获取录音时间和时长标签 - */ + */ UILabelExt *RecordingPlayerView::GetRecordingTimeAndDurationLabel(void) { return RecordingTimeAndDuration; @@ -350,6 +349,14 @@ namespace OHOS RecordingPlayPauseButton->SetState(state); } + /* + * @brief 获取播放器状态 + */ + UICheckBox::UICheckBoxState RecordingPlayerView::GetPlayerButtonState(void) + { + return RecordingPlayPauseButton->GetState(); + } + /* * @brief 获取录音播放进度条 */ @@ -358,6 +365,34 @@ namespace OHOS return PlayerProgressBar; } + /* + * @brief 重置组件状态 + */ + void RecordingPlayerView::ResetComponentStatus(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[RecordingPlayerView] ResetComponentStatus"); + + if (GetPlayerProgressBar() != nullptr) + { + GetPlayerProgressBar()->SetValue(0); // 0:进度0% + GetPlayerProgressBar()->Invalidate(); + } + if (GetRecordingFileNameLabel() != nullptr) + { + GetRecordingFileNameLabel()->SetText(RecordingModel::GetInstance()->GetCurrentPlayRecordingName().c_str()); + GetRecordingFileNameLabel()->Invalidate(); + } + if (GetRecordingTimeAndDurationLabel() != nullptr) + { + GetRecordingTimeAndDurationLabel()->SetText(RecordingModel::GetInstance()->Getyyyymmhhh_dateAndTotalRecordDuration().c_str()); + GetRecordingTimeAndDurationLabel()->Invalidate(); + } + if (GetPlayerButton() != nullptr) + { + SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); + } + } + UIScrollView *RecordingPlayerView::RecordingPlayerViewInit() { if (!SetUpScrollView()) diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp index 7204cb7dc..2b856c7d2 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingPresenter.cpp @@ -23,10 +23,6 @@ namespace OHOS RecordingPresenter::~RecordingPresenter() { - p_RecordingModel->GetPlayerCtr()->Stop(); - p_RecordingModel->GetPlayerCtr()->Release(); - p_RecordingModel->SetAudioInitStatus(false); - p_RecordingModel->GetPlayerCtr().reset(); g_pRecordPresenter = nullptr; } @@ -59,6 +55,14 @@ namespace OHOS void RecordingPresenter::OnStop(void) { Presenter::OnStop(); + if (p_RecordingModel->GetPlayerCtr() != nullptr) + { + p_RecordingModel->GetPlayerCtr()->Stop(); + p_RecordingModel->GetPlayerCtr()->Reset(); + p_RecordingModel->GetPlayerCtr()->Release(); + p_RecordingModel->SetAudioInitStatus(false); + p_RecordingModel->GetPlayerCtr().reset(); + } ScreenAlwaysOnCtr(0); } @@ -232,24 +236,6 @@ namespace OHOS return true; } - bool RecordingPresenter::OnChange(UICheckBox::UICheckBoxState state) - { - switch (state) - { - case UICheckBox::SELECTED: - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording play start"); - p_RecordingModel->RecordingPlayerPlay(); - break; - case UICheckBox::UNSELECTED: - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording play stop"); - p_RecordingModel->RecordingPlayerPause(); - break; - default: - break; - } - return true; - } - bool RecordingPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingPresenter::OnKeyAct"); @@ -283,7 +269,7 @@ namespace OHOS } p_RecordingModel->KeepClickRecordingIndex(index); /* ------------------------ 录音播放初始化,包括录音文件名,录音时间和总时长 ------------------------ */ - if (p_RecordingModel->RecordingPlayerInit() != OHOS_SUCCESS) + if (p_RecordingModel->RecordingPlayerInit(index) != OHOS_SUCCESS) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_RecordingModel->RecordingPlayerInit fail!!"); return false; @@ -316,6 +302,61 @@ namespace OHOS return true; } + /* + * @brief 播放按钮被点击 + */ + void RecordingPlayerViewOnClickListener::PlayerButtonOnClick(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerViewOnClickListener PlayerButtonOnClick"); + + RecordingPlayerView *p_RecordingPlayerView = RecordingPlayerView::GetInstance(); + if (p_RecordingPlayerView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerView GetInstance fail"); + return; + } + + RecordingModel *p_RecordingModel = RecordingModel::GetInstance(); + if (p_RecordingModel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_RecordingModel GetInstance fail"); + return; + } + + int ret; + uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; + int32_t playerState; + + state = p_RecordingPlayerView->GetPlayerButtonState(); + playerState = p_RecordingModel->GetRecordingPlayerState(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buttonState = %d playerState = %d", state, playerState); + + if (state == UICheckBox::UICheckBoxState::SELECTED) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state == SELECTED"); + + if (playerState == PlayerStates::PLAYER_PAUSED) + { + ret = p_RecordingModel->GetPlayerCtr()->Play(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Play, ret:%d", ret); + } + else + { + ret = p_RecordingModel->RecordingPlayerStat(); // 本地播放 + if (ret != 0) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret); + } + } + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "state == UNSELECTED"); + ret = p_RecordingModel->GetPlayerCtr()->Pause(); // 本地暂停 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Pause, ret:%d", ret); + } + } + bool RecordingPlayerViewOnClickListener::OnClick(UIView &view, const ClickEvent &event) { RecordingView *p_RecordingView = RecordingView::GetInstance(); @@ -339,28 +380,25 @@ namespace OHOS return false; } - if (strcmp(view.GetViewId(), RECORD_PLAY_PROVE_BUTTON_VIEWID) == 0) + if (strcmp(view.GetViewId(), RECORD_PLAY_PAUSE_CHECKBOX_VIEWID) == 0) + { + PlayerButtonOnClick(); + } + else if (strcmp(view.GetViewId(), RECORD_PLAY_PROVE_BUTTON_VIEWID) == 0) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player prove button being clicked!"); - // if (p_RecordingPlayerView->GetPlayerProgressBar() != nullptr) - // { - // p_RecordingPlayerView->GetPlayerProgressBar()->SetValue(0); // 0:进度0% - // p_RecordingPlayerView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - // p_RecordingPlayerView->GetPlayerProgressBar()->Invalidate(); - // } - // p_RecordingModel->PreviousPlayout(); + p_RecordingModel->PreviousPlayout(); + + p_RecordingPlayerView->ResetComponentStatus(); } else if (strcmp(view.GetViewId(), RECORD_PLAY_NEXT_BUTTON_VIEWID) == 0) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recording player next button being clicked!"); - // if (p_RecordingPlayerView->GetPlayerProgressBar() != nullptr) - // { - // p_RecordingPlayerView->GetPlayerProgressBar()->SetValue(0); // 0:进度0% - // p_RecordingPlayerView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - // p_RecordingPlayerView->GetPlayerProgressBar()->Invalidate(); - // } - // p_RecordingModel->NextSong(p_RecordingModel->GetClickRecordingIndex() + 1); + + p_RecordingModel->NextPlayout(); + + p_RecordingPlayerView->ResetComponentStatus(); } else if (strcmp(view.GetViewId(), RECORD_PLAY_DELETE_BUTTON_VIEWID) == 0) { @@ -673,6 +711,7 @@ namespace OHOS { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingPlayerCallbackImpl::OnPlaybackComplete"); /* --------------------------- 处实现代码用于处理文件播放完成的事件 --------------------------- */ + /* ----------------------- 用户在回调函数中不能有阻塞操作,也不能调用播放器接口 ----------------------- */ // 此处实现代码用于处理文件播放完成的事件 RecordingPlayerView *p_RecordingPlayerView = RecordingPlayerView::GetInstance(); if (p_RecordingPlayerView != nullptr) diff --git a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingView.cpp b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingView.cpp index 535eba942..681d47f0f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/record/src/RecordingView.cpp @@ -52,17 +52,27 @@ namespace OHOS delete RECORD1_Image; RECORD1_Image = nullptr; - delete p_RecordListView; - p_RecordListView = nullptr; - - delete p_RecordGoingView; - p_RecordGoingView = nullptr; - - delete p_RecordingPlayerView; - p_RecordingPlayerView = nullptr; + if (p_RecordListView != nullptr) + { + delete p_RecordListView; + p_RecordListView = nullptr; + } + if (p_RecordGoingView != nullptr) + { + delete p_RecordGoingView; + p_RecordGoingView = nullptr; + } + if (p_RecordingPlayerView != nullptr) + { + delete p_RecordingPlayerView; + p_RecordingPlayerView = nullptr; + } - delete p_RecordDeleteView; - p_RecordDeleteView = nullptr; + if (p_RecordDeleteView != nullptr) + { + delete p_RecordDeleteView; + p_RecordDeleteView = nullptr; + } delete RecordingViewScrollView[RECORDINGVIEW]; RecordingViewScrollView[RECORDINGVIEW] = nullptr; @@ -276,18 +286,7 @@ namespace OHOS RootView::GetInstance()->Add(RecordingViewScrollView[thisView]); } // 设置“录音播放器”【录音文件名标签】的"文本内容"为被点击的"录音"的录音名 - p_RecordingPlayerView->GetRecordingFileNameLabel()->SetText(RecordingModel::GetInstance()->GetFileNames()[RecordingModel::GetInstance()->GetClickRecordingIndex()].c_str()); - 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); - } - std::string RecordingTimeAndDuration = yyyymmhhh_date + "-" + TotalRecordDuration; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingTimeAndDuration %s\n", RecordingTimeAndDuration.c_str()); - p_RecordingPlayerView->GetRecordingTimeAndDurationLabel()->SetText(RecordingTimeAndDuration.c_str()); - p_RecordingPlayerView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); + p_RecordingPlayerView->ResetComponentStatus(); return true; }