From 58973b82033894f9969c6dcddc27563ee0e30130 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Mon, 23 Sep 2024 18:36:04 +0800 Subject: [PATCH] =?utf8?q?=E5=AE=9E=E7=8E=B0=E6=89=8B=E6=9C=BA=E9=9F=B3?= =?utf8?q?=E4=B9=90=E6=9A=82=E5=81=9C=EF=BC=8C=E6=92=AD=E6=94=BE=E9=9F=B3?= =?utf8?q?=E4=B9=90=EF=BC=8C=E6=89=8B=E8=A1=A8UI=E5=90=8C=E6=AD=A5?= =?utf8?q?=E6=98=BE=E7=A4=BA(=E5=8F=91=E7=8E=B0UI=E5=88=B7=E6=96=B0?= =?utf8?q?=E8=BE=83=E6=85=A2=EF=BC=8C=E7=9B=AE=E5=89=8D=E8=BE=83=E5=A5=BD?= =?utf8?q?=E5=A4=84=E7=90=86=E6=96=B9=E6=B3=95=E8=A7=A3=E5=86=B3)=20?= =?utf8?q?=E4=B8=BB=E7=95=8C=E9=9D=A2=E9=9F=B3=E4=B9=90=E8=BF=9B=E5=BA=A6?= =?utf8?q?=E6=9D=A1=E5=88=B7=E6=96=B0=E4=BD=BF=E7=94=A8=E9=9F=B3=E4=B9=90M?= =?utf8?q?odel=E4=B8=AD=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../bluetooth/src/BluetoothHeadsetEvent.cpp | 66 ++++++++++++------- .../nativeui/main/src/MainPresenterSample.cpp | 4 +- .../nativeui/player/include/PlayersModel.h | 3 +- .../player/include/PlayersPresenter.h | 3 +- .../nativeui/player/src/PlayersModel.cpp | 61 +++++++++++------ .../nativeui/player/src/PlayersPresenter.cpp | 10 +++ .../nativeui/player/src/PlayersView.cpp | 21 ++---- 7 files changed, 107 insertions(+), 61 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothHeadsetEvent.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothHeadsetEvent.cpp index 05852ce42..576f3e6ca 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothHeadsetEvent.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothHeadsetEvent.cpp @@ -426,16 +426,28 @@ static void BtAvrcpCtGetPlayStatusCallback(const bd_addr_t *bd_addr, avrcp_ct_pl WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "null pointer\n"); return; } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "test get play status songlen:%u, songpos:%u, playstatus:%u:", - status->song_length, status->song_position, status->play_status); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtGetPlayStatusCallback] songlen:%u, songpos:%u, playstatus:%u:", + status->song_length, status->song_position, status->play_status); } static void BtAvrcpCtHdlNotifyVolumeRspCbk(avrcp_ct_notification_value_cb_t *notification) { - WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Set local volume: 0x%x\n", notification->volume); /* 注册事件后通知的音量 */ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtHdlNotifyVolumeRspCbk] volume: 0x%x\n", + notification->volume); /* 注册事件后通知的音量 */ BtAvrcpTgNotifyVolumeChangedProc((uint8_t)notification->volume); } +static void BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk(avrcp_ct_notification_value_cb_t *notification) +{ + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk] playback status changed :%u\n", + notification->play_status); + if(notification->play_status == AVRCP_PLAY_STATUS_PLAYING) { //AVRCP媒体playing状态 + PlayersModel::GetInstance()->set_player_state(true); //更新UI显示 + } else { + PlayersModel::GetInstance()->set_player_state(false); + } + return; +} //收到来自TG返回的Notification时回调函数 static void BtAvrcpCtNotificationCallback( const bd_addr_t *bd_addr, avrcp_notify_event_t event_id, avrcp_ct_notification_value_cb_t *notification) @@ -445,32 +457,40 @@ static void BtAvrcpCtNotificationCallback( return; } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ct notification cbk event_id:0x%x\n", event_id); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ct notification cbk event_id:0x%x\n", event_id); bool notify_flag = true; switch (event_id) { - case AVRCP_NOTIFY_EVENT_PLAYBACK_STATUS_CHANGED: - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "tg notify ct playback status changed :%u\n", - notification->play_status); + case AVRCP_NOTIFY_EVENT_PLAYBACK_STATUS_CHANGED: //播放状态变更事件,从播放变为暂停、停止等状态,会触发这个事件 + BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk(notification); break; - case AVRCP_NOTIFY_EVENT_VOLUME_CHANGED: - BtAvrcpCtHdlNotifyVolumeRspCbk(notification); + case AVRCP_NOTIFY_EVENT_TRACK_CHANGED: //track状态变更事件,切换到下一首、上一首歌曲等情况,会触发此事件 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "track changed event_id:0x%x\n", event_id); break; - case AVRCP_NOTIFY_EVENT_NOW_PLAYING_CONTENT_CHANGED: - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play conent changed event_id:0x%x\n", event_id); + case AVRCP_NOTIFY_EVENT_TRACK_REACHED_END: //track结束事件,当前播放的曲目播放到末尾时,触发这个事件 break; - case AVRCP_NOTIFY_EVENT_TRACK_CHANGED: - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "track changed event_id:0x%x\n", event_id); + case AVRCP_NOTIFY_EVENT_TRACK_REACHED_START: //track开始事件,当曲目开始播放时,触发这个事件 + break; + case AVRCP_NOTIFY_EVENT_PLAYBACK_POS_CHANGED: //播放位置改变事件,当播放进度的位置发生变化时,比如快进、快退等操作导致播放位置改变,会触发此事件 + break; + case AVRCP_NOTIFY_EVENT_BATT_STATUS_CHANGED: //电池状态变更事件,当蓝牙设备的电池状态发生变化时,电量降低、充电状态改变等,会触发这个事件 + break; + case AVRCP_NOTIFY_EVENT_SYSTEM_STATUS_CHANGED: //系统状态变更事件 + break; + case AVRCP_NOTIFY_EVENT_PLAYER_APPLICATION_SETTING_CHANGED: //播放器配置变更事件,如音效设置、播放模式设置等,会触发此事件 + break; + case AVRCP_NOTIFY_EVENT_NOW_PLAYING_CONTENT_CHANGED: //播放内容变更事件,当 “正在播放” 列表中的内容发生变化时,比如添加了新的曲目、删除了曲目等情况,会触发这个事件。 + break; + case AVRCP_NOTIFY_EVENT_AVAILABLE_PLAYERS_CHANGED: //可使用的播放器变更事件,当系统中可用于播放的播放器设备发生变化时,比如新的播放器设备连接到系统或者已有播放器设备断开连接,会触发此事件 + break; + case AVRCP_NOTIFY_EVENT_ADDRESSED_PLAYER_CHANGED: //播放地址变更事件 + break; + case AVRCP_NOTIFY_EVENT_UIDS_CHANGED: //UID 变更事件 + break; + case AVRCP_NOTIFY_EVENT_VOLUME_CHANGED: //TG 端音量变更事件 + BtAvrcpCtHdlNotifyVolumeRspCbk(notification); + break; + case AVRCP_NOTIFY_EVENT_RESERVED: //保留 break; - case AVRCP_NOTIFY_EVENT_TRACK_REACHED_END: - case AVRCP_NOTIFY_EVENT_TRACK_REACHED_START: - case AVRCP_NOTIFY_EVENT_PLAYBACK_POS_CHANGED: - case AVRCP_NOTIFY_EVENT_BATT_STATUS_CHANGED: - case AVRCP_NOTIFY_EVENT_SYSTEM_STATUS_CHANGED: - case AVRCP_NOTIFY_EVENT_PLAYER_APPLICATION_SETTING_CHANGED: - case AVRCP_NOTIFY_EVENT_AVAILABLE_PLAYERS_CHANGED: - case AVRCP_NOTIFY_EVENT_ADDRESSED_PLAYER_CHANGED: - case AVRCP_NOTIFY_EVENT_UIDS_CHANGED: - case AVRCP_NOTIFY_EVENT_RESERVED: default: notify_flag = false; WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "invalid event id event_id:0x%x\n", event_id); diff --git a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp index 3469217d3..77a42392a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp @@ -366,6 +366,7 @@ namespace OHOS void MainPresenterSample::SetCircleProgress() { + #if 0 PlayersView *playersView = dynamic_cast(view_->GetViewById(MUSIC_PLAYER)); if (playersView == nullptr) { @@ -405,6 +406,7 @@ namespace OHOS PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_); PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_); } + #endif } void MainPresenterSample::SetCompassRotate() @@ -460,7 +462,7 @@ namespace OHOS break; case MUSIC_PLAYER: - SetCircleProgress(); + PlayersModel::GetInstance()->SetCircleProgress(); break; case WATCH_FACE: 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 1e0da28c5..1e0311269 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-09-21 17:01:40 + * @LastEditTime: 2024-09-23 16:04:25 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h */ @@ -108,6 +108,7 @@ public: void UpdateVolumeValue(void); bool get_avrcp_ct_or_tg_is_connected(void); void set_phone_music_play_state(avrcp_key_operation_t notify); + void set_player_state(bool value); private: bool musicSourceFlag{false};//音乐来源标志:false:默认为手表音乐,true:手机音乐 int64_t playerCurrentTime_{0}; 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 6cb74cb2c..42d8c5a02 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-09-23 15:07:25 + * @LastEditTime: 2024-09-23 16:17:55 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h */ @@ -244,6 +244,7 @@ public: void OnClickFailBack(void); void SetPlaybackProgress(int64_t value); void SetPlayerState(bool value); + void SetPhonePlayerState(bool value); void PlayerbackReset(void); void PlayerHeadsetReset(void); private: 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 df1a320a4..c5997ec65 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersModel.cpp @@ -916,32 +916,41 @@ bool PlayersModel::GetCurrentMusicIsPlaying(void) { return; } - int32_t playerState; - PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); - UICheckBox::UICheckBoxState state_ = playersView->GetPlayerButtonState(); - if ((playerState != PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::SELECTED)) + if(PlayersModel::GetInstance()->GetMusicSource() == false) //如果当前为本地音乐 { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); - } - else if ((playerState == PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::UNSELECTED)) - { - playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); - } - if (state_ == UICheckBox::UICheckBoxState::SELECTED) - { - PlayersModel::GetInstance()->GetPlayerCtr()->GetCurrentTime(playerCurrentTime_); - PlayersModel::GetInstance()->GetDuration(playerMusicDuration_); - if (playerMusicDuration_ != 0) + int32_t playerState; + PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); + UICheckBox::UICheckBoxState state_ = playersView->GetPlayerButtonState(); + if ((playerState != PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::SELECTED)) + { + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED); + } + else if ((playerState == PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::UNSELECTED)) { - playerProgressValue_ = (playerCurrentTime_ * 100) / playerMusicDuration_; - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerProgressValue_ %lld", playerProgressValue_); + playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED); } - else + if (state_ == UICheckBox::UICheckBoxState::SELECTED) { - playerProgressValue_ = 0; // 100: max progress value + PlayersModel::GetInstance()->GetPlayerCtr()->GetCurrentTime(playerCurrentTime_); + PlayersModel::GetInstance()->GetDuration(playerMusicDuration_); + if (playerMusicDuration_ != 0) + { + playerProgressValue_ = (playerCurrentTime_ * 100) / playerMusicDuration_; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerProgressValue_ %lld", playerProgressValue_); + } + else + { + playerProgressValue_ = 0; // 100: max progress value + } + PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_); + PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_); } - PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_); - PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_); + } + else //如果当前为手机音乐 + { + //更新手机音乐的进度,暂时没实现 + PlayersModel::GetInstance()->SetCircleProgress(0); + PlayersPresenter::GetInstance()->SetPlaybackProgress(0); } } @@ -1009,6 +1018,16 @@ bool PlayersModel::GetCurrentMusicIsPlaying(void) break; } } + + //设置按钮播放状态 + void PlayersModel::set_player_state(bool value) + { + PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance(); + if (playersPresenter != nullptr) + { + playersPresenter->SetPhonePlayerState(value); + } + } } #ifdef __cplusplus 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 22442fd3c..198f93461 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersPresenter.cpp @@ -1565,6 +1565,16 @@ void PlayersPresenter::SetPlayerState(bool value) } } +void PlayersPresenter::SetPhonePlayerState(bool value) +{ + PlayersView *playersView = PlayersView::GetInstance(); + if (playersView != nullptr) { + PlayersModel::GetInstance()->SetPlayButtonState(value); + playersView->SetPlayerButtonState(value ? UICheckBox::UICheckBoxState::SELECTED:UICheckBox::UICheckBoxState::UNSELECTED); + } + return; +} + void PlayersPresenter::PlayerbackReset(void) { PlayersView *playersView = PlayersView::GetInstance(); 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 7b611c48b..21dfa9d03 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayersView.cpp @@ -158,12 +158,11 @@ namespace OHOS // 设置播放或暂停按钮的状态 void PlayersView::SetPlayerButtonState(UICheckBox::UICheckBoxState state) { - if (play_or_pause_Button == nullptr) + if (play_or_pause_Button != nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetPlayerButtonState play_or_pause_Button NULL"); - return; + play_or_pause_Button->SetState(state); + play_or_pause_Button->Invalidate(); } - return play_or_pause_Button->SetState(state); } void PlayersView::SetPlayerCtrVolume(float leftVolume, float rightVolume) @@ -842,8 +841,9 @@ namespace OHOS // 停止当前正在播放的音乐 void PlayersView::StopCurPlayingMusic() { - uint8_t state = GetPlayerButtonState(); - if (state == UICheckBox::UICheckBoxState::SELECTED) + int32_t playerState; + PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState); + if (playerState == PLAYER_STARTED || playerState == PLAYER_PAUSED) //如果当前是已经播放或播放暂停状态 { PlayersModel::GetInstance()->PlayerStop(); PlayersModel::GetInstance()->ClearActivateAudioInterrupt(); @@ -865,16 +865,9 @@ namespace OHOS /// @param phoneMusicConnectStatus 手机音乐连接状态 void PlayersView::SetMusicPlayerButtonIsTouchable(bool musicSourceType) { - // 1.如果为手机音乐且手机音乐已连接那么上一首,下一首,播放或暂停,声音等按钮设置为可点击. - // 2.如果不为手机音乐按钮就可点击 - /* -------------------------------------------------------------------------- */ - if (play_or_pause_Button && preMusicButton && nextMusicButton && soundButton && playerModelButton) + if (playerModelButton) { bool touchableState = !musicSourceType; - // play_or_pause_Button->SetTouchable(touchableState); - // preMusicButton->SetTouchable(touchableState); - // nextMusicButton->SetTouchable(touchableState); - // soundButton->SetTouchable(touchableState); playerModelButton->SetTouchable(touchableState); // 如果音乐来源为手机音乐,播放顺序按钮就不可用 /* -------------------------------------------------------------------------- */ if (musicSourceType) // 如果切換到手机音乐,且当前在放歌,就停止音乐 -- 2.17.1