* @Author: luozheng 1732036298@qq.com
* @Date: 2024-08-05 15:20:03
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-08-13 17:11:32
+ * @LastEditTime: 2024-08-20 17:18:32
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h
*/
void SetMusicSource(bool value);
void UpdateMusicPlayerList(void);
bool GetCurrentMusicIsPlaying(void);
+ void PlayerMusic_StartTimer(uint32_t interval = 1000);
+ void PlayerMusic_StopTimer(void);
private:
bool musicSourceFlag{false};//音乐来源标志:false:默认为手表音乐,true:手机音乐
private:
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-08-05 15:20:03\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-08-13 16:10:15\r
+ * @LastEditTime: 2024-08-20 17:57:54\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h\r
*/\r
\r
void OnClickSuccBack(void);\r
void OnClickConnFailBack(void);\r
void OnClickFailBack(void);\r
- void UpdatePlayerView(bool musicSourceType, bool phoneMusicConnectStatus);\r
void SetPlaybackProgress(int64_t value);\r
void SetPlayerState(bool value);\r
void PlayerbackReset(void);\r
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-08-05 15:20:03\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-08-14 11:26:39\r
+ * @LastEditTime: 2024-08-20 17:39:13\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersView.h\r
*/\r
\r
#include "player/include/MusicPlayerSourceView.h"\r
#include "player/include/MusicPlayerBluetoothDisConView.h"\r
#include "player/include/MusicPlayerBTConnectFailedView.h"\r
+#include "aivoice/include/AiVoiceConnectingView.h"\r
namespace OHOS\r
{\r
#define PLAY_PROGRESS_MIN 0\r
UICircleProgress *GetPlaybackProgress(void);\r
UICheckBox::UICheckBoxState GetPlayerButtonState(void);\r
\r
- void UpdatePlayerView(bool musicSourceType, bool phoneMusicConnectStatus);\r
+ void UpdatePlayerView(void);\r
void UpdateMusicListStatus(void);\r
void OnClickBackKeyToMainMusicPlayerView(void);\r
\r
UIViewGroup *musicListGroupView{nullptr}; // 音乐列表视图\r
MusicPlayerBluetoothDisConView *musicPlayerBluetoothDisConView{nullptr}; // 蓝牙未连接视图\r
MusicPlayerBTConnectFailedView *musicPlayerBTConnectFailedView{nullptr}; // 蓝牙连接失败视图\r
+ AiVoiceConnectingView *musicPlayerConnectingView{nullptr}; // 连接动画\r
\r
private:\r
UIView::OnClickListener *clickListener{nullptr};\r
// 1.a2dp未连接,向手机发起a2dp连接\r
// 如果蓝牙没连接直接是跳转到蓝牙连接失败视图,连接了就有一个主动去连手机的a2dp过程,5秒超市\r
\r
- playersPresenter->UpdatePlayerView(PlayersModel::GetInstance()->GetMusicSource(), phonebluetoothcon && a2dp);\r
-\r
if (!phonebluetoothcon)\r
{\r
playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW);\r
}\r
- else if (phonebluetoothcon && !a2dp)\r
+ else if (phonebluetoothcon && !a2dp) // 如果手机蓝牙已连接但手表与手机的a2dp未连接手表主动去连接a2dp\r
{\r
- playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MUSIC_BT_CONNECTFAILED_VIEW);\r
+ /* -------------------------------------------------------------------------- */\r
+ uapi_a2dp_snk_connect(); // 切换通道主动连接atdp\r
+ /* -------------------------------------------------------------------------- */\r
+ playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MUISC_CONNECTING);\r
}\r
else if (phonebluetoothcon && a2dp)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick watchLableButton");\r
PlayersModel::GetInstance()->SetMusicSource(false);\r
UpdateBluetoothHeadSetViewIsVisible();\r
-\r
- playersPresenter->UpdatePlayerView(PlayersModel::GetInstance()->GetMusicSource(), phonebluetoothcon && a2dp);\r
+ /* -------------------------------------------------------------------------- */\r
+ if (a2dp)\r
+ {\r
+ uapi_a2dp_snk_disconnect(); // 切换通道主动断开atdp\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
}\r
else if (button == bluetoothHeadsetLableButton)\r
{\r
#include "bluetooth/include/BluetoothModel.h"
#include <unistd.h>
#include <sys/stat.h>
+#include "cmsis_os.h"
+#include <cmsis_os2.h>
+#include <service/graphic_service.h>
namespace OHOS {
static constexpr int VOLUME_MAXIMUM = 100;
}
return false;
}
+
+ /* -------------------------------------------------------------------------- */
+ static osTimerId_t g_timer = NULL;
+ static int g_PlayerTimes = 5;
+
+ static void PlayerMusic_TimerCallbackProc(int data)
+ {
+ g_PlayerTimes--;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_PlayerTimes = %d",g_PlayerTimes);
+ PlayersView *playersView = PlayersView::GetInstance();
+ if (playersView == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView nullptr err");
+ return;
+ }
+ if(g_PlayerTimes < 0) /*5秒超时*/
+ {
+ playersView->ChangeView(PlayersView::MUISC_CONNECTING, PlayersView::MUSIC_BT_CONNECTFAILED_VIEW);
+ }
+ else
+ {
+ bool a2dp = uapi_a2dp_snk_get_device_connect_state();// 获取a2dp连接状态
+ if(a2dp)
+ {
+ playersView->ChangeView(PlayersView::MUISC_CONNECTING, PlayersView::MAIN_MUSICPLAYER_VIEW);
+ }
+ }
+ return;
+ }
+ static void PlayerMusic_TimerCallback(int data)
+ {
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(PlayerMusic_TimerCallbackProc, data));
+ }
+
+ void PlayersModel::PlayerMusic_StartTimer(uint32_t interval)
+ {
+ /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
+ if (g_timer != NULL)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersModel::StopWatch_StartTimer Timer already exists!!");
+ return;
+ }
+
+ /* --------------------------------- 2.创建定时器 -------------------------------- */
+ g_timer = osTimerNew((osTimerFunc_t)PlayerMusic_TimerCallback, osTimerPeriodic, NULL, NULL);
+ // 检查定时器创建是否成功
+ if (g_timer == NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::StopWatch_StartTimer Timer create failed!!");
+ return;
+ }
+
+ /* ----------------------------- 3.将毫秒转换为系统时钟节拍数 ---------------------------- */
+ int tick = osMs2Tick(interval);
+
+ /* --------------------------------- 4.启动定时器 -------------------------------- */
+ // g_timerStartTimestamp = GetCurrentTimestamp(); // 假设GetCurrentTimestamp()是获取当前时间戳的函数
+ osStatus_t ret = osTimerStart(g_timer, tick);
+ /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 NULL -------------------- */
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[StopWatch_StartTimer]osTimerDelete failed, ret = %lx!!", ret);
+ if (g_timer != NULL)
+ {
+ ret = osTimerDelete(g_timer);
+ }
+ g_timer = NULL;
+ return;
+ }
+ return;
+ }
+
+ void PlayersModel::PlayerMusic_StopTimer(void)
+ {
+ // 检查定时器是否存在
+ if (g_timer != NULL)
+ {
+ // 删除定时器并置为 NULL
+ osStatus_t ret = osTimerDelete(g_timer);
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScanTimerCallback osTimerDelete failed, ret = %lx!!", ret);
+ }
+ g_timer = NULL;
+ g_PlayerTimes = 5;
+ }
+ }
}
#ifdef __cplusplus
return false;\r
}\r
\r
-void PlayersPresenter::UpdatePlayerView(bool musicSourceType, bool phoneMusicConnectStatus)\r
-{\r
- PlayersView *playersView = PlayersView::GetInstance();\r
- if (playersView == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
- return;\r
- }\r
- playersView->UpdatePlayerView(musicSourceType,phoneMusicConnectStatus);\r
-}\r
-\r
void PlayersPresenter::SetPlaybackProgress(int64_t value)\r
{\r
PlayersView *playersView = PlayersView::GetInstance();\r
delete musicPlayerBTConnectFailedView;\r
musicPlayerBTConnectFailedView = nullptr;\r
}\r
+ if (musicPlayerConnectingView != nullptr)\r
+ {\r
+ PlayersModel::GetInstance()->PlayerMusic_StopTimer();\r
+ delete musicPlayerConnectingView;\r
+ musicPlayerConnectingView = nullptr;\r
+ }\r
\r
for (int i = MAIN_MUSICPLAYER_VIEW; i < MUSICPLAYERJUMPVIEWID_MAX; i++)\r
{\r
}\r
\r
/*刷新播放器界面的组件状态*/\r
- void PlayersView::UpdatePlayerView(bool musicSourceType, bool phoneMusicConnectStatus)\r
+ void PlayersView::UpdatePlayerView(void)\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdatePlayerView");\r
// 1.a2dp未连接,向手机发起a2dp连接\r
+ bool phonebluetoothcon = SettingModel::GetInstance().GetPhoneConnectStatus(); // 获取手机连接状态\r
+ bool a2dp = uapi_a2dp_snk_get_device_connect_state(); // 获取a2dp连接状态\r
\r
+ bool phoneMusicConnectStatus = phonebluetoothcon && a2dp;\r
+ bool musicSourceType = PlayersModel::GetInstance()->GetMusicSource();\r
// 2.\r
ImageInfo *image;\r
if (musicSourceType)\r
return false;\r
}\r
/* -------------------------------------------------------------------------- */\r
- bool phonebluetoothcon = SettingModel::GetInstance().GetPhoneConnectStatus(); // 获取手机连接状态\r
- bool a2dp = uapi_a2dp_snk_get_device_connect_state(); // 获取a2dp连接状态\r
- UpdatePlayerView(PlayersModel::GetInstance()->GetMusicSource(), phonebluetoothcon && a2dp);\r
+ UpdatePlayerView();\r
/* -------------------------------------------------------------------------- */\r
\r
PlayersListGroup::GetInstance()->SetUpListCase();\r
{PlayersView::MUSIC_DELETE_VIEW, &PlayersView::ChangeToMusicDeleteView},\r
{PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW, &PlayersView::ChangeToMusicBluetoothDisConnectView},\r
{PlayersView::MUSIC_BT_CONNECTFAILED_VIEW, &PlayersView::ChangeToMusicBluetoothConnectFailedView},\r
+ {PlayersView::MUISC_CONNECTING, &PlayersView::ChangeToMusicConnectingView},\r
};\r
\r
/*根据传入的 interface 值,在 ViewMapper 数组中查找匹配的 viewId*/\r
return true;\r
}\r
\r
+ static const short PlayerDestroyMapper[] = {\r
+ PlayersView::MUISC_CONNECTING,\r
+ };\r
+\r
/*删除临时视图*/\r
void PlayersView::DestroyTempView(int16_t hideView)\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::DestroyTempView");\r
+ int viewSize = sizeof(PlayerDestroyMapper) / sizeof(PlayerDestroyMapper[0]);\r
+ for (int i = 0; i < viewSize; i++)\r
+ {\r
+ if (hideView == PlayerDestroyMapper[i])\r
+ {\r
+ Remove(group[hideView]);\r
+ group[hideView] = nullptr;\r
+ break;\r
+ }\r
+ }\r
+ switch (hideView)\r
+ {\r
+ case PlayersView::MUISC_CONNECTING:\r
+ PlayersModel::GetInstance()->PlayerMusic_StopTimer();\r
+ if (musicPlayerConnectingView)\r
+ {\r
+ delete musicPlayerConnectingView;\r
+ musicPlayerConnectingView = nullptr;\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
}\r
\r
/*视图切换*/\r
{\r
Add(group[thisView]);\r
}\r
+ UpdatePlayerView();\r
return true;\r
}\r
\r
group[thisView] = groupview;\r
Add(group[thisView]);\r
}\r
- UpdateMusicListStatus();/*每次切换到音乐列表都将更新一次列表*/\r
+ UpdateMusicListStatus(); /*每次切换到音乐列表都将更新一次列表*/\r
return true;\r
}\r
\r
return true;\r
}\r
\r
- /*å\88\87æ\8d¢å\88°è\93\9dç\89\99æ\9cªè¿\9eæ\8e¥视图*/\r
+ /*å\88\87æ\8d¢å\88°è¿\9eæ\8e¥å\8a¨ç\94»视图*/\r
bool PlayersView::ChangeToMusicConnectingView(int16_t thisView)\r
{\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMusicBluetoothConnectFailedView");\r
- // if (group[thisView] == nullptr)\r
- // {\r
- // musicPlayerBTConnectFailedView = new MusicPlayerBTConnectFailedView();\r
- // if (musicPlayerBTConnectFailedView == nullptr)\r
- // {\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new playerListDelSongView fail");\r
- // return false;\r
- // }\r
- // UIViewGroup *groupview = musicPlayerBTConnectFailedView->CreateMusicPlayerBTConnectFailedView();\r
- // if (groupview == nullptr)\r
- // {\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new group[%d] fail", thisView);\r
- // return false;\r
- // }\r
- // group[thisView] = groupview;\r
- // Add(group[thisView]);\r
- // }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMusicConnectingView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ musicPlayerConnectingView = new AiVoiceConnectingView();\r
+ if (musicPlayerConnectingView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new playerListDelSongView fail");\r
+ return false;\r
+ }\r
+ UIViewGroup *groupview = musicPlayerConnectingView->CreateAiVoiceConnectingView(1);\r
+ if (groupview == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new group[%d] fail", thisView);\r
+ return false;\r
+ }\r
+ group[thisView] = groupview;\r
+ Add(group[thisView]);\r
+ }\r
+ PlayersModel::GetInstance()->PlayerMusic_StartTimer();\r
return true;\r
}\r
}\r
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-02-18 09:09:13
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-07-22 10:51:12
+ * @LastEditTime: 2024-08-20 17:42:37
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/settings/src/SettingModel.cpp
*/
#include "settings/include/SettingModel.h"
#include "main/include/PullUpDownView.h"
#include "ui_resource_string.h"
#include "classicbluetooth/include/BluetoothServiceOptionsView.h"
+#include "player/include/PlayersView.h"
namespace OHOS
{
SettingModel::SettingModel() {}
{
BluetoothServiceOptionsView::GetInstance()->Button_UPdata();
}
+ if(PlayersView::GetInstance())
+ {
+ PlayersView::GetInstance()->UpdatePlayerView();
+ }
}
}