From: luozheng <1732036298@qq.com> Date: Tue, 13 Aug 2024 08:05:55 +0000 (+0800) Subject: 1. 修复在连接手机音乐后在播放本地音乐有卡顿问题。 X-Git-Tag: release_V1.2.70_20241020_135402~671^2~3 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=a0236e37f58e5c0492aaf3175fffec179c7a589e;p=mirrors%2FFD230.git 1. 修复在连接手机音乐后在播放本地音乐有卡顿问题。 2. 新增音乐列表刷新消息 3. 新增音乐列表按字母(不区分大小写)排序 4.新增蓝牙耳机相关多国语言资源 5.新增音乐列表如果为空的标签提示 “当前音乐列表为空请通过APP下载添加” --- diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/include/ui_resource_string.h b/code/sdk/application/wearable/fd230app/nativelauncher/include/ui_resource_string.h index 353e3f2f2..e52cb31c1 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/include/ui_resource_string.h +++ b/code/sdk/application/wearable/fd230app/nativelauncher/include/ui_resource_string.h @@ -516,7 +516,10 @@ enum UIResourceTextId : uint16_t { STR_DISTURBNOTE_OFF = 503, STR_4G_NOTE = 504, STR_MUSIC_PLAYER_SOURCE_NOTE = 505, - STR_MAX_ID = 506, + STR_MUSIC_LIST_IS_EMPTY = 506, + STR_BT_HEADSET_RESCAN = 507, + STR_BT_HEADSET_NOFOND = 508, + STR_MAX_ID = 509, }; // UIResourceTextId enum FontLanguageId : uint8_t { diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/VolumeSettingPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/VolumeSettingPresenter.cpp index 022e16e8c..1e067daf5 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/VolumeSettingPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/VolumeSettingPresenter.cpp @@ -119,7 +119,7 @@ void VolumeSliderEventListener::ChangeVolume(VolumeChangeStatus status) } if (playerCoefficients == VOLUMEPLAYERS) { - BtAndLocalVolumeSet(volumeSettingView->sounding); + BtAndLocalVolumeSet(volumeSettingView->sounding); /*蓝牙耳机音乐调节*/ ConfigModel::GetInstance()->SetSystemVolume(volumeSettingView->sounding);/*将设置的音量保存到系统音量*/ } if (playerCoefficients == VOLUMEPHONE || playerCoefficients == VOLUMEPHONENOTIFY) { diff --git a/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h b/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h index 060ed8053..f4ba5bb87 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-08-05 15:20:03 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-08-12 17:59:14 + * @LastEditTime: 2024-08-13 11:11:47 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h */ @@ -16,7 +16,7 @@ #include "source.h" #include "audio_manager.h" #include "audio_base_type.h" -#include "PlayersPresenter.h" +#include "player/include/PlayersPresenter.h" #include "bts_avrcp_controller.h" #include "PlayersCaseListAdapter.h" namespace OHOS { @@ -99,6 +99,7 @@ public: std::string GetMusicPlayPath(void); bool GetMusicSource(); void SetMusicSource(bool value); + void UpdateMusicPlayerList(void); private: bool musicSourceFlag{false};//音乐来源标志:false:默认为手表音乐,true:手机音乐 private: diff --git a/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h index a9e449afa..ff9fc97bf 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-08-05 15:20:03 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-08-12 14:54:57 + * @LastEditTime: 2024-08-13 14:26:21 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h */ @@ -66,7 +66,7 @@ static constexpr uint8_t FONT_THIRTY_SIZE = 30; // 30:字体大小 static constexpr uint8_t FONT_FORTY_SIZE = 40; // 40:字体大小 struct PlayerCaseInfo { - char sliceId[DEC_NUM_256]; + char sliceId[DEC_NUM_256]; /*音乐名*/ int16_t index; }; @@ -88,6 +88,9 @@ public: private: List *playersCaseList_{nullptr}; int GetAllFiles(List *playersCaseList); + std::list playersList_; //音乐列表 + int GetAllFiles(std::list &playersList); + void sortPlayersCaseList(std::list* playersCaseList); }; // Button OnClick @@ -100,17 +103,14 @@ public: LOUD, }; ButtonOnClickListener() {} - ButtonOnClickListener(UIView *view) : view_(view) {} ~ButtonOnClickListener(); bool OnClick(UIView& view, const ClickEvent& event) override; private: - UIView *view_{nullptr}; void PlayerButtonOnClick(); void SoundButtonOnClick(); void PlayerModelButtonOnClick(); void OptionsButtonOnClick(); void MusicListButtonOnClick(); - VolumeSettingView *volumeSettingView{nullptr}; }; // 播放器回调 diff --git a/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersView.h b/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersView.h index feb3f0949..0a7806d75 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersView.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-08-05 15:20:03 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-08-12 14:57:23 + * @LastEditTime: 2024-08-13 15:07:08 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersView.h */ @@ -141,6 +141,7 @@ namespace OHOS void PhoneMusicConnectStatusLabelColor(bool state); void OptionsButtonSetImageStyle(ImageInfo *image); void SetMusicPlayerButtonIsTouchable(bool musicSourceType); + void UpdateMusicListStatus(void); private: VolumeSettingView *volumeSettingView{nullptr}; // 声音设置 @@ -166,10 +167,14 @@ namespace OHOS UILabelExt *MusciSourceLabel{nullptr}; // 音乐来源标签 UILabelExt *PhoneMusicConnectStatusLabel{nullptr}; // 手机音乐连接状态标签 + /* -------------------------------- 音乐列表相关组件 -------------------------------- */ UIScrollView *musicListScrollView{nullptr}; // 音乐列表容器视图 UILabelExt *musicListTitle{nullptr}; // 音乐列表的标题 + UILabelExt *musicListIsEmptyLabel{nullptr}; // 音乐列表为空的标签 + UIImageView *musicListIsEmptyImage{nullptr}; // 音乐列表为空的图片 UIList *musicList{nullptr}; // 音乐列表 PlayersCaseListAdapter *musicAdapter{nullptr}; // 音乐列表适配器 + /* -------------------------------------------------------------------------- */ JumpView *jumpView{nullptr}; PlayersPresenter *playersPresenter{nullptr}; diff --git a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersCaseListAdapter.cpp b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersCaseListAdapter.cpp index 9d9df4dda..4351a5d22 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersCaseListAdapter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersCaseListAdapter.cpp @@ -124,6 +124,7 @@ namespace OHOS } } + /*获取歌曲数量*/ uint16_t PlayersCaseListAdapter::GetCount() { return PlayersListGroup::GetInstance()->GetCase().Size(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersModel.cpp index 777d7498f..f8a9d0da0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersModel.cpp @@ -777,4 +777,9 @@ void PlayersModel::SetMusicSource(bool value) musicSourceFlag = value; } +/*更新音乐列表*/ +void PlayersModel::UpdateMusicPlayerList(void) +{ + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::UpdateMusicPlayerList"); +} } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp index cd6a2f43e..98215365e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp @@ -24,7 +24,7 @@ #include "bts_avrcp_target.h" #include #include "ConfigModel.h" - +#include "ctype.h" namespace OHOS { static PlayerOnDragListener *g_pPlayerOnDragListener = nullptr; static JumpView *g_pJumpView = nullptr; @@ -148,7 +148,6 @@ bool JumpView::ChangeBluetoothEarListView(int16_t hideView, int16_t thisView) return true; } -//切换到音乐来源视图 bool JumpView::ChangeBluetoothView(int16_t hideView, int16_t thisView) { /* @@ -396,13 +395,16 @@ void JumpView::ChangeView(int16_t hideView, int16_t showView) BluetoothModel::GetInstance()->SetCurView(showView); } +/* --------------------------------- 音乐列表相关 --------------------------------- */ PlayersListGroup::~PlayersListGroup() { if (playersCaseList_ != nullptr) { playersCaseList_->Clear(); + + delete playersCaseList_; + playersCaseList_ = nullptr; } - delete playersCaseList_; - playersCaseList_ = nullptr; + playersList_.clear(); } void PlayersListGroup::AddCase(PlayerCaseInfo testCaseInfo) @@ -424,14 +426,34 @@ void PlayersListGroup::SetUpListCase() } } playersCaseList_->Clear(); + playersList_.clear(); if(!PlayersModel::GetInstance()->CreateMusicPlayDirectory()) { return; } - ret = GetAllFiles(playersCaseList_); + /* -------------------------------- 获取歌曲list -------------------------------- */ + ret = GetAllFiles(playersList_); if (ret == OHOS_FAILURE) { return; } + /* -------------------------------- 依照字母排序歌曲名 ------------------------------- */ + sortPlayersCaseList(&playersList_); + // 遍历方式 使用迭代器 + std::list::iterator it; + struct PlayerCaseInfo playerCaseInfo; + int i = 0; + for (it = playersList_.begin(); it!= playersList_.end(); ++it) { + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "it musicName = %s,it index = %d",it->sliceId,it->index); + ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, it->sliceId, DEC_NUM_256); + if (ret != OHOS_SUCCESS) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret); + return; + } + playerCaseInfo.index = i; + i++; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicName = %s,index = %d",playerCaseInfo.sliceId,playerCaseInfo.index); + playersCaseList_->PushBack(playerCaseInfo); + } } List& PlayersListGroup::GetCase() @@ -454,6 +476,27 @@ char *PlayersListGroup::GetCase(int16_t index) return nullptr; } +// 比较函数,用于按照音乐名的字母顺序比较(不区分大小写) +static bool comparePlayerCaseInfo(const PlayerCaseInfo& a, const PlayerCaseInfo& b) { + std::string nameA(a.sliceId); + std::string nameB(b.sliceId); + + /*循环内部,tolower 函数将当前字符转换为小写*/ + for (size_t i = 0; i < nameA.size() && i < nameB.size(); ++i) { + if (tolower(nameA[i]) < tolower(nameB[i])) { + return true; + } else if (tolower(nameA[i]) > tolower(nameB[i])) { + return false; + } + } + //如果循环结束而没有返回结果,则意味着当前字符比较没有得出结论,可能是两个字符串的前缀相同。此时,比较它们的长度: + return nameA.size() < nameB.size(); /*如:hello 与 hello word*/ +} + +/*将歌名排序*/ +void PlayersListGroup::sortPlayersCaseList(std::list* playersCaseList) { + playersCaseList->sort(comparePlayerCaseInfo); +} // 读取指定目录(APP_MUSIC_PATH)下的文件,并将文件名等信息填充到提供的列表中 int PlayersListGroup::GetAllFiles(List *playersCaseList) { @@ -488,10 +531,42 @@ int PlayersListGroup::GetAllFiles(List *playersCaseList) return OHOS_SUCCESS; } +// 读取指定目录(APP_MUSIC_PATH)下的文件,并将文件名等信息填充到提供的列表中 +int PlayersListGroup::GetAllFiles(std::list &playersList) +{ + int ret; + int i{0}; + struct dirent *direntp; + struct PlayerCaseInfo playerCaseInfo; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles"); + // 打开目录 + DIR *dirp = opendir(APP_MUSIC_PATH); + // 遍历文件 + if (dirp != NULL) { + while ((direntp = readdir(dirp)) != NULL) { + ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, direntp->d_name, DEC_NUM_256); + if (ret != OHOS_SUCCESS) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret); + closedir(dirp); + return OHOS_FAILURE; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "song Name %s.", playerCaseInfo.sliceId); + playerCaseInfo.index = i; + i++; + playersList.push_back(playerCaseInfo); + } + } else { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::opendir err!"); + return OHOS_FAILURE; + } + // 关闭目录 + closedir(dirp); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles end!"); + return OHOS_SUCCESS; +} + ButtonOnClickListener::~ButtonOnClickListener() { - delete volumeSettingView; - volumeSettingView = nullptr; } /*播放或暂停按钮被点击时调用*/ diff --git a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersView.cpp b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersView.cpp index 500767dc2..7dfc12499 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersView.cpp @@ -255,11 +255,14 @@ namespace OHOS musicListScrollView->SetReboundSize(35); musicListScrollView->SetDirection(UIScrollView::VERTICAL); /* -------------------------------------------------------------------------- */ - musicListTitle = new UILabelExt(); if (musicListTitle == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListTitle new fail"); - return nullptr; + musicListTitle = new UILabelExt(); + if (musicListTitle == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListTitle new fail"); + return nullptr; + } } musicListTitle->SetPosition(83, 50, 300, 35); musicListTitle->SetStyle(STYLE_TEXT_FONT, 30); @@ -269,6 +272,42 @@ namespace OHOS musicListTitle->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION); musicListTitle->SetRollSpeed(70); musicListTitle->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + /* -------------------------- musicListIsEmptyImage ------------------------- */ + if (musicListIsEmptyImage == nullptr) + { + musicListIsEmptyImage = new UIImageView(); + if (musicListIsEmptyImage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListIsEmptyImage new fail"); + return nullptr; + } + } + musicListIsEmptyImage->SetPosition(163, 110, 140, 140); + musicListIsEmptyImage->SetAutoEnable(false); + musicListIsEmptyImage->SetResizeMode(UIImageView::CENTER); + if (LoadPlayerImage(musicListIsEmptyImage, PLAYER_PLAYING_GLARY) == false) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListIsEmptyImage LoadPlayerImage fail"); + return nullptr; + } + /* ---------------------------- musicListIsEmptyLabel ---------------------------- */ + if (musicListIsEmptyLabel == nullptr) + { + musicListIsEmptyLabel = new UILabelExt(); + if (musicListIsEmptyLabel == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListIsEmptyLabel new fail"); + return nullptr; + } + } + musicListIsEmptyLabel->SetPosition(53, 280, 360, 70); + musicListIsEmptyLabel->SetStyle(STYLE_TEXT_FONT, 30); + musicListIsEmptyLabel->SetStyle(STYLE_LINE_HEIGHT, 35); + musicListIsEmptyLabel->SetTextId(STR_MUSIC_LIST_IS_EMPTY); // 当前音乐列表为空请通过APP下载添加 + musicListIsEmptyLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + musicListIsEmptyLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff)); + musicListIsEmptyLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + musicListIsEmptyLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); /* -------------------------------------------------------------------------- */ if (musicAdapter == nullptr) { @@ -301,16 +340,20 @@ namespace OHOS musicList->SetAdapter(musicAdapter); } musicListScrollView->Add(musicListTitle); + musicListScrollView->Add(musicListIsEmptyImage); + musicListScrollView->Add(musicListIsEmptyLabel); musicListScrollView->Add(musicList); musicListGroupView->Add(musicListScrollView); /* -------------------------------------------------------------------------- */ + UpdateMusicListStatus(); // 音乐列表刷新 + /* -------------------------------------------------------------------------- */ return musicListGroupView; } /*删除容器上所有组件*/ void PlayersView::ClearAll(void) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::ClearAll"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ClearAll"); if (group[MAIN_MUSICPLAYER_VIEW] != nullptr) { group[MAIN_MUSICPLAYER_VIEW]->RemoveAll(); @@ -403,6 +446,19 @@ namespace OHOS delete musicListTitle; musicListTitle = nullptr; } + if (musicListIsEmptyImage != nullptr) + { + ImageInfo *image = nullptr; + musicListIsEmptyImage->SetSrc(image); + delete musicListIsEmptyImage; + musicListIsEmptyImage = nullptr; + ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_PLAYING_GLARY, PLAYER_IAMGES); + } + if (musicListIsEmptyLabel != nullptr) + { + delete musicListIsEmptyLabel; + musicListIsEmptyLabel = nullptr; + } if (musicAdapter != nullptr) { delete musicAdapter; @@ -439,6 +495,7 @@ namespace OHOS { group[i] = nullptr; } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::ClearAll end"); } UIButton *PlayersView::PlayerViewButtonInit(ButtonConfig &buttonconfig) @@ -677,6 +734,7 @@ namespace OHOS return true; } + /*创建音乐播放器主视图*/ bool PlayersView::CreatePlayerView(void) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerVIew"); @@ -707,52 +765,73 @@ namespace OHOS /*设置音乐来源标签内容*/ void PlayersView::MusicSourceLabelSetText(int textId) { - MusciSourceLabel->SetTextId(textId); - MusciSourceLabel->ForceResetText(); + if (MusciSourceLabel) + { + MusciSourceLabel->SetTextId(textId); + MusciSourceLabel->ForceResetText(); + } } /// @brief 设置手机音乐连接状态标签内容 void PlayersView::PhoneMusicConnectStatusLabelSetText(int textId) { - PhoneMusicConnectStatusLabel->SetTextId(textId); - PhoneMusicConnectStatusLabel->Invalidate(); + if (PhoneMusicConnectStatusLabel) + { + PhoneMusicConnectStatusLabel->SetTextId(textId); + PhoneMusicConnectStatusLabel->Invalidate(); + } } /// @brief 设置手机连接状态标签是否可见 void PlayersView::PhoneMusicConnectStatusLabelIsSetVisible(bool status) { - PhoneMusicConnectStatusLabel->SetVisible(status); + if (PhoneMusicConnectStatusLabel) + { + PhoneMusicConnectStatusLabel->SetVisible(status); + } } // 设置手机音乐连接状态标签颜色 void PlayersView::PhoneMusicConnectStatusLabelColor(bool state) { - if (state) - { - PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff)); - } - else + if (PhoneMusicConnectStatusLabel) { - PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff)); + if (state) + { + PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff)); + } + else + { + PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff)); + } } } /*设置音乐列表按钮是否可见*/ void PlayersView::MusicListButtonIsSetVisible(bool status) { - music_list_button->SetVisible(status); + if (music_list_button) + { + music_list_button->SetVisible(status); + } } /// @brief 设置选项按钮的图片样式:点击该按钮后进入音乐来源视图,点击里面的按钮,改选项按钮会被替换相应图片 void PlayersView::OptionsButtonSetImageStyle(ImageInfo *image) { - musicSourceButton->SetImageSrc(image, image); - musicSourceButton->Invalidate(); + if (musicSourceButton) + { + musicSourceButton->SetImageSrc(image, image); + musicSourceButton->Invalidate(); + } } void PlayersView::PlayerModelButtonSetSrc(uint32_t playMode) { - LoadPlayerButtonImage(playerModelButton, playMode); + if (playerModelButton) + { + LoadPlayerButtonImage(playerModelButton, playMode); + } } /// @brief 设置音乐播放按钮是否可点击 @@ -767,6 +846,7 @@ namespace OHOS play_or_pause_Button->SetTouchable(touchableState); preMusicButton->SetTouchable(touchableState); nextMusicButton->SetTouchable(touchableState); + soundButton->SetTouchable(touchableState); playerModelButton->SetTouchable(touchableState); // 如果音乐来源为手机音乐,播放顺序按钮就不可用 /* -------------------------------------------------------------------------- */ /*暂停音乐*/ @@ -775,11 +855,34 @@ namespace OHOS if (state == UICheckBox::UICheckBoxState::SELECTED) { PlayersModel::GetInstance()->PlayerStop(); + PlayersModel::GetInstance()->ClearActivateAudioInterrupt(); } /* -------------------------------------------------------------------------- */ PreLoadPlayerModeImageRes(); } + void PlayersView::UpdateMusicListStatus(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::UpdateMusicListStatus"); + if (musicAdapter && musicListIsEmptyImage && musicListIsEmptyLabel && musicList) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicNum = %d", musicAdapter->GetCount()); + if (0 == musicAdapter->GetCount()) /*歌曲为空*/ + { + musicListIsEmptyImage->SetVisible(true); + musicListIsEmptyLabel->SetVisible(true); + musicList->SetVisible(false); + } + else + { + musicListIsEmptyImage->SetVisible(false); + musicListIsEmptyLabel->SetVisible(false); + musicList->SetVisible(true); + } + } + } + + /*刷新播放器界面的组件状态*/ void PlayersView::UpdatePlayerView(bool musicSourceType, bool phoneMusicConnectStatus) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdatePlayerView"); @@ -825,6 +928,7 @@ namespace OHOS OptionsButtonSetImageStyle(image); PhoneMusicConnectStatusLabelIsSetVisible(false); MusicListButtonIsSetVisible(true); + MusicSourceLabelSetText(STR_WATCH_MUSIC); /*手表音乐*/ SetMusicPlayerButtonIsTouchable(musicSourceType); } @@ -882,9 +986,9 @@ namespace OHOS { std::string file = PLAYER_IAMGES; ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file); - if (image == nullptr) + if (view == nullptr || image == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::LoadPlayerImage %x fail", resId); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "view is nullptr or PlayersView::LoadPlayerImage %x fail", resId); return false; } view->SetSrc(image); @@ -896,9 +1000,9 @@ namespace OHOS { std::string file = PLAYER_IAMGES; ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file); - if (image == nullptr) + if (button == nullptr || image == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::LoadPlayerImage %x fail", resId); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "button is nullptr or PlayersView::LoadPlayerImage %x fail", resId); return false; } button->SetImageSrc(image, image); @@ -910,9 +1014,9 @@ namespace OHOS std::string file = PLAYER_IAMGES; ImageInfo *image1 = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file); ImageInfo *image2 = ImageCacheManager::GetInstance().LoadOneInMultiRes(hlResId, file); - if (image1 == nullptr || image2 == nullptr) + if (button == nullptr || image1 == nullptr || image2 == nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::LoadPlayerImage resId = %x,hlResId = %x fail", resId, hlResId); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "button is nullptr or PlayersView::LoadPlayerImage resId = %x,hlResId = %x fail", resId, hlResId); return false; } button->SetImages(image1, image2); diff --git a/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h b/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h index 64eba7b35..ae300330d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h +++ b/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h @@ -8,7 +8,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-06-12 11:44:04 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-08-10 10:16:48 + * @LastEditTime: 2024-08-13 11:06:07 * @FilePath: /FD230/code/sdk/application/wearable/nativeapp/nativeui/uiservice/include/ui_service.h */ /* @@ -74,6 +74,7 @@ typedef enum { UI_UPDATE_VIBRATION_MODE, //更新震动模式 UI_UPDATE_SILENT_MODE, //更新静音模式 UI_UPDATE_DNOTDISTURB_MODE, //更新勿扰模式 + UI_UPDATE_MUSIC_PLAYER_LIST,//更新音乐列表 UI_UPDATE_WEATHER_DATA, //天气数据更新 UI_UPDATE_SLEEP_DATA, //更新睡眠数据 diff --git a/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp b/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp index 2ed316cfb..2144a5064 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp @@ -21,6 +21,7 @@ #include "rebootandshutdown/include/RebootAndShutdownModel.h" #include "dnotdisturb/include/DnotDisturbModel.h" #include "obumessage/include/OBUMessageModel.h" +#include "player/include/PlayersModel.h" #include "sleep/include/SleepModel.h" #include "message/include/MessageModel.h" #include "aivoice/include/AiVoiceModel.h" @@ -108,6 +109,7 @@ static void HandleUpdateCallVolume(Request *request); static void HandleUpdateVibrationMode(Request *request); static void HandleUpdateSilentMode(Request *request); static void HandleUpdateDontDisturbMode(Request *request); +static void HandleUpdateMusicPlayerList(Request *request); static void HandleAiJumpToResultView(Request *request); static void HandleAiJumpToListeningMessage(Request *request); static void HandleUpdateUserQuestionStr(Request *request); @@ -142,6 +144,7 @@ MsgHandlerEntry msgHandlers[] = { {UI_UPDATE_VIBRATION_MODE, HandleUpdateVibrationMode}, {UI_UPDATE_SILENT_MODE, HandleUpdateSilentMode}, {UI_UPDATE_DNOTDISTURB_MODE,HandleUpdateDontDisturbMode}, + {UI_UPDATE_MUSIC_PLAYER_LIST,HandleUpdateMusicPlayerList}, {UI_AI_JUMP_TO_RESULT_VIEW, HandleAiJumpToResultView}, {UI_UPDATE_USER_QUESTION_STR,HandleUpdateUserQuestionStr}, {UI_UPDATE_AI_ANSWER_STR, HandleUpdateAIAnswerStr}, @@ -543,6 +546,14 @@ void HandleUpdateDontDisturbMode(Request *request) std::bind(&OHOS::DnotDisturbModel::UpdateDoNotDisturbMode, &OHOS::DnotDisturbModel::GetInstance())); } +//处理更新音乐列表 +void HandleUpdateMusicPlayerList(Request *request) +{ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_UI_SERVICE, "HandleUpdateMusicPlayerList"); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::PlayersModel::UpdateMusicPlayerList, OHOS::PlayersModel::GetInstance())); +} + //处理Ai回应的用户数据 void HandleAiJumpToResultView(Request *request) { diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/en.lang b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/en.lang index cfcbd0982..2d4072734 100644 Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/en.lang and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/en.lang differ diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/ui_resource_string.h b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/ui_resource_string.h index c2a32b0be..7a74b5d29 100644 --- a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/ui_resource_string.h +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/ui_resource_string.h @@ -516,7 +516,10 @@ enum UIResourceTextId : uint16_t { STR_DISTURBNOTE_OFF = 503, STR_4G_NOTE = 504, STR_MUSIC_PLAYER_SOURCE_NOTE = 505, - STR_MAX_ID = 506, + STR_MUSIC_LIST_IS_EMPTY = 506, + STR_BT_HEADSET_RESCAN = 507, + STR_BT_HEADSET_NOFOND = 508, + STR_MAX_ID = 509, }; // UIResourceTextId enum FontLanguageId : uint8_t { diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/zh.lang b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/zh.lang index a5c590b3c..6ec39cfae 100644 Binary files a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/zh.lang and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/font/zh.lang differ diff --git a/tools/language_tool/Language_xml/input_list_en.txt b/tools/language_tool/Language_xml/input_list_en.txt index cae25832b..ee0611cd3 100644 --- a/tools/language_tool/Language_xml/input_list_en.txt +++ b/tools/language_tool/Language_xml/input_list_en.txt @@ -503,4 +503,7 @@ STR_TONGYI_QIANWEN$Tongyi Qianwen STR_IFLYTEK_SPARK$Xunfei Spark STR_DISTURBNOTE_OFF$Do not disturb mode is enabled or disabled STR_4G_NOTE$Note: After opening, the power consumption of the watch will be increased and the standby time will be shortened -STR_MUSIC_PLAYER_SOURCE_NOTE$Please enter Music - Music Source from the watch app interface, set it to Mobile Mode and try again \ No newline at end of file +STR_MUSIC_PLAYER_SOURCE_NOTE$Please enter Music - Music Source from the watch app interface, set it to Mobile Mode and try again +STR_MUSIC_LIST_IS_EMPTY$The current music list is empty, please download and add via APP +STR_BT_HEADSET_RESCAN$Rescan +STR_BT_HEADSET_NOFOND$No headset Bluetooth device can be found \ No newline at end of file diff --git a/tools/language_tool/Language_xml/input_list_zh.txt b/tools/language_tool/Language_xml/input_list_zh.txt index dec60985f..fe7432369 100644 --- a/tools/language_tool/Language_xml/input_list_zh.txt +++ b/tools/language_tool/Language_xml/input_list_zh.txt @@ -503,4 +503,7 @@ STR_TONGYI_QIANWEN$通义千问 STR_IFLYTEK_SPARK$讯飞星火 STR_DISTURBNOTE_OFF$勿扰模式已开启是否关闭 STR_4G_NOTE$注:开启后,手表功耗会提高,待机时间会缩短 -STR_MUSIC_PLAYER_SOURCE_NOTE$请从手表端应用界面进入“音乐”-“音乐来源”,设置为“手机模式”后重试 \ No newline at end of file +STR_MUSIC_PLAYER_SOURCE_NOTE$请从手表端应用界面进入“音乐”-“音乐来源”,设置为“手机模式”后重试 +STR_MUSIC_LIST_IS_EMPTY$当前音乐列表为空请通过APP下载添加 +STR_BT_HEADSET_RESCAN$重新搜索 +STR_BT_HEADSET_NOFOND$当前搜索不到耳机蓝牙设备 \ No newline at end of file diff --git a/tools/language_tool/Language_xml/language_en.xml b/tools/language_tool/Language_xml/language_en.xml index 99d5eb62d..11c50cea5 100644 --- a/tools/language_tool/Language_xml/language_en.xml +++ b/tools/language_tool/Language_xml/language_en.xml @@ -505,4 +505,7 @@ + + + diff --git a/tools/language_tool/Language_xml/language_zh.xml b/tools/language_tool/Language_xml/language_zh.xml index 70a0eba7d..2b70d68f9 100644 --- a/tools/language_tool/Language_xml/language_zh.xml +++ b/tools/language_tool/Language_xml/language_zh.xml @@ -505,4 +505,7 @@ + + + diff --git a/tools/language_tool/font/en.lang b/tools/language_tool/font/en.lang index cfcbd0982..2d4072734 100644 Binary files a/tools/language_tool/font/en.lang and b/tools/language_tool/font/en.lang differ diff --git a/tools/language_tool/font/ui_resource_string.h b/tools/language_tool/font/ui_resource_string.h index c2a32b0be..7a74b5d29 100644 --- a/tools/language_tool/font/ui_resource_string.h +++ b/tools/language_tool/font/ui_resource_string.h @@ -516,7 +516,10 @@ enum UIResourceTextId : uint16_t { STR_DISTURBNOTE_OFF = 503, STR_4G_NOTE = 504, STR_MUSIC_PLAYER_SOURCE_NOTE = 505, - STR_MAX_ID = 506, + STR_MUSIC_LIST_IS_EMPTY = 506, + STR_BT_HEADSET_RESCAN = 507, + STR_BT_HEADSET_NOFOND = 508, + STR_MAX_ID = 509, }; // UIResourceTextId enum FontLanguageId : uint8_t { diff --git a/tools/language_tool/font/zh.lang b/tools/language_tool/font/zh.lang index a5c590b3c..6ec39cfae 100644 Binary files a/tools/language_tool/font/zh.lang and b/tools/language_tool/font/zh.lang differ