--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-02 10:00:21
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-02 16:08:39
+ * @FilePath: /xts_origin/FD230/code/sdk/application/wearable/fd230app/nativeui/musicplayer/include/MusicPlayerModel.h
+ */
+
+#ifndef MUSIC_PLAYER_MODEL_H
+#define MUSIC_PLAYER_MODEL_H
+
+#include "iostream"
+#include "string"
+
+namespace OHOS
+{
+ class MusicPlayerModel
+ {
+ public:
+ static MusicPlayerModel &GetInstance(void);
+ std::string GetMusicPlayPath(void);
+
+ std::string getRealMusicNameById(int id);
+ std::string getShowMusicNameById(int id);
+
+ int getIdToMusicNameMapNumber(void);
+
+ private:
+ MusicPlayerModel();
+ ~MusicPlayerModel();
+ MusicPlayerModel(const MusicPlayerModel &) = delete;
+ MusicPlayerModel &operator=(const MusicPlayerModel &) = delete;
+
+ private:
+ std::string musicPlayPath = "/user/userdata/music"; /*音乐播放路径*/
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-07-08 09:39:10
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-02 14:54:01
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aimodels/include/MusicPlayerPresenter.h
+ */
+
+#ifndef MUSIC_PLAYER_PRESENTER_H
+#define MUSIC_PLAYER_PRESENTER_H
+
+#include "Presenter.h"
+#include "View.h"
+
+namespace OHOS
+{
+ class MusicPlayerView;
+ class MusicPlayerModel;
+ class MusicPlayerPresenter : public Presenter<MusicPlayerView>,
+ public UIView::OnClickListener,
+ public UIView::OnDragListener,
+ public RootView::OnKeyActListener
+ {
+ public:
+ MusicPlayerPresenter();
+ virtual ~MusicPlayerPresenter();
+ static MusicPlayerPresenter *GetInstance();
+
+ void OnStart() override;
+ void OnResume() override;
+ void OnPause() override;
+ void OnStop() override;
+
+ private:
+ 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 OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+
+ MusicPlayerModel *model;
+ bool X_DRAG_FLAG{false};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-01 18:02:51
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-29 17:59:43
+ * @FilePath: /xts_origin/FD230/code/sdk/application/wearable/fd230app/nativeui/musicplayer/include/MusicPlayerView.h
+ */
+
+
+#ifndef MUSIC_PLAYER_VIEW_H
+#define MUSIC_PLAYER_VIEW_H
+
+
+#include "View.h"
+#include "player/include/PlayersView.h"
+namespace OHOS
+{
+
+ class MusicPlayerPresenter;
+ class MusicPlayerView : public View<MusicPlayerPresenter>
+ {
+ public:
+ MusicPlayerView();
+ ~MusicPlayerView();
+ static MusicPlayerView *GetInstance(void);
+
+ void OnStart() override;
+
+
+ private:
+ void CreateMusicPlayerView(void);
+ void ClearAll(void);
+ PlayersView *playersView{nullptr};
+ bool viewInitStatus{false};
+ };
+}
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-02 10:00:33
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-02 16:06:48
+ * @FilePath: /xts_origin/FD230/code/sdk/application/wearable/fd230app/nativeui/musicplayer/src/MusicPlayerModel.cpp
+ */
+
+#include "musicplayer/include/MusicPlayerModel.h"
+#include "wearable_log.h"
+#include "player/include/PlayersModel.h"
+namespace OHOS
+{
+ MusicPlayerModel::MusicPlayerModel() {}
+
+ MusicPlayerModel::~MusicPlayerModel() {}
+
+ MusicPlayerModel &MusicPlayerModel::GetInstance()
+ {
+ static MusicPlayerModel instance;
+ return instance;
+ }
+
+ /*获取音乐播放路径*/
+ std::string MusicPlayerModel::GetMusicPlayPath(void)
+ {
+ return PlayersModel::GetInstance()->GetMusicPlayPath();
+ }
+
+ std::string MusicPlayerModel:: getRealMusicNameById(int id)
+ {
+
+
+ return PlayersModel::GetInstance()->getRealMusicNameById(id);
+ }
+
+ std::string MusicPlayerModel::getShowMusicNameById(int id)
+ {
+ return PlayersModel::GetInstance()->getShowMusicNameById(id);
+ }
+
+ int MusicPlayerModel:: getIdToMusicNameMapNumber(void)
+ {
+ PlayersListGroup::GetInstance()->SetUpListCase();
+
+ return PlayersModel::GetInstance()->getIdToMusicNameMapNumber();
+ }
+
+}
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-02 09:59:59
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-02 14:54:21
+ * @FilePath: /xts_origin/FD230/code/sdk/application/wearable/fd230app/nativeui/musicplayer/src/MusicPlayerPresenter.cpp
+ */
+
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "common/key_code.h"
+#include <custom_utils.h>
+#include "UiConfig.h"
+#include "musicplayer/include/MusicPlayerPresenter.h"
+#include "musicplayer/include/MusicPlayerView.h"
+#include "musicplayer/include/MusicPlayerModel.h"
+
+#include "ui_resource_string.h"
+#include "NativeRegisterManager.h"
+namespace OHOS
+{
+
+ REGIST_MENU_PRO(VIEW_MUSIC_PLAYER, MusicPlayerView, MusicPlayerPresenter,
+ PNG_APPLIST_MUSIC_IMAGE_BIG, PNG_APPLIST_MUSIC_IMAGE,PNG_APPLIST_MUSIC_IMAGE, "音乐", STR_MUSIC);
+
+ static MusicPlayerPresenter *g_pMusicPlayerPresenter = nullptr;
+
+ MusicPlayerPresenter::MusicPlayerPresenter()
+ {
+ model = &MusicPlayerModel::GetInstance();
+ g_pMusicPlayerPresenter = this;
+ }
+
+ MusicPlayerPresenter::~MusicPlayerPresenter()
+ {
+ g_pMusicPlayerPresenter = nullptr;
+ }
+
+ MusicPlayerPresenter *MusicPlayerPresenter::GetInstance()
+ {
+ return g_pMusicPlayerPresenter;
+ }
+
+ // 启动时执行的逻辑
+ void MusicPlayerPresenter::OnStart()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnStart");
+ Presenter<MusicPlayerView>::OnStart();
+ }
+
+ // 页面已经展示后的调用逻辑
+ void MusicPlayerPresenter::OnResume(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnResume");
+ Presenter<MusicPlayerView>::OnResume();
+ if (view_ == nullptr)
+ {
+ return;
+ }
+ }
+
+ // 页面准备切换到后台前执行的逻辑
+ void MusicPlayerPresenter::OnPause(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnPause");
+ Presenter<MusicPlayerView>::OnPause();
+ }
+
+ // 页面完全置于后台时的逻辑。
+ void MusicPlayerPresenter::OnStop(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnStop");
+ Presenter<MusicPlayerView>::OnStop();
+ }
+
+ bool MusicPlayerPresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ UNUSED(event);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnClick");
+ return true;
+ }
+
+ bool MusicPlayerPresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ UNUSED(view);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnDrag");
+ if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
+ {
+ MusicPlayerPresenter::X_DRAG_FLAG = true;
+ }
+ return true;
+ }
+
+ bool MusicPlayerPresenter::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ UNUSED(view);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnDragEnd");
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && MusicPlayerPresenter::X_DRAG_FLAG)
+ {
+ NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ MusicPlayerPresenter::X_DRAG_FLAG = false;
+ }
+ return true;
+ }
+
+ bool MusicPlayerPresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件
+ {
+ UNUSED(view);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerPresenter::OnKeyAct");
+ uint16_t keyID = event.GetKeyId();
+ uint16_t keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)
+ {
+ NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ }
+ return true;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 14:23:38
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/MusicPlayer/src/MusicPlayerView.cpp
+ */
+#include "musicplayer/include/MusicPlayerPresenter.h"
+#include "musicplayer/include/MusicPlayerView.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+
+ static MusicPlayerView *g_pMusicPlayerView{nullptr};
+ MusicPlayerView::MusicPlayerView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerView::MusicPlayerView");
+ g_pMusicPlayerView = this;
+ }
+
+ MusicPlayerView::~MusicPlayerView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerView::~MusicPlayerView");
+ ClearAll();
+ g_pMusicPlayerView = nullptr;
+ }
+
+ MusicPlayerView *MusicPlayerView::GetInstance()
+ {
+ return g_pMusicPlayerView;
+ }
+
+ void MusicPlayerView::ClearAll(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerView::ClearAll");
+ if (viewInitStatus)
+ {
+ if (playersView)
+ {
+ delete playersView;
+ playersView = nullptr;
+ }
+ }
+ }
+
+ void MusicPlayerView::CreateMusicPlayerView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerView::CreateMusicPlayerView");
+ if (playersView == nullptr)
+ {
+ playersView = new PlayersView();
+ if (playersView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView new fail!!");
+ return;
+ }
+ playersView->PreLoad();
+ AddViewToRootContainer(playersView);
+ }
+ }
+
+ void MusicPlayerView::OnStart()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerView::OnStart");
+
+ if (!viewInitStatus)
+ {
+ CreateMusicPlayerView();
+ viewInitStatus = true;
+ }
+
+ RootView::GetInstance()->SetOnKeyActListener(presenter_);
+ return;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-12 11:31:35
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-09-03 20:13:24
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/MusicPlayerBTConnectFailedView.cpp
+ */
+#ifndef MUSIC_PLAYER_BTCONNECTFAILED_VIEW_H
+#define MUSIC_PLAYER_BTCONNECTFAILED_VIEW_H
+#include "components/ui_label_ext.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_button.h"
+namespace OHOS
+{
+ class MusicPlayerBTConnectFailedView : public UIView::OnClickListener
+ {
+ public:
+ MusicPlayerBTConnectFailedView();
+ ~MusicPlayerBTConnectFailedView();
+ UIViewGroup *CreateMusicPlayerBTConnectFailedView(void);
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+
+ private:
+ bool CreateMusicPlayerBTConnectFailedViewLabel();
+ bool CreateMusicPlayerBTConnectFailedViewButton();
+ void ClearAll();
+ void get_bt_name(void);
+ UIViewGroup *group{nullptr};
+ UIScrollView *scrollView{nullptr};
+ UILabelExt *titleLabel{nullptr}; // 标题
+ UILabelExt *IPoneLabel{nullptr};
+ UILabelExt *AndroidLabel{nullptr};
+ UILabelExt *BTNoteLabel1{nullptr};
+ UILabelExt *BTNoteLabel2{nullptr};
+ UILabelExt *BTNoteLabel3{nullptr};
+ UILabelExt *CloseLabel{nullptr};
+ UIButton *CloseButton{nullptr};
+ UIView::OnDragListener *dragListener{nullptr};
+ uint8_t ble_name[30]{0};
+ };
+
+}
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-10 16:23:34
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-10 17:42:47
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/MusicPlayerBluetoothDisConView.h
+ */
+#ifndef MUSIC_PLAYER_BLUETOOTH_DISCON_VIEW_H
+#define MUSIC_PLAYER_BLUETOOTH_DISCON_VIEW_H
+#include "components/ui_label_ext.h"
+#include "components/ui_image_view.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_button.h"
+
+namespace OHOS
+{
+ class MusicPlayerBluetoothDisConView : public UIView::OnClickListener
+ {
+ public:
+ struct LabelConfig
+ {
+ int16_t left;
+ int16_t top;
+ int16_t width;
+ int16_t height;
+ int16_t fontSize;
+ int16_t lineHeigh;
+ uint16_t textId;
+ uint8_t lineBreakMode;
+ };
+ MusicPlayerBluetoothDisConView();
+ ~MusicPlayerBluetoothDisConView();
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+ UIViewGroup *CreateMusicPlayerBluetoothDisConView(void);
+
+ private:
+ UILabelExt *MusicPlayerBluetoothDisConViewLabelInit(LabelConfig &labelconfig);
+ bool CreateMusicPlayerBluetoothDisConViewLabel(void);
+ bool CreateMusicPlayerBluetoothDisConViewImage(void);
+ bool CreateMusicPlayerBluetoothDisConViewButton(void);
+
+ void ClearAll();
+ UIViewGroup *group{nullptr};
+ UIScrollView *scrollView{nullptr};
+ UILabelExt *titleLabel{nullptr}; // 标题
+ UIImageView *bluetoothImage{nullptr};
+ UIImageView *image66{nullptr};
+ UIImageView *image99{nullptr};
+ UILabelExt *noteLabel{nullptr};
+ UIButton *OkButton{nullptr};
+ UILabelExt *OkLabel{nullptr};
+ UIView::OnDragListener *dragListener{nullptr};
+ };
+}
+#endif
\ No newline at end of file
--- /dev/null
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:03\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-12-04 14:35:07\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/MusicPlayerSourceView.h\r
+ */\r
+\r
+#ifndef MUSIC_PLAYER_SOURCE_VIEW_H\r
+#define MUSIC_PLAYER_SOURCE_VIEW_H\r
+\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_radio_button.h"\r
+#include "components/ui_label_button.h"\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_scroll_view.h"\r
+\r
+\r
+namespace OHOS\r
+{\r
+ static constexpr const char *PHONE_MUSIC_LABEL_BUTTON = "phone_music_label_button";\r
+ static constexpr const char *WATCH_MUSIC_LABEL_BUTTON = "watch_music_label_button";\r
+ static constexpr const char *BLUETOOTH_HEADSET_LABEL_BUTTON = "bluetooth_headset_label_button";\r
+ class PlayerOnDragListener;\r
+ class MusicPlayerSourceView : public UIView::OnClickListener, public UIView::OnDragListener\r
+ {\r
+ public:\r
+ struct LabelConfig\r
+ {\r
+ int16_t left;\r
+ int16_t top;\r
+ int16_t width;\r
+ int16_t height;\r
+ int16_t fontSize;\r
+ int16_t lineHeigh;\r
+ uint16_t textId;\r
+ uint8_t lineBreakMode;\r
+ };\r
+ struct ButtonConfig\r
+ {\r
+ int16_t x;\r
+ int16_t y;\r
+ int16_t w;\r
+ int16_t h;\r
+ const char *viewId;\r
+ bool flag;\r
+ };\r
+ MusicPlayerSourceView();\r
+ ~MusicPlayerSourceView();\r
+ static MusicPlayerSourceView *GetInstance(void);\r
+ bool OnClick(UIView &view, const ClickEvent &event) override;\r
+ UIViewGroup *CreateMusicPlayerSourceView(void);\r
+ void UpdateBluetoothHeadSetViewIsVisible(void);\r
+ void UpdateBluetoothHeadsetConnectLabel(void);\r
+ UIScrollView *GetMusicPlayerSourcescrollView(void);\r
+\r
+ private:\r
+ UILabelButton *MusicPlayerSourceViewLabelButtonInit(ButtonConfig &buttonconfig);\r
+ UILabelExt *MusicPlayerSourceViewLabelInit(LabelConfig &labelconfig);\r
+ bool CreateMusicPlayerSourceViewLabelButton(void);\r
+ bool CreateMusicPlayerSourceViewLabel(void);\r
+ bool CreateMusicPlayerSourceViewImage(void);\r
+ void ClearAll();\r
+ UIViewGroup *group{nullptr};\r
+ UIScrollView *scrollView{nullptr};\r
+ UILabelExt *titleLabel{nullptr}; // 标题\r
+\r
+ UILabelExt *phoneLabel{nullptr}; // 手机音乐\r
+ UIImageView *phoneImage{nullptr};\r
+ UILabelButton *phoneLableButton{nullptr};\r
+\r
+ UILabelExt *watchLabel{nullptr}; // 手表音乐\r
+ UIImageView *watchImage{nullptr};\r
+ UILabelButton *watchLableButton{nullptr};\r
+\r
+ UILabelExt *bluetoothHeadsetLabel{nullptr}; // 蓝牙耳机\r
+ UIImageView *bluetoothHeadsetImage{nullptr};\r
+ UILabelButton *bluetoothHeadsetLableButton{nullptr};\r
+ UILabelExt *bluetoothHeadsetConnectState{nullptr}; // 蓝牙耳机配对状态\r
+\r
+ UIView::OnDragListener *dragListener{nullptr};\r
+ };\r
+}\r
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __MUSIC_PLAYER_TIP_VIEW_H__
+#define __MUSIC_PLAYER_TIP_VIEW_H__
+
+#include "components/ui_label_ext.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+
+namespace OHOS
+{
+ class MusicPlayerTipView : public UIView::OnClickListener
+ {
+ public:
+ MusicPlayerTipView();
+ ~MusicPlayerTipView();
+ static MusicPlayerTipView *GetInstance(void);
+
+ UIViewGroup * CreateMusicPlayerTipView(void);
+ bool OnClick(UIView &view, const ClickEvent &event);
+
+
+ private:
+ void ClearAll(void);
+ UIViewGroup *group{nullptr};
+ UIScrollView *scrollView{nullptr};
+ UIImageView *image{nullptr};
+ UILabelExt *noteLabel{nullptr};
+ UILabelExt *OKLabel{nullptr};
+ UIButton *OkButton{nullptr};
+ UIView::OnDragListener *dragListener{nullptr};
+ };
+
+} // namespace OHOS
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-05 15:20:03
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-12-06 10:39:03
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayerListDelSongView.h
+ */
+
+#ifndef MUSIC_PLAYER_LIST_DEL_SONG_VIEW_H
+#define MUSIC_PLAYER_LIST_DEL_SONG_VIEW_H
+
+#include "string"
+#include "iostream"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+
+namespace OHOS
+{
+ class PlayerListDelSongView
+ {
+ public:
+ struct LabelConfig
+ {
+ int16_t left;
+ int16_t top;
+ int16_t width;
+ int16_t height;
+ int16_t fontSize;
+ int16_t lineHeigh;
+ uint16_t textId;
+ uint8_t lineBreakMode;
+ };
+ struct ButtonConfig
+ {
+ int16_t x;
+ int16_t y;
+ int16_t w;
+ int16_t h;
+ const char *src;
+ };
+
+ PlayerListDelSongView();
+ virtual ~PlayerListDelSongView();
+ static PlayerListDelSongView *GetInstance(void);
+ UIViewGroup *CreatePlayerListDelSongView();
+ void SetTheDelSongLabelStyle(const char *songName,int index);
+ void DeleteSongNameFile(void);
+ UIButton *GetEnsureDeleteButton(void);
+ UIButton *GetCancelDeleteButton(void);
+
+ private:
+ void ClearAll(void);
+ UILabelExt *PlayerListDelSongViewLabelInit(LabelConfig &labelconfig);
+ UIButton *PlayerListDelSongViewButtonInit(ButtonConfig &buttonconfig);
+ bool CreatePlayerListDelSongViewLabel(void);
+ bool CreatPlayerListDelSongViewButton(void);
+ bool CreatePlayerListDelSongViewScrollView(void);
+ UIViewGroup *group{nullptr};
+ UIScrollView *scrollView{nullptr};
+ UILabelExt *title{nullptr};
+ UILabelExt *deleteNotelabel{nullptr};
+ UILabelExt *songNameLabel{nullptr};
+ UIButton *ensureDeleteButton{nullptr};
+ UIButton *cancelDeleteButton{nullptr};
+
+ std::string delSongName;
+ int deleteSongIndex{0};
+ UIView::OnDragListener *dragListener{nullptr};
+ UIView::OnClickListener *buttonClickListener{nullptr};
+
+ };
+}
+#endif
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-05 15:20:03
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-09 16:49:16
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayerListitemView.h
+ */
+
+#ifndef MUSIC_PLAYER_LIST_ITEM_VIEW_H
+#define MUSIC_PLAYER_LIST_ITEM_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_view_group.h"
+#include "components/ui_button.h"
+#include "player/include/PlayersCaseListAdapter.h"
+#include "player/include/PlayersPresenter.h"
+namespace OHOS
+{
+
+ class PlayerListItemView : public UIViewGroup
+ {
+ public:
+ explicit PlayerListItemView();
+ virtual ~PlayerListItemView();
+ virtual void SetItemInfo(const PlayerListItem itemInfo);
+ virtual void SetUpChild();
+ int GetPlayerListIndex();
+ UILabel *GetLabel()
+ {
+ return &sLabel;
+ }
+ UIButton *GetButton()
+ {
+ return &sButton;
+ }
+ void UpdateItemViewStyle(bool isplaying);
+
+ private:
+ PlayerListItemView(const PlayerListItemView &);
+ UILabel sLabel;
+ UIButton sButton;
+ PlayerListItem sItemInfo{0, nullptr, nullptr};
+ };
+
+}
+#endif
\ No newline at end of file
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: Player view
- * Author:
- * Create: 2021-07-26
- */
-
-#ifndef PLAYERS_CASE_LIST_ADAPTER_H
-#define PLAYERS_CASE_LIST_ADAPTER_H
-
-#include "components/abstract_adapter.h"
-#include "components/ui_label.h"
-#include "components/ui_label_button.h"
-#include "UiConfig.h"
-
-namespace OHOS {
-class PlayersCaseListAdapter : public AbstractAdapter {
-public:
- PlayersCaseListAdapter() {}
- ~PlayersCaseListAdapter();
- UIView *GetView(UIView *inView, int16_t index) override;
- uint16_t GetCount() override;
-
-private:
- void LabelButtonSet();
- UILabelButton *item{nullptr};
- UIView::OnClickListener *listener{nullptr};
-};
-} // namespace OHOS
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:03\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2025-01-16 18:35:24\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersCaseListAdapter.h\r
+ */\r
+\r
+#ifndef MUSIC_PLAYERS_CASE_LIST_ADAPTER_H\r
+#define MUSIC_PLAYERS_CASE_LIST_ADAPTER_H\r
+\r
+#include "components/abstract_adapter.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_label_button.h"\r
+#include "UiConfig.h"\r
+\r
+namespace OHOS\r
+{\r
+ typedef struct\r
+ {\r
+ int index;\r
+ const char *musicName;\r
+ UIView::OnClickListener *listener;\r
+ } PlayerListItem;\r
+\r
+ class PlayersCaseListAdapter : public AbstractAdapter\r
+ {\r
+ public:\r
+ PlayersCaseListAdapter() {}\r
+ ~PlayersCaseListAdapter();\r
+ UIView *GetView(UIView *inView, int16_t index) override;\r
+ uint16_t GetCount() override;\r
+\r
+ private:\r
+ bool GetCurrentMusicIsPlaying(void);\r
+ UIView::OnClickListener *listener{nullptr};\r
+ };\r
+} // namespace OHOS\r
#endif // PLAYERS_CASE_LIST_ADAPTER_H
\ No newline at end of file
/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: Player view
- * Author:
- * Create: 2021-07-26
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-05 15:20:03
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-12-07 17:03:05
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h
*/
-#ifndef PLAYERS_MODEL_H
-#define PLAYERS_MODEL_H
+#ifndef MUSIC_PLAYERS_MODEL_H
+#define MUSIC_PLAYERS_MODEL_H
-#include <cstdio>
+#include "stdio.h"
#include "gfx_utils/list.h"
#include "UiServersMsg.h"
#include "player.h"
#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 {
using OHOS::Media::Player;
using OHOS::Media::Source;
void ConncetBtResetButton();
void ClearActivateAudioInterrupt(void);
void GetDuration(int64_t &duration);
+public:
+ bool CreateMusicPlayDirectory(const char* path = APP_MUSIC_PATH);
+ std::string GetMusicPlayPath(void);
+ bool GetMusicSource();
+ void SetMusicSource(bool value);
+ void UpdateMusicPlayerList(void);
+ bool GetCurrentMusicIsPlaying(void);
+ void PlayerMusic_StartTimer(uint32_t interval = 1000);
+ void PlayerMusic_StopTimer(void);
+ void SetCircleProgress();
+ void UpdatePlayerProcess(void);
+ void UpdateVolumeValue(void);
+ bool get_avrcp_ct_or_tg_is_connected(void);
+ void set_phone_music_play_state(avrcp_key_operation_t notify);
+ void get_avrcp_ct_get_element_attributes(void);
+ void set_player_state(bool value);
+ bool get_player_state();
+ bool get_a2dp_sink_playing_state(void);
+ void HandPausePhoneMusic(void);
+ void HandPlayPhoneMusic(void);
+ std::string getcurrentplayingmusicname(void);
+ void setcurrentplayingmusicname(std::string name);
+ // /* -------------------------------------------------------------------------- */
+ std::unordered_map<uint16_t, std::pair<std::string,std::string>> &getIdToMusicNameMap(void);
+ std::string getRealMusicNameById(int id);
+ std::string getShowMusicNameById(int id);
+ uint16_t getIdFromMusicName(const std::string &musicName);
+ std::string getHexMusicNameFromMusicName(const std::string &musicName);
+ std::string getMusicNameFromHexMusicName(const std::string &musicName);
+ int getIdToMusicNameMapNumber(void);
+ void showIdToMusicNameMapData(void);
+ int getPreShowView(void);
+ void setPreShowView(int index);
+ void updatePlayProgress();
+ // /* -------------------------------------------------------------------------- */
+private:
+ bool phonePlayButtonState{false};
+ bool musicSourceFlag{false};//音乐来源标志:false:默认为手表音乐,true:手机音乐
+ int64_t playerCurrentTime_{0};
+ int64_t playerMusicDuration_{0};
+ int64_t playerProgressValue_{0};
+ std::unordered_map<uint16_t, std::pair<std::string,std::string>> idToMusicNameMap;//<id,<16进制文件名,UTF-8文件名>>
+ int preshowView{0};
private:
+ PlayersCaseListAdapter *m_PlayersCaseListAdapter{nullptr};
int64_t duration_{0};
bool audioInitStatus{false};
char *sliceId{nullptr};
void SequencePlayout(void);
void RandomPlayout(void);
void NextSong(int16_t index);
- int16_t currentIndex{0};
+ int16_t currentIndex{0}; //当前在播哪一首歌的索引
+ std::string currentplayingmusicname; //当前在播哪一首歌的名称
int16_t playerModel{0};
char *currentSongName{nullptr};
bool isStopAndReset{false};
bool isActivateAudioInterrupt{false};
+ std::string musicPlayPath = APP_MUSIC_PATH; /*音乐播放路径*/
};
}
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-17 14:06:51
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-10-20 18:19:49
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModelC.h
+ */
+
+#ifndef MUSIC_PLAYERS_MODELC_H
+#define MUSIC_PLAYERS_MODELC_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+#include <stdint.h>
+ void stopPlayingMusic(void);
+ void custom_setUpListCase(void);
+ bool canSyncMusic(uint32_t songSize);
+ bool stopPhonePlayingMusic(void);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
\ No newline at end of file
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: Player view
- * Author:
- * Create: 2021-07-26
- */
-
-#ifndef PLAYERS_PRESENTER_H
-#define PLAYERS_PRESENTER_H
-#include "gfx_utils/list.h"
-#include "ohos_types.h"
-#include "components/ui_view.h"
-#include "player.h"
-#include "audio_manager.h"
-#include "audio_base_type.h"
-#include "BluetoothView.h"
-#include "VolumeSettingView.h"
-#include "VolumeSettingPresenter.h"
-#include "BluetoothModel.h"
-#include "BluetoothEarPhoneView.h"
-#include "BluetoothEarListView.h"
-#include "BluetoothOptionsView.h"
-#include "BluetoothReconnectView.h"
-#include "TipsSuccMessageView.h"
-#include "TipsConnFailMessageView.h"
-#include "TipsFailMessageView.h"
-#include "BluetoothDeviceListView.h"
-#include "BluetoothItemView.h"
-
-namespace OHOS {
-using OHOS::Media::Player;
-using namespace OHOS::Media;
-using namespace::Audio;
-using Audio::AudioManager;
-class VolumeSettingView;
-#define DEC_NUM_256 256
-// 点击按钮视图ID
-#define BLUETOOTH_RESCAN_BUTTON "rescanButton"
-#define BLUETOOTH_NEWEQUIPMENT_BUTTON "newEquipmentButton"
-#define BLUETOOTH_CANCELCONNEDREQUEST_BUTTON "cancelConnedRequestButton"
-#define BLUETOOTH_UNPAIR_BUTTON "unpairButton"
-#define BLUETOOTH_OPTIONONE_BUTTON "optionsOneButton"
-#define BLUETOOTH_SETTING_BUTTON "settingButton"
-#define BLUETOOTH_DELETE_BUTTON "deleteButton"
-#define BLUETOOTH_SUCC_BACK_BUTTON "succBackButton"
-#define BLUETOOTH_FAIL_BACK_BUTTON "failBackButton" // 重试按钮
-#define BLUETOOTH_CONN_FAIL_BACK_BUTTON "connfailBackButton"
-// 视图滑动事件ID
-#define BLUETOOTH_EARLIST_VIEW "BluetoothEarListView"
-#define BLUETOOTH_DEVICE_LIST_VIEW "BluetoothDeviceListView"
-#define BLUETOOTH_EAR_PHONE_VIEW "BluetoothEarPhoneView"
-#define BLUETOOTH_OPTIONS_VIEW "BluetoothOptionsView"
-#define BLUETOOTH_RECONNECT_VIEW "BluetoothReconnectView"
-#define BLUETOOTH_VIEW "BluetoothView"
-#define TIPS_SUCC_MESSAGE_VIEW "TipsSuccMessageView"
-#define TIPS_FAIL_MESSAGE_VIEW "TipsFailMessageView"
-#define TIPS_CONN_FAIL_MESSAGE_VIEW "TipsConnFailMessageView"
-
-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];
- int16_t index;
-};
-
-
-class PlayersListGroup {
-public:
- PlayersListGroup() {}
- ~PlayersListGroup();
- static PlayersListGroup *GetInstance()
- {
- static PlayersListGroup instance;
- return &instance;
- }
- void SetUpListCase();
- List<PlayerCaseInfo>& GetCase();
- char *GetCase(int16_t index);
- void AddCase(PlayerCaseInfo testCaseInfo);
-
-private:
- List<PlayerCaseInfo> *playersCaseList_{nullptr};
- int GetAllFiles(List<PlayerCaseInfo> *playersCaseList);
-};
-
-// Button OnClick
-class ButtonOnClickListener : public UIView::OnClickListener {
-public:
- enum VolumeSetState : uint8_t {
- MUTE,
- LOW,
- MEDIUM,
- LOUD,
- };
- ButtonOnClickListener() {}
- ButtonOnClickListener(UIView *view) : view_(view) {}
- ~ButtonOnClickListener();
- static ButtonOnClickListener *GetInstance()
- {
- static ButtonOnClickListener instance;
- return &instance;
- }
- bool OnClick(UIView& view, const ClickEvent& event) override;
-private:
- UIView *view_{nullptr};
- void PlayerButtonOnClick();
- void SoundButtonOnClick();
- void PlayerModelButtonOnClick();
- void OptionsButtonOnClick();
- VolumeSettingView *volumeSettingView{nullptr};
-};
-
-// 播放器回调
-class PlayerCallbackImpl : public OHOS::Media::PlayerCallback {
-public:
- PlayerCallbackImpl();
- ~PlayerCallbackImpl();
- void OnPlaybackComplete();
- void OnError(int32_t errorType, int32_t errorCode);
- void OnInfo(int type, int extra);
- void OnRewindToComplete();
-private:
-};
-
-// 播放器
-class PlayerInterruptListener : public InterruptListener {
-public:
- PlayerInterruptListener();
- ~PlayerInterruptListener();
-
- void SetOwner(std::shared_ptr<Player> player);
- void SetPaused(bool value);
- void SetResumed(bool value);
- void RestFlag();
- bool IsPaused();
- bool IsDelayed();
- bool IsResumed();
- bool IsBeginStopped();
- bool IsEndStopped();
- void OnInterrupt(int32_t type, int32_t hint) override;
- void PausePlayer(void);
- void ResumePlayer(void);
- void StopPlayer(void);
- std::shared_ptr<Player> GetPlayer();
-
-private:
- std::shared_ptr<Player> player_{nullptr};
- bool isPaused_{false};
- bool isDelayed_{false};
- bool isResumed_{false};
- bool isBeginStopped_{false};
- bool isEndStopped_{false};
-};
-
-// 滑动手势
-class PlayerOnDragListener : public UIView::OnDragListener {
-public:
- PlayerOnDragListener();
- ~PlayerOnDragListener();
- bool OnDragEnd(UIView& view, const DragEvent& event) override;
- bool OnDrag(UIView& view, const DragEvent& event) override;
- static PlayerOnDragListener *GetInstance();
-private:
- void OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan);
- void OnDragChangBluetoothView(const DragEvent& event);
- void DropEarPhoneView(const DragEvent& event);
- void DropEarListView(const DragEvent& event);
- void CorrespondingJump(const DragEvent& event, int16_t hideView);
-};
-
-// Bluetooth View redirection
-class BluetoothEarListView;
-class BluetoothOptionsView;
-class BluetoothDeviceListView;
-class JumpView {
-public:
- enum BluetoothJumpViewNum : uint8_t {
- BLUETOOTHEARPHONEVIEW = 0, // 扫描
- BLUETOOTHEARLISTVIEW, // 扫描列表
- BLUETOOTHDEVICELISTVIEW, // 已配对设备列表
- BLUETOOTHEOPTIONSVIEW, // 选择界面
- BLUETOOTHRECONNECTVIEW,
- TIPSSUCCMESSAGEVIEW, // 连接成功
- TIPSCONNFAILMESSAGEVIEW, // 连接失败
- TIPSFAILMESSAGEVIEW,
- BLUETOOTHEVIEW, // 设置界面
- BLUETOOTHEJUMP_MAX,
- };
- JumpView();
- ~JumpView();
- static JumpView *GetInstance();
- void ChangeView(int16_t hideView, int16_t showView);
-private:
- bool ChangeTipsFailMessageView(int16_t hideView, int16_t thisView);
- bool ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView);
- bool ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView);
- bool ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView);
- bool ChangeBluetoothEarListView(int16_t hideView, int16_t thisView);
- bool ChangeBluetoothView(int16_t hideView, int16_t thisView);
- bool ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView);
- bool ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView);
- bool ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView);
- bool CheckViewParam(int16_t hideView, int16_t showView);
- void ResetEarListView(int16_t hideView);
- UIViewGroup *container[BLUETOOTHEJUMP_MAX]{nullptr}; // CONTAINER_NUM :蓝牙耳机连接的9个界面容器
- BluetoothEarPhoneView *bluetoothEarPhoneView{nullptr};
- BluetoothEarListView *bluetoothEarListView{nullptr};
- BluetoothView *bluetoothView{nullptr};
- BluetoothOptionsView *bluetoothOptionsView{nullptr};
- BluetoothDeviceListView *bluetoothDeviceListView{nullptr};
- BluetoothReconnectView *bluetoothReconnectView{nullptr};
- TipsSuccMessageView *tipsSuccMessageView{nullptr};
- TipsConnFailMessageView *tipsConnFailMessageView{nullptr};
- TipsFailMessageView *tipsFailMessageView{nullptr};
- typedef bool (JumpView::*PreprosssChangeView)(int16_t hideView, int16_t thisView);
- PreprosssChangeView preProcessView[BLUETOOTHEJUMP_MAX];
-};
-
-class PlayersPresenter : public UIView::OnClickListener {
-public:
- PlayersPresenter();
- ~PlayersPresenter();
- static PlayersPresenter *GetInstance();
- void OnClickRescanButton(void);
- void OnClickNewEquipmentButton(void);
- void OnClickCancelConnedRequestButton(void);
- void OnClickButtonUnpair(void);
- void OnClickButtonOptionOne(void);
- void OnClickSetting(void);
- void OnClickDelete(void);
- void OnClickSuccBack(void);
- void OnClickConnFailBack(void);
- void OnClickFailBack(void);
- void SetTitleSetText(const char *text);
- void SetPlaybackProgress(int64_t value);
- void SetPlayerState(bool value);
- void PlayerbackReset(void);
- void PlayerHeadsetReset(void);
- void ShowPlayerListGroup(void);
-private:
- bool OnClick(UIView& view, const ClickEvent& event) override;
-};
-} // namespace OHOS
-#endif
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:03\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-10-19 14:33:19\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h\r
+ */\r
+\r
+#ifndef MUSIC_PLAYERS_PRESENTER_H\r
+#define MUSIC_PLAYERS_PRESENTER_H\r
+#include "gfx_utils/list.h"\r
+#include "ohos_types.h"\r
+#include "components/ui_view.h"\r
+#include "player.h"\r
+#include "audio_manager.h"\r
+#include "audio_base_type.h"\r
+#include "MusicPlayerSourceView.h"\r
+#include "VolumeSettingView.h"\r
+#include "VolumeSettingPresenter.h"\r
+#include "BluetoothModel.h"\r
+#include "BluetoothEarPhoneView.h"\r
+#include "BluetoothEarListView.h"\r
+#include "BluetoothOptionsView.h"\r
+#include "BluetoothReconnectView.h"\r
+#include "TipsSuccMessageView.h"\r
+#include "TipsConnFailMessageView.h"\r
+#include "TipsFailMessageView.h"\r
+#include "BluetoothDeviceListView.h"\r
+#include "BluetoothItemView.h"\r
+#include "PlayersCaseListAdapter.h"\r
+namespace OHOS {\r
+using OHOS::Media::Player;\r
+using namespace OHOS::Media;\r
+using namespace::Audio;\r
+using Audio::AudioManager;\r
+class VolumeSettingView;\r
+#define DEC_NUM_256 256\r
+// 点击按钮视图ID\r
+#define BLUETOOTH_RESCAN_BUTTON "rescanButton"\r
+#define BLUETOOTH_NEWEQUIPMENT_BUTTON "newEquipmentButton"\r
+#define BLUETOOTH_CANCELCONNEDREQUEST_BUTTON "cancelConnedRequestButton"\r
+#define BLUETOOTH_UNPAIR_BUTTON "unpairButton"\r
+#define BLUETOOTH_OPTIONONE_BUTTON "optionsOneButton"\r
+#define BLUETOOTH_SETTING_BUTTON "settingButton"\r
+#define BLUETOOTH_DELETE_BUTTON "deleteButton"\r
+#define BLUETOOTH_SUCC_BACK_BUTTON "succBackButton"\r
+#define BLUETOOTH_FAIL_BACK_BUTTON "failBackButton" // 重试按钮\r
+#define BLUETOOTH_CONN_FAIL_BACK_BUTTON "connfailBackButton"\r
+// 视图滑动事件ID\r
+#define BLUETOOTH_EARLIST_VIEW "BluetoothEarListView"\r
+#define BLUETOOTH_DEVICE_LIST_VIEW "BluetoothDeviceListView"\r
+#define BLUETOOTH_EAR_PHONE_VIEW "BluetoothEarPhoneView"\r
+#define BLUETOOTH_OPTIONS_VIEW "BluetoothOptionsView"\r
+#define BLUETOOTH_RECONNECT_VIEW "BluetoothReconnectView"\r
+#define MUSIC_PLAYER_SOURCE_VIEW "MusicPlayerSourceView" //音乐来源视图的滑动监听\r
+#define MUSIC_PLAYER_LIST_VIEW "MusicPlayerListView" //音乐列表的滑动监听\r
+#define MUSIC_PLAYER_DELETE_VIEW "MusicPlayerDeleteView" //音乐删除视图的滑动监听\r
+#define MUSIC_PLAYER_DELETE_VIEW "MusicPlayerDeleteView" //音乐删除视图的滑动监听\r
+#define MUISC_PLAYER_BLUETOOTH_DISCONN_VIEW "MusicPlayerBluetoothDisConView" //蓝牙未连接视图的滑动监听\r
+#define MUISC_PLAYER_BLUETOOTH_CONNECTFAILED_VIEW "MusicPlayerBluetoothConncetFailedView" //蓝牙连接失败视图的滑动监听\r
+#define MUISC_PLAYER_TIP_VIEW "MusicPlayerTipView" //音乐播放器Tip视图的滑动监听\r
+#define TIPS_SUCC_MESSAGE_VIEW "TipsSuccMessageView" \r
+#define TIPS_FAIL_MESSAGE_VIEW "TipsFailMessageView"\r
+#define TIPS_CONN_FAIL_MESSAGE_VIEW "TipsConnFailMessageView"\r
+\r
+static constexpr uint8_t FONT_THIRTY_SIZE = 30; // 30:字体大小\r
+static constexpr uint8_t FONT_FORTY_SIZE = 40; // 40:字体大小\r
+\r
+struct PlayerCaseInfo {\r
+ char sliceId[DEC_NUM_256]; /*音乐名*/\r
+ int16_t index;\r
+};\r
+\r
+\r
+class PlayersListGroup {\r
+public:\r
+ PlayersListGroup() {}\r
+ ~PlayersListGroup();\r
+ static PlayersListGroup *GetInstance()\r
+ {\r
+ static PlayersListGroup instance;\r
+ return &instance;\r
+ }\r
+ void SetUpListCase();\r
+ List<PlayerCaseInfo>& GetCase();\r
+ char *GetCase(int16_t index);\r
+ void AddCase(PlayerCaseInfo testCaseInfo);\r
+ std::string hex_to_string(const std::string &hex_str);\r
+\r
+private:\r
+ List<PlayerCaseInfo> *playersCaseList_{nullptr};\r
+ int GetAllFiles(List<PlayerCaseInfo> *playersCaseList);\r
+ std::list<PlayerCaseInfo> playersList_; //音乐列表\r
+ int GetAllFiles(std::list<PlayerCaseInfo> &playersList);\r
+ void sortPlayersCaseList(std::list<PlayerCaseInfo>* playersCaseList);\r
+ std::string filename;\r
+ std::string hexfilename;\r
+};\r
+\r
+// Button OnClick\r
+class ButtonOnClickListener : public UIView::OnClickListener {\r
+public:\r
+ enum VolumeSetState : uint8_t {\r
+ MUTE,\r
+ LOW,\r
+ MEDIUM,\r
+ LOUD,\r
+ };\r
+ ButtonOnClickListener() {}\r
+ ~ButtonOnClickListener();\r
+ bool OnClick(UIView& view, const ClickEvent& event) override;\r
+private:\r
+ void PlayerButtonOnClick();\r
+ void NextButtonOnClick();\r
+ void PreButtonOnClick();\r
+ void SoundButtonOnClick();\r
+ void PlayerModelButtonOnClick();\r
+ void OptionsButtonOnClick();\r
+ void MusicListButtonOnClick();\r
+ void MusicDeleteButtonOnClick();\r
+};\r
+\r
+// 播放器回调\r
+class PlayerCallbackImpl : public OHOS::Media::PlayerCallback {\r
+public:\r
+ PlayerCallbackImpl();\r
+ ~PlayerCallbackImpl();\r
+ void OnPlaybackComplete();\r
+ void OnError(int32_t errorType, int32_t errorCode);\r
+ void OnInfo(int type, int extra);\r
+ void OnRewindToComplete();\r
+private:\r
+};\r
+\r
+// 播放器\r
+class PlayerInterruptListener : public InterruptListener {\r
+public:\r
+ PlayerInterruptListener();\r
+ ~PlayerInterruptListener();\r
+\r
+ void SetOwner(std::shared_ptr<Player> player);\r
+ void SetPaused(bool value);\r
+ void SetResumed(bool value);\r
+ void RestFlag();\r
+ bool IsPaused();\r
+ bool IsDelayed();\r
+ bool IsResumed();\r
+ bool IsBeginStopped();\r
+ bool IsEndStopped();\r
+ void OnInterrupt(int32_t type, int32_t hint) override;\r
+ void PausePlayer(void);\r
+ void ResumePlayer(void);\r
+ void StopPlayer(void);\r
+ std::shared_ptr<Player> GetPlayer();\r
+\r
+private:\r
+ std::shared_ptr<Player> player_{nullptr};\r
+ bool isPaused_{false};\r
+ bool isDelayed_{false};\r
+ bool isResumed_{false};\r
+ bool isBeginStopped_{false};\r
+ bool isEndStopped_{false};\r
+};\r
+\r
+// 滑动手势\r
+class PlayerOnDragListener : public UIView::OnDragListener {\r
+public:\r
+ PlayerOnDragListener();\r
+ ~PlayerOnDragListener();\r
+ bool OnDrag(UIView& view, const DragEvent& event) override;\r
+ bool OnDragEnd(UIView& view, const DragEvent& event) override;\r
+ static PlayerOnDragListener *GetInstance();\r
+private:\r
+ void OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan);\r
+ void OnDragChangMusicPlayerSourceView(const DragEvent& event);\r
+ void OnDragChangMusicPlayerListView(const DragEvent& event);\r
+ void OnDragChangMusicPlayerDeleteView(const DragEvent& event);\r
+ void OnDragChangMusicPlayerBTDisConnectView(const DragEvent& event);\r
+ void OnDragChangMusicPlayerBTConnectFailedView(const DragEvent& event);\r
+ void OnDragChangMusicPlayerTipView(const DragEvent& event);\r
+ void DropEarPhoneView(const DragEvent& event);\r
+ void DropEarListView(const DragEvent& event);\r
+ void CorrespondingJump(const DragEvent& event, int16_t hideView);\r
+ bool X_DRAG_FLAG{false};\r
+};\r
+\r
+// Bluetooth View redirection\r
+class BluetoothEarListView;\r
+class BluetoothOptionsView;\r
+class BluetoothDeviceListView;\r
+class JumpView {\r
+public:\r
+ enum BluetoothJumpViewNum : uint8_t {\r
+ BLUETOOTHEARPHONEVIEW = 0, // 扫描\r
+ BLUETOOTHEARLISTVIEW, // 扫描列表\r
+ BLUETOOTHDEVICELISTVIEW, // 已配对设备列表\r
+ BLUETOOTHEOPTIONSVIEW, // 选择界面\r
+ BLUETOOTHRECONNECTVIEW,\r
+ TIPSSUCCMESSAGEVIEW, // 连接成功\r
+ TIPSCONNFAILMESSAGEVIEW, // 连接失败\r
+ TIPSFAILMESSAGEVIEW,\r
+ BLUETOOTHEVIEW, // 蓝牙视图\r
+ BLUETOOTHEJUMP_MAX,\r
+ };\r
+ JumpView();\r
+ ~JumpView();\r
+ static JumpView *GetInstance();\r
+ void ChangeView(int16_t hideView, int16_t showView);\r
+private:\r
+ bool ChangeTipsFailMessageView(int16_t hideView, int16_t thisView);\r
+ bool ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView);\r
+ bool ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView);\r
+ bool ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView);\r
+ bool ChangeBluetoothEarListView(int16_t hideView, int16_t thisView);\r
+ bool ChangeBluetoothView(int16_t hideView, int16_t thisView);\r
+ bool ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView);\r
+ bool ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView);\r
+ bool ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView);\r
+ bool CheckViewParam(int16_t hideView, int16_t showView);\r
+ void ResetEarListView(int16_t hideView);\r
+ UIViewGroup *container[BLUETOOTHEJUMP_MAX]{nullptr}; // CONTAINER_NUM :蓝牙耳机连接的9个界面容器\r
+ BluetoothEarPhoneView *bluetoothEarPhoneView{nullptr};\r
+ BluetoothEarListView *bluetoothEarListView{nullptr};\r
+ MusicPlayerSourceView *bluetoothView{nullptr};\r
+ BluetoothOptionsView *bluetoothOptionsView{nullptr};\r
+ BluetoothDeviceListView *bluetoothDeviceListView{nullptr};\r
+ BluetoothReconnectView *bluetoothReconnectView{nullptr};\r
+ TipsSuccMessageView *tipsSuccMessageView{nullptr};\r
+ TipsConnFailMessageView *tipsConnFailMessageView{nullptr};\r
+ TipsFailMessageView *tipsFailMessageView{nullptr};\r
+ typedef bool (JumpView::*PreprosssChangeView)(int16_t hideView, int16_t thisView);\r
+ PreprosssChangeView preProcessView[BLUETOOTHEJUMP_MAX];\r
+};\r
+\r
+class PlayersPresenter : public UIView::OnClickListener {\r
+public:\r
+ PlayersPresenter();\r
+ ~PlayersPresenter();\r
+ static PlayersPresenter *GetInstance();\r
+ void OnClickRescanButton(void);\r
+ void OnClickNewEquipmentButton(void);\r
+ void OnClickCancelConnedRequestButton(void);\r
+ void OnClickButtonUnpair(void);\r
+ void OnClickButtonOptionOne(void);\r
+ void OnClickSetting(void);\r
+ void OnClickDelete(void);\r
+ void OnClickSuccBack(void);\r
+ void OnClickConnFailBack(void);\r
+ void OnClickFailBack(void);\r
+ void SetPlaybackProgress(int64_t value);\r
+ void SetPlayerState(bool value);\r
+ void SetPhonePlayerState(bool value);\r
+ void PlayerbackReset(void);\r
+ void PlayerHeadsetReset(void);\r
+private:\r
+ bool OnClick(UIView& view, const ClickEvent& event) override;\r
+};\r
+} // namespace OHOS\r
+#endif\r
/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: Player view\r
- * Author:\r
- * Create: 2021-07-26\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-08-05 15:20:03\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-12-07 17:06:06\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersView.h\r
*/\r
\r
-#ifndef PLAYERS_VIEW_H\r
-#define PLAYERS_VIEW_H\r
+#ifndef MUSIC_PLAYERS_VIEW_H\r
+#define MUSIC_PLAYERS_VIEW_H\r
\r
#include <string>\r
#include "components/ui_image_view.h"\r
#include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
#include "components/root_view.h"\r
#include "components/ui_view_group.h"\r
#include "components/ui_button.h"\r
#include "components/ui_circle_progress.h"\r
#include "components/ui_checkbox.h"\r
#include "components/ui_list.h"\r
+\r
#include "font/ui_font_bitmap.h"\r
#include "font/ui_font.h"\r
#include "graphic_config.h"\r
#include "components/ui_card_page.h"\r
-#include "PlayersPresenter.h"\r
-\r
-namespace OHOS {\r
+#include "player/include/PlayersPresenter.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "PlayerListDelSongView.h"\r
+#include "common/image_cache_manager.h"\r
+#include "VolumeSettingView.h"\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
+#include "player/include/MusicPlayerTipView.h"\r
+namespace OHOS\r
+{\r
#define PLAY_PROGRESS_MIN 0\r
#define PLAY_PROGRESS_MAX 100\r
-class JumpView;\r
-class PlayersPresenter;\r
-class PlayersCaseListAdapter;\r
-class PlayersView : public UICardPage {\r
-public:\r
- PlayersView();\r
- ~PlayersView() override;\r
- static PlayersView *GetInstance(void);\r
- bool InitView(void);\r
- void PreLoad(void) override;\r
- void UnLoad(void) override;\r
- bool OnDragEvent(const DragEvent& event) override;\r
+ class VolumeSettingView;\r
+ class JumpView;\r
+ class PlayersPresenter;\r
+ class PlayersCaseListAdapter;\r
+ class PlayersView : public UICardPage\r
+ {\r
+ public:\r
+ struct ButtonConfig\r
+ {\r
+ int16_t x;\r
+ int16_t y;\r
+ int16_t w;\r
+ int16_t h;\r
+ UIView::OnClickListener *clickListener;\r
+ };\r
+ enum MUSICPLAYERVIEWID : uint8_t\r
+ {\r
+ MAIN_MUSICPLAYER_VIEW = 0, // 音乐播放器主视图\r
+ MUSIC_SOURCE_VIEW, // 音乐来源视图\r
+ MUSIC_VOLUME_CONTROL_VIEW, // 音量调节视图\r
+ MUSIC_LIST_VIEW, // 音乐列表视图\r
+ MUSIC_DELETE_VIEW, // 音乐删除视图\r
+ MUSIC_BLUETOOTH_DISCONN_VIEW, // 音乐蓝牙未连接视图\r
+ MUSIC_BT_CONNECTFAILED_VIEW, // 音乐蓝牙连接失败视图\r
+ MUISC_CONNECTING, // 连接动画视图\r
+ MUISC_BLUETOOTH_HEADSET_LIST_VIEW, // 蓝牙耳机列表视图\r
+ MUSIC_CONNECTED_BLUETOOTH_HEADSET_VIEW, // 已连接的蓝牙耳机设备视图\r
+ MUSIC_PHONE_BLUETOOTH_CONNECT_FAIL_VIEW, // 与手机蓝牙连接失败视图\r
+ MUSIC_PLAYER_TIP_VIEW, // 音乐播放器Tip视图\r
+ MUSICPLAYERJUMPVIEWID_MAX,\r
+ };\r
+ PlayersView();\r
+ virtual ~PlayersView();\r
+ static PlayersView *GetInstance(void);\r
+ bool InitView(void);\r
+ void PreLoad(void) override;\r
+ void UnLoad(void) override;\r
+ void CreateJumpView(void);\r
+ void CreatePlayersPresenter(void);\r
+ void CreatePlayerOnDragListener(void);\r
+ void SetPlayerButtonState(UICheckBox::UICheckBoxState state);\r
+ void PlayerModelButtonSetSrc(uint32_t playMode);\r
+ void ShowUpListView(void);\r
+ int16_t GetVolumeRank(void);\r
+ void SetVolumeRank(int16_t value);\r
+ void SetVolumeAddOne(void);\r
+ void SetPlayerCtrVolume(float leftVolume, float rightVolume);\r
+\r
+ UIButton *GetMusicListButton(void);\r
+ UIButton *GetPreButton(void);\r
+ UIButton *GetNextButton(void);\r
+ UIButton *GetPlayerModelButton(void);\r
+ UIButton *GetOptionsButton(void);\r
+ UIButton *GetSoundButton(void);\r
+ UICheckBox *GetPlayerButton(void);\r
+ PlayersCaseListAdapter *GetMusicListAdapter(void);\r
+\r
+ UIList *GetMusicListList(void);\r
+ void RefreshMusicListList(void);\r
+ UICircleProgress *GetPlaybackProgress(void);\r
+ UICheckBox::UICheckBoxState GetPlayerButtonState(void);\r
+\r
+ void UpdatePlayerView(void);\r
+ void UpdateMusicListStatus(void);\r
+ void OnClickBackKeyToMainMusicPlayerView(void);\r
+ void StopCurPlayingMusic();\r
+ void UpdateVolumeValue(void);\r
+ void initPlayProgress(void);\r
+\r
+ VolumeSettingView *GetVolumeSettingView();\r
+ PlayerListDelSongView *GetPlayerListDelSongView();\r
+ UIViewGroup *GetPlayerGroupView(int index);\r
+ static bool LoadPlayerImage(UIImageView *View, uint32_t resId);\r
+ void ChangeView(int16_t hideView, int16_t showView);\r
+ bool ChangeToMainMusicPlayerView(int16_t thisView);\r
+ bool ChangeToMusicSourceView(int16_t thisView);\r
+ bool ChangeToVolumeControlView(int16_t thisView);\r
+ bool ChangeToMusicListView(int16_t thisView);\r
+ bool ChangeToMusicDeleteView(int16_t thisView);\r
+ bool ChangeToMusicBluetoothDisConnectView(int16_t thisView);\r
+ bool ChangeToMusicBluetoothConnectFailedView(int16_t thisView);\r
+ bool ChangeToMusicConnectingView(int16_t thisView);\r
+ bool ChangeToMusicPlayerTipView(int16_t thisView);\r
+\r
+ private:\r
+ UIButton *PlayerViewButtonInit(ButtonConfig &buttonconfig);\r
+ bool CreatePlayerOnClickListener(void);\r
+ bool CreatePlayerImageView(void);\r
+ bool CreatePlayerLabelView(void);\r
+ bool CreatePlayerProgressView(void);\r
+ bool CreatePlayerCheckBoxButtonView(void);\r
+ bool CreatePlayerButtonView(void);\r
+ bool CreatePlayerScrollView(void);\r
+ bool CreatePlayerView(void);\r
+ UIViewGroup *CreateMusicListGroupView(void);\r
+ void ClearAll(void);\r
+ bool LoadPlayerButtonImage(UIButton *button, uint32_t resId);\r
+ bool LoadPlayerCheckBoxButtonImage(UICheckBox *button, uint32_t resId, uint32_t hlResId);\r
+ bool PreLoadPlayerModeImageRes();\r
+ bool UnLoadPlayerModeImageRes();\r
+ void PreLoadPlayerImageRes(void);\r
+ void UnLoadPlayerImageRes(void);\r
+ bool ClickFunc(int16_t interface);\r
+ bool CheckViewParam(int16_t hideView, int16_t showView);\r
+ void DestroyTempView(int16_t hideView);\r
+ void MusicSourceLabelSetText(int textId);\r
+ void MusicListButtonIsSetVisible(bool status);\r
+ void PhoneMusicConnectStatusLabelSetText(int textId);\r
+ void PhoneMusicConnectStatusLabelIsSetVisible(bool status);\r
+ void PhoneMusicConnectStatusLabelColor(bool state);\r
+ void OptionsButtonSetImageStyle(ImageInfo *image);\r
+ void SetMusicPlayerButtonIsTouchable(bool musicSourceType);\r
+\r
+ private:\r
+ VolumeSettingView *volumeSettingView{nullptr}; // 声音设置\r
+ MusicPlayerSourceView *musicPlayerSourceView{nullptr}; // 音乐来源\r
+ PlayerListDelSongView *playerListDelSongView{nullptr}; // 音乐删除视图\r
+ UIViewGroup *musicListGroupView{nullptr}; // 音乐列表视图\r
+ MusicPlayerBluetoothDisConView *musicPlayerBluetoothDisConView{nullptr}; // 蓝牙未连接视图\r
+ MusicPlayerBTConnectFailedView *musicPlayerBTConnectFailedView{nullptr}; // 蓝牙连接失败视图\r
+ AiVoiceConnectingView *musicPlayerConnectingView{nullptr}; // 连接动画\r
+ MusicPlayerTipView * musicPlayerTipView{nullptr}; // 音乐播放器Tip视图\r
+\r
+ private:\r
+ UIView::OnClickListener *clickListener{nullptr};\r
+ UIViewGroup *group[MUSICPLAYERJUMPVIEWID_MAX]{nullptr};\r
+ UIImageView *musicPlayerBackGround{nullptr}; // 音乐播放器背景\r
+ UIImageView *elipse{nullptr}; // 放复选框的绿色椭圆图片\r
+ UICircleProgress *playbackProgress{nullptr}; // 音乐播放进度条\r
+ UICheckBox *play_or_pause_Button{nullptr}; // 音乐播放和暂停复选按钮\r
+ UIButton *music_list_button{nullptr}; // 音乐列表按钮\r
+ UIButton *musicSourceButton{nullptr}; // 音乐来源按钮\r
+ UIButton *preMusicButton{nullptr}; // 上一首音乐按钮\r
+ UIButton *nextMusicButton{nullptr}; // 下一首音乐按钮\r
+ UIButton *playerModelButton{nullptr}; // 音乐播放模式按钮\r
+ UIButton *soundButton{nullptr}; // 调节声音按钮\r
+ UILabelExt *MusciSourceLabel{nullptr}; // 音乐来源标签\r
+ UILabelExt *PhoneMusicConnectStatusLabel{nullptr}; // 手机音乐连接状态标签\r
+\r
+ /* -------------------------------- 音乐列表相关组件 -------------------------------- */\r
+ UIScrollView *musicListScrollView{nullptr}; // 音乐列表容器视图\r
+ UILabelExt *musicListTitle{nullptr}; // 音乐列表的标题\r
+ UILabelExt *musicListIsEmptyLabel{nullptr}; // 音乐列表为空的标签\r
+ UIImageView *musicListIsEmptyImage{nullptr}; // 音乐列表为空的图片\r
+ UIList *musicList{nullptr}; // 音乐列表\r
+ PlayersCaseListAdapter *musicAdapter{nullptr}; // 音乐列表适配器\r
+ /* -------------------------------------------------------------------------- */\r
\r
- void SetUpLabel(const char *title, int16_t x, int16_t y);\r
- void ShowUpListView(void);\r
- void TitleSetText(const char *text);\r
- void PlayerModelButtonSetSrc(uint32_t playMode);\r
- int16_t GetVolumeRank(void);\r
- void SetVolumeRank(int16_t value);\r
- void SetVolumeAddOne(void);\r
- UILabelButton *GetBackButton(void);\r
- UIButton *GetPullButton(void);\r
- UIButton *GetOptionsButton(void);\r
- UIButton *GetPreButton(void);\r
- UIButton *GetNextButton(void);\r
- UILabel *GetTitleLabel(void);\r
- UICheckBox *GetPlayerButton(void);\r
- UIImageView *GetSoundButton(void);\r
- UIImageView *GetPlayerModelButton(void);\r
- UICircleProgress *GetPlaybackProgress(void);\r
- UICheckBox::UICheckBoxState GetPlayerButtonState(void);\r
- void SetPlayerButtonState(UICheckBox::UICheckBoxState state);\r
- UIList *GetPlayerList(void);\r
- void SetPlayerListGroupStatus(bool status);\r
- void SetPlayerCtrVolume(float leftVolume, float rightVolume);\r
- void CreateJumpView(void);\r
- void CreatePlayersPresenter(void);\r
- void CreatePlayerOnDragListener(void);\r
-private:\r
- bool InitBackGround(void);\r
- void TearDownView();\r
- void CreatePlayerMusicName();\r
- int ShowUpCheckBoxButton();\r
- int ShowUpButton();\r
- int ShowUpButtonOptions();\r
- int ShowUpButtonView();\r
- int ShowUpCircleProgress();\r
- bool ShowUpPlayerMode();\r
- void SetUpButton(UIButton *btn, const Point& point, int16_t width, int16_t height,\r
- UIView::OnClickListener *listener);\r
- bool LoadPlayerImage(UIImageView *View, uint32_t resId);\r
- bool LoadPlayerImage(UIButton *button, uint32_t resId, uint32_t hlResId);\r
+ JumpView *jumpView{nullptr};\r
+ PlayersPresenter *playersPresenter{nullptr};\r
+ PlayerOnDragListener *playerOnDragListener{nullptr};\r
\r
- UIImageView *backGround{nullptr};\r
- UILabel *subTitleLabel{nullptr};\r
- PlayersCaseListAdapter *adapterText{nullptr};\r
- UILabel *titleLabel{nullptr};\r
- UILabelButton *backButton{nullptr};\r
- UIButton *pullButton{nullptr};\r
- UIButton *optionsButton{nullptr};\r
- UIButton *preButton{nullptr};\r
- UIButton *nextButton{nullptr};\r
- UIViewGroup *listGroup{nullptr};\r
- UIImageView *soundButton{nullptr};\r
- UIImageView *playerModelButton{nullptr};\r
- UICheckBox *playerButton{nullptr};\r
- UICircleProgress *playbackProgress{nullptr};\r
- int16_t volumeSet{0};\r
- UIList *list{nullptr};\r
- JumpView *jumpView{nullptr};\r
- PlayersPresenter *playersPresenter{nullptr};\r
- PlayerOnDragListener *playerOnDragListener{nullptr};\r
- uint8_t state_ = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
- UIView::OnClickListener *playerlistener{nullptr};\r
- UIView::OnClickListener *soundlistener{nullptr};\r
- UIView::OnClickListener *nextlistener{nullptr};\r
- UIView::OnClickListener *prelistener{nullptr};\r
- UIView::OnClickListener *modellistener{nullptr};\r
- UIView::OnClickListener *optionslistener{nullptr};\r
- bool viewiInitStatus{false};\r
-};\r
+ int16_t volumeSet{0}; // 声音值的大小设置\r
+ bool viewiInitStatus{false};\r
+ bool resLoadStatus{false};\r
+ };\r
} // namespace OHOS\r
-#endif // MAIN_VIEW_H\r
+#endif\r
+++ /dev/null
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bluetooth view 设置页面\r
- * Create: 2021-09-5\r
- */\r
-#include "BluetoothView.h"\r
-#include "PlayersView.h"\r
-#include "UiConfig.h"\r
-#include "BluetoothEarPhoneView.h"\r
-#include "PlayersPresenter.h"\r
-\r
-namespace OHOS {\r
-static BluetoothView *g_bluetoothView{nullptr};\r
-static constexpr uint16_t TEXT_WIDTH = 155;\r
-static constexpr uint16_t TEXT_HEIGHT = 40;\r
-static constexpr uint16_t HEIGHT = 55;\r
-static constexpr uint16_t HEIGHT2 = 75;\r
-static constexpr uint16_t WIDTH = 55;\r
-static constexpr uint16_t WIDTH2 = 75;\r
-static constexpr uint16_t BUTTON_WIDTH = 180;\r
-static constexpr uint16_t BUTTON_HEIGHT = 40;\r
-\r
-constexpr uint16_t BLUETOOTH_OK = 0;\r
-constexpr int16_t BLUETOOTH_ERROR = (-1);\r
-\r
-static constexpr uint16_t IMAGE_X = 50;\r
-static constexpr uint16_t IMAGE_Y = 98;\r
-static constexpr uint16_t IMAGE_Y2 = 187;\r
-static constexpr uint16_t IMAGE_Y3 = 278;\r
-static constexpr uint16_t STEP_LABEL_X = 155;\r
-static constexpr uint16_t BUTTON_X = 320;\r
-static constexpr uint16_t BUTTON_X2 = 313;\r
-static constexpr uint16_t BUTTON_X3 = 135;\r
-static constexpr uint16_t BUTTON_Y = 104;\r
-static constexpr uint16_t BUTTON_Y2 = 194;\r
-static constexpr uint16_t BUTTON_Y3 = 278;\r
-static constexpr uint16_t BUTTON_Y4 = 402;\r
-static constexpr uint16_t STEP_LABEL_Y = 108;\r
-static constexpr uint16_t STEP_LABEL_Y2 = 199;\r
-static constexpr uint16_t STEP_LABEL_Y3 = 290;\r
-\r
-BluetoothView::BluetoothView()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothView::BluetoothView");\r
- g_bluetoothView = this;\r
-}\r
-\r
-BluetoothView::~BluetoothView()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothView::~BluetoothView");\r
- group->RemoveAll();\r
- UIView::OnClickListener *click = watchButton->GetOnClickListener();\r
- if (click != nullptr) {\r
- delete click;\r
- }\r
- delete watchButton;\r
- watchButton = nullptr;\r
- click = phoneButton->GetOnClickListener();\r
- if (click != nullptr) {\r
- delete click;\r
- }\r
- delete phoneButton;\r
- phoneButton = nullptr;\r
- delete settingButton;\r
- settingButton = nullptr;\r
- click = deleteButton->GetOnClickListener();\r
- if (click != nullptr) {\r
- delete click;\r
- }\r
- click = nullptr;\r
- delete deleteButton;\r
- deleteButton = nullptr;\r
- delete watchLabel;\r
- watchLabel = nullptr;\r
- delete phoneLabel;\r
- phoneLabel = nullptr;\r
- delete bluetoothLabel;\r
- bluetoothLabel = nullptr;\r
- delete watchImage;\r
- watchImage = nullptr;\r
- delete phoneImage;\r
- phoneImage = nullptr;\r
- delete bluetoothImage;\r
- bluetoothImage = nullptr;\r
- delete group;\r
- group = nullptr;\r
- g_bluetoothView = nullptr;\r
-}\r
-\r
-BluetoothView *BluetoothView::GetInstance(void)\r
-{\r
- return g_bluetoothView;\r
-}\r
-\r
-UIButton *BluetoothView::GetSettingButton(void)\r
-{\r
- return settingButton;\r
-}\r
-\r
-UILabelButton *BluetoothView::GetDeleteButton(void)\r
-{\r
- return deleteButton;\r
-}\r
-\r
-UIRadioButton *BluetoothView::GetWatchButton(void)\r
-{\r
- return watchButton;\r
-}\r
-\r
-UIRadioButton *BluetoothView::GetPhoneButton(void)\r
-{\r
- return phoneButton;\r
-}\r
-\r
-// Button OnClick\r
-class BluetoothOnClickListener : public UIView::OnClickListener {\r
-public:\r
- explicit BluetoothOnClickListener(UIView* view) : view_(view) {}\r
- ~BluetoothOnClickListener() {}\r
-\r
- bool OnClick(UIView& view, const ClickEvent& event) override\r
- {\r
- UNUSED(view);\r
- UNUSED(event);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothOnClickListener OnClick");\r
- BluetoothView *bluetoothView = BluetoothView::GetInstance();\r
- if (bluetoothView == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView is nullptr");\r
- return false;\r
- }\r
- if (view_ == (UIView *)bluetoothView->GetWatchButton()) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "watchButton OnClick");\r
- } else if (view_ == (UIView *)bluetoothView->GetPhoneButton()) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "phoneButton OnClick");\r
- } else if (view_ == (UIView *)bluetoothView->GetSettingButton()) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "settingButton OnClick");\r
- JumpView *jumpView = JumpView::GetInstance();\r
- if (jumpView == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
- return false;\r
- }\r
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW,\r
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);\r
- } else if (view_ == (UIView *)bluetoothView->GetDeleteButton()) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "deleteButton OnClick");\r
- }\r
- return true;\r
- }\r
-private:\r
- UIView *view_ = nullptr;\r
-};\r
-\r
-void BluetoothView::SetUpButton(UILabelButton *btn, const Point& point,\r
- int16_t width, int16_t height, UIView::OnClickListener *listener)\r
-{\r
- if (btn == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "btn null!");\r
- return;\r
- }\r
- btn->SetPosition(point.x, point.y, width, height);\r
- btn->SetOnClickListener(listener);\r
-}\r
-\r
-int BluetoothView::LoadRadioButton()\r
-{\r
- if (watchButton == nullptr) {\r
- watchButton = new UIRadioButton("MusicCategory");\r
- if (watchButton == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchButton UIRadio new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- }\r
- if (phoneButton == nullptr) {\r
- phoneButton = new UIRadioButton("MusicCategory");\r
- if (phoneButton == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneButton UIRadio new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- }\r
- UIView::OnClickListener *listener1 = new BluetoothOnClickListener(reinterpret_cast<UIView*>(watchButton));\r
- if (listener1 == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener1 new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- watchButton->SetPosition(BUTTON_X, BUTTON_Y, WIDTH, HEIGHT);\r
- watchButton->SetOnClickListener(listener1);\r
- watchButton->SetTouchable(false);\r
- UIView::OnClickListener *listener2 = new BluetoothOnClickListener(reinterpret_cast<UIView*>(phoneButton));\r
- if (listener2 == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener2 new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- phoneButton->SetPosition(BUTTON_X, BUTTON_Y2, WIDTH, HEIGHT);\r
- phoneButton->SetOnClickListener(listener2);\r
- phoneButton->SetTouchable(false);\r
- return BLUETOOTH_OK;\r
-}\r
-\r
-int BluetoothView::LoadLabelButton()\r
-{\r
- struct Point pointBtn;\r
- // 跳转按钮\r
- pointBtn.x = BUTTON_X2;\r
- pointBtn.y = BUTTON_Y3;\r
- UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::PlayersPresenter::GetInstance();\r
- if (clickListener == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener GetInstance fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- settingButton->SetPosition(pointBtn.x, pointBtn.y, WIDTH, HEIGHT);\r
- settingButton->SetOnClickListener(clickListener);\r
- settingButton->SetImageSrc(PNG_SETTTING_BUTTON_IMAGE, PNG_SETTTING_BUTTON_IMAGE);\r
- settingButton->SetViewId(BLUETOOTH_SETTING_BUTTON);\r
- // 删除按钮\r
- pointBtn.x = BUTTON_X3;\r
- pointBtn.y = BUTTON_Y4;\r
- UIView::OnClickListener *listener4 = new BluetoothOnClickListener(reinterpret_cast<UIView*>(deleteButton));\r
- if (listener4 == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "listener4 new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- SetUpButton(deleteButton, pointBtn, BUTTON_WIDTH, BUTTON_HEIGHT, listener4);\r
- deleteButton->SetText("删除音乐");\r
- deleteButton->SetVisible(false);\r
- return BLUETOOTH_OK;\r
-}\r
-\r
-int BluetoothView::LoadButtonView()\r
-{\r
- if (LoadRadioButton() == BLUETOOTH_ERROR) {\r
- return BLUETOOTH_ERROR;\r
- }\r
- if (settingButton == nullptr) {\r
- settingButton = new UIButton();\r
- if (settingButton == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "settingButton UIButton new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- }\r
- if (deleteButton == nullptr) {\r
- deleteButton = new UILabelButton();\r
- if (deleteButton == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "deleteButton UILabelButton new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- }\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadButtonView");\r
- if (LoadLabelButton() == BLUETOOTH_ERROR) {\r
- return BLUETOOTH_ERROR;\r
- }\r
- return BLUETOOTH_OK;\r
-}\r
-\r
-int BluetoothView::LoadLabel(void)\r
-{\r
- // 标题文本\r
- if (watchLabel == nullptr) {\r
- watchLabel = new UILabel();\r
- if (watchLabel == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchLabel new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- }\r
- watchLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);\r
- watchLabel->SetText("手表音乐");\r
- watchLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
- if (phoneLabel == nullptr) {\r
- phoneLabel = new UILabel();\r
- if (phoneLabel == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneLabel new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- }\r
- phoneLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y2, TEXT_WIDTH, TEXT_HEIGHT);\r
- phoneLabel->SetText("手机音乐");\r
- phoneLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
- if (bluetoothLabel == nullptr) {\r
- bluetoothLabel = new UILabel();\r
- if (bluetoothLabel == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothLabel new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- }\r
- bluetoothLabel->SetPosition(STEP_LABEL_X, STEP_LABEL_Y3, TEXT_WIDTH, TEXT_HEIGHT);\r
- bluetoothLabel->SetText("蓝牙音乐");\r
- bluetoothLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_THIRTY_SIZE);\r
- return BLUETOOTH_OK;\r
-}\r
-\r
-int BluetoothView::LoadImage(void)\r
-{\r
- // 图片图标\r
- watchImage = new UIImageView();\r
- if (watchImage == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchImage new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- watchImage->SetPosition(IMAGE_X, IMAGE_Y, WIDTH2, HEIGHT2);\r
- // watchImage->SetSrc(PNG_WATCH_IMAGE);\r
-\r
- phoneImage = new UIImageView();\r
- if (phoneImage == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- phoneImage->SetPosition(IMAGE_X, IMAGE_Y2, WIDTH2, HEIGHT2);\r
- // phoneImage->SetSrc(PNG_PHONE_IMAGE);\r
-\r
- bluetoothImage = new UIImageView();\r
- if (bluetoothImage == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothImage new fail");\r
- return BLUETOOTH_ERROR;\r
- }\r
- bluetoothImage->SetPosition(IMAGE_X, IMAGE_Y3, WIDTH2, HEIGHT2);\r
- // bluetoothImage->SetSrc(PNG_BLUETOOTH_IMAGE);\r
- return BLUETOOTH_OK;\r
-}\r
-\r
-UIViewGroup *BluetoothView::LoadBluetoothView()\r
-{\r
- if (group == nullptr) {\r
- group = new UIViewGroup();\r
- if (group == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
- return nullptr;\r
- }\r
- }\r
- group->SetPosition(0, 0);\r
- group->SetWidth(HORIZONTAL_RESOLUTION);\r
- group->SetHeight(VERTICAL_RESOLUTION);\r
- LoadButtonView();\r
- LoadLabel();\r
- LoadImage();\r
-\r
- group->Add(watchLabel);\r
- group->Add(phoneLabel);\r
- group->Add(bluetoothLabel);\r
- group->Add(watchButton);\r
- group->Add(phoneButton);\r
- group->Add(settingButton);\r
- group->Add(deleteButton);\r
- group->Add(watchImage);\r
- group->Add(phoneImage);\r
- group->Add(bluetoothImage);\r
- UIView::OnDragListener *earDragListener = (UIView::OnDragListener *)OHOS::PlayerOnDragListener::GetInstance();\r
- if (earDragListener == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "earDragListener GetInstance fail");\r
- return nullptr;\r
- }\r
- group->SetOnDragListener(earDragListener);\r
- group->SetViewId(BLUETOOTH_VIEW);\r
- group->SetDraggable(true);\r
- group->SetTouchable(true);\r
- return group;\r
-}\r
-}\r
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-12 11:31:43
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 14:28:21
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/src/MusicPlayerBTConnectFailedView.cpp
+ */
+#include "player/include/MusicPlayerBTConnectFailedView.h"
+#include "player/include/PlayersPresenter.h"
+#include "player/include/PlayersView.h"
+#include "wearable_log.h"
+#include "ui_resource_string.h"
+#include <custom_utils.h>
+#include "uicomponents/UIComponents.h"
+namespace OHOS
+{
+ static constexpr const char *CLOSEBUTTON_VIEWID = "CLOSEButton";
+ MusicPlayerBTConnectFailedView::MusicPlayerBTConnectFailedView(/* args */)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBTConnectFailedView::MusicPlayerBTConnectFailedView");
+ }
+
+ MusicPlayerBTConnectFailedView::~MusicPlayerBTConnectFailedView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBTConnectFailedView::~MusicPlayerBTConnectFailedView");
+ ClearAll();
+ }
+
+ bool MusicPlayerBTConnectFailedView::OnClick(UIView &view, const ClickEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::OnClick");
+ PlayersView *playersView = PlayersView::GetInstance();
+ if (!playersView)
+ {
+ return false;
+ }
+ if (strcmp(view.GetViewId(), CLOSEBUTTON_VIEWID) == 0)
+ {
+ playersView->ChangeView(PlayersView::MUSIC_BT_CONNECTFAILED_VIEW, PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW);
+ }
+ return true;
+ }
+
+ void MusicPlayerBTConnectFailedView::ClearAll()
+ {
+ if (group != nullptr)
+ {
+ group->RemoveAll();
+
+ if (scrollView != nullptr)
+ {
+ scrollView->RemoveAll();
+ if (titleLabel != nullptr)
+ {
+ delete titleLabel;
+ titleLabel = nullptr;
+ }
+ if (IPoneLabel != nullptr)
+ {
+ delete IPoneLabel;
+ IPoneLabel = nullptr;
+ }
+ if (AndroidLabel != nullptr)
+ {
+ delete AndroidLabel;
+ AndroidLabel = nullptr;
+ }
+ if (BTNoteLabel1 != nullptr)
+ {
+ delete BTNoteLabel1;
+ BTNoteLabel1 = nullptr;
+ }
+ if (BTNoteLabel2 != nullptr)
+ {
+ delete BTNoteLabel2;
+ BTNoteLabel2 = nullptr;
+ }
+ if (BTNoteLabel3 != nullptr)
+ {
+ delete BTNoteLabel3;
+ BTNoteLabel3 = nullptr;
+ }
+ if (CloseLabel != nullptr)
+ {
+ delete CloseLabel;
+ CloseLabel = nullptr;
+ }
+ if (CloseButton != nullptr)
+ {
+ delete CloseButton;
+ CloseButton = nullptr;
+ }
+ scrollView->ClearFocus();
+ delete scrollView;
+ scrollView = nullptr;
+ }
+ if (dragListener)
+ {
+ delete dragListener;
+ dragListener = nullptr;
+ }
+
+ delete group;
+ group = nullptr;
+ }
+ }
+
+ bool MusicPlayerBTConnectFailedView::CreateMusicPlayerBTConnectFailedViewLabel()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBTConnectFailedView::CreateMusicPlayerBTConnectFailedViewLabel");
+ /* ------------------------------- titleLabel ------------------------------- */
+ if (titleLabel == nullptr)
+ {
+ titleLabel = new UILabelExt();
+ if (titleLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail");
+ return false;
+ }
+ }
+ titleLabel->SetPosition(83, 50, 300, 35);
+ titleLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ titleLabel->SetTextId(STR_BLUETOOTH_CONNECTION_FAILED); // 蓝牙连接失败
+ titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ------------------------------- BTNoteLabel1 ------------------------------ */
+ if (BTNoteLabel1 == nullptr)
+ {
+ BTNoteLabel1 = new UILabelExt();
+ if (BTNoteLabel1 == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BTNoteLabel1 new fail");
+ return false;
+ }
+ }
+ BTNoteLabel1->SetPosition(53, 140, 360, 35);
+ BTNoteLabel1->SetStyle(STYLE_TEXT_FONT, 30);
+ BTNoteLabel1->SetStyle(STYLE_LINE_HEIGHT, 35);
+ BTNoteLabel1->SetTextId(STR_SOLUTION);
+ BTNoteLabel1->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ BTNoteLabel1->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ------------------------------- IPoneLabel ------------------------------- */
+ if (IPoneLabel == nullptr)
+ {
+ IPoneLabel = new UILabelExt();
+ if (IPoneLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "IPoneLabel new fail");
+ return false;
+ }
+ }
+ IPoneLabel->SetPosition(53, BTNoteLabel1->GetY() + BTNoteLabel1->GetTextHeight(), 360, 35);
+ IPoneLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ IPoneLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ IPoneLabel->SetTextId(STR_IPHONE);
+ IPoneLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ IPoneLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ------------------------------ BTNoteLabel2 ------------------------------ */
+ if (BTNoteLabel2 == nullptr)
+ {
+ BTNoteLabel2 = new UILabelExt();
+ if (BTNoteLabel2 == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BTNoteLabel2 new fail");
+ return false;
+ }
+ }
+ BTNoteLabel2->SetPosition(53, IPoneLabel->GetY() + IPoneLabel->GetTextHeight(), 360, 455);
+ BTNoteLabel2->SetStyle(STYLE_TEXT_FONT, 30);
+ BTNoteLabel2->SetStyle(STYLE_LINE_HEIGHT, 35);
+ BTNoteLabel2->SetTextId(STR_ENABLE_BLUETOOTH_CALL_NOTE_IPHONE);
+ UpdateLabel(BTNoteLabel2, (char *)ble_name, STR_ENABLE_BLUETOOTH_CALL_NOTE_IPHONE);
+ BTNoteLabel2->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ BTNoteLabel2->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ------------------------------- AndroidLabel ------------------------------- */
+ if (AndroidLabel == nullptr)
+ {
+ AndroidLabel = new UILabelExt();
+ if (AndroidLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AndroidLabel new fail");
+ return false;
+ }
+ }
+ AndroidLabel->SetPosition(53, BTNoteLabel2->GetY() + BTNoteLabel2->GetTextHeight() + 40, 360, 35);
+ AndroidLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ AndroidLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ AndroidLabel->SetTextId(STR_ANDROID);
+ AndroidLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ AndroidLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ------------------------------ BTNoteLabel3 ------------------------------ */
+ if (BTNoteLabel3 == nullptr)
+ {
+ BTNoteLabel3 = new UILabelExt();
+ if (BTNoteLabel3 == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BTNoteLabel2 new fail");
+ return false;
+ }
+ }
+ BTNoteLabel3->SetPosition(53, AndroidLabel->GetY() + AndroidLabel->GetTextHeight(), 360, 455);
+ BTNoteLabel3->SetStyle(STYLE_TEXT_FONT, 30);
+ BTNoteLabel3->SetStyle(STYLE_LINE_HEIGHT, 35);
+ BTNoteLabel3->SetTextId(STR_ENABLE_BLUETOOTH_CALL_NOTE_ANDROID);
+ UpdateLabel(BTNoteLabel3, (char *)ble_name, STR_ENABLE_BLUETOOTH_CALL_NOTE_ANDROID);
+ BTNoteLabel3->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ BTNoteLabel3->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* ------------------------------- CloseLabel ------------------------------- */
+ if (CloseLabel == nullptr)
+ {
+ CloseLabel = new UILabelExt();
+ if (CloseLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CloseLabel new fail");
+ return false;
+ }
+ }
+ CloseLabel->SetPosition(83, BTNoteLabel3->GetY() + BTNoteLabel3->GetTextHeight() + 40 + 29, 300, 35);
+ CloseLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ CloseLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ CloseLabel->SetTextId(STR_CLOSE); // 关闭
+ CloseLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ CloseLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ CloseLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+
+ return true;
+ }
+
+ bool MusicPlayerBTConnectFailedView::CreateMusicPlayerBTConnectFailedViewButton()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBTConnectFailedView::CreateMusicPlayerBTConnectFailedViewButton");
+ if (CloseButton == nullptr)
+ {
+ CloseButton = new UIButton();
+ if (CloseButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CloseButton new fail!!");
+ return false;
+ }
+ }
+ CloseButton->SetPosition(43, BTNoteLabel3->GetY() + BTNoteLabel3->GetTextHeight() + 40, 380, 100);
+ CloseButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+ CloseButton->SetViewId(CLOSEBUTTON_VIEWID);
+ CloseButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED);
+ CloseButton->SetOnClickListener(this);
+
+ return true;
+ }
+
+ UIViewGroup *MusicPlayerBTConnectFailedView::CreateMusicPlayerBTConnectFailedView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConView");
+ if (group == nullptr)
+ {
+ group = new UIViewGroup();
+ if (group == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
+ return nullptr;
+ }
+ }
+ group->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ group->SetStyle(STYLE_BACKGROUND_OPA, 0);
+ group->SetTouchable(true);
+ group->SetDraggable(true);
+ group->SetIntercept(true);
+ group->SetViewId(MUISC_PLAYER_BLUETOOTH_CONNECTFAILED_VIEW);
+ if (dragListener == nullptr)
+ {
+ dragListener = static_cast<UIView::OnDragListener *>(new PlayerOnDragListener());
+ if (dragListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dragListener new fail");
+ return nullptr;
+ }
+ }
+ group->SetOnDragListener(dragListener);
+ /* -------------------------------------------------------------------------- */
+ if (scrollView == nullptr)
+ {
+ scrollView = new UIScrollView();
+ if (scrollView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail");
+ return nullptr;
+ }
+ }
+ scrollView->SetPosition(0, 0, 466, 466);
+ scrollView->SetScrollBlankSize(50);
+ scrollView->SetReboundSize(35);
+ scrollView->SetThrowDrag(true);
+ scrollView->SetMaxScrollDistance(1000);
+ scrollView->SetDirection(UIScrollView::VERTICAL);
+ scrollView->RequestFocus();
+ scrollView->SetRotateFactor(1.0);
+
+ /* --------------------------------- 获取蓝牙名称 --------------------------------- */
+ get_bt_name();
+ /* -------------------------------------------------------------------------- */
+ if (!CreateMusicPlayerBTConnectFailedViewLabel() || !CreateMusicPlayerBTConnectFailedViewButton())
+ {
+ return nullptr;
+ }
+ scrollView->Add(titleLabel);
+ scrollView->Add(BTNoteLabel1);
+ scrollView->Add(IPoneLabel);
+ scrollView->Add(AndroidLabel);
+ scrollView->Add(BTNoteLabel2);
+ scrollView->Add(BTNoteLabel3);
+ scrollView->Add(CloseButton);
+ scrollView->Add(CloseLabel);
+
+ group->Add(scrollView);
+ return group;
+ }
+
+ void MusicPlayerBTConnectFailedView::get_bt_name(void)
+ {
+ uint32_t ble_name_len = sizeof(ble_name);
+ uapi_get_nv_btname(ble_name, &ble_name_len);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-10 16:23:46
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 14:28:09
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/src/MusicPlayerBluetoothDisConView.cpp
+ */
+#include "player/include/MusicPlayerBluetoothDisConView.h"
+#include "wearable_log.h"
+#include "ui_resource_string.h"
+#include "player/include/PlayersPresenter.h"
+#include "player/include/PlayersView.h"
+#include "ui_resource_image.h"
+#include "string.h"
+#include "components/ui_view_group.h"
+namespace OHOS
+{
+ static constexpr const char *OKBUTTON_VIEWID = "OkButton";
+ MusicPlayerBluetoothDisConView::MusicPlayerBluetoothDisConView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::MusicPlayerBluetoothDisConView");
+ }
+
+ MusicPlayerBluetoothDisConView::~MusicPlayerBluetoothDisConView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::~MusicPlayerBluetoothDisConView");
+ ClearAll();
+ }
+
+ bool MusicPlayerBluetoothDisConView::OnClick(UIView &view, const ClickEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::OnClick");
+ PlayersView *playersView = PlayersView::GetInstance();
+ if (!playersView)
+ {
+ return false;
+ }
+ if (strcmp(view.GetViewId(), OKBUTTON_VIEWID) == 0)
+ {
+ playersView->ChangeView(PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW, PlayersView::MAIN_MUSICPLAYER_VIEW);
+ }
+ else if (strcmp(view.GetViewId(), MUISC_PLAYER_BLUETOOTH_DISCONN_VIEW) == 0)
+ {
+ // 跳转到蓝牙连接失败视图
+ playersView->ChangeView(PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW, PlayersView::MUSIC_BT_CONNECTFAILED_VIEW);
+ }
+ return true;
+ }
+
+ void MusicPlayerBluetoothDisConView::ClearAll()
+ {
+ if (group != nullptr)
+ {
+ group->RemoveAll();
+ if (scrollView != nullptr)
+ {
+ scrollView->RemoveAll();
+ if (titleLabel != nullptr)
+ {
+ delete titleLabel;
+ titleLabel = nullptr;
+ }
+ if (bluetoothImage != nullptr)
+ {
+ delete bluetoothImage;
+ bluetoothImage = nullptr;
+ }
+ if (image66 != nullptr)
+ {
+ delete image66;
+ image66 = nullptr;
+ }
+ if (image99 != nullptr)
+ {
+ delete image99;
+ image99 = nullptr;
+ }
+ if (noteLabel != nullptr)
+ {
+ delete noteLabel;
+ noteLabel = nullptr;
+ }
+ if (OkButton != nullptr)
+ {
+ delete OkButton;
+ OkButton = nullptr;
+ }
+ if (OkLabel != nullptr)
+ {
+ delete OkLabel;
+ OkLabel = nullptr;
+ }
+ scrollView->ClearFocus();
+ delete scrollView;
+ scrollView = nullptr;
+ }
+
+ if (dragListener)
+ {
+ delete dragListener;
+ dragListener = nullptr;
+ }
+
+ delete group;
+ group = nullptr;
+ }
+ }
+
+ UILabelExt *MusicPlayerBluetoothDisConView::MusicPlayerBluetoothDisConViewLabelInit(LabelConfig &labelconfig)
+ {
+ UILabelExt *label = new UILabelExt();
+ if (label == nullptr)
+ {
+ return nullptr;
+ }
+ label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height);
+ label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);
+ label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);
+ label->SetTextId(labelconfig.textId);
+ label->SetLineBreakMode(labelconfig.lineBreakMode);
+ label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label->SetRollSpeed(23);
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);
+ return label;
+ }
+
+ bool MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConViewLabel(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConViewLabel");
+ LabelConfig labelConfig = {
+ .left = 83,
+ .top = 50,
+ .width = 300,
+ .height = 35,
+ .fontSize = 30,
+ .lineHeigh = 35,
+ .textId = STR_BLUETOOTH_DISCONNECTED, /*蓝牙未连接*/
+ .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,
+ };
+ titleLabel = MusicPlayerBluetoothDisConViewLabelInit(labelConfig);
+ if (nullptr == titleLabel)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail!!");
+ return false;
+ }
+ /* -------------------------------------------------------------------------- */
+ labelConfig = {
+ .left = 53,
+ .top = 230,
+ .width = 360,
+ .height = 105,
+ .fontSize = 30,
+ .lineHeigh = 35,
+ .textId = STR_MUSIC_PLAYER_SOURCE_NOTE, /*请从手表端应用界面进入“音乐”-“音乐来源”,设置为“手机模式”后重试*/
+ .lineBreakMode = UILabel::LINE_BREAK_WRAP,
+ };
+ noteLabel = MusicPlayerBluetoothDisConViewLabelInit(labelConfig);
+ if (nullptr == noteLabel)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "noteLabel new fail!!");
+ return false;
+ }
+
+ /* -------------------------------------------------------------------------- */
+ int16_t y = noteLabel->GetY() + noteLabel->GetTextHeight() + 30 + 33;
+ labelConfig = {
+ .left = 133,
+ .top = y,
+ .width = 200,
+ .height = 35,
+ .fontSize = 30,
+ .lineHeigh = 35,
+ .textId = STR_KONW, /*知道了*/
+ .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,
+ };
+ OkLabel = MusicPlayerBluetoothDisConViewLabelInit(labelConfig);
+ if (nullptr == OkLabel)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OkLabel new fail!!");
+ return false;
+ }
+
+ return true;
+ }
+
+ bool MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConViewImage(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConViewImage");
+ if (bluetoothImage == nullptr)
+ {
+ bluetoothImage = new UIImageView();
+ if (bluetoothImage == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
+ return false;
+ }
+ bluetoothImage->SetPosition(209, 120, 48, 80);
+ if (!PlayersView::LoadPlayerImage(bluetoothImage, PLAYER_BLUETOOTH_COLOR))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage LoadPlayerImage fail");
+ return false;
+ }
+ }
+
+ /* -------------------------------------------------------------------------- */
+ if (image66 == nullptr)
+ {
+ image66 = new UIImageView();
+ if (image66 == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
+ return false;
+ }
+ image66->SetPosition(33, 200, 74, 52);
+ if (!PlayersView::LoadPlayerImage(image66, PLAYER_UP_66))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage LoadPlayerImage fail");
+ return false;
+ }
+ image66->SetAutoEnable(false);
+ image66->SetResizeMode(UIImageView::CENTER);
+ }
+
+ if (image99 == nullptr)
+ {
+ image99 = new UIImageView();
+ if (image99 == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
+ return false;
+ }
+ image99->SetPosition(344, noteLabel->GetY() + noteLabel->GetTextHeight() - 35, 74, 52);
+ if (!PlayersView::LoadPlayerImage(image99, PLAYER_DOWM_66))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage LoadPlayerImage fail");
+ return false;
+ }
+ image99->SetAutoEnable(false);
+ image99->SetResizeMode(UIImageView::CENTER);
+ }
+
+ return true;
+ }
+
+ bool MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConViewButton(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConViewButton");
+ if (OkButton == nullptr)
+ {
+ OkButton = new UIButton();
+ if (OkButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OkButton new fail!!");
+ return false;
+ }
+ }
+ OkButton->SetPosition(0, noteLabel->GetY() + noteLabel->GetTextHeight() + 30, 466, 100);
+ OkButton->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE);
+ OkButton->SetViewId(OKBUTTON_VIEWID);
+ OkButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED);
+ OkButton->SetOnClickListener(this);
+
+ return true;
+ }
+
+ UIViewGroup *MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerBluetoothDisConView::CreateMusicPlayerBluetoothDisConView");
+ if (group == nullptr)
+ {
+ group = new UIViewGroup();
+ if (group == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
+ return nullptr;
+ }
+ }
+ group->SetPosition(0, 0, 466, 466);
+ group->SetStyle(STYLE_BACKGROUND_OPA, 0);
+ group->SetTouchable(true);
+ group->SetDraggable(true);
+ group->SetIntercept(true);
+ group->SetViewId(MUISC_PLAYER_BLUETOOTH_DISCONN_VIEW);
+ if (dragListener == nullptr)
+ {
+ dragListener = static_cast<UIView::OnDragListener *>(new PlayerOnDragListener());
+ if (dragListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dragListener new fail");
+ return nullptr;
+ }
+ }
+ group->SetOnDragListener(dragListener);
+ group->SetOnClickListener(this);
+ /* -------------------------------------------------------------------------- */
+ if (scrollView == nullptr)
+ {
+ scrollView = new UIScrollView();
+ if (scrollView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail");
+ return nullptr;
+ }
+ }
+ scrollView->SetPosition(0, 0, 466, 466);
+ scrollView->SetScrollBlankSize(50);
+ scrollView->SetReboundSize(35);
+ scrollView->SetDirection(UIScrollView::VERTICAL);
+ scrollView->RequestFocus();
+ scrollView->SetRotateFactor(1.0);
+
+ if (!CreateMusicPlayerBluetoothDisConViewLabel() || !CreateMusicPlayerBluetoothDisConViewImage() || !CreateMusicPlayerBluetoothDisConViewButton())
+ {
+ return nullptr;
+ }
+ scrollView->Add(titleLabel);
+ scrollView->Add(bluetoothImage);
+ scrollView->Add(image66);
+ scrollView->Add(image99);
+ scrollView->Add(noteLabel);
+ scrollView->Add(OkButton);
+ scrollView->Add(OkLabel);
+ group->Add(scrollView);
+ return group;
+ }
+}
--- /dev/null
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
+ * Description: bluetooth view 设置页面\r
+ * Create: 2021-09-5\r
+ */\r
+#include "player/include/MusicPlayerSourceView.h"\r
+#include "player/include/PlayersView.h"\r
+#include "player/include/PlayersModel.h"\r
+#include "UiConfig.h"\r
+#include "BluetoothEarPhoneView.h"\r
+#include "player/include/PlayersPresenter.h"\r
+#include "ui_resource_image.h"\r
+#include "ui_resource_string.h"\r
+#include "settings/include/SettingModel.h"\r
+#include "ui_resource_string.h"\r
+#include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
+#include "main/include/MainModel.h"\r
+namespace OHOS\r
+{\r
+ static MusicPlayerSourceView *g_bluetoothView{nullptr};\r
+ MusicPlayerSourceView::MusicPlayerSourceView()\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::MusicPlayerSourceView");\r
+ g_bluetoothView = this;\r
+ }\r
+\r
+ MusicPlayerSourceView::~MusicPlayerSourceView()\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::~MusicPlayerSourceView");\r
+ ClearAll();\r
+ g_bluetoothView = nullptr;\r
+ }\r
+\r
+ MusicPlayerSourceView *MusicPlayerSourceView::GetInstance(void)\r
+ {\r
+ return g_bluetoothView;\r
+ }\r
+\r
+ bool MusicPlayerSourceView::OnClick(UIView &view, const ClickEvent &event)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::OnClick");\r
+ UILabelButton *button = dynamic_cast<UILabelButton *>(&view);\r
+ if (!button)\r
+ {\r
+ return false;\r
+ }\r
+ PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();\r
+ if (!playersPresenter)\r
+ {\r
+ return false;\r
+ }\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (!playersView)\r
+ {\r
+ return false;\r
+ }\r
+ ImageInfo *image;\r
+ bool phonebluetoothcon = SettingModel::GetInstance().GetPhoneConnectStatus(); // 获取手机连接状态\r
+ #ifdef SUPPORT_BLE_SERVICE\r
+ bool a2dp = uapi_a2dp_snk_get_device_connect_state(); // 获取a2dp连接状态\r
+ #else\r
+ bool a2dp = false; \r
+ #endif\r
+\r
+ if (button == phoneLableButton) // 若点击的是手机音乐按钮\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClick phoneLableButton");\r
+ if (!PlayersModel::GetInstance()->GetMusicSource()) // 切换到手机音乐\r
+ {\r
+ PlayersModel::GetInstance()->SetMusicSource(true);\r
+ UpdateBluetoothHeadSetViewIsVisible();\r
+ playersView->StopCurPlayingMusic();\r
+ // 1.a2dp未连接,向手机发起a2dp连接\r
+ // 如果蓝牙没连接直接是跳转到蓝牙连接失败视图,连接了就有一个主动去连手机的a2dp过程,5秒超市\r
+ // if (!phonebluetoothcon)\r
+ // {\r
+ // playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW);\r
+ // }\r
+ // else if (phonebluetoothcon && !a2dp) // 如果手机蓝牙已连接但手表与手机的a2dp未连接手表主动去连接a2dp\r
+ // {\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
+ // playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MAIN_MUSICPLAYER_VIEW);\r
+ // }\r
+ /* -------------------------------------------------------------------------- */\r
+ // uapi_a2dp_snk_connect(); // 切换通道主动连接atdp\r
+ /* -------------------------------------------------------------------------- */\r
+ playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MUISC_CONNECTING);\r
+ }\r
+ else // 如果已经选择了手机音乐,再次点击就回到 “音乐播放器主视图”\r
+ {\r
+ playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MAIN_MUSICPLAYER_VIEW);\r
+ }\r
+ }\r
+ else if (button == watchLableButton) // 若点击的是手表音乐按钮\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClick watchLableButton");\r
+ if (PlayersModel::GetInstance()->GetMusicSource()) // 切换到手表音乐\r
+ {\r
+ PlayersModel::GetInstance()->SetMusicSource(false);\r
+ UpdateBluetoothHeadSetViewIsVisible();\r
+ /* -------------------------------------------------------------------------- */\r
+ PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_STOP);//切换到手机音乐停止音乐\r
+ /* -------------------------------------------------------------------------- */\r
+ playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MUISC_CONNECTING);\r
+ }\r
+ else // 如果已经选择了手表音乐,再次点击就回到 “音乐播放器主视图”\r
+ {\r
+ playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW, PlayersView::MAIN_MUSICPLAYER_VIEW);\r
+ }\r
+ }\r
+ else if (button == bluetoothHeadsetLableButton)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothHeadsetLableButton");\r
+ NativeAbility::GetInstance().EnterSlice(VIEW_BLUETOOTH_EARPHONE);\r
+ // 配置主界面回退界面\r
+ MainModel::GetInstance().SetFromSetCardView(true);\r
+ MainModel::GetInstance().SetFromCardId(MUSIC_PLAYER);\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ void MusicPlayerSourceView::ClearAll()\r
+ {\r
+ if (group != nullptr)\r
+ {\r
+ group->RemoveAll();\r
+ if (scrollView != nullptr)\r
+ {\r
+ scrollView->RemoveAll();\r
+ if (titleLabel != nullptr)\r
+ {\r
+ delete titleLabel;\r
+ titleLabel = nullptr;\r
+ }\r
+ if (phoneLableButton != nullptr)\r
+ {\r
+ delete phoneLableButton;\r
+ phoneLableButton = nullptr;\r
+ }\r
+ if (watchLableButton != nullptr)\r
+ {\r
+ delete watchLableButton;\r
+ watchLableButton = nullptr;\r
+ }\r
+ if (bluetoothHeadsetLableButton != nullptr)\r
+ {\r
+ delete bluetoothHeadsetLableButton;\r
+ bluetoothHeadsetLableButton = nullptr;\r
+ }\r
+ if (phoneImage != nullptr)\r
+ {\r
+ delete phoneImage;\r
+ phoneImage = nullptr;\r
+ }\r
+ if (watchImage != nullptr)\r
+ {\r
+ delete watchImage;\r
+ watchImage = nullptr;\r
+ }\r
+ if (bluetoothHeadsetImage != nullptr)\r
+ {\r
+ delete bluetoothHeadsetImage;\r
+ bluetoothHeadsetImage = nullptr;\r
+ }\r
+ if (phoneLabel != nullptr)\r
+ {\r
+ delete phoneLabel;\r
+ phoneLabel = nullptr;\r
+ }\r
+ if (watchLabel != nullptr)\r
+ {\r
+ delete watchLabel;\r
+ watchLabel = nullptr;\r
+ }\r
+ if (bluetoothHeadsetLabel != nullptr)\r
+ {\r
+ delete bluetoothHeadsetLabel;\r
+ bluetoothHeadsetLabel = nullptr;\r
+ }\r
+ if (bluetoothHeadsetConnectState != nullptr)\r
+ {\r
+ delete bluetoothHeadsetConnectState;\r
+ bluetoothHeadsetConnectState = nullptr;\r
+ }\r
+ scrollView->ClearFocus();\r
+ delete scrollView;\r
+ scrollView = nullptr;\r
+ }\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_PHONE_WHITE, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_LOCAL_MUSIC_WHITE, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_EARPHONE_WHITE, PLAYER_IAMGES);\r
+ if (dragListener)\r
+ {\r
+ delete dragListener;\r
+ dragListener = nullptr;\r
+ }\r
+ delete group;\r
+ group = nullptr;\r
+ }\r
+ }\r
+\r
+ UILabelExt *MusicPlayerSourceView::MusicPlayerSourceViewLabelInit(LabelConfig &labelconfig)\r
+ {\r
+ UILabelExt *label = new UILabelExt();\r
+ if (label == nullptr)\r
+ {\r
+ return nullptr;\r
+ }\r
+ label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height);\r
+ label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);\r
+ label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);\r
+ label->SetTextId(labelconfig.textId);\r
+ label->SetLineBreakMode(labelconfig.lineBreakMode);\r
+ // label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label->SetRollSpeed(23);\r
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+ return label;\r
+ }\r
+\r
+ UILabelButton *MusicPlayerSourceView::MusicPlayerSourceViewLabelButtonInit(ButtonConfig &buttonconfig)\r
+ {\r
+ UILabelButton *button = new UILabelButton();\r
+ if (button == nullptr)\r
+ {\r
+ return nullptr;\r
+ }\r
+ button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);\r
+ button->SetViewId(buttonconfig.viewId);\r
+ button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+ button->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+ button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);\r
+ button->SetOnClickListener(this);\r
+ if (buttonconfig.flag)\r
+ {\r
+ button->SetImagePosition(300, 30);\r
+ button->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);\r
+ }\r
+ else\r
+ {\r
+ button->SetImagePosition(326, 37);\r
+ button->SetImageSrc(PNG_SETTING_NEXT_IMAGE, PNG_SETTING_NEXT_IMAGE);\r
+ }\r
+ return button;\r
+ }\r
+\r
+ bool MusicPlayerSourceView::CreateMusicPlayerSourceViewLabelButton(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::CreateMusicPlayerSourceViewLabelButton");\r
+ ButtonConfig buttonconfig = {\r
+ .x = 43,\r
+ .y = 120,\r
+ .w = 380,\r
+ .h = 100,\r
+ .viewId = PHONE_MUSIC_LABEL_BUTTON,\r
+ .flag = true,\r
+ };\r
+ phoneLableButton = MusicPlayerSourceViewLabelButtonInit(buttonconfig);\r
+ if (nullptr == phoneLableButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneLableButton new fail!!");\r
+ return false;\r
+ }\r
+ /* ---------------------------- watchLableButton ---------------------------- */\r
+ buttonconfig.y += 120;\r
+ buttonconfig.viewId = WATCH_MUSIC_LABEL_BUTTON;\r
+ watchLableButton = MusicPlayerSourceViewLabelButtonInit(buttonconfig);\r
+ if (nullptr == watchLableButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchLableButton new fail!!");\r
+ return false;\r
+ }\r
+ /* ----------------------- bluetoothHeadsetLableButton ---------------------- */\r
+ buttonconfig.y += 120;\r
+ buttonconfig.viewId = BLUETOOTH_HEADSET_LABEL_BUTTON;\r
+ buttonconfig.flag = false;\r
+ bluetoothHeadsetLableButton = MusicPlayerSourceViewLabelButtonInit(buttonconfig);\r
+ if (nullptr == bluetoothHeadsetLableButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothHeadsetLableButton new fail!!");\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ bool MusicPlayerSourceView::CreateMusicPlayerSourceViewLabel(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::CreateMusicPlayerSourceViewLabel");\r
+ LabelConfig labelConfig = {\r
+ .left = 83,\r
+ .top = 50,\r
+ .width = 300,\r
+ .height = 35,\r
+ .fontSize = 30,\r
+ .lineHeigh = 35,\r
+ .textId = STR_MUSIC_SOURCE, /*音乐来源*/\r
+ .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+ };\r
+ titleLabel = MusicPlayerSourceViewLabelInit(labelConfig);\r
+ if (nullptr == titleLabel)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail!!");\r
+ return false;\r
+ }\r
+ titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ /* ------------------------------- phoneLabel ------------------------------- */\r
+ labelConfig = {\r
+ .left = 143,\r
+ .top = 153,\r
+ .width = 180,\r
+ .height = 35,\r
+ .fontSize = 30,\r
+ .lineHeigh = 35,\r
+ .textId = STR_MOBILE_MUSIC, /*手机音乐*/\r
+ .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+ };\r
+ phoneLabel = MusicPlayerSourceViewLabelInit(labelConfig);\r
+ if (nullptr == phoneLabel)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneLabel new fail!!");\r
+ return false;\r
+ }\r
+ /* ------------------------------- watchLabel ------------------------------- */\r
+ labelConfig.top += 120;\r
+ labelConfig.textId = STR_WATCH_MUSIC; // 手表音乐\r
+ watchLabel = MusicPlayerSourceViewLabelInit(labelConfig);\r
+ if (nullptr == watchLabel)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchLabel new fail!!");\r
+ return false;\r
+ }\r
+ /* -------------------------- bluetoothHeadsetLabel ------------------------- */\r
+ labelConfig.top = 381;\r
+ labelConfig.textId = STR_BLUETOOTH_HEADPHONES; // 蓝牙耳机\r
+ bluetoothHeadsetLabel = MusicPlayerSourceViewLabelInit(labelConfig);\r
+ if (nullptr == bluetoothHeadsetLabel)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothHeadsetLabel new fail!!");\r
+ return false;\r
+ }\r
+ /* ---------------------- bluetoothHeadsetConnectState ---------------------- */\r
+ labelConfig.top = 413;\r
+ labelConfig.fontSize = 23;\r
+ labelConfig.lineHeigh = 27;\r
+ labelConfig.textId = (SettingModel::GetInstance().GetEarPhoneConnectStatus()) ? STR_PAIRED : STR_NOT_PAIRED;\r
+ bluetoothHeadsetConnectState = MusicPlayerSourceViewLabelInit(labelConfig);\r
+ if (nullptr == bluetoothHeadsetConnectState)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothHeadsetConnectState new fail!!");\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ bool MusicPlayerSourceView::CreateMusicPlayerSourceViewImage(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::CreateMusicPlayerSourceViewImage");\r
+ ImageInfo *image;\r
+ /* ------------------------------- phoneImage ------------------------------- */\r
+ int x = 83;\r
+ int y = 150;\r
+ int w = 40;\r
+ int h = 40;\r
+ phoneImage = new UIImageView();\r
+ if (phoneImage == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage new fail");\r
+ return false;\r
+ }\r
+ phoneImage->SetPosition(x, y, w, h);\r
+ if (!PlayersView::LoadPlayerImage(phoneImage, PLAYER_PHONE_WHITE))\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage LoadPlayerImage fail");\r
+ return false;\r
+ }\r
+ /* ------------------------------- watchImage ------------------------------- */\r
+ y += 120;\r
+ watchImage = new UIImageView();\r
+ if (watchImage == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "watchImage new fail");\r
+ return false;\r
+ }\r
+ watchImage->SetPosition(x, y, w, h);\r
+ if (!PlayersView::LoadPlayerImage(watchImage, PLAYER_LOCAL_MUSIC_WHITE))\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage LoadPlayerImage fail");\r
+ return false;\r
+ }\r
+ /* -------------------------- bluetoothHeadsetImage ------------------------- */\r
+ y += 120;\r
+ bluetoothHeadsetImage = new UIImageView();\r
+ if (bluetoothHeadsetImage == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothHeadsetImage new fail");\r
+ return false;\r
+ }\r
+ bluetoothHeadsetImage->SetPosition(x, y, w, h);\r
+ if (!PlayersView::LoadPlayerImage(bluetoothHeadsetImage, PLAYER_EARPHONE_WHITE))\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "phoneImage LoadPlayerImage fail");\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ UIViewGroup *MusicPlayerSourceView::CreateMusicPlayerSourceView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::CreateMusicPlayerSourceView");\r
+ if (group == nullptr)\r
+ {\r
+ group = new UIViewGroup();\r
+ if (group == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ group->SetPosition(0, 0, 466, 466);\r
+ group->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+ group->SetTouchable(true);\r
+ group->SetDraggable(true);\r
+ group->SetIntercept(true);\r
+ group->SetViewId(MUSIC_PLAYER_SOURCE_VIEW);\r
+ if (dragListener == nullptr)\r
+ {\r
+ dragListener = static_cast<UIView::OnDragListener *>(new PlayerOnDragListener());\r
+ if (dragListener == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dragListener new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ group->SetOnDragListener(dragListener);\r
+ /* -------------------------------------------------------------------------- */\r
+ if (scrollView == nullptr)\r
+ {\r
+ scrollView = new UIScrollView();\r
+ if (scrollView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ scrollView->SetPosition(0, 0, 466, 466);\r
+ scrollView->SetScrollBlankSize(75);\r
+ scrollView->SetReboundSize(35);\r
+ scrollView->SetThrowDrag(true);\r
+ scrollView->SetMaxScrollDistance(1000);\r
+ scrollView->SetDragACCLevel(5);\r
+ scrollView->SetSwipeACCLevel(200); /*设置手指抬起屏幕后的补偿距离。*/\r
+ scrollView->SetDirection(UIScrollView::VERTICAL);\r
+ scrollView->RequestFocus();\r
+ scrollView->SetRotateFactor(1.0);\r
+ group->Add(scrollView);\r
+\r
+ if (!CreateMusicPlayerSourceViewLabelButton() || !CreateMusicPlayerSourceViewLabel() || !CreateMusicPlayerSourceViewImage())\r
+ {\r
+ return nullptr;\r
+ }\r
+\r
+ UpdateBluetoothHeadsetConnectLabel();\r
+ UpdateBluetoothHeadSetViewIsVisible();\r
+ /* ----------------------------------- Add ---------------------------------- */\r
+\r
+ scrollView->Add(titleLabel);\r
+ scrollView->Add(phoneLableButton);\r
+ scrollView->Add(watchLableButton);\r
+ scrollView->Add(bluetoothHeadsetLableButton);\r
+ scrollView->Add(phoneImage);\r
+ scrollView->Add(watchImage);\r
+ scrollView->Add(bluetoothHeadsetImage);\r
+ scrollView->Add(phoneLabel);\r
+ scrollView->Add(watchLabel);\r
+ scrollView->Add(bluetoothHeadsetLabel);\r
+ scrollView->Add(bluetoothHeadsetConnectState);\r
+ /* -------------------------------------------------------------------------- */\r
+ return group;\r
+ }\r
+\r
+ void MusicPlayerSourceView::UpdateBluetoothHeadSetViewIsVisible(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::UpdateBluetoothHeadSetViewIsVisible");\r
+ bool value = PlayersModel::GetInstance()->GetMusicSource();\r
+ if (bluetoothHeadsetLabel && bluetoothHeadsetImage && bluetoothHeadsetLableButton && bluetoothHeadsetConnectState)\r
+ {\r
+ bluetoothHeadsetLabel->SetVisible(value ? false : true);\r
+ bluetoothHeadsetImage->SetVisible(value ? false : true);\r
+ bluetoothHeadsetLableButton->SetVisible(value ? false : true);\r
+ bluetoothHeadsetConnectState->SetVisible(value ? false : true);\r
+ }\r
+ if (phoneLableButton && watchLableButton)\r
+ {\r
+ if (value)\r
+ {\r
+ phoneLableButton->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);\r
+ watchLableButton->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);\r
+ }\r
+ else\r
+ {\r
+ phoneLableButton->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);\r
+ watchLableButton->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);\r
+ }\r
+ }\r
+ scrollView->Invalidate();\r
+ }\r
+\r
+ /*更新蓝牙耳机连接状态*/\r
+ void MusicPlayerSourceView::UpdateBluetoothHeadsetConnectLabel(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::UpdateBluetoothHeadsetConnectLabel");\r
+ if (bluetoothHeadsetConnectState)\r
+ {\r
+ bool state = SettingModel::GetInstance().GetEarPhoneConnectStatus();\r
+ List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
+ bool ConnedDevicesListIsEmpty = bluetoothCaseList.IsEmpty();\r
+ if (ConnedDevicesListIsEmpty) // 如果已连接设备列表为空,则显示未配对\r
+ {\r
+ bluetoothHeadsetConnectState->SetTextId(STR_NOT_PAIRED);\r
+ bluetoothHeadsetConnectState->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+ bluetoothHeadsetConnectState->Invalidate();\r
+ }\r
+ else // 否则则显示连接状态\r
+ {\r
+ bluetoothHeadsetConnectState->SetTextId(state ? STR_CONNECTED : STR_DISCONNECTED);\r
+ bluetoothHeadsetConnectState->SetTextColor(state ? Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff) : Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));\r
+ bluetoothHeadsetConnectState->Invalidate();\r
+ }\r
+ }\r
+ }\r
+\r
+ UIScrollView *MusicPlayerSourceView::GetMusicPlayerSourcescrollView(void)\r
+ {\r
+ return scrollView;\r
+ }\r
+}\r
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-10-19 11:27:19
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-28 11:22:01
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/src/MusicPlayerTipView.cpp
+ */
+#include "player/include/MusicPlayerTipView.h"
+#include "player/include/PlayersPresenter.h"
+#include "player/include/PlayersModel.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "ui_resource_string.h"
+#include "iostream"
+#include "string"
+namespace OHOS
+{
+
+ static constexpr const char *OKBUTTON = "okButton";
+ static MusicPlayerTipView *g_pMusicPlayerTipView = nullptr;
+ MusicPlayerTipView::MusicPlayerTipView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerTipView::MusicPlayerTipView");
+ g_pMusicPlayerTipView = this;
+ }
+
+ MusicPlayerTipView::~MusicPlayerTipView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~MusicPlayerTipView::MusicPlayerTipView");
+ ClearAll();
+ g_pMusicPlayerTipView = nullptr;
+ }
+
+ MusicPlayerTipView *MusicPlayerTipView::GetInstance(void)
+ {
+ return g_pMusicPlayerTipView;
+ }
+
+ void MusicPlayerTipView::ClearAll(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerTipView::ClearAll");
+ if (group)
+ {
+ group->RemoveAll();
+ if (scrollView)
+ {
+ scrollView->RemoveAll();
+
+ delete image;
+ image = nullptr;
+
+ delete noteLabel;
+ noteLabel = nullptr;
+
+ delete OKLabel;
+ OKLabel = nullptr;
+
+ delete OkButton;
+ OkButton = nullptr;
+
+ delete scrollView;
+ scrollView = nullptr;
+ }
+ delete dragListener;
+ dragListener = nullptr;
+
+ delete group;
+ group = nullptr;
+ }
+ }
+
+ bool MusicPlayerTipView::OnClick(UIView &view, const ClickEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerTipView::OnClick");
+ PlayersView *playersView = PlayersView::GetInstance();
+ if (!playersView)
+ {
+ return false;
+ }
+ std::string viewId = view.GetViewId();
+ if (viewId == OKBUTTON)
+ {
+ playersView->ChangeView(PlayersView::MUSIC_PLAYER_TIP_VIEW, PlayersModel::GetInstance()->getPreShowView());
+ }
+ return true;
+ }
+
+ UIViewGroup *MusicPlayerTipView::CreateMusicPlayerTipView()
+ {
+ if (group == nullptr)
+ {
+ group = new UIViewGroup();
+ if (group == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
+ return nullptr;
+ }
+
+ group->SetPosition(0, 0, 466,466);
+ group->SetStyle(STYLE_BACKGROUND_OPA, 0);
+ group->SetTouchable(true);
+ group->SetDraggable(true);
+ group->SetIntercept(true);
+ group->SetViewId(MUISC_PLAYER_TIP_VIEW);
+ if (dragListener == nullptr)
+ {
+ dragListener = static_cast<UIView::OnDragListener *>(new PlayerOnDragListener());
+ if (dragListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dragListener new fail");
+ return nullptr;
+ }
+ }
+ group->SetOnDragListener(dragListener);
+ /* -------------------------------------------------------------------------- */
+ if (scrollView == nullptr)
+ {
+ scrollView = new UIScrollView();
+ if (scrollView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail");
+ return nullptr;
+ }
+ }
+ scrollView->SetPosition(0, 0, 466, 466);
+ scrollView->SetScrollBlankSize(50);
+ scrollView->SetReboundSize(35);
+ scrollView->SetThrowDrag(true);
+ scrollView->SetMaxScrollDistance(1000);
+ scrollView->SetDirection(UIScrollView::VERTICAL);
+ scrollView->RequestFocus();
+ scrollView->SetRotateFactor(1.0);
+ /* -------------------------------------------------------------------------- */
+ if (image == nullptr)
+ {
+ image = new UIImageView();
+ if (image == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "image new fail");
+ return nullptr;
+ }
+ }
+ image->SetPosition(193, 120, 80, 80);
+ image->SetSrc(PNG_ATTENTION_IMAGE);
+ /* -------------------------------------------------------------------------- */
+ if (noteLabel == nullptr)
+ {
+ noteLabel = new UILabelExt();
+ if (noteLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "noteLabel new fail");
+ return nullptr;
+ }
+ }
+ noteLabel->SetPosition(53, 230, 360, 35);
+ noteLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ noteLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ // noteLabel->SetText("手表正在播放手机音乐,不能对本地音乐进行操作");
+ noteLabel->SetTextId(STR_PHONE_MUSCI_NOTE);
+ noteLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+ noteLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ noteLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ /* -------------------------------------------------------------------------- */
+ if (OkButton == nullptr)
+ {
+ OkButton = new UIButton();
+ if (OkButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OkButton new fail");
+ return nullptr;
+ }
+ }
+ OkButton->SetPosition(0, noteLabel->GetY() + noteLabel->GetTextHeight() + 30, 466, 100);
+ OkButton->SetViewId(OKBUTTON);
+ OkButton->SetImageSrc(PNG_BUTTON_466x100_IMAGE, PNG_BUTTON_466x100_IMAGE);
+ OkButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0x00, UIButton::PRESSED);
+ OkButton->SetOnClickListener(this);
+ /* -------------------------------------------------------------------------- */
+ if (OKLabel == nullptr)
+ {
+ OKLabel = new UILabelExt();
+ if (OKLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OKLabel new fail");
+ return nullptr;
+ }
+ }
+ OKLabel->SetPosition(173, OkButton->GetY() + 33, 120, 35);
+ OKLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ OKLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ OKLabel->SetTextId(STR_OK); // 知道了
+ OKLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ OKLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ OKLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* -------------------------------------------------------------------------- */
+ scrollView->Add(image);
+ scrollView->Add(noteLabel);
+ scrollView->Add(OkButton);
+ scrollView->Add(OKLabel);
+ group->Add(scrollView);
+ }
+ return group;
+ }
+}
\ No newline at end of file
--- /dev/null
+#include "player/include/PlayerListDelSongView.h"
+#include "player/include/PlayersPresenter.h"
+#include "player/include/PlayersModel.h"
+#include "wearable_log.h"
+#include "ui_resource_string.h"
+#include "UiConfig.h"
+#include "custom_utils.h"
+namespace OHOS
+{
+
+ static PlayerListDelSongView *g_pPlayerListDelSongView{nullptr};
+ PlayerListDelSongView::PlayerListDelSongView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::PlayerListDelSongView");
+ g_pPlayerListDelSongView = this;
+ }
+
+ PlayerListDelSongView::~PlayerListDelSongView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::PlayerListDelSongView");
+ ClearAll();
+ g_pPlayerListDelSongView = nullptr;
+ }
+
+ PlayerListDelSongView *PlayerListDelSongView::GetInstance()
+ {
+ return g_pPlayerListDelSongView;
+ }
+
+ void PlayerListDelSongView::ClearAll(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::ClearAll");
+ if (group != nullptr)
+ {
+ group->RemoveAll();
+
+ if (dragListener != nullptr)
+ {
+ delete dragListener;
+ dragListener = nullptr;
+ }
+ if (buttonClickListener != nullptr)
+ {
+ delete buttonClickListener;
+ buttonClickListener = nullptr;
+ }
+ if (scrollView != nullptr)
+ {
+ scrollView->RemoveAll();
+
+ if (title != nullptr)
+ {
+ delete title;
+ title = nullptr;
+ }
+
+ if (deleteNotelabel != nullptr)
+ {
+ delete deleteNotelabel;
+ deleteNotelabel = nullptr;
+ }
+ if (songNameLabel != nullptr)
+ {
+ delete songNameLabel;
+ songNameLabel = nullptr;
+ }
+ if (ensureDeleteButton != nullptr)
+ {
+ delete ensureDeleteButton;
+ ensureDeleteButton = nullptr;
+ }
+ if (cancelDeleteButton != nullptr)
+ {
+ delete cancelDeleteButton;
+ cancelDeleteButton = nullptr;
+ }
+
+ delete scrollView;
+ scrollView = nullptr;
+ }
+ delete group;
+ group = nullptr;
+ }
+ }
+
+ /// @brief 设置歌曲名标签样式
+ /// @param songName 歌曲名
+ void PlayerListDelSongView::SetTheDelSongLabelStyle(const char *songName,int index)
+ {
+ delSongName = songName;
+ deleteSongIndex = index;
+ if (songNameLabel != nullptr)
+ {
+ songNameLabel->SetText(PlayersModel::GetInstance()->getHexMusicNameFromMusicName(songName).c_str());
+ songNameLabel->Invalidate();
+ }
+ }
+
+ // 删除歌曲文件
+ void PlayerListDelSongView::DeleteSongNameFile(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " whill Deleted file:%s", delSongName.c_str());
+ std::string path = PlayersModel::GetInstance()->GetMusicPlayPath() + "/" + delSongName;
+
+ if (uapi_delete_files(path.c_str()))
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Deleted file: %s successed!", path.c_str());
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to delete file!");
+ }
+ }
+
+ UIButton *PlayerListDelSongView::GetEnsureDeleteButton(void)
+ {
+ return ensureDeleteButton;
+ }
+
+ UIButton *PlayerListDelSongView::GetCancelDeleteButton(void)
+ {
+ return cancelDeleteButton;
+ }
+
+ UILabelExt *PlayerListDelSongView::PlayerListDelSongViewLabelInit(LabelConfig &labelconfig)
+ {
+ UILabelExt *label = new UILabelExt();
+ if (label == nullptr)
+ {
+ return nullptr;
+ }
+ label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height);
+ label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);
+ label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);
+ label->SetTextId(labelconfig.textId);
+ label->SetLineBreakMode(labelconfig.lineBreakMode);
+ label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);
+ return label;
+ }
+
+ UIButton *PlayerListDelSongView::PlayerListDelSongViewButtonInit(ButtonConfig &buttonconfig)
+ {
+ UIButton *button = new UIButton();
+ if (button == nullptr)
+ {
+ return nullptr;
+ }
+ button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);
+ button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+ button->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED);
+ button->SetImageSrc(buttonconfig.src, buttonconfig.src);
+
+ return button;
+ }
+
+ bool PlayerListDelSongView::CreatePlayerListDelSongViewLabel(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::CreatePlayerListDelSongViewLabel");
+ LabelConfig labelConfig = {
+ .left = 83,
+ .top = 50,
+ .width = 300,
+ .height = 35,
+ .fontSize = 30,
+ .lineHeigh = 35,
+ .textId = STR_MUSIC_LIST,
+ .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,
+ };
+ title = PlayerListDelSongViewLabelInit(labelConfig);
+ if (title == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "title new fail!");
+ return false;
+ }
+ /* -------------------------------------------------------------------------- */
+ labelConfig.left = 53;
+ labelConfig.top = 160;
+ labelConfig.width = 360;
+ deleteNotelabel = PlayerListDelSongViewLabelInit(labelConfig);
+ if (deleteNotelabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "deleteNotelabel new fail!");
+ return false;
+ }
+ // deleteNotelabel->SetText("是否永久删除");
+ deleteNotelabel->SetTextId(STR_DELETE_PERMANENTLY);
+ deleteNotelabel->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));
+ /* -------------------------------------------------------------------------- */
+ if (songNameLabel == nullptr)
+ {
+ songNameLabel = new UILabelExt();
+ if (songNameLabel == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "songNameLabel new fail!");
+ return false;
+ }
+ }
+ songNameLabel->SetPosition(53, 220, 360, 35);
+ songNameLabel->SetStyle(STYLE_TEXT_FONT, 30);
+ songNameLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+ songNameLabel->SetText("");
+ songNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ songNameLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ songNameLabel->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+ songNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);
+
+ return true;
+ }
+
+ bool PlayerListDelSongView::CreatPlayerListDelSongViewButton(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::CreatPlayerListDelSongViewButton");
+ ButtonConfig buttonconfig = {
+ .x = 111,
+ .y = 299,
+ .w = 100,
+ .h = 100,
+ .src = PNG_SYSTEM_CHECK_OFF_IMAGE,
+ };
+ cancelDeleteButton = PlayerListDelSongViewButtonInit(buttonconfig);
+ if (cancelDeleteButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ensureDeleteButton new fail!");
+ return false;
+ }
+ /* -------------------------------------------------------------------------- */
+ buttonconfig.x = 256;
+ buttonconfig.src = PNG_SYSTEM_CHECK_ON_IMAGE;
+ ensureDeleteButton = PlayerListDelSongViewButtonInit(buttonconfig);
+ if (ensureDeleteButton == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ensureDeleteButton new fail!");
+ return false;
+ }
+ buttonClickListener = static_cast<UIView::OnClickListener *>(new ButtonOnClickListener());
+ if (buttonClickListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener::GetInstance fail");
+ return false;
+ }
+ ensureDeleteButton->SetOnClickListener(buttonClickListener);
+ cancelDeleteButton->SetOnClickListener(buttonClickListener);
+
+ return true;
+ }
+
+ bool PlayerListDelSongView::CreatePlayerListDelSongViewScrollView(void)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::CreatePlayerListDelSongViewScrollView");
+ if (scrollView == nullptr)
+ {
+ scrollView = new UIScrollView();
+ if (scrollView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::scrollView new fail!");
+ return false;
+ }
+ scrollView->SetPosition(0, 0, 466, 466);
+ scrollView->SetTouchable(true);
+ scrollView->SetDraggable(true);
+ }
+ return true;
+ }
+
+ UIViewGroup *PlayerListDelSongView::CreatePlayerListDelSongView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::CreatePlayerListDelSongView");
+ if (group == nullptr)
+ {
+ group = new UIViewGroup();
+ if (group == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail");
+ return nullptr;
+ }
+ }
+ group->SetPosition(0, 0, 466, 466);
+ group->SetStyle(STYLE_BACKGROUND_OPA, 0);
+ group->SetTouchable(true);
+ group->SetDraggable(true);
+ group->SetIntercept(true);
+ group->SetViewId(MUSIC_PLAYER_DELETE_VIEW);
+ if (dragListener == nullptr)
+ {
+ dragListener = static_cast<UIView::OnDragListener *>(new PlayerOnDragListener());
+ if (dragListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dragListener new fail");
+ return nullptr;
+ }
+ }
+ group->SetOnDragListener(dragListener);
+ if (!CreatePlayerListDelSongViewScrollView() || !CreatePlayerListDelSongViewLabel() || !CreatPlayerListDelSongViewButton())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerListDelSongView::InitDelSongView fail!!");
+ }
+ scrollView->Add(title);
+ scrollView->Add(deleteNotelabel);
+ scrollView->Add(songNameLabel);
+ scrollView->Add(ensureDeleteButton);
+ scrollView->Add(cancelDeleteButton);
+ group->Add(scrollView);
+
+ return group;
+ }
+
+}
--- /dev/null
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-12 14:15:45
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-10-05 10:43:38
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/src/PlayerListitemView.cpp
+ */
+#include "player/include/PlayerListitemView.h"
+#include "ui_resource_image.h"
+#include "common/image_cache_manager.h"
+namespace OHOS
+{
+
+ PlayerListItemView::PlayerListItemView()
+ {
+ SetPosition(0, 0, 330, 70);
+ SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+ SetStyle(STYLE_BACKGROUND_OPA, 255);
+ SetTouchable(false);
+ SetUpChild();
+ Add(&sLabel);
+ Add(&sButton);
+ }
+
+ PlayerListItemView::~PlayerListItemView()
+ {
+ Remove(&sLabel);
+ Remove(&sButton);
+ }
+
+ /// @brief 设置item的信息
+ /// @param itemInfo
+ void PlayerListItemView::SetItemInfo(const PlayerListItem itemInfo)
+ {
+ sItemInfo = itemInfo;
+ sLabel.SetText(itemInfo.musicName);
+ if (itemInfo.listener != nullptr)
+ {
+ sLabel.SetOnClickListener(itemInfo.listener);
+ sButton.SetOnClickListener(itemInfo.listener);
+ }
+ }
+
+ /// @brief 设置每一个itemview上的组件
+ void PlayerListItemView::SetUpChild()
+ {
+ sLabel.SetPosition(0, 0, 260, 70);
+ sLabel.SetStyle(STYLE_TEXT_FONT, 30);
+ sLabel.SetStyle(STYLE_LINE_HEIGHT, 35);
+ sLabel.SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ sLabel.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
+ sLabel.SetRollSpeed(23);
+ sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);
+ sLabel.SetTouchable(true);
+ sLabel.SetAlign(TEXT_ALIGNMENT_LEFT,TEXT_ALIGNMENT_TOP);
+
+ sButton.SetPosition(260, 0, 70, 70);
+ sButton.SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ sButton.SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+ ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_DELETE, PLAYER_IAMGES);
+ sButton.SetImageSrc(image, image);
+ sButton.SetImagePosition(30, 0);
+ sButton.SetStyleForState(STYLE_BACKGROUND_COLOR, 0x00, UIButton::PRESSED);
+ }
+
+ /// @brief 获取list歌单的中每首歌的在list的下标
+ /// @return 返回歌曲下标
+ int PlayerListItemView::GetPlayerListIndex()
+ {
+ return sItemInfo.index;
+ }
+
+ void PlayerListItemView::UpdateItemViewStyle(bool isplaying)
+ {
+ ImageInfo *image;
+ if (isplaying)
+ {
+ image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_PLAYING, PLAYER_IAMGES);
+ if (image == nullptr)
+ {
+ return;
+ }
+ sButton.SetImageSrc(image, image);
+ sButton.SetTouchable(false);
+ sLabel.SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+ }
+ else
+ {
+ image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_DELETE, PLAYER_IAMGES);
+ if (image == nullptr)
+ {
+ return;
+ }
+ sButton.SetImageSrc(image, image);
+ sButton.SetTouchable(true);
+ sLabel.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
+ }
+ Invalidate();
+ }
+
+}
\ No newline at end of file
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: Player view
- * Author:
- * Create: 2021-07-26
- */
-#include <string>
-#include "PlayersCaseListAdapter.h"
-#include "gfx_utils/list.h"
-#include "PlayersView.h"
-#include "PlayersPresenter.h"
-#include "wearable_log.h"
-#include "PlayersModel.h"
-
-namespace OHOS {
-constexpr uint16_t TESTCASE_BUTTON_HEIGHT = 64;
-constexpr uint16_t STYLE_BORDER_WIDTH_VALUE = 4;
-constexpr uint16_t STYLE_BORDER_RADIUS_VALUE = 12;
-static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xFF333333;
-
-PlayersCaseListAdapter::~PlayersCaseListAdapter()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersCaseListAdapter::~PlayersCaseListAdapter");
- delete listener;
- listener = nullptr;
-}
-
-uint16_t PlayersCaseListAdapter::GetCount()
-{
- return PlayersListGroup::GetInstance()->GetCase().Size();
-}
-
-class BtnOnClickListListener : public UIView::OnClickListener {
-public:
- BtnOnClickListListener() {}
- ~BtnOnClickListListener() {}
- bool OnClick(UIView& view, const ClickEvent& event) override;
-
-private:
- void BtnOnListData(UIView& view);
- char *sliceId_{nullptr};
- int16_t index_{0};
-};
-
-bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtnOnClickListListener sliceId_: %s.", sliceId_);
- UNUSED(event);
- int ret;
- int32_t playerState;
- uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playersView null!");
- return false;
- }
- BtnOnListData(view);
- // 标记当前播放歌曲index_
- PlayersModel::GetInstance()->SetCurrentIndex(index_);
- // 本地播放文件路径和状态
- std::string strSrcMusic(APP_MUSIC_PATH);
- std::string tempStr("/");
- std::string strName = sliceId_;
- PlayersModel::GetInstance()->SetPlayerUri(strSrcMusic + tempStr + strName);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uri: %s.", PlayersModel::GetInstance()->GetPlayerUri().c_str());
- std::string strSongName = sliceId_;
- std::string pureName = strSongName.substr(0, strSongName.rfind("."));
- playersView->TitleSetText(pureName.c_str());
- playersView->SetPlayerListGroupStatus(false);
- // 刷新UI
- RootView::GetInstance()->Invalidate();
-
- state = playersView->GetPlayerButtonState();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state %d", state);
- if (state == UICheckBox::UICheckBoxState::UNSELECTED) {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
- /* start play */
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play");
- PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);
- if (playerState == PlayerStates::PLAYER_PAUSED) {
- ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);
- }
- PlayersModel::GetInstance()->PlayerStat(); // 播放
- } else if (state == UICheckBox::UICheckBoxState::SELECTED) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "List to play");
- PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);
- if (playerState == PlayerStates::PLAYER_STARTED) {
- ret = PlayersModel::GetInstance()->GetPlayerCtr()->Stop(); // 停止
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret);
- ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);
- }
- PlayersModel::GetInstance()->PlayerStat();
- }
- return true;
-}
-
-void BtnOnClickListListener::BtnOnListData(UIView& view)
-{
- index_ = view.GetViewIndex();
- List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();
- ListNode<PlayerCaseInfo>* node = playersCaseList.Begin();
- for (uint16_t i = 0; i < index_; i++) {
- node = node->next_;
- }
- sliceId_ = node->data_.sliceId;
-}
-
-void PlayersCaseListAdapter::LabelButtonSet()
-{
- if (item == nullptr) {
- return;
- }
- item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);
- item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);
- item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE);
- item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);
- item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED);
- item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE);
-}
-
-UIView *PlayersCaseListAdapter::GetView(UIView* inView, int16_t index)
-{
- List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();
- if (playersCaseList.IsEmpty()) {
- return nullptr;
- }
- if ((index > playersCaseList.Size() - 1) || (index < 0)) {
- return nullptr;
- }
- if (inView == nullptr) {
- item = new UILabelButton();
- if (item == nullptr) {
- return nullptr;
- }
- item->SetPosition(0, 0);
- item->SetStyleForState(STYLE_BORDER_WIDTH, STYLE_BORDER_WIDTH_VALUE, UIButton::RELEASED);
- item->SetStyleForState(STYLE_BORDER_WIDTH, STYLE_BORDER_WIDTH_VALUE, UIButton::PRESSED);
- item->SetStyleForState(STYLE_BORDER_WIDTH, STYLE_BORDER_WIDTH_VALUE, UIButton::INACTIVE);
- item->SetStyleForState(STYLE_BORDER_OPA, 0, UIButton::RELEASED);
- item->SetStyleForState(STYLE_BORDER_OPA, 0, UIButton::PRESSED);
- item->SetStyleForState(STYLE_BORDER_OPA, 0, UIButton::INACTIVE);
- item->Resize(HORIZONTAL_RESOLUTION, TESTCASE_BUTTON_HEIGHT);
- } else {
- item = static_cast<UILabelButton*>(inView);
- }
- ListNode<PlayerCaseInfo>* node = playersCaseList.Begin();
- for (uint16_t i = 0; i < index; i++) {
- node = node->next_;
- }
- if (listener == nullptr) {
- listener = new BtnOnClickListListener();
- if (listener == nullptr) {
- return nullptr;
- }
- item->SetOnClickListener(listener);
- } else {
- item->SetOnClickListener(listener);
- }
- std::string strSongName = node->data_.sliceId;
- std::string pureName = strSongName.substr(0, strSongName.rfind("."));
- const char *songName = pureName.c_str();
- item->SetText(songName);
- item->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 24); // 24: means font size
- item->SetViewIndex(index);
- item->SetAlign(TEXT_ALIGNMENT_CENTER);
- item->SetLabelPosition(24, 0); // 24: lable x-coordinate
- LabelButtonSet();
- return item;
-}
-} // namespace OHOS
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
+ * Description: Player view\r
+ * Author:\r
+ * Create: 2021-07-26\r
+ */\r
+#include <string>\r
+#include "PlayersCaseListAdapter.h"\r
+#include "gfx_utils/list.h"\r
+#include "player/include/PlayersView.h"\r
+#include "player/include/PlayersPresenter.h"\r
+#include "player/include/PlayersModel.h"\r
+#include "player/include/PlayerListitemView.h"\r
+#include "wearable_log.h"\r
+\r
+namespace OHOS\r
+{\r
+ constexpr uint16_t TESTCASE_BUTTON_HEIGHT = 64;\r
+ constexpr uint16_t STYLE_BORDER_WIDTH_VALUE = 4;\r
+ constexpr uint16_t STYLE_BORDER_RADIUS_VALUE = 12;\r
+ static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xFF333333;\r
+\r
+ class BtnOnClickListListener : public UIView::OnClickListener\r
+ {\r
+ public:\r
+ BtnOnClickListListener() {}\r
+ ~BtnOnClickListListener() {}\r
+ bool OnClick(UIView &view, const ClickEvent &event) override;\r
+\r
+ private:\r
+ void BtnOnListData(UIView &view);\r
+ char *musicPlayName{nullptr};\r
+ int16_t index_{0};\r
+ };\r
+\r
+ bool BtnOnClickListListener::OnClick(UIView &view, const ClickEvent &event)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtnOnClickListListener OnClick:");\r
+\r
+ UNUSED(event);\r
+ int ret;\r
+ int32_t playerState; /*获取Player的状态*/\r
+ uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM; /*获取音乐播放和暂停复选按钮的状态*/\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playersView null!");\r
+ return false;\r
+ }\r
+ BtnOnListData(view);\r
+ /* --------------------------- 若点击的是View类型是Button --------------------------- */\r
+ if (view.GetViewType() == UIViewType::UI_BUTTON)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetViewType = %d", view.GetViewType());\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "index = %d ,uri = %s.", view.GetViewIndex(), musicPlayName);\r
+ playersView->ChangeView(PlayersView::MUSIC_LIST_VIEW, PlayersView::MUSIC_DELETE_VIEW);\r
+ if (playersView->GetPlayerListDelSongView())\r
+ {\r
+ playersView->GetPlayerListDelSongView()->SetTheDelSongLabelStyle(musicPlayName, view.GetViewIndex());\r
+ }\r
+ return true;\r
+ }\r
+ else if(PlayersModel::GetInstance()->GetMusicSource() == false) { //本地音乐\r
+ if (PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && \r
+ PlayersModel::GetInstance()->get_a2dp_sink_playing_state()) //若ct或tg端是已连接状态且当前a2dp_sink是已播放状态\r
+ {\r
+ playersView->ChangeView(PlayersView::MUSIC_LIST_VIEW, PlayersView::MUSIC_PLAYER_TIP_VIEW);\r
+ return true;\r
+ }\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ // 标记当前播放歌曲index_\r
+ PlayersModel::GetInstance()->SetCurrentIndex(index_);\r
+ // 本地播放文件路径和状态\r
+ std::string strSrcMusic(APP_MUSIC_PATH);\r
+ std::string tempStr("/");\r
+ std::string strName = musicPlayName;\r
+ PlayersModel::GetInstance()->setcurrentplayingmusicname(musicPlayName); \r
+ PlayersModel::GetInstance()->SetPlayerUri(strSrcMusic + tempStr + strName); // 设置播放路径Uri\r
+\r
+ state = playersView->GetPlayerButtonState();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state %d", state);\r
+ if (state == UICheckBox::UICheckBoxState::UNSELECTED)\r
+ {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
+ /* start play */\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play");\r
+ PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);\r
+ if (playerState == PlayerStates::PLAYER_PAUSED)\r
+ {\r
+ ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);\r
+ }\r
+ PlayersModel::GetInstance()->PlayerStat(); // 播放\r
+ }\r
+ else if (state == UICheckBox::UICheckBoxState::SELECTED)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "List to play");\r
+ PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);\r
+ if (playerState == PlayerStates::PLAYER_STARTED)\r
+ {\r
+ ret = PlayersModel::GetInstance()->GetPlayerCtr()->Stop(); // 停止\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret);\r
+ ret = PlayersModel::GetInstance()->GetPlayerCtr()->Reset();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);\r
+ }\r
+ PlayersModel::GetInstance()->PlayerStat();\r
+ }\r
+ playersView->RefreshMusicListList();//刷新音乐列表\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "index = %d ,uri = %s.", PlayersModel::GetInstance()->GetCurrentIndex(), PlayersModel::GetInstance()->GetPlayerUri().c_str());\r
+ return true;\r
+ }\r
+\r
+ void BtnOnClickListListener::BtnOnListData(UIView &view)\r
+ {\r
+ // index_ = view.GetViewIndex();\r
+ index_ = view.GetParent()->GetViewIndex();\r
+ List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
+ ListNode<PlayerCaseInfo> *node = playersCaseList.Begin();\r
+ for (uint16_t i = 0; i < index_; i++)\r
+ {\r
+ node = node->next_;\r
+ }\r
+ musicPlayName = node->data_.sliceId;\r
+ }\r
+\r
+ PlayersCaseListAdapter::~PlayersCaseListAdapter()\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersCaseListAdapter::~PlayersCaseListAdapter");\r
+ if (listener != nullptr)\r
+ {\r
+ delete listener;\r
+ listener = nullptr;\r
+ }\r
+ }\r
+\r
+ /*获取歌曲数量*/\r
+ uint16_t PlayersCaseListAdapter::GetCount()\r
+ {\r
+ return PlayersListGroup::GetInstance()->GetCase().Size();\r
+ }\r
+\r
+ bool PlayersCaseListAdapter::GetCurrentMusicIsPlaying(void)\r
+ {\r
+ int state = PlayersModel::GetInstance()->GetPlayerState();\r
+ if (state == PlayerStates::PLAYER_STARTED || state == PlayerStates::PLAYER_PAUSED || state == PlayerStates::PLAYER_PLAYBACK_COMPLETE) {\r
+ return true;\r
+ } else {\r
+ return false;\r
+ }\r
+ }\r
+\r
+ UIView *PlayersCaseListAdapter::GetView(UIView *inView, int16_t index)\r
+ {\r
+ List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
+ if (playersCaseList.IsEmpty())\r
+ {\r
+ return nullptr;\r
+ }\r
+ if ((index > playersCaseList.Size() - 1) || (index < 0))\r
+ {\r
+ return nullptr;\r
+ }\r
+ ListNode<PlayerCaseInfo> *node = playersCaseList.Begin();\r
+ for (uint16_t i = 0; i < index; i++)\r
+ {\r
+ node = node->next_;\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ //歌名:3033332ee585abe5baa6e7a9bae997b42de69c80e5908ee79a84e68898e5bdb9 033.八度空间-最后的战役\r
+ std::string strSongName = PlayersModel::GetInstance()->getHexMusicNameFromMusicName(node->data_.sliceId);\r
+ // std::string pureName = strSongName.substr(0, strSongName.rfind("."));\r
+ const char *songName = strSongName.c_str(); // 获取纯净歌曲名\r
+ /* -------------------------------------------------------------------------- */\r
+ PlayerListItemView *item = nullptr;\r
+ PlayerListItem listitemData;\r
+\r
+ if (inView == nullptr)\r
+ {\r
+ item = new PlayerListItemView();\r
+ }\r
+ else\r
+ {\r
+ item = static_cast<PlayerListItemView *>(inView);\r
+ }\r
+ if (PlayersModel::GetInstance()->getcurrentplayingmusicname() == node->data_.sliceId && GetCurrentMusicIsPlaying())\r
+ {\r
+ item->UpdateItemViewStyle(true);\r
+ }\r
+ else\r
+ {\r
+ item->UpdateItemViewStyle(false);\r
+ }\r
+ if (listener == nullptr)\r
+ {\r
+ listener = new BtnOnClickListListener();\r
+ if (listener == nullptr)\r
+ {\r
+ return nullptr;\r
+ }\r
+ }\r
+ listitemData.index = index;\r
+ listitemData.musicName = songName;\r
+ listitemData.listener = listener;\r
+ item->SetItemInfo(listitemData);\r
+ return item;\r
+ }\r
+}\r
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: Player view\r
- * Author:\r
- * Create: 2021-07-26\r
- */\r
-\r
-#include "PlayersModel.h"\r
-#include "thread_adapter.h"\r
-#include "UiConfig.h"\r
-#include "bts_avrcp_controller.h"\r
-#include "bts_avrcp_target.h"\r
-#include "bts_a2dp_source.h"\r
-#include "BluetoothModel.h"\r
-\r
-namespace OHOS {\r
-\r
-static constexpr int VOLUME_MAXIMUM = 100;\r
-static constexpr int VOLUME_MINIMUM = 0;\r
-static constexpr int VOLUME_PER_CHANGE = 10;\r
-\r
-#define BUFFER_SIZE 15\r
-static MutexId g_mutex;\r
-PlayersModel::PlayersModel()\r
-{\r
- g_mutex = MUTEX_InitValue();\r
-}\r
-\r
-PlayersModel::~PlayersModel()\r
-{\r
- listPlayers.Clear();\r
-}\r
-\r
-bool PlayersModel::FetchedPlayersCallBack(PlayersMsg *playersMsg)\r
-{\r
- if (listPlayers.IsEmpty()) {\r
- return false;\r
- } else {\r
- MUTEX_Lock(g_mutex);\r
- *playersMsg = listPlayers.Front();\r
- listPlayers.PopFront();\r
- MUTEX_Unlock(g_mutex);\r
- }\r
- return true;\r
-}\r
-\r
-void PlayersModel::PushPlayersData(PlayersMsg playersMsg)\r
-{\r
- MUTEX_Lock(g_mutex);\r
- listPlayers.PushBack(playersMsg);\r
- MUTEX_Unlock(g_mutex);\r
-}\r
-\r
-PlayersModel *PlayersModel::GetInstance()\r
-{\r
- static PlayersModel instance;\r
- return &instance;\r
-}\r
-\r
-std::string PlayersModel::GetPlayerUri(void)\r
-{\r
- return uri;\r
-}\r
-\r
-void PlayersModel::SetPlayerUri(std::string src)\r
-{\r
- uri = src;\r
-}\r
-\r
-void PlayersModel::SetPlayButtonState(bool value)\r
-{\r
- playButtonState = value;\r
-}\r
-\r
-int PlayersModel::PlayerStat()\r
-{\r
- int32_t ret;\r
-\r
- // 设置回调函数\r
- playerCtr->SetPlayerCallback(playerCallback);\r
- // 申请资源\r
- source = std::make_shared<Source>(uri, header);\r
- if (source.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "source new fail");\r
- return OHOS_FAILURE;\r
- }\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Player uri %s.", uri.c_str());\r
- playerCtr->SetSource(*source);\r
- playerCtr->Prepare();\r
- ret = playerCtr->GetDuration(duration_);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%s,%d] GetDuration:%lld, ret:%d", __func__, __LINE__, duration_, ret);\r
- if (!isActivateAudioInterrupt) {\r
- // 申请焦点\r
- AudioManager& amIntance = AudioManager::GetInstance();\r
- sessionId = amIntance.MakeSessionId();\r
- if (sessionId == AUDIO_SESSION_ID_NONE) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "session invalid");\r
- return OHOS_FAILURE;\r
- }\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MakeSessionId %d", sessionId);\r
- playerInterruptListener = std::make_shared<PlayerInterruptListener>();\r
- if (playerInterruptListener.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerInterruptListener new fail");\r
- return OHOS_FAILURE;\r
- }\r
- playerInterruptListener->SetOwner(playerCtr);\r
- interrupt = {AUDIO_STREAM_MUSIC, sessionId, playerInterruptListener};\r
- // 激活音频中断 5s超时\r
- if (amIntance.ActivateAudioInterrupt(interrupt) == INTERRUPT_FAILED) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ActivateAudioInterrupt faild");\r
- return OHOS_FAILURE;\r
- }\r
- isActivateAudioInterrupt = true;\r
- }\r
- playerCtr->SetAudioSessionId(sessionId);\r
- // 播放\r
- ret = playerCtr->Play();\r
- if (ret != 0) {\r
- playerCtr->Stop(); // 暂停\r
- playerCtr->Reset(); // 初始化\r
- PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();\r
- if (playersPresenter != nullptr) {\r
- playersPresenter->PlayerbackReset();\r
- SetCircleProgress(100); // 100:进度100%\r
- playersPresenter->SetPlaybackProgress(circleProgress);\r
- } else {\r
- SetPlayButtonState(false);\r
- SetCircleProgress(100); // 100:进度100%\r
- }\r
- AudioManager::GetInstance().DeactivateAudioInterrupt(interrupt);\r
- isActivateAudioInterrupt = false;\r
- }\r
- return OHOS_SUCCESS;\r
-}\r
-\r
-bool PlayersModel::GetAudioInitStatus(void)\r
-{\r
- return audioInitStatus;\r
-}\r
-\r
-void PlayersModel::AudioInit(void)\r
-{\r
- if (audioInitStatus) {\r
- return;\r
- }\r
- AudioManager& amIntance = AudioManager::GetInstance();\r
- audioInitStatus = amIntance.Initialize();\r
- playerCtr = std::make_shared<Player>();\r
- if (playerCtr.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr new fail");\r
- return;\r
- }\r
- playerCallback = std::make_shared<PlayerCallbackImpl>();\r
- if (playerCallback.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCallback new fail");\r
- return;\r
- }\r
-}\r
-\r
-void PlayersModel::SetCircleProgress(int64_t value)\r
-{\r
- circleProgress = value;\r
-}\r
-\r
-int16_t PlayersModel::GetCurrentIndex(void)\r
-{\r
- return currentIndex;\r
-}\r
-\r
-void PlayersModel::SetCurrentIndex(int16_t value)\r
-{\r
- currentIndex = value;\r
-}\r
-\r
-int16_t PlayersModel::GetPlayerModel(void)\r
-{\r
- return playerModel;\r
-}\r
-\r
-void PlayersModel::SetPlayerModel(int16_t value)\r
-{\r
- playerModel = value;\r
-}\r
-\r
-void PlayersModel::SetPlayerModelAddOne(void)\r
-{\r
- playerModel++;\r
-}\r
-\r
-void PlayersModel::PlaySwitching(void)\r
-{\r
- PlayersMsg playersMsg1;\r
- playersMsg1.playerModel = GetPlayerModel();\r
- PushPlayersData(playersMsg1);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlaySwitching playerModel1 %d!!!", GetPlayerModel());\r
- int32_t ret;\r
- PlayersMsg playersMsg;\r
- if (FetchedPlayersCallBack(&playersMsg)) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FetchedPlayersCallBack true");\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop to play");\r
- switch (playersMsg.playerModel) {\r
- case PlayerModelState::LOOP:\r
- // 循环\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoopingPlayout!!!");\r
- LoopingPlayout();\r
- break;\r
- case PlayerModelState::SEQUENCE:\r
- // 顺序\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SequencePlayout!!!");\r
- SequencePlayout();\r
- break;\r
- case PlayerModelState::REPEATS:\r
- // 重复\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RepeatsPlayout!!!");\r
- ret = PlayersModel::GetInstance()->playerCtr->Stop(); // 停止\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret);\r
- ret = PlayersModel::GetInstance()->playerCtr->Reset();\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);\r
- PlayersModel::GetInstance()->PlayerStat(); // 播放\r
- break;\r
- case PlayerModelState::RANDOM:\r
- // 随机\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RandomPlayout!!!");\r
- RandomPlayout();\r
- break;\r
- default:\r
- break;\r
- }\r
- }\r
-}\r
-\r
-int PlayersModel::PlayerInit(void)\r
-{\r
- sliceId = PlayersListGroup::GetInstance()->GetCase(currentIndex);\r
- if (sliceId == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCase %d sliceId err !!!", currentIndex);\r
- char strFile[BUFFER_SIZE] = "No music files";\r
- sliceId = strFile;\r
- }\r
- std::string strSongName = sliceId;\r
- std::string pureName = strSongName.substr(0, strSongName.rfind("."));\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerInit, url: %s ", sliceId);\r
- std::string strSrcMusic(APP_MUSIC_PATH);\r
- std::string tempStr("/");\r
- std::string strName = sliceId;\r
- uri = strSrcMusic + tempStr + strName;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerInit end!");\r
- PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();\r
- if (playersPresenter == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerInit playersPresenter GetInstance fail");\r
- return OHOS_FAILURE;\r
- }\r
- playersPresenter->SetTitleSetText(pureName.c_str());\r
- playersPresenter->SetPlaybackProgress(circleProgress);\r
- playersPresenter->SetPlayerState(playButtonState);\r
- return 0;\r
-}\r
-\r
-void PlayersModel::NextSong(int16_t index)\r
-{\r
- SetCurrentIndex(index);\r
- // 播放\r
- sliceId = PlayersListGroup::GetInstance()->GetCase(index);\r
- if (sliceId == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCase %d sliceId err!!!", index);\r
- return;\r
- }\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetCase sliceId %s.", sliceId);\r
- std::string strSrcMusic(APP_MUSIC_PATH);\r
- std::string tempStr("/");\r
- std::string strName = sliceId;\r
- SetPlayerUri(strSrcMusic + tempStr + strName);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uri: %s.", GetPlayerUri().c_str());\r
- std::string strSongName = sliceId;\r
- std::string pureName = strSongName.substr(0, strSongName.rfind("."));\r
- PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();\r
- if (playersPresenter != nullptr) {\r
- playersPresenter->SetTitleSetText(pureName.c_str());\r
- playersPresenter->SetPlaybackProgress(0); // 0:进度0%\r
- }\r
- int32_t ret;\r
- int32_t playerState;\r
- playerCtr->GetPlayerState(playerState);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerState Value %d.", playerState);\r
- if ((playerState == PlayerStates::PLAYER_STARTED) || (playerState == PlayerStates::PLAYER_PLAYBACK_COMPLETE)) {\r
- /* start play */\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "start play, 160.");\r
- ret = playerCtr->Stop(); // 停止\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret);\r
- ret = playerCtr->Reset();\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);\r
- ret = PlayerStat(); // 播放\r
- if (ret != 0) {\r
- /* stop and exit */\r
- ret = playerCtr->Stop(); // 停止\r
- ret = playerCtr->Reset();\r
- }\r
- } else if (playerState == PlayerStates::PLAYER_PAUSED || (playerState == PlayerStates::PLAYER_IDLE)) {\r
- ret = playerCtr->Reset();\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);\r
- }\r
-}\r
-\r
-void PlayersModel::LoopingPlayout()\r
-{\r
- int16_t index;\r
- List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
- index = GetCurrentIndex();\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoopingPlayout, index %d.", index);\r
- if ((index > playersCaseList.Size() - 1) || (index < 0)) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");\r
- SetCurrentIndex(0);\r
- return;\r
- }\r
- if (GetPlayerModel() == PlayerModelState::RANDOM) {\r
- RandomPlayout();\r
- return;\r
- } else {\r
- index++; // 下一曲\r
- }\r
- if (index > playersCaseList.Size() - 1) {\r
- index = 0;\r
- }\r
- NextSong(index);\r
- SetCircleProgress(0); // 0:进度0%\r
-}\r
-\r
-void PlayersModel::SequencePlayout()\r
-{\r
- int16_t index;\r
- List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
- index = GetCurrentIndex();\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SequencePlayout, index %d.", index);\r
- if ((index > playersCaseList.Size() - 1) || (index < 0)) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");\r
- SetCurrentIndex(0);\r
- return;\r
- }\r
- index++; // 下一曲\r
- if (index > playersCaseList.Size() - 1) {\r
- playerCtr->Stop(); // 暂停\r
- playerCtr->Reset(); // 初始化\r
- PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();\r
- if (playersPresenter != nullptr) {\r
- playersPresenter->PlayerbackReset();\r
- } else {\r
- SetPlayButtonState(false);\r
- }\r
- SetCircleProgress(100); // 100:进度100%\r
- index = playersCaseList.Size() - 1;\r
- }\r
- NextSong(index);\r
-}\r
-\r
-void PlayersModel::RandomPlayout()\r
-{\r
- int16_t random;\r
- int16_t indexMax;\r
- srand((unsigned)time(nullptr));\r
- List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
- indexMax = playersCaseList.Size() - 1;\r
- random = (rand() % (indexMax + 1));\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RANDOM %d.", random);\r
- if ((random > playersCaseList.Size() - 1) || (random < 0)) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "random err");\r
- SetCurrentIndex(0);\r
- return;\r
- }\r
- if (GetCurrentIndex() == random) {\r
- random++;\r
- if (random > playersCaseList.Size() - 1) {\r
- random = 0;\r
- }\r
- }\r
- NextSong(random);\r
- SetCircleProgress(0); // 0:进度0%\r
-}\r
-\r
-void PlayersModel::PreviousPlayout()\r
-{\r
- int16_t index;\r
- List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
- index = GetCurrentIndex();\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PreviousPlayout, index %d.", index);\r
- if ((index > playersCaseList.Size() - 1) || (index < 0)) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");\r
- SetCurrentIndex(0);\r
- return;\r
- }\r
- index--; // 上一曲\r
- if (index < 0) {\r
- index = playersCaseList.Size() - 1;\r
- }\r
- NextSong(index);\r
- SetCircleProgress(0); // 0:进度0%\r
-}\r
-\r
-std::shared_ptr<Player> PlayersModel::GetPlayerCtr()\r
-{\r
- return playerCtr;\r
-}\r
-\r
-std::shared_ptr<PlayerInterruptListener> PlayersModel::GetPlayerIntrptListener(void)\r
-{\r
- return playerInterruptListener;\r
-}\r
-\r
-int PlayersModel::GetPlayerState(void)\r
-{\r
- int state;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] GetPlayerState");\r
-\r
- if (playerCtr.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");\r
- return ERR_RET;\r
- }\r
- playerCtr->GetPlayerState(state);\r
- return state;\r
-}\r
-\r
-bool PlayersModel::HasPlayerPlayed(void)\r
-{\r
- int state = GetPlayerState();\r
- if (state == ERR_RET) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get Player State failed!!");\r
- return false;\r
- }\r
- if (state != PlayerStates::PLAYER_STARTED && state != PlayerStates::PLAYER_PAUSED &&\r
- state != PlayerStates::PLAYER_STOPPED && state != PlayerStates::PLAYER_PLAYBACK_COMPLETE) {\r
- if (!isStopAndReset) {\r
- return false;\r
- }\r
- }\r
- return true;\r
-}\r
-\r
-/* 蓝牙连接的音频控制,对按钮属性进行设置 */\r
-void PlayersModel::ConncetBtResetButton()\r
-{\r
- int32_t connCtState = avrcp_ct_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());\r
- int32_t connTgState = avrcp_tg_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());\r
- if (connCtState == PROFILE_STATE_CONNECTED || connTgState == PROFILE_STATE_CONNECTED) {\r
- if (PlayersPresenter::GetInstance() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::GetInstance() == nullptr");\r
- return;\r
- }\r
- PlayersPresenter::GetInstance()->PlayerHeadsetReset();\r
- }\r
-}\r
-\r
-int PlayersModel::PlayerPlay(void)\r
-{\r
- int state;\r
- int ret;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PlayerPlay");\r
-\r
- state = GetPlayerState();\r
- if (state == ERR_RET) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
-\r
- if (playerCtr.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- if (state == PlayerStates::PLAYER_PAUSED || state == PlayerStates::PLAYER_STOPPED) { // 暂停状态则直接开始\r
- ret = playerCtr->Play();\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Play err, ret:%d", ret);\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- PlayersModel::GetInstance()->SetPlayButtonState(true); // 播放控件图形同步\r
- ConncetBtResetButton(); // 蓝牙连接的音频控制,对按钮属性进行设置\r
- return NORMAL;\r
- } else if (state == PlayerStates::PLAYER_STARTED || state == PlayerStates::PLAYER_PLAYBACK_COMPLETE) { // 已经在播放状态则不做操作\r
- return SONG_ALREADY_PLAY;\r
- } else { // 其它情况的处理\r
- ret = PlayersModel::GetInstance()->PlayerStat();\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret);\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- PlayersModel::GetInstance()->SetPlayButtonState(true); // 播放控件图形同步\r
- ConncetBtResetButton();\r
- return NORMAL;\r
- }\r
-}\r
-\r
-int PlayersModel::PlayerPause(void)\r
-{\r
- int state;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PlayerPause");\r
-\r
- state = GetPlayerState();\r
- if (state == ERR_RET) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
-\r
- if (playerCtr.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- if (state == PlayerStates::PLAYER_PAUSED) { // 暂停状态则不操作\r
- return SONG_ALREADY_PAUSE;\r
- } else if (state == PlayerStates::PLAYER_STARTED || state == PlayerStates::PLAYER_PLAYBACK_COMPLETE) {\r
- int ret = playerCtr->Pause();\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Pause err, ret:%d!!", ret);\r
- return EXECUTE_FUNC_FAILED;\r
- } else {\r
- PlayersModel::GetInstance()->SetPlayButtonState(false);\r
- ConncetBtResetButton();\r
- return NORMAL;\r
- }\r
- } else if (state == PlayerStates::PLAYER_STOPPED) {\r
- return SONG_ALREADY_STOP;\r
- }\r
- return NORMAL;\r
-}\r
-\r
-int PlayersModel::PlayerStop(void)\r
-{\r
- int state;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PlayerStop");\r
- state = GetPlayerState();\r
- if (state == ERR_RET) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- if (playerCtr.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- if (state == PlayerStates::PLAYER_STARTED || state == PlayerStates::PLAYER_PLAYBACK_COMPLETE) {\r
- int ret = playerCtr->Stop();\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Stop err, ret:%d", ret);\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- ret = playerCtr->Reset();\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Reset err, ret:%d", ret);\r
- return EXECUTE_FUNC_FAILED;\r
- } else {\r
- isStopAndReset = true;\r
- PlayersModel::GetInstance()->SetPlayButtonState(false);\r
- PlayersModel::GetInstance()->SetCircleProgress(0);\r
- ConncetBtResetButton();\r
- }\r
- AudioManager::GetInstance().DeactivateAudioInterrupt(interrupt);\r
- return NORMAL;\r
- } else if (state == PlayerStates::PLAYER_PAUSED) {\r
- int ret = playerCtr->Reset();\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Reset err, ret:%d", ret);\r
- return EXECUTE_FUNC_FAILED;\r
- } else {\r
- PlayersModel::GetInstance()->SetPlayButtonState(false);\r
- PlayersModel::GetInstance()->SetCircleProgress(0);\r
- ConncetBtResetButton();\r
- }\r
- AudioManager::GetInstance().DeactivateAudioInterrupt(interrupt);\r
- return NORMAL;\r
- } else if (state == PlayerStates::PLAYER_STOPPED) {\r
- return SONG_ALREADY_STOP;\r
- }\r
- return NORMAL;\r
-}\r
-\r
-int PlayersModel::PreSongOperate(void)\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PreSongOperate");\r
-\r
- PlayersModel::GetInstance()->PreviousPlayout();\r
- PlayersModel::GetInstance()->SetPlayButtonState(true);\r
- return NORMAL;\r
-}\r
-\r
-int PlayersModel::NextSongOperate(void)\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] NextSongOperate");\r
-\r
- PlayersModel::GetInstance()->LoopingPlayout();\r
- PlayersModel::GetInstance()->SetPlayButtonState(true);\r
- return NORMAL;\r
-}\r
-\r
-int PlayersModel::IncreaseVolume(void) // 不带界面增加音量\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] IncreaseVolume");\r
-\r
- int curSound = AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Presound is %d", curSound);\r
- if (curSound > VOLUME_MAXIMUM - VOLUME_PER_CHANGE) {\r
- curSound = VOLUME_MAXIMUM;\r
- } else {\r
- curSound += VOLUME_PER_CHANGE;\r
- }\r
- AudioManager::GetInstance().SetVolume(AUDIO_STREAM_MUSIC, curSound);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Now music sound is %d", curSound);\r
- return NORMAL;\r
-}\r
-\r
-int PlayersModel::DecreaseVolume(void) // 不带界面减小音量\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] DecreaseVolume");\r
-\r
- int curSound = AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Presound is %d", curSound);\r
- if (curSound < VOLUME_MINIMUM + VOLUME_PER_CHANGE) {\r
- curSound = VOLUME_MINIMUM;\r
- } else {\r
- curSound -= VOLUME_PER_CHANGE;\r
- }\r
- AudioManager::GetInstance().SetVolume(AUDIO_STREAM_MUSIC, curSound);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Now music sound is %d", curSound);\r
- return NORMAL;\r
-}\r
-\r
-int32_t PlayersModel::GetPlayerstatus()\r
-{\r
- int32_t playerState;\r
- if (playerCtr.get() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::GetPlayerstatus playerCtr is nullptr");\r
- return EXECUTE_FUNC_FAILED;\r
- }\r
- playerCtr->GetPlayerState(playerState);\r
-\r
- switch (playerState) {\r
- case PLAYER_STARTED:\r
- playerState = AVRCP_PLAY_STATUS_PLAYING;\r
- break;\r
- case PLAYER_PAUSED:\r
- playerState = AVRCP_PLAY_STATUS_PAUSED;\r
- break;\r
- case PLAYER_STOPPED:\r
- playerState = AVRCP_PLAY_STATUS_STOPPED;\r
- break;\r
- default:\r
- playerState = AVRCP_PLAY_STATUS_STOPPED;\r
- break;\r
- }\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel::GetPlayerstatus]status = [%d]", playerState);\r
- return playerState;\r
-}\r
-\r
-void PlayersModel::SetBTMusicPlay(avrcp_key_operation_t notification)\r
-{\r
- int ret;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel] SetBTMusicPlay");\r
- if (BluetoothModel::GetInstance()->GetLastConnedAddr() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayerModel::SetBTMusicPlay] GetLastConnedAddr is nullptr");\r
- return;\r
- }\r
- if (notification == AVRCP_KEY_PLAY) {\r
- ret = a2dp_src_start_playing(BluetoothModel::GetInstance()->GetLastConnedAddr()); // 设置耳机的状态为播放\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel::SetBTMusicPlay] A2dpSrcStartPlaying ret:%d", ret);\r
- avrcp_tg_notify_playback_status_changed(PlayersModel::GetInstance()->GetPlayerstatus());\r
- } else if (notification == AVRCP_KEY_PAUSE) {\r
- ret = a2dp_src_suspend_playing(BluetoothModel::GetInstance()->GetLastConnedAddr());\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel::SetBTMusicPlay] A2dpSrcSuspendPlaying ret:%d", ret); // 设置耳机的状态暂停\r
- avrcp_tg_notify_playback_status_changed(PlayersModel::GetInstance()->GetPlayerstatus());\r
- }\r
-}\r
-// 蓝牙连接和本地的音乐播放\r
-void PlayersModel::ConnectBtAndLocalPlay(int32_t connCtState, int32_t connTgState, int32_t playerState)\r
-{\r
- int ret;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel] ConnectBtAndLocalPlay connCtState = %d connTgState = %d", connCtState, connTgState);\r
- avrcp_key_operation_t playNotification = AVRCP_KEY_PLAY;\r
- if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayersModel::ConnectBtAndLocalPlay] BT GetPlayerCtr is nullptr ");\r
- return;\r
- }\r
- if (connCtState == HFP_SCO_STATE_CONNECTED || connTgState == HFP_SCO_STATE_CONNECTED) {\r
- if (playerState == PlayerStates::PLAYER_PAUSED) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BTPLAYER_PAUSED play, 122.");\r
- PlayersModel::GetInstance()->GetPlayerCtr()->Play(); // 暂停后的播放\r
- PlayersModel::GetInstance()->SetBTMusicPlay(playNotification);\r
- } else {\r
- ret = PlayersModel::GetInstance()->PlayerStat(); // 蓝牙连接播放\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayersModel::ConnBtAndLocalPlay] BTPlayerStat err, ret:%d", ret);\r
- }\r
- PlayersModel::GetInstance()->SetBTMusicPlay(playNotification);\r
- }\r
- } else {\r
- if (playerState == PlayerStates::PLAYER_PAUSED) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PLAYER_PAUSED play, 122.");\r
- PlayersModel::GetInstance()->GetPlayerCtr()->Play();\r
- } else {\r
- ret = PlayersModel::GetInstance()->PlayerStat(); // 本地播放\r
- if (ret != 0) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret);\r
- }\r
- }\r
- }\r
-}\r
-\r
-// 蓝牙连接和本地音乐的暂停\r
-void PlayersModel::ConnectBtAndLocalPause(int32_t connCtState, int32_t connTgState)\r
-{\r
- int ret;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel] ConnectBtAndLocalPause");\r
- avrcp_key_operation_t playNotification = AVRCP_KEY_PAUSE;\r
- if (connCtState == HFP_SCO_STATE_CONNECTED || connTgState == HFP_SCO_STATE_CONNECTED) {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state == BTUNSELECTED, 105.");\r
- if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayersModel::ConnectBtAndLocalPause] BT GetPlayerCtr is nullptr");\r
- return;\r
- }\r
- ret = PlayersModel::GetInstance()->GetPlayerCtr()->Pause(); // 蓝牙连接暂停\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BT Music Pause, ret:%d", ret);\r
- PlayersModel::GetInstance()->SetBTMusicPlay(playNotification);\r
- } else {\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state == UNSELECTED, 105.");\r
- ret = PlayersModel::GetInstance()->GetPlayerCtr()->Pause(); // 本地暂停\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Pause, ret:%d", ret);\r
- }\r
-}\r
-\r
-void PlayersModel::ClearActivateAudioInterrupt()\r
-{\r
- isActivateAudioInterrupt = false;\r
-}\r
-\r
-void PlayersModel::GetDuration(int64_t &duration)\r
-{\r
- duration = duration_;\r
-}\r
-\r
-}
\ No newline at end of file
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: Player view
+ * Author:
+ * Create: 2021-07-26
+ */
+
+#include "player/include/PlayersModel.h"
+#include "player/include/PlayersModelC.h"
+#include "thread_adapter.h"
+#include "UiConfig.h"
+#include "bts_avrcp_controller.h"
+#include "bts_avrcp_target.h"
+#include "bts_a2dp_source.h"
+#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>
+#include "MainViewSample.h"
+#include "settings/include/SettingModel.h"
+#include "bluetooth/include/BluetoothHeadsetEvent.h"
+#include <bts_a2dp_sink.h>
+#include "system/include/SystemLogModel.h"
+#include <custom_save_runtime.h>
+namespace OHOS {
+
+static constexpr int VOLUME_MAXIMUM = 100;
+static constexpr int VOLUME_MINIMUM = 0;
+static constexpr int VOLUME_PER_CHANGE = 10;
+
+#define BUFFER_SIZE 15
+static MutexId g_mutex;
+PlayersModel::PlayersModel()
+{
+ g_mutex = MUTEX_InitValue();
+}
+
+PlayersModel::~PlayersModel()
+{
+ listPlayers.Clear();
+}
+
+bool PlayersModel::FetchedPlayersCallBack(PlayersMsg *playersMsg)
+{
+ if (listPlayers.IsEmpty() == true) {
+ return false;
+ } else {
+ MUTEX_Lock(g_mutex);
+ *playersMsg = listPlayers.Front();
+ listPlayers.PopFront();
+ MUTEX_Unlock(g_mutex);
+ }
+ return true;
+}
+
+void PlayersModel::PushPlayersData(PlayersMsg playersMsg)
+{
+ MUTEX_Lock(g_mutex);
+ listPlayers.PushBack(playersMsg);
+ MUTEX_Unlock(g_mutex);
+}
+
+PlayersModel *PlayersModel::GetInstance()
+{
+ static PlayersModel instance;
+ return &instance;
+}
+
+std::string PlayersModel::GetPlayerUri(void)
+{
+ return uri;
+}
+
+void PlayersModel::SetPlayerUri(std::string src)
+{
+ uri = src;
+}
+
+void PlayersModel::SetPlayButtonState(bool value)
+{
+ playButtonState = value;
+}
+
+int PlayersModel::PlayerStat()
+{
+ int32_t ret;
+
+ // 设置回调函数
+ playerCtr->SetPlayerCallback(playerCallback);
+ // 添加条件判断,确保uri必须为MP3格式
+ if (uri.find(".mp3") == std::string::npos) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid file format. Only MP3 files are supported.");
+ return OHOS_FAILURE;
+ }
+ // 申请资源
+ source = std::make_shared<Source>(uri, header);
+ if (source.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "source new fail");
+ return OHOS_FAILURE;
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Player uri %s", uri.c_str());
+ ret = playerCtr->SetSource(*source);
+ if(ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetSource fail");
+ playerCtr->Reset();
+ return OHOS_FAILURE;
+ }
+ ret = playerCtr->Prepare();
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Prepare fail");
+ playerCtr->Reset();
+ return OHOS_FAILURE;
+ }
+ ret = playerCtr->GetDuration(duration_);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[%s,%d] GetDuration:%lld, ret:%d", __func__, __LINE__, duration_, ret);
+ if (!isActivateAudioInterrupt) {
+ // 申请焦点
+ AudioManager& amIntance = AudioManager::GetInstance();
+ sessionId = amIntance.MakeSessionId();
+ if (sessionId == AUDIO_SESSION_ID_NONE) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "session invalid");
+ return OHOS_FAILURE;
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MakeSessionId %d", sessionId);
+ playerInterruptListener = std::make_shared<PlayerInterruptListener>();
+ if (playerInterruptListener.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerInterruptListener new fail");
+ return OHOS_FAILURE;
+ }
+ playerInterruptListener->SetOwner(playerCtr);
+ interrupt = {AUDIO_STREAM_MUSIC, sessionId, playerInterruptListener};
+ // 激活音频中断 5s超时
+ if (amIntance.ActivateAudioInterrupt(interrupt) == INTERRUPT_FAILED) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ActivateAudioInterrupt faild");
+ return OHOS_FAILURE;
+ }
+ isActivateAudioInterrupt = true;
+ }
+ ret = playerCtr->SetAudioSessionId(sessionId);
+ if (ret!= 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetAudioSessionId faild");
+ playerCtr->Reset();
+ return OHOS_FAILURE;
+ }
+ // 播放
+ ret = playerCtr->Play();
+ if (ret != 0) {
+ playerCtr->Stop(); // 暂停
+ playerCtr->Reset(); // 初始化
+ PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();
+ if (playersPresenter != nullptr) {
+ playersPresenter->PlayerbackReset();
+ SetCircleProgress(0); // 100:进度100%
+ playersPresenter->SetPlaybackProgress(circleProgress);
+ } else {
+ SetPlayButtonState(false);
+ SetCircleProgress(0); // 100:进度100%
+ }
+ AudioManager::GetInstance().DeactivateAudioInterrupt(interrupt);
+ isActivateAudioInterrupt = false;
+ } else {
+ //如果播放成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_START);//TOOD*
+ }
+ return OHOS_SUCCESS;
+}
+
+bool PlayersModel::GetAudioInitStatus(void)
+{
+ return audioInitStatus;
+}
+
+void PlayersModel::AudioInit(void)
+{
+ if (audioInitStatus == true) {
+ return;
+ }
+ AudioManager& amIntance = AudioManager::GetInstance();
+ audioInitStatus = amIntance.Initialize();
+ playerCtr = std::make_shared<Player>();
+ if (playerCtr.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr new fail");
+ return;
+ }
+ playerCallback = std::make_shared<PlayerCallbackImpl>();
+ if (playerCallback.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCallback new fail");
+ return;
+ }
+}
+
+void PlayersModel::SetCircleProgress(int64_t value)
+{
+ circleProgress = value;
+}
+
+int16_t PlayersModel::GetCurrentIndex(void)
+{
+ return currentIndex;
+}
+
+void PlayersModel::SetCurrentIndex(int16_t value)
+{
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersModel::SetCurrentIndex,value = %d",value);
+ currentIndex = value;
+}
+
+int16_t PlayersModel::GetPlayerModel(void)
+{
+ return playerModel;
+}
+
+void PlayersModel::SetPlayerModel(int16_t value)
+{
+ playerModel = value;
+}
+
+void PlayersModel::SetPlayerModelAddOne(void)
+{
+ playerModel++;
+}
+
+void PlayersModel::PlaySwitching(void)
+{
+ PlayersMsg playersMsg1;
+ playersMsg1.playerModel = GetPlayerModel();
+ PushPlayersData(playersMsg1);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlaySwitching playerModel1 %d!!!", GetPlayerModel());
+ int32_t ret;
+ PlayersMsg playersMsg;
+ if (FetchedPlayersCallBack(&playersMsg) == true) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FetchedPlayersCallBack true");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop to play");
+ switch (playersMsg.playerModel) {
+ case PlayerModelState::LOOP:
+ // 循环
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoopingPlayout!!!");
+ LoopingPlayout();
+ break;
+ case PlayerModelState::SEQUENCE:
+ // 顺序
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SequencePlayout!!!");
+ SequencePlayout();
+ break;
+ case PlayerModelState::REPEATS:
+ // 重复
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RepeatsPlayout!!!");
+ ret = PlayersModel::GetInstance()->playerCtr->Stop(); // 停止
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stop, ret:%d", ret);
+ ret = PlayersModel::GetInstance()->playerCtr->Reset();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);
+ PlayersModel::GetInstance()->PlayerStat(); // 播放
+ break;
+ case PlayerModelState::RANDOM:
+ // 随机
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RandomPlayout!!!");
+ RandomPlayout();
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+int PlayersModel::PlayerInit(void)
+{
+ sliceId = PlayersListGroup::GetInstance()->GetCase(currentIndex);
+ if (sliceId == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCase %d sliceId err !!!", currentIndex);
+ PlayersModel::GetInstance()->PlayerStop(); /*停止音乐*/
+ PlayersModel::GetInstance()->ClearActivateAudioInterrupt();
+ char strFile[BUFFER_SIZE] = "No music files";
+ sliceId = strFile;
+ }
+ currentplayingmusicname = sliceId;//记录当前播放的歌曲的名称
+ std::string strSongName = sliceId;
+ std::string pureName = strSongName.substr(0, strSongName.rfind("."));
+ const char *songName = pureName.c_str();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerInit, url: %s ", sliceId);
+ std::string strSrcMusic(APP_MUSIC_PATH);
+ std::string tempStr("/");
+ std::string strName = sliceId;
+ uri = strSrcMusic + tempStr + strName;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerInit end!");
+ PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();
+ if (playersPresenter == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerInit playersPresenter GetInstance fail");
+ return OHOS_FAILURE;
+ }
+ playersPresenter->SetPlaybackProgress(circleProgress);
+ playersPresenter->SetPlayerState(playButtonState);
+ // PlayerStat();
+ return 0;
+}
+
+void PlayersModel::NextSong(int16_t index)
+{
+ SetCurrentIndex(index);
+ // 播放
+ sliceId = PlayersListGroup::GetInstance()->GetCase(index);
+ if (sliceId == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCase %d sliceId err!!!", index);
+ return;
+ }
+ currentplayingmusicname = sliceId;//记录当前播放的歌曲的名称
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetCase sliceId %s.", sliceId);
+ std::string strSrcMusic(APP_MUSIC_PATH);
+ std::string tempStr("/");
+ std::string strName = sliceId;
+ SetPlayerUri(strSrcMusic + tempStr + strName);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uri: %s.", GetPlayerUri().c_str());
+ std::string strSongName = sliceId;
+ std::string pureName = strSongName.substr(0, strSongName.rfind("."));
+ const char *songName = pureName.c_str();
+ PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();
+ if (playersPresenter != nullptr) {
+ playersPresenter->SetPlaybackProgress(0); // 0:进度0%
+ }
+ int32_t ret;
+ int32_t playerState;
+ playerCtr->GetPlayerState(playerState);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerState Value %d.", playerState);
+ 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 = PlayerStat(); // 播放
+ if (ret != 0) {
+ /* stop and exit */
+ ret = playerCtr->Stop(); // 停止
+ ret = playerCtr->Reset();
+ }
+ } else if (playerState == PlayerStates::PLAYER_PAUSED || (playerState == PlayerStates::PLAYER_IDLE)) {
+ ret = playerCtr->Reset();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Reset, ret:%d", ret);
+ }
+}
+
+void PlayersModel::LoopingPlayout()
+{
+ int16_t index;
+ List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();
+ index = GetCurrentIndex();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoopingPlayout, index %d.", index);
+ if ((index > playersCaseList.Size() - 1) || (index < 0)) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");
+ SetCurrentIndex(0);
+ return;
+ }
+ if (GetPlayerModel() == PlayerModelState::RANDOM) {
+ RandomPlayout();
+ return;
+ } else {
+ index++; // 下一曲
+ }
+ if (index > playersCaseList.Size() - 1) {
+ index = 0;
+ }
+ NextSong(index);
+ SetCircleProgress(0); // 0:进度0%
+}
+
+void PlayersModel::SequencePlayout()
+{
+ int16_t index;
+ List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();
+ index = GetCurrentIndex();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SequencePlayout, index %d.", index);
+ if ((index > playersCaseList.Size() - 1) || (index < 0)) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");
+ SetCurrentIndex(0);
+ return;
+ }
+ index++; // 下一曲
+ if (index > playersCaseList.Size() - 1) {
+ playerCtr->Stop(); // 暂停
+ playerCtr->Reset(); // 初始化
+ PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();
+ if (playersPresenter != nullptr) {
+ playersPresenter->PlayerbackReset();
+ } else {
+ SetPlayButtonState(false);
+ }
+ SetCircleProgress(100); // 100:进度100%
+ // index = playersCaseList.Size() - 1;
+ index = 0;// 所有歌曲播放完,重置索引从头开始播放
+ AudioManager::GetInstance().DeactivateAudioInterrupt(interrupt);
+ ClearActivateAudioInterrupt();
+ }
+ NextSong(index);
+}
+
+void PlayersModel::RandomPlayout()
+{
+ int16_t random;
+ int16_t indexMax;
+ srand((unsigned)time(nullptr));
+ List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();
+ indexMax = playersCaseList.Size() - 1;
+ random = (rand() % (indexMax + 1));
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RANDOM %d.", random);
+ if ((random > playersCaseList.Size() - 1) || (random < 0)) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "random err");
+ SetCurrentIndex(0);
+ return;
+ }
+ if (GetCurrentIndex() == random) {
+ random++;
+ if (random > playersCaseList.Size() - 1) {
+ random = 0;
+ }
+ }
+ NextSong(random);
+ SetCircleProgress(0); // 0:进度0%
+}
+
+void PlayersModel::PreviousPlayout()
+{
+ int16_t index;
+ List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();
+ index = GetCurrentIndex();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PreviousPlayout, index %d.", index);
+ if ((index > playersCaseList.Size() - 1) || (index < 0)) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "currentIndex err");
+ SetCurrentIndex(0);
+ return;
+ }
+ index--; // 上一曲
+ if (index < 0) {
+ index = playersCaseList.Size() - 1;
+ }
+ NextSong(index);
+ SetCircleProgress(0); // 0:进度0%
+}
+
+std::shared_ptr<Player> PlayersModel::GetPlayerCtr()
+{
+ return playerCtr;
+}
+
+std::shared_ptr<PlayerInterruptListener> PlayersModel::GetPlayerIntrptListener(void)
+{
+ return playerInterruptListener;
+}
+
+int PlayersModel::GetPlayerState(void)
+{
+ int state;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] GetPlayerState");
+
+ if (playerCtr.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");
+ return ERR_RET;
+ }
+ playerCtr->GetPlayerState(state);
+ return state;
+}
+
+bool PlayersModel::HasPlayerPlayed(void)
+{
+ int state = GetPlayerState();
+ if (state == ERR_RET) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get Player State failed!!");
+ return false;
+ }
+ if (state != PlayerStates::PLAYER_STARTED && state != PlayerStates::PLAYER_PAUSED &&
+ state != PlayerStates::PLAYER_STOPPED && state != PlayerStates::PLAYER_PLAYBACK_COMPLETE) {
+ if (!isStopAndReset) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/* 蓝牙连接的音频控制,对按钮属性进行设置 */
+void PlayersModel::ConncetBtResetButton()
+{
+ int32_t connCtState = avrcp_ct_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());
+ int32_t connTgState = avrcp_tg_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());
+ if (connCtState == PROFILE_STATE_CONNECTED || connTgState == PROFILE_STATE_CONNECTED) {
+ if (PlayersPresenter::GetInstance() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::GetInstance() == nullptr");
+ return;
+ }
+ PlayersPresenter::GetInstance()->PlayerHeadsetReset();
+ }
+}
+
+int PlayersModel::PlayerPlay(void)
+{
+ int state;
+ int ret;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PlayerPlay");
+
+ state = GetPlayerState();
+ if (state == ERR_RET) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");
+ return EXECUTE_FUNC_FAILED;
+ }
+
+ if (playerCtr.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");
+ return EXECUTE_FUNC_FAILED;
+ }
+ if (state == PlayerStates::PLAYER_PAUSED || state == PlayerStates::PLAYER_STOPPED) { // 暂停状态则直接开始
+ ret = playerCtr->Play();
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Play err, ret:%d", ret);
+ return EXECUTE_FUNC_FAILED;
+ } else {
+ //如果播放成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_START);//TOOD*
+ }
+ PlayersModel::GetInstance()->SetPlayButtonState(true); // 播放控件图形同步
+ ConncetBtResetButton(); // 蓝牙连接的音频控制,对按钮属性进行设置
+ return NORMAL;
+ } else if (state == PlayerStates::PLAYER_STARTED || state == PlayerStates::PLAYER_PLAYBACK_COMPLETE) { // 已经在播放状态则不做操作
+ return SONG_ALREADY_PLAY;
+ } else { // 其它情况的处理
+ ret = PlayersModel::GetInstance()->PlayerStat();
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret);
+ return EXECUTE_FUNC_FAILED;
+ }
+ PlayersModel::GetInstance()->SetPlayButtonState(true); // 播放控件图形同步
+ ConncetBtResetButton();
+ return NORMAL;
+ }
+}
+
+int PlayersModel::PlayerPause(void)
+{
+ int state;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PlayerPause");
+
+ state = GetPlayerState();
+ if (state == ERR_RET) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");
+ return EXECUTE_FUNC_FAILED;
+ }
+
+ if (playerCtr.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");
+ return EXECUTE_FUNC_FAILED;
+ }
+ if (state == PlayerStates::PLAYER_PAUSED) { // 暂停状态则不操作
+ return SONG_ALREADY_PAUSE;
+ } else if (state == PlayerStates::PLAYER_STARTED || state == PlayerStates::PLAYER_PLAYBACK_COMPLETE) {
+ int ret = playerCtr->Pause();
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Pause err, ret:%d!!", ret);
+ return EXECUTE_FUNC_FAILED;
+ } else {
+ //本地音乐暂停成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_PAUSE);//TOOD*
+ PlayersModel::GetInstance()->SetPlayButtonState(false);
+ ConncetBtResetButton();
+ return NORMAL;
+ }
+ } else if (state == PlayerStates::PLAYER_STOPPED) {
+ return SONG_ALREADY_STOP;
+ }
+ return NORMAL;
+}
+
+int PlayersModel::PlayerStop(void)
+{
+ int state;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PlayerStop");
+ state = GetPlayerState();
+ if (state == ERR_RET) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Get state of player failed!!");
+ return EXECUTE_FUNC_FAILED;
+ }
+ if (playerCtr.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerCtr.get() is nullptr!!");
+ return EXECUTE_FUNC_FAILED;
+ }
+ if (state == PlayerStates::PLAYER_STARTED || state == PlayerStates::PLAYER_PLAYBACK_COMPLETE) {
+
+ int ret = playerCtr->Stop();
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Stop err, ret:%d", ret);
+ return EXECUTE_FUNC_FAILED;
+ }
+ ret = playerCtr->Reset();
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Reset err, ret:%d", ret);
+ return EXECUTE_FUNC_FAILED;
+ } else {
+ isStopAndReset = true;
+ PlayersModel::GetInstance()->SetPlayButtonState(false);
+ PlayersModel::GetInstance()->SetCircleProgress(0);
+ ConncetBtResetButton();
+ // 本地音乐停止成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_STOP);//TOOD*
+ }
+ AudioManager::GetInstance().DeactivateAudioInterrupt(interrupt);
+ return NORMAL;
+ } else if (state == PlayerStates::PLAYER_PAUSED) {
+ int ret = playerCtr->Reset();
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Reset err, ret:%d", ret);
+ return EXECUTE_FUNC_FAILED;
+ } else {
+ PlayersModel::GetInstance()->SetPlayButtonState(false);
+ PlayersModel::GetInstance()->SetCircleProgress(0);
+ ConncetBtResetButton();
+ // 本地音乐停止成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_STOP);//TOOD*
+ }
+ AudioManager::GetInstance().DeactivateAudioInterrupt(interrupt);
+ return NORMAL;
+ } else if (state == PlayerStates::PLAYER_STOPPED) {
+ return SONG_ALREADY_STOP;
+ }
+ return NORMAL;
+}
+
+int PlayersModel::PreSongOperate(void)
+{
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] PreSongOperate");
+
+ PlayersModel::GetInstance()->PreviousPlayout();
+ PlayersModel::GetInstance()->SetPlayButtonState(true);
+ return NORMAL;
+}
+
+int PlayersModel::NextSongOperate(void)
+{
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] NextSongOperate");
+
+ PlayersModel::GetInstance()->LoopingPlayout();
+ PlayersModel::GetInstance()->SetPlayButtonState(true);
+ return NORMAL;
+}
+
+int PlayersModel::IncreaseVolume(void) // 不带界面增加音量
+{
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] IncreaseVolume");
+
+ int curSound = AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Presound is %d", curSound);
+ if (curSound > VOLUME_MAXIMUM - VOLUME_PER_CHANGE) {
+ curSound = VOLUME_MAXIMUM;
+ } else {
+ curSound += VOLUME_PER_CHANGE;
+ }
+ AudioManager::GetInstance().SetVolume(AUDIO_STREAM_MUSIC, curSound);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Now music sound is %d", curSound);
+ return NORMAL;
+}
+
+int PlayersModel::DecreaseVolume(void) // 不带界面减小音量
+{
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayersModel] DecreaseVolume");
+
+ int curSound = AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Presound is %d", curSound);
+ if (curSound < VOLUME_MINIMUM + VOLUME_PER_CHANGE) {
+ curSound = VOLUME_MINIMUM;
+ } else {
+ curSound -= VOLUME_PER_CHANGE;
+ }
+ AudioManager::GetInstance().SetVolume(AUDIO_STREAM_MUSIC, curSound);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Now music sound is %d", curSound);
+ return NORMAL;
+}
+
+int32_t PlayersModel::GetPlayerstatus()
+{
+ int32_t playerState;
+ if (playerCtr.get() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::GetPlayerstatus playerCtr is nullptr");
+ return EXECUTE_FUNC_FAILED;
+ }
+ playerCtr->GetPlayerState(playerState);
+
+ switch (playerState) {
+ case PLAYER_STARTED:
+ playerState = AVRCP_PLAY_STATUS_PLAYING;
+ break;
+ case PLAYER_PAUSED:
+ playerState = AVRCP_PLAY_STATUS_PAUSED;
+ break;
+ case PLAYER_STOPPED:
+ playerState = AVRCP_PLAY_STATUS_STOPPED;
+ break;
+ default:
+ playerState = AVRCP_PLAY_STATUS_STOPPED;
+ break;
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel::GetPlayerstatus]status = [%d]", playerState);
+ return playerState;
+}
+
+void PlayersModel::SetBTMusicPlay(avrcp_key_operation_t notification)
+{
+ int ret;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel] SetBTMusicPlay");
+ if (BluetoothModel::GetInstance()->GetLastConnedAddr() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayerModel::SetBTMusicPlay] GetLastConnedAddr is nullptr");
+ return;
+ }
+ if (notification == AVRCP_KEY_PLAY) {
+ ret = a2dp_src_start_playing(BluetoothModel::GetInstance()->GetLastConnedAddr()); // 设置耳机的状态为播放
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel::SetBTMusicPlay] A2dpSrcStartPlaying ret:%d", ret);
+ avrcp_tg_notify_playback_status_changed(PlayersModel::GetInstance()->GetPlayerstatus());
+ } else if (notification == AVRCP_KEY_PAUSE) {
+ ret = a2dp_src_suspend_playing(BluetoothModel::GetInstance()->GetLastConnedAddr());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel::SetBTMusicPlay] A2dpSrcSuspendPlaying ret:%d", ret); // 设置耳机的状态暂停
+ avrcp_tg_notify_playback_status_changed(PlayersModel::GetInstance()->GetPlayerstatus());
+ }
+}
+// 蓝牙连接和本地的音乐播放
+void PlayersModel::ConnectBtAndLocalPlay(int32_t connCtState, int32_t connTgState, int32_t playerState)
+{
+ int ret;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel] ConnectBtAndLocalPlay connCtState = %d connTgState = %d", connCtState, connTgState);
+ avrcp_key_operation_t playNotification = AVRCP_KEY_PLAY;
+ if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayersModel::ConnectBtAndLocalPlay] BT GetPlayerCtr is nullptr ");
+ return;
+ }
+ if (connCtState == HFP_SCO_STATE_CONNECTED || connTgState == HFP_SCO_STATE_CONNECTED) {
+ if (playerState == PlayerStates::PLAYER_PAUSED) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BTPLAYER_PAUSED play, 122.");
+ ret = PlayersModel::GetInstance()->GetPlayerCtr()->Play(); // 暂停后的播放
+ if (ret == 0) {
+ //如果播放成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_START);//TOOD*
+ }
+ PlayersModel::GetInstance()->SetBTMusicPlay(playNotification);
+ } else {
+ ret = PlayersModel::GetInstance()->PlayerStat(); // 蓝牙连接播放
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayersModel::ConnBtAndLocalPlay] BTPlayerStat err, ret:%d", ret);
+ }
+ PlayersModel::GetInstance()->SetBTMusicPlay(playNotification);
+
+ }
+ } else {
+ if (playerState == PlayerStates::PLAYER_PAUSED) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PLAYER_PAUSED play, 122.");
+ ret = PlayersModel::GetInstance()->GetPlayerCtr()->Play();
+ if (ret == 0) {
+ //如果播放成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_START);//TOOD*
+ }
+ } else {
+ ret = PlayersModel::GetInstance()->PlayerStat(); // 本地播放
+ if (ret != 0) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerStat err, ret:%d", ret);
+ }
+ }
+ }
+
+}
+
+// 蓝牙连接和本地音乐的暂停
+void PlayersModel::ConnectBtAndLocalPause(int32_t connCtState, int32_t connTgState)
+{
+ int ret;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerModel] ConnectBtAndLocalPause");
+ avrcp_key_operation_t playNotification = AVRCP_KEY_PAUSE;
+ if (connCtState == HFP_SCO_STATE_CONNECTED || connTgState == HFP_SCO_STATE_CONNECTED) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state == BTUNSELECTED, 105.");
+ if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayersModel::ConnectBtAndLocalPause] BT GetPlayerCtr is nullptr");
+ return;
+ }
+ ret = PlayersModel::GetInstance()->GetPlayerCtr()->Pause(); // 蓝牙连接暂停
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BT Music Pause, ret:%d", ret);
+ PlayersModel::GetInstance()->SetBTMusicPlay(playNotification);
+ } else {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state == UNSELECTED, 105.");
+ ret = PlayersModel::GetInstance()->GetPlayerCtr()->Pause(); // 本地暂停
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Pause, ret:%d", ret);
+ }
+ if(ret == 0)
+ {
+ //本地音乐暂停成功,记录该事件
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_PAUSE);//TOOD*
+ }
+}
+
+void PlayersModel::ClearActivateAudioInterrupt()
+{
+ isActivateAudioInterrupt = false;
+}
+
+void PlayersModel::GetDuration(int64_t &duration)
+{
+ duration = duration_;
+}
+
+/*创建音乐播放路径,不存在就创建*/
+bool PlayersModel::CreateMusicPlayDirectory(const char* path)
+{
+ if (access(path, F_OK) == -1) { // 如果路径不存在
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Directory %s not exist, creating directory\n", path);
+ if (mkdir(path, 0777)!= 0) { // 尝试创建目录,如果创建失败
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Create directory %s failed\n", path);
+ return false;
+ }
+ } else { // 如果路径存在
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Directory %s already exists\n", path);
+ }
+ return true;
+}
+/*获取音乐播放路径*/
+std::string PlayersModel::GetMusicPlayPath(void)
+{
+ CreateMusicPlayDirectory();
+ return musicPlayPath;
+}
+
+bool PlayersModel::GetMusicSource()
+{
+ return musicSourceFlag;
+}
+
+void PlayersModel::SetMusicSource(bool value)
+{
+ musicSourceFlag = value;
+}
+
+/*更新音乐列表*/
+void PlayersModel::UpdateMusicPlayerList(void)
+{
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersModel::UpdateMusicPlayerList");
+ PlayersListGroup::GetInstance()->SetUpListCase();
+ PlayersModel::GetInstance()->PlayerInit();
+ PlayersView *playersView = PlayersView::GetInstance();
+ if (playersView == nullptr) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OptionsButtonOnClick playersView nullptr err");
+ return;
+ }
+ playersView->UpdateMusicListStatus();
+}
+
+/*获取当前音乐是否是在播放中*/
+bool PlayersModel::GetCurrentMusicIsPlaying(void)
+{
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersModel::GetMusicIsPlaying");
+ int state = PlayersModel::GetInstance()->GetPlayerState();
+ if (state == PlayerStates::PLAYER_STARTED){
+ return true;
+ }
+ return false;
+}
+
+ /* -------------------------------------------------------------------------- */
+ static osTimerId_t g_timer = NULL;
+ static int g_PlayerTimes = 5;
+
+ static void PlayerMusic_TimerCallbackProc(int data)
+ {
+ g_PlayerTimes--;
+ WEARABLE_LOGD(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;
+ }
+ bool type = PlayersModel::GetInstance()->GetMusicSource();
+ if(type) {
+ #ifdef SUPPORT_BLE_SERVICE
+ bool phoneMusicConnectStatus = uapi_a2dp_snk_get_device_connect_state(); // 获取a2dp连接状态
+ #else
+ bool phoneMusicConnectStatus = false;
+ #endif
+ if(g_PlayerTimes < 3) /*3秒切换时间*/
+ {
+ if (!phoneMusicConnectStatus)
+ {
+ playersView->ChangeView(PlayersView::MUISC_CONNECTING, PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW);
+ }
+ else if (phoneMusicConnectStatus)
+ {
+ playersView->ChangeView(PlayersView::MUISC_CONNECTING, PlayersView::MAIN_MUSICPLAYER_VIEW);
+ }
+ }
+ }
+ else {
+ if(g_PlayerTimes < 3) /*3秒切换时间*/
+ {
+ playersView->ChangeView(PlayersView::MUISC_CONNECTING, PlayersView::MUSIC_SOURCE_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)
+ {
+ osTimerStop(g_timer);
+ // 删除定时器并置为 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;
+ }
+ }
+
+ //更新音乐进度条
+ void PlayersModel::updatePlayProgress()
+ {
+ // 获取当前播放时间
+ 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_);
+ }
+
+ void PlayersModel::SetCircleProgress()
+ {
+ PlayersView *playersView = PlayersView::GetInstance();
+ if (playersView == nullptr)
+ {
+ return;
+ }
+ UICircleProgress *playbackProgress = playersView->GetPlaybackProgress();
+ if (playbackProgress == nullptr)
+ {
+ return;
+ }
+ if(PlayersPresenter::GetInstance() == nullptr)
+ {
+ return;
+ }
+ if(PlayersModel::GetInstance()->GetMusicSource() == false) //如果当前为本地音乐
+ {
+ 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))
+ {
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
+ }
+ if (state_ == UICheckBox::UICheckBoxState::SELECTED)
+ {
+ updatePlayProgress();//更新音乐进度条
+ }
+ }
+ else //如果当前为手机音乐
+ {
+ //更新手机音乐的进度,暂时没实现
+ PlayersModel::GetInstance()->SetCircleProgress(0);
+ PlayersPresenter::GetInstance()->SetPlaybackProgress(0);
+ }
+ }
+
+ //更新音乐进度条
+ void PlayersModel::UpdatePlayerProcess(void)
+ {
+ if(MainViewSample::GetInstance()) //主界面就不调用刷新这个进度条刷新了
+ {
+ return;
+ }
+ SetCircleProgress();
+ }
+
+ //更新音乐的声音进度条
+ void PlayersModel::UpdateVolumeValue(void)
+ {
+ if(PlayersView::GetInstance())
+ {
+ PlayersView::GetInstance()->UpdateVolumeValue();
+ }
+ }
+
+ bool PlayersModel::get_avrcp_ct_or_tg_is_connected(void)
+ {
+ #ifdef SUPPORT_BLE_SERVICE
+ bd_addr_t bdAddr={0};
+ uapi_get_br_address(&bdAddr); //获取手机蓝牙地址
+ int32_t connCtState = avrcp_ct_get_device_connect_state(&bdAddr);
+ int32_t connTgState = avrcp_tg_get_device_connect_state(&bdAddr);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtAndLocalVolumeSet addr: %02x%02x%02x%02x%02x%02x ",
+ bdAddr.addr[5], bdAddr.addr[4], bdAddr.addr[3], /* 5 4 3 idx */
+ bdAddr.addr[2], bdAddr.addr[1], bdAddr.addr[0]); /* 2 1 0 idx */
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "connCtState:%x", connCtState);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "connTgState:%x", connTgState);
+ if (connCtState == PROFILE_STATE_CONNECTED || connTgState == PROFILE_STATE_CONNECTED)
+ {
+ return true;
+ }
+ return false;
+ #else
+ return false;
+ #endif
+ }
+
+ // 获取手机音乐播放状态
+ bool PlayersModel::get_a2dp_sink_playing_state(void)
+ {
+ #ifdef SUPPORT_BLE_SERVICE
+ bd_addr_t active_bd_addr = a2dp_snk_get_active_device();
+ int state = a2dp_snk_get_playing_state(&active_bd_addr);
+ if (state == A2DP_IS_PLAYING) {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "A2DP_IS_PLAYING");
+ return true;
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "A2DP_NOT_PLAYING");
+ return false;
+ #else
+ return false;
+ #endif
+ }
+
+
+ //暂停播放手机音乐
+ void PlayersModel::HandPausePhoneMusic(void)
+ {
+ if (get_avrcp_ct_or_tg_is_connected() && get_a2dp_sink_playing_state())
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AVRCP_KEY_PAUSE");
+ set_phone_music_play_state(AVRCP_KEY_PAUSE); // 控制手机音乐暂停
+ }
+ }
+
+ //播放手机音乐
+ void PlayersModel::HandPlayPhoneMusic(void)
+ {
+ if (get_avrcp_ct_or_tg_is_connected() && get_a2dp_sink_playing_state())
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AVRCP_KEY_PLAY");
+ set_phone_music_play_state(AVRCP_KEY_PLAY); // 控制手机音乐暂停
+ }
+ }
+ //用来控制手机音乐的播放,暂停,下一首,上一首音乐
+ void PlayersModel::set_phone_music_play_state(avrcp_key_operation_t notify)
+ {
+ #ifdef SUPPORT_BLE_SERVICE
+ bd_addr_t bdAddr={0};
+ uapi_get_br_address(&bdAddr); //获取手机蓝牙地址
+ switch(notify)
+ {
+ case AVRCP_KEY_PLAY://播放
+ user_avrcp_ct_press_button(&bdAddr,AVRCP_KEY_PLAY);
+ break;
+ case AVRCP_KEY_STOP: //停止
+ user_avrcp_ct_press_button(&bdAddr,AVRCP_KEY_STOP);
+ break;
+ case AVRCP_KEY_PAUSE://暂停
+ user_avrcp_ct_press_button(&bdAddr,AVRCP_KEY_PAUSE);
+ break;
+ case AVRCP_KEY_FORWARD: // 下一曲
+ user_avrcp_ct_press_button(&bdAddr,AVRCP_KEY_FORWARD);
+ break;
+ case AVRCP_KEY_BACKWARD: // 上一曲
+ user_avrcp_ct_press_button(&bdAddr,AVRCP_KEY_BACKWARD);
+ break;
+ default:
+ user_avrcp_ct_press_button(&bdAddr,AVRCP_KEY_STOP);//停止
+ break;
+ }
+ #endif
+ }
+
+ //获取TG端支持的属性列表,比如歌曲标题,专辑、艺术风格,年份和作曲家等。
+ void PlayersModel::get_avrcp_ct_get_element_attributes(void)
+ {
+ #ifdef SUPPORT_BLE_SERVICE
+ bd_addr_t bdAddr={0};
+ uapi_get_br_address(&bdAddr); //获取手机蓝牙地址
+ user_avrcp_ct_get_element_attributes(&bdAddr);
+ #endif
+ }
+
+ //设置按钮播放状态
+ void PlayersModel::set_player_state(bool value)
+ {
+ PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();
+ if (playersPresenter != nullptr)
+ {
+ phonePlayButtonState = value;
+ playersPresenter->SetPhonePlayerState(value);
+ }
+ }
+
+ bool PlayersModel::get_player_state()
+ {
+ return phonePlayButtonState;
+ }
+ std::unordered_map<uint16_t, std::pair<std::string,std::string>> &PlayersModel::getIdToMusicNameMap(void)
+ {
+ return idToMusicNameMap;
+ }
+
+ //根据id获取真实的音乐名字
+ std::string PlayersModel::getRealMusicNameById(int id)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.first == id)
+ {
+ return entry.second.first; // 返回对应真实音乐名
+ }
+ }
+ return "";
+ }
+
+ //根据id获取显示的音乐名字
+ std::string PlayersModel::getShowMusicNameById(int id)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.first == id)
+ {
+ return entry.second.second; // 返回对应显示音乐名
+ }
+ }
+ return "";
+ }
+ //根据名字获取id
+ uint16_t PlayersModel::getIdFromMusicName(const std::string &musicName)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.second.first == musicName)
+ {
+ return entry.first; // 返回对应ID
+ }
+ }
+ return 0;
+ }
+
+ //根据16进制文件名查找对应的UTF-8文件名
+ std::string PlayersModel::getHexMusicNameFromMusicName(const std::string &musicName)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.second.first == musicName)
+ {
+ return entry.second.second; // 返回对应音乐名
+ }
+ }
+ return "";
+ }
+
+ //根据UTF-8文件名查找对应的16进制文件名
+ std::string PlayersModel::getMusicNameFromHexMusicName(const std::string &musicName)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ if (entry.second.second == musicName)
+ {
+ return entry.second.first; // 返回对应音乐名
+ }
+ }
+ return "";
+ }
+
+ //获取 idToMusicNameMap 的 zize 大小
+ int PlayersModel::getIdToMusicNameMapNumber(void)
+ {
+ return idToMusicNameMap.size();
+ }
+
+ void PlayersModel::showIdToMusicNameMapData(void)
+ {
+ for (const auto &entry : idToMusicNameMap)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "id = %d name.first = %s name.second = %s", entry.first,entry.second.first.c_str(),entry.second.second.c_str());
+ }
+ }
+ int PlayersModel::getPreShowView(void)
+ {
+ return preshowView;
+ }
+ void PlayersModel::setPreShowView(int index)
+ {
+ preshowView = index;
+ }
+ //获取当前播放的音乐名字
+ std::string PlayersModel::getcurrentplayingmusicname()
+ {
+ return currentplayingmusicname;
+ }
+ //设置当前播放的音乐名字
+ void PlayersModel::setcurrentplayingmusicname(std::string name)
+ {
+ currentplayingmusicname = name;
+ }
+}
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+#endif /* __cplusplus */
+
+ /*关闭音乐播放*/
+ void stopPlayingMusic(void)
+ {
+ OHOS::PlayersModel::GetInstance()->PlayerStop();
+ OHOS::PlayersModel::GetInstance()->ClearActivateAudioInterrupt();
+ }
+
+ // 初始化音乐播放列表(会读取内存中文件名,然后设置到列表中)
+ void custom_setUpListCase(void)
+ {
+ OHOS::PlayersListGroup::GetInstance()->SetUpListCase();
+ OHOS::PlayersModel::GetInstance()->PlayerInit();
+ }
+
+ // 检查是否可以同步音乐
+ bool canSyncMusic(uint32_t songSize)
+ {
+ return OHOS::SystemLogModel::GetInstance()->canSyncFile(APP_MUSIC_PATH,TOTAL_MUSIC_SPACE,songSize);
+ }
+
+
+ bool stopPhonePlayingMusic(void)
+ {
+ if( OHOS::PlayersModel::GetInstance()->get_a2dp_sink_playing_state())
+ {
+ OHOS::PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_PAUSE); // 控制手机音乐暂停
+ return true;
+
+ }
+ return false;
+ }
+
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* __cplusplus */
\ No newline at end of file
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: Player view
- * Author:
- * Create: 2021-07-26
- */
-#include <sys/types.h>
-#include <dirent.h>
-#include <iostream>
-#include <cstdlib>
-#include <ctime>
-#include "PlayersPresenter.h"
-#include "wearable_log.h"
-#include "common/image_cache_manager.h"
-#include "UiConfig.h"
-#include "ui_resource_image.h"
-#include "PlayersView.h"
-#include "PlayersModel.h"
-#include "BluetoothPresenter.h"
-#include "graphic_service.h"
-#include "PhoneService.h"
-
-#include "bts_avrcp_controller.h"
-#include "bts_avrcp_target.h"
-
-namespace OHOS {
-static PlayerOnDragListener *g_pPlayerOnDragListener = nullptr;
-static JumpView *g_pJumpView = nullptr;
-static PlayersPresenter *g_pPlayersPresenter = nullptr;
-
-PlayersPresenter *PlayersPresenter::GetInstance(void)
-{
- return g_pPlayersPresenter;
-}
-
-PlayersPresenter::PlayersPresenter()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter");
- g_pPlayersPresenter = this;
-}
-
-PlayersPresenter::~PlayersPresenter()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayersPresenter");
- g_pPlayersPresenter = nullptr;
-}
-
-JumpView *JumpView::GetInstance(void)
-{
- return g_pJumpView;
-}
-
-JumpView::JumpView()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::JumpView");
- g_pJumpView = this;
- preProcessView[BLUETOOTHEARPHONEVIEW] = &JumpView::ChangeBluetoothEarPhoneView;
- preProcessView[BLUETOOTHEARLISTVIEW] = &JumpView::ChangeBluetoothEarListView;
- preProcessView[BLUETOOTHDEVICELISTVIEW] = &JumpView::ChangeBluetoothDeviceListView;
- preProcessView[BLUETOOTHEOPTIONSVIEW] = &JumpView::ChangeBluetoothOptionsView;
- preProcessView[BLUETOOTHRECONNECTVIEW] = &JumpView::ChangeBluetoothReconnectView;
- preProcessView[TIPSSUCCMESSAGEVIEW] = &JumpView::ChangeTipsSuccMessageView;
- preProcessView[TIPSCONNFAILMESSAGEVIEW] = &JumpView::ChangeTipsConnFailMessageView;
- preProcessView[TIPSFAILMESSAGEVIEW] = &JumpView::ChangeTipsFailMessageView;
- preProcessView[BLUETOOTHEVIEW] = &JumpView::ChangeBluetoothView;
-}
-
-JumpView::~JumpView()
-{
- delete bluetoothEarPhoneView;
- bluetoothEarPhoneView = nullptr;
- delete bluetoothOptionsView;
- bluetoothOptionsView = nullptr;
- delete bluetoothEarListView;
- bluetoothEarListView = nullptr;
- delete bluetoothReconnectView;
- bluetoothReconnectView = nullptr;
- delete bluetoothDeviceListView;
- bluetoothDeviceListView = nullptr;
- delete tipsSuccMessageView;
- tipsSuccMessageView = nullptr;
- delete tipsConnFailMessageView;
- tipsConnFailMessageView = nullptr;
- delete tipsFailMessageView;
- tipsFailMessageView = nullptr;
- delete bluetoothView;
- bluetoothView = nullptr;
- int i;
- for (i = BLUETOOTHEARPHONEVIEW; i <= BLUETOOTHEJUMP_MAX; i++) {
- container[i] = nullptr;
- }
- g_pJumpView = nullptr;
-}
-
-bool JumpView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarPhoneView");
- bluetoothEarPhoneView = new BluetoothEarPhoneView();
- if (bluetoothEarPhoneView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView new fail");
- return false;
- }
- UIViewGroup *group = bluetoothEarPhoneView->InitShowUpView(); // init view
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- }
- // 动画开始
- bluetoothEarPhoneView->BtAnimatorStart();
- // 蓝牙扫描&清空列表
- bluetoothEarPhoneView->BtEnable();
- return true;
-}
-
-bool JumpView::ChangeBluetoothEarListView(int16_t hideView, int16_t thisView)
-{
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarListView");
- bluetoothEarListView = new BluetoothEarListView();
- if (bluetoothEarListView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarListView new fail");
- return false;
- }
- UIViewGroup *group = bluetoothEarListView->InitShowUpView(); // init view
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- } else {
- // 刷新列表
- UIList *scanList = bluetoothEarListView->GetScanUIList();
- if (scanList == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick scanList nullptr");
- return false;
- }
- scanList->RefreshList();
- }
- ResetEarListView(hideView);
- return true;
-}
-
-bool JumpView::ChangeBluetoothView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothView");
- bluetoothView = new BluetoothView();
- if (bluetoothView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView new fail");
- return false;
- }
- // init view
- UIViewGroup *group = bluetoothView->LoadBluetoothView();
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- }
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeBluetoothView");
- BluetoothModel::GetInstance()->SetTagConnectView(false);
- return true;
-}
-
-bool JumpView::ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothOptionsView");
- bluetoothOptionsView = new BluetoothOptionsView();
- if (bluetoothOptionsView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView new fail");
- return false;
- }
- // init view
- UIViewGroup *group = bluetoothOptionsView->InitShowUpView();
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- }
- return true;
-}
-
-bool JumpView::ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothDeviceListView");
- bluetoothDeviceListView = new BluetoothDeviceListView();
- if (bluetoothDeviceListView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothDeviceListView new fail");
- return false;
- }
- // init view
- UIViewGroup *group = bluetoothDeviceListView->InitShowUpView();
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Device group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- } else {
- // 刷新列表
- UIList *deviceList = bluetoothDeviceListView->GetDeviceUIList();
- if (deviceList == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick deviceList nullptr");
- return false;
- }
- deviceList->RefreshList();
- }
- if (bluetoothDeviceListView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothDeviceListView new fail");
- return false;
- }
- bluetoothDeviceListView->RefreshText();
-
- return true;
-}
-
-bool JumpView::ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothReconnectView");
- bluetoothReconnectView = new BluetoothReconnectView();
- if (bluetoothReconnectView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothReconnectView new fail");
- return false;
- }
- // init view
- UIViewGroup *group = bluetoothReconnectView->InitShowUpView();
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- }
- BluetoothModel::GetInstance()->SetTagDisconnectView(true);
- bluetoothReconnectView->RefreshBluetoothNameLabel();
- bluetoothReconnectView->BtReconnectStart();
- return true;
-}
-
-void JumpView::ResetEarListView(int16_t hideView)
-{
- if (bluetoothEarListView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::ResetEarListView bluetoothEarListView == nullptr");
- return;
- }
- bluetoothEarListView->SetCancelConnedRequestButtonRemove();
- if (hideView == BLUETOOTHEARPHONEVIEW) {
- bluetoothEarListView->SetTitleLabel("正在扫描");
- bluetoothEarListView->SetNewEquipmentButtonRemove();
- } else if (hideView == TIPSCONNFAILMESSAGEVIEW) {
- bluetoothEarListView->SetTitleLabel("扫描完成");
- bluetoothEarListView->SetNewEquipmentButtonAdd();
- RootView::GetInstance()->Invalidate();
- }
-}
-
-bool JumpView::ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsSuccMessageView");
- tipsSuccMessageView = new TipsSuccMessageView();
- if (tipsSuccMessageView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsSuccMessageView new fail");
- return false;
- }
- // init view
- UIViewGroup *group = tipsSuccMessageView->ShowUpViewInit();
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- }
- return true;
-}
-
-bool JumpView::ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView");
- tipsConnFailMessageView = new TipsConnFailMessageView();
- if (tipsConnFailMessageView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsConnFailMessageView new fail");
- return false;
- }
- // init view
- UIViewGroup *group = tipsConnFailMessageView->ShowUpViewInit();
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- }
- if (bluetoothReconnectView == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback bluetoothReconnectView == nullptr");
- } else {
- container[BLUETOOTHRECONNECTVIEW]->SetVisible(false);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView SetVisible(false)");
- }
- return true;
-}
-
-bool JumpView::ChangeTipsFailMessageView(int16_t hideView, int16_t thisView)
-{
- UNUSED(hideView);
- if (container[thisView] == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsFailMessageView");
- tipsFailMessageView = new TipsFailMessageView();
- if (tipsFailMessageView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsFailMessageView new fail");
- return false;
- }
- // init view
- UIViewGroup *group = tipsFailMessageView->ShowUpViewInit();
- if (group == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");
- return false;
- }
- container[thisView] = group;
- RootView::GetInstance()->Add(container[thisView]);
- }
- return true;
-}
-
-bool JumpView::CheckViewParam(int16_t hideView, int16_t showView)
-{
- if (showView < 0 || showView >= BLUETOOTHEJUMP_MAX) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err.");
- return false;
- }
-
- if (hideView < 0 || hideView > BLUETOOTHEJUMP_MAX) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err.");
- return false;
- }
-
- if (hideView != BLUETOOTHEJUMP_MAX) {
- if (container[hideView] == nullptr) {
- return false;
- }
- container[hideView]->SetVisible(false);
- }
-
- if (hideView == BLUETOOTHEARLISTVIEW || showView == BLUETOOTHEARLISTVIEW) {
- BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false);
- }
-
- return true;
-}
-
-void JumpView::ChangeView(int16_t hideView, int16_t showView)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView %d", hideView);
- if (!CheckViewParam(hideView, showView)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView check param err %d %d.", hideView, showView);
- return;
- }
-
- PreprosssChangeView tmpPreProcessView = preProcessView[showView];
-
- if (!(this->*tmpPreProcessView)(hideView, showView)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView %d %d failed", showView, hideView);
- return;
- }
- container[showView]->SetVisible(true);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView end!!!%d", showView);
- RootView::GetInstance()->Invalidate();
- BluetoothModel::GetInstance()->SetCurView(showView);
-}
-
-PlayersListGroup::~PlayersListGroup()
-{
- if (playersCaseList_ != nullptr) {
- playersCaseList_->Clear();
- }
- delete playersCaseList_;
- playersCaseList_ = nullptr;
-}
-
-void PlayersListGroup::AddCase(PlayerCaseInfo testCaseInfo)
-{
- if (playersCaseList_ == nullptr) {
- return;
- }
- playersCaseList_->PushBack(testCaseInfo);
-}
-
-void PlayersListGroup::SetUpListCase()
-{
- int16_t ret;
- if (playersCaseList_ == nullptr) {
- playersCaseList_ = new List<PlayerCaseInfo>();
- if (playersCaseList_ == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersListGroup playersCaseList_ new fail");
- return;
- }
- }
- playersCaseList_->Clear();
- ret = GetAllFiles(playersCaseList_);
- if (ret == OHOS_FAILURE) {
- return;
- }
-}
-
-List<PlayerCaseInfo>& PlayersListGroup::GetCase()
-{
- return *playersCaseList_;
-}
-
-char *PlayersListGroup::GetCase(int16_t index)
-{
- if (index < 0 || playersCaseList_ == nullptr) {
- return nullptr;
- }
- ListNode<PlayerCaseInfo> *node = playersCaseList_->Begin();
- while (node != playersCaseList_->End()) {
- if (index == node->data_.index) {
- return node->data_.sliceId;
- }
- node = node->next_;
- }
- return nullptr;
-}
-
-// 读取文件夹下文件名信息
-int PlayersListGroup::GetAllFiles(List<PlayerCaseInfo> *playersCaseList)
-{
- 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 != nullptr) {
- while ((direntp = readdir(dirp)) != nullptr) {
- 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++;
- playersCaseList->PushBack(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;
-}
-
-// Button OnClick
-void ButtonOnClickListener::PlayerButtonOnClick()
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");
- return;
- }
-
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerButton OnClick");
- uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;
- int32_t playerState;
- int32_t connCtState = avrcp_ct_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());
- int32_t connTgState = avrcp_tg_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());
-
- state = playersView->GetPlayerButtonState();
- if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::GetInstance()->GetPlayerCtr() nullptr");
- return;
- }
- PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "buttonState = %d playerState = %d", state, playerState);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "connCtState = %d connTgState = %d", connCtState, connTgState);
-
- if (GetCurrCallNum() != 0 && GetScoConnectState() == HFP_SCO_STATE_CONNECTED) {
- if (state == UICheckBox::UICheckBoxState::SELECTED) {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
- playersView->GetPlayerButton()->Invalidate();
- } else {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
- playersView->GetPlayerButton()->Invalidate();
- }
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayerButtonOnClick] calling phone");
- return;
- }
- if (state == UICheckBox::UICheckBoxState::SELECTED) {
- /* start play */
- PlayersModel::GetInstance()->ConnectBtAndLocalPlay(connCtState, connTgState, playerState);
- } else if (state == UICheckBox::UICheckBoxState::UNSELECTED) {
- PlayersModel::GetInstance()->ConnectBtAndLocalPause(connCtState, connTgState);
- }
-}
-
-void ButtonOnClickListener::SoundButtonOnClick()
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick playersView nullptr err");
- return;
- }
- if (volumeSettingView == nullptr) {
- volumeSettingView = new VolumeSettingView();
- if (volumeSettingView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volumeSetting nullptr err");
- return;
- }
- if (!volumeSettingView->SetUpVolume()) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volumeSetting SetUpVolume fail");
- return;
- }
- RootView::GetInstance()->Add(volumeSettingView);
- }
- int32_t volume = AudioManager::GetInstance().GetVolume(AUDIO_STREAM_MUSIC);
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "current volume = %d", volume);
- volumeSettingView->GetProgress()->SetValue(volume);
- if (volume == 0) {
- ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUTE_BUTTON, PLAYER_IAMGES);
- volumeSettingView->GetDecreaseButton()->SetImageSrc(image, image);
- }
- VolumeSliderEventListener *volumeSliderEventListener = volumeSettingView->GetVolumeEventListener();
- if (volumeSliderEventListener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick volumeSliderEventListener nullptr err");
- return;
- }
- volumeSliderEventListener->SetPlayerCoefficients(VOLUMEPLAYERS); // 进度条系数
- playersView->SetVisible(false);
- volumeSettingView->SetVisible(true);
- // 刷新UI
- RootView::GetInstance()->Invalidate();
-}
-
-void ButtonOnClickListener::OptionsButtonOnClick()
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OptionsButtonOnClick playersView nullptr err");
- return;
- }
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- playersView->SetVisible(false);
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEJUMP_MAX,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW);
-}
-
-void ButtonOnClickListener::PlayerModelButtonOnClick()
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerModelButtonOnClick playersView nullptr err");
- return;
- }
- switch (PlayersModel::GetInstance()->GetPlayerModel()) {
- case LOOP:
- playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_LOOP); // 循环
- break;
- case SEQUENCE:
- playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_SEQUENCE); // 顺序
- break;
- case REPEATS:
- playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_REPEATS); // 重复
- break;
- case RANDOM:
- playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_RANDOM); // 随机
- break;
- default:
- break;
- }
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModel %d", PlayersModel::GetInstance()->GetPlayerModel());
-}
-
-bool ButtonOnClickListener::OnClick(UIView& view, const ClickEvent& event)
-{
- UNUSED(view);
- UNUSED(event);
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::GetInstance");
- return false;
- }
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener OnClick");
- if (view_ == (UIView *)playersView->GetPlayerButton()) {
- PlayerButtonOnClick();
- } else if (view_ == (UIView *)playersView->GetNextButton()) {
- if (playersView->GetPlaybackProgress() != nullptr) {
- playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0%
- playersView->GetPlaybackProgress()->Invalidate();
- }
- PlayersModel::GetInstance()->LoopingPlayout();
- } else if (view_ == (UIView *)playersView->GetPreButton()) {
- if (playersView->GetPlaybackProgress() != nullptr) {
- playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0%
- playersView->GetPlaybackProgress()->Invalidate();
- }
- PlayersModel::GetInstance()->PreviousPlayout();
- } else if (view_ == (UIView *)playersView->GetPlayerModelButton()) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModelButton OnClick");
- PlayersModel::GetInstance()->SetPlayerModelAddOne();
- if (PlayersModel::GetInstance()->GetPlayerModel() > RANDOM) {
- PlayersModel::GetInstance()->SetPlayerModel(LOOP);
- }
- PlayerModelButtonOnClick();
- } else if (view_ == (UIView *)playersView->GetSoundButton()) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "soundButton OnClick");
- SoundButtonOnClick();
- } else if (view_ == (UIView *)playersView->GetOptionsButton()) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "optionsButton OnClick");
- OptionsButtonOnClick();
- }
- return true;
-}
-
-// 播放器回调
-PlayerCallbackImpl::PlayerCallbackImpl()
-{
-}
-
-PlayerCallbackImpl::~PlayerCallbackImpl()
-{
-}
-
-void PlayerCallbackImpl::OnPlaybackComplete()
-{
- // 此处实现代码用于处理文件播放完成的事件
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnPlaybackCompleten");
- GraphicService::GetInstance()->PostGraphicEvent([] {
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView != nullptr) {
- if (playersView->GetPlaybackProgress() != nullptr) {
- playersView->GetPlaybackProgress()->SetValue(100); // 100:进度100%
- playersView->GetPlaybackProgress()->Invalidate();
- }
- }
- });
- usleep(20000);
- GraphicService::GetInstance()->PostGraphicEvent(std::bind(&PlayersModel::PlaySwitching, PlayersModel::GetInstance()));
-}
-
-void PlayerCallbackImpl::OnError(int32_t errorType, int32_t errorCode)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnError test, errorType %d, errorCode %d", errorType, errorCode);
- // 此处实现代码处理错误事件
-}
-
-void PlayerCallbackImpl::OnInfo(int type, int extra)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnInfo test, type %d, extra %d.", type, extra);
- // 此处实现代码处理普通事件
-}
-
-void PlayerCallbackImpl::OnRewindToComplete()
-{
- // 此处实现代码处理进度控制完成的事件
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnRewindToComplete test");
-}
-
-// 音频中断
-PlayerInterruptListener::PlayerInterruptListener()
-{
-}
-
-PlayerInterruptListener::~PlayerInterruptListener()
-{
-}
-
-void PlayerInterruptListener::SetOwner(std::shared_ptr<Player> player)
-{
- player_ = player;
-}
-
-std::shared_ptr<Player> PlayerInterruptListener::GetPlayer()
-{
- return player_;
-}
-
-void PlayerInterruptListener::RestFlag()
-{
- isPaused_ = false;
- isDelayed_ = false;
- isResumed_ = false;
- isBeginStopped_ = false;
- isEndStopped_ = false;
-}
-
-void PlayerInterruptListener::SetPaused(bool value)
-{
- isPaused_ = value;
-}
-
-void PlayerInterruptListener::SetResumed(bool value)
-{
- isResumed_ = value;
-}
-
-bool PlayerInterruptListener::IsPaused()
-{
- return isPaused_;
-}
-
-bool PlayerInterruptListener::IsDelayed()
-{
- return isDelayed_;
-}
-
-bool PlayerInterruptListener::IsResumed()
-{
- return isResumed_;
-}
-
-bool PlayerInterruptListener::IsBeginStopped()
-{
- return isBeginStopped_;
-}
-
-bool PlayerInterruptListener::IsEndStopped()
-{
- return isEndStopped_;
-}
-
-static void PlayerPostGraphicEvent(void (*fun)(void))
-{
- GraphicService::GetInstance()->PostGraphicEvent(*fun);
-}
-
-static void Pause(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] start");
- int32_t state;
- int32_t ret;
- std::shared_ptr<PlayerInterruptListener> PlayerIntrptListener =
- OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener();
- if (PlayerIntrptListener == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null");
- return;
- }
-
- std::shared_ptr<Player> player = PlayerIntrptListener->GetPlayer();
- if (player.get() == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] player is nullptr");
- return;
- }
-
- PlayersView *playersView = PlayersView::GetInstance();
-
- player->GetPlayerState(state);
- if (state == PLAYER_STARTED) {
- ret = player->Pause();
- if (ret == 0) {
- if (playersView == nullptr) {
- PlayersModel::GetInstance()->SetPlayButtonState(false);
- } else {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
- playersView->GetPlayerButton()->Invalidate();
- }
- PlayerIntrptListener->RestFlag();
- PlayerIntrptListener->SetPaused(true);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer]");
- }
- }
-}
-
-void PlayerInterruptListener::PausePlayer(void)
-{
- PlayerPostGraphicEvent(Pause);
-}
-
-static void Resume(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::Resume] start");
- int32_t state;
- int32_t ret;
- std::shared_ptr<PlayerInterruptListener> PlayerIntrptListener =
- OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener();
- if (PlayerIntrptListener == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null");
- return;
- }
-
- std::shared_ptr<Player> player = PlayerIntrptListener->GetPlayer();
- if (player.get() == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] player is nullptr");
- return;
- }
-
- PlayersView *playersView = PlayersView::GetInstance();
-
- player->GetPlayerState(state);
- if (state == PLAYER_PAUSED && PlayerIntrptListener->IsPaused()) {
- ret = player->Play();
- if (ret == 0) {
- if (playersView == nullptr) {
- PlayersModel::GetInstance()->SetPlayButtonState(true);
- } else {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
- playersView->GetPlayerButton()->Invalidate();
- }
- PlayerIntrptListener->RestFlag();
- PlayerIntrptListener->SetResumed(true);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer]");
- }
- }
-}
-
-void PlayerInterruptListener::ResumePlayer(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] start");
- usleep(50000); // 确保界面切换完成
- if (NativeAbility::GetInstance().GetCurSliceId() == VIEW_MAEKPHONE_SAMPLE ||
- (GetCurrCallState() != HFP_HF_CALL_STATE_FINISHED && GetScoConnectState() == HFP_SCO_STATE_CONNECTED)) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] this is in calling");
- return; // 通话界面,禁止音乐恢复播放
- }
- PlayerPostGraphicEvent(Resume);
-}
-
-static void Stop(void)
-{
- PlayersModel::GetInstance()->PlayerStop();
- PlayersModel::GetInstance()->ClearActivateAudioInterrupt();
-}
-
-void PlayerInterruptListener::StopPlayer(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::StopPlayer] start");
- PlayerPostGraphicEvent(Stop);
-}
-
-void PlayerInterruptListener::OnInterrupt(int32_t type, int32_t hint)
-{
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::] OnInterrupt go in, type %d, hint %d.", type, hint);
-
- if (type == INTERRUPT_TYPE_BEGIN && hint == INTERRUPT_HINT_PAUSE) {
- PausePlayer();
- }
-
- if (type == INTERRUPT_TYPE_END && hint == INTERRUPT_HINT_RESUME) {
- ResumePlayer();
- }
-
- if (hint == INTERRUPT_HINT_STOP) {
- RestFlag();
- if (type == INTERRUPT_TYPE_BEGIN) {
- isBeginStopped_ = true;
- StopPlayer();
- } else if (type == INTERRUPT_TYPE_END) {
- isEndStopped_ = true;
- }
- }
-}
-
-PlayerOnDragListener::PlayerOnDragListener()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener");
- g_pPlayerOnDragListener = this;
-}
-
-PlayerOnDragListener::~PlayerOnDragListener()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayerOnDragListener");
- g_pPlayerOnDragListener = nullptr;
-}
-
-PlayerOnDragListener *PlayerOnDragListener::GetInstance(void)
-{
- return g_pPlayerOnDragListener;
-}
-
-void PlayerOnDragListener::OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangeView=%d showView=%d", hideView, showView);
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {
- if (isStopScan) {
- BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance();
- if (bluetoothEarPhoneView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView GetInstance fail");
- return;
- }
- bluetoothEarPhoneView->BtAnimatorStop();
- bluetoothEarPhoneView->StopBtDiscovery();
- }
- // 跳转设置页面
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- jumpView->ChangeView(hideView, showView);
- }
-}
-
-void PlayerOnDragListener::OnDragChangBluetoothView(const DragEvent& event)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangBluetoothView");
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DIRECTION_LEFT_TO_RIGHT");
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");
- return;
- }
- BluetoothView *bluetoothView = BluetoothView::GetInstance();
- if (bluetoothView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView GetInstance fail");
- return;
- }
- bluetoothView->group->SetVisible(false);
- playersView->SetVisible(true);
- // 刷新UI
- RootView::GetInstance()->Invalidate();
- }
-}
-
-void PlayerOnDragListener::DropEarPhoneView(const DragEvent& event)
-{
- bool ret = BluetoothModel::GetInstance()->IsTagReturnToDeviceListView();
- if (ret) {
- OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, true);
- } else {
- OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true);
- }
-}
-
-void PlayerOnDragListener::DropEarListView(const DragEvent& event)
-{
- bool ret = BluetoothModel::GetInstance()->IsTagScanDeviceClicked();
- if (ret) {
- BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView Addr: %02x%02x%02x%02x%02x%02x",
- caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */
- caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */
- errcode_t retVal = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView gap_disconnect_remote_device retVal = %d", retVal);
- }
- BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView();
- if (pbItermView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnDragEnd The GetConnectionView nullptr.");
- } else {
- pbItermView->ConnectAnimatorStop();
- BluetoothModel::GetInstance()->SetConnectionView(nullptr);
- }
- OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true);
-}
-
-bool PlayerOnDragListener::OnDragEnd(UIView& view, const DragEvent& event)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::OnDragEnd- %s", view.GetViewId());
- if (view.GetViewId() == nullptr) {
- return true;
- }
- if (strcmp(view.GetViewId(), BLUETOOTH_EAR_PHONE_VIEW) == 0) {
- DropEarPhoneView(event);
- } else if (strcmp(view.GetViewId(), TIPS_SUCC_MESSAGE_VIEW) == 0) {
- OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false);
- } else if (strcmp(view.GetViewId(), TIPS_FAIL_MESSAGE_VIEW) == 0) {
- OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false);
- } else if (strcmp(view.GetViewId(), TIPS_CONN_FAIL_MESSAGE_VIEW) == 0) {
- CorrespondingJump(event, JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW);
- } else if (strcmp(view.GetViewId(), BLUETOOTH_EARLIST_VIEW) == 0) {
- DropEarListView(event);
- } else if (strcmp(view.GetViewId(), BLUETOOTH_RECONNECT_VIEW) == 0) {
- BluetoothModel::GetInstance()->SetTagDisconnectView(false);
- CorrespondingJump(event, JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW);
- BluetoothReconnectView *bluetoothReconnectView = BluetoothReconnectView::GetInstance();
- if (bluetoothReconnectView != nullptr) {
- bluetoothReconnectView->BtReconnectStop();
- }
- } else if (strcmp(view.GetViewId(), BLUETOOTH_OPTIONS_VIEW) == 0) {
- OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false);
- } else if (strcmp(view.GetViewId(), BLUETOOTH_VIEW) == 0) {
- OnDragChangBluetoothView(event);
- } else if (strcmp(view.GetViewId(), BLUETOOTH_DEVICE_LIST_VIEW) == 0) {
- OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, false);
- }
- return true;
-}
-
-
-void PlayerOnDragListener::CorrespondingJump(const DragEvent& event, int16_t hideView)
-{
- BluetoothModel *bluetoothModel = BluetoothModel::GetInstance();
- if (bluetoothModel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView bluetoothModel == nullptr");
- return;
- }
- if (bluetoothModel->GetTagReconnectJump()) {
- OnDragChangView(event, hideView,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, false);
- } else {
- std::list<BluetoothCaseInfo> &bluetoothScanList = BluetoothModel::GetInstance()->GetCase();
- bool ret = bluetoothScanList.empty();
- if (!ret) {
- OnDragChangView(event, hideView,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, false);
- } else {
- OnDragChangView(event, hideView,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false);
- }
- }
- return;
-}
-
-bool PlayerOnDragListener::OnDrag(UIView& view, const DragEvent& event)
-{
- UNUSED(view);
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail");
- return false;
- }
- playersView->SetPlayerListGroupStatus(false);
- RootView::GetInstance()->Invalidate();
- }
- return false;
-}
-
-void PlayersPresenter::OnClickRescanButton(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RescanButtonOnClickListener OnClick");
- // 跳转正在搜索界面
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);
- return;
-}
-void PlayersPresenter::OnClickNewEquipmentButton(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NewEquipmentButtonOnClickListener OnClick");
- BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(true);
- // 跳转正在搜索界面
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);
- return;
-}
-
-void PlayersPresenter::OnClickCancelConnedRequestButton(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CancelConnedRequestButton OnClick");
- BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton Addr: %02x%02x%02x%02x%02x%02x",
- caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */
- caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */
- errcode_t retVal = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClickCancelConnedRequestButton DisconnectRemoteDevice retVal = %d", retVal);
-
- BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false);
- // 刷新列表
- BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance();
- if (bluetoothEarListView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton bluetoothEarListView nullptr");
- return;
- }
- if (bluetoothEarListView->GetScanUIList() == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton GetScanUIList nullptr");
- return;
- }
- bluetoothEarListView->GetScanUIList()->RefreshList();
- bluetoothEarListView->SetCancelConnedRequestButtonRemove();
- bluetoothEarListView->SetTitleLabel("扫描完成");
-
- BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView();
- if (pbItermView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleBeforeChangeView The GetConnectionView get failed.");
- return;
- }
- pbItermView->ConnectAnimatorStop();
- BluetoothModel::GetInstance()->SetConnectionView(nullptr);
- bluetoothEarListView->SetNewEquipmentButtonAdd();
- RootView::GetInstance()->Invalidate();
- return;
-}
-
-void PlayersPresenter::OnClickButtonUnpair(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_UNPAIR_BUTTON");
- BluetoothModel::GetInstance()->SetTagConnectNew(false);
- BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();
- if (bluetoothOptionsView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail");
- return;
- }
- bluetoothOptionsView->SetUnpair(); // 取消配对
- // 删除对应设备列表节点
- bd_addr_t bdAddr = bluetoothOptionsView->GetCurrentAddr();
- List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();
- ListNode<BluetoothCaseInfo> *node = bluetoothCaseList.Begin();
- if (node == nullptr) {
- return;
- }
- while (node != bluetoothCaseList.End()) {
- if ((bdAddr.addr[0] == node->data_.addr[0]) && (bdAddr.addr[1] == node->data_.addr[1])
- && (bdAddr.addr[2] == node->data_.addr[2]) && (bdAddr.addr[3] == node->data_.addr[3])
- && (bdAddr.addr[4] == node->data_.addr[4]) && (bdAddr.addr[5] == node->data_.addr[5])) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bdAddr true");
- bluetoothCaseList.Remove(node);
- }
- node = node->next_;
- }
-
- // 跳转并刷新列表
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);
-}
-
-void PlayersPresenter::OnClickButtonOptionOne(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_OPTIONONE_BUTTON");
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();
- if (bluetoothOptionsView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail");
- return;
- }
- BluetoothModel::GetInstance()->SetBtStatus();
- if (BluetoothModel::GetInstance()->GetAclConnected()) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected()");
- BluetoothModel::GetInstance()->SetTagConnectNew(false);
- bluetoothOptionsView->SetBtDisconnect();
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);
- } else {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected() fail");
- BluetoothModel::GetInstance()->SetTagReconnectJump(true);
- // 重连动画
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW);
- // 判断是否正在连接
- bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::ClickOptionsOneButton lastAddr: %02x%02x%02x%02x%02x%02x",
- lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3], /* mac下标 0 1 2 3 4 5 */
- lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */
- if (bt_is_acl_connected(lastAddr)) {
- BluetoothModel::GetInstance()->SetTagConnectNew(true);
- bluetoothOptionsView->SetBtDisconnect();
- } else {
- BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();
- errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice((const bd_addr_t *)&caseInfo->addr);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickOptionsOneButton ConnectRemoteDevice retVal = %d", retVal);
- }
- }
-}
-
-
-void PlayersPresenter::OnClickSetting(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SETTING_BUTTON");
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- BluetoothModel *bluetoothModel = BluetoothModel::GetInstance();
- if (bluetoothModel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickSetting BluetoothModel GetInstance fail");
- return;
- }
- bluetoothModel->SetTagConnectView(true);
- bluetoothModel->SetBluetoothCalleridStatus(CALLERPLAYERS);
- BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(false);
- // 设备列表
- List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();
- bool ret = bluetoothCaseList.IsEmpty();
- if (!ret) {
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);
- } else {
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);
- }
-}
-
-void PlayersPresenter::OnClickDelete(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_DELETE_BUTTON");
-}
-
-void PlayersPresenter::OnClickSuccBack(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SUCC_BACK_BUTTON");
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);
-}
-
-void PlayersPresenter::OnClickConnFailBack(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_CONN_FAIL_BACK_BUTTON");
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW);
- BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();
- errcode_t retVal = BluetoothModel::GetInstance()->ConnectRemoteDevice((const bd_addr_t *)&caseInfo->addr);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClickConnFailBack ConnectRemoteDevice retVal = %d", retVal);
-}
-
-void PlayersPresenter::OnClickFailBack(void)
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_FAIL_BACK_BUTTON");
- JumpView *jumpView = JumpView::GetInstance();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");
- return;
- }
- jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW,
- JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);
-}
-
-struct PlayersOnClickMapper {
- const char *id;
- void (PlayersPresenter::*func)(void);
-};
-
-static const PlayersOnClickMapper OnClickMapper[] = {
- {BLUETOOTH_RESCAN_BUTTON, &PlayersPresenter::OnClickRescanButton},
- {BLUETOOTH_NEWEQUIPMENT_BUTTON, &PlayersPresenter::OnClickNewEquipmentButton},
- {BLUETOOTH_CANCELCONNEDREQUEST_BUTTON, &PlayersPresenter::OnClickCancelConnedRequestButton},
- {BLUETOOTH_UNPAIR_BUTTON, &PlayersPresenter::OnClickButtonUnpair},
- {BLUETOOTH_OPTIONONE_BUTTON, &PlayersPresenter::OnClickButtonOptionOne},
- {BLUETOOTH_SETTING_BUTTON, &PlayersPresenter::OnClickSetting},
- {BLUETOOTH_DELETE_BUTTON, &PlayersPresenter::OnClickDelete},
- {BLUETOOTH_SUCC_BACK_BUTTON, &PlayersPresenter::OnClickSuccBack},
- {BLUETOOTH_CONN_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickConnFailBack},
- {BLUETOOTH_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickFailBack}
-};
-
-bool PlayersPresenter::OnClick(UIView &view, const ClickEvent &event)
-{
- uint16_t i;
- UNUSED(event);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick %s", view.GetViewId());
- for (i = 0; i < sizeof(OnClickMapper) / sizeof(OnClickMapper[0]); i++) {
- if (strcmp(view.GetViewId(), OnClickMapper[i].id) == 0) {
- (this->*(OnClickMapper[i].func))();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick i %d", i);
- return true;
- }
- }
- return false;
-}
-
-void PlayersPresenter::SetTitleSetText(const char *text)
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTitleSetText playersView GetInstance fail");
- return;
- }
- if (playersView->GetTitleLabel() == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTitleSetText titleLabel nullptr");
- return;
- }
- playersView->TitleSetText(text);
-}
-
-void PlayersPresenter::SetPlaybackProgress(int64_t value)
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlaybackProgress playersView GetInstance fail");
- return;
- }
- UICircleProgress *playbackProgress = playersView->GetPlaybackProgress();
- if (playbackProgress == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playbackProgress nullptr err");
- return;
- }
- playbackProgress->SetValue(value);
- playbackProgress->Invalidate();
-}
-
-void PlayersPresenter::SetPlayerState(bool value)
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlayerState playersView GetInstance fail");
- return;
- }
- if (value) {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
- PlayersModel::GetInstance()->SetPlayButtonState(false);
- }
-}
-
-void PlayersPresenter::PlayerbackReset(void)
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail");
- return;
- }
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
- playersView->GetPlayerButton()->Invalidate();
-}
-
-// 播放器按钮复位
-void PlayersPresenter::PlayerHeadsetReset(void)
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail");
- return;
- }
-
- if (playersView->GetPlayerButtonState() == UICheckBox::UICheckBoxState::UNSELECTED) {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
- } else {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
- }
-
- playersView->GetPlayerButton()->Invalidate();
-}
-
-void PlayersPresenter::ShowPlayerListGroup()
-{
- PlayersView *playersView = PlayersView::GetInstance();
- if (playersView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail");
- return;
- }
- // 添加list
- playersView->SetPlayerListGroupStatus(true);
- // 刷新UI
- RootView::GetInstance()->Invalidate();
- return;
-}
-
-} // namespace OHOS
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
+ * Description: Player view\r
+ * Author:\r
+ * Create: 2021-07-26\r
+ */\r
+#include <sys/types.h>\r
+#include <dirent.h>\r
+#include <iostream>\r
+#include <cstdlib>\r
+#include <time.h>\r
+#include "player/include/PlayersPresenter.h"\r
+#include "wearable_log.h"\r
+#include "common/image_cache_manager.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_image.h"\r
+#include "player/include/PlayersView.h"\r
+#include "player/include/PlayersModel.h"\r
+#include "BluetoothPresenter.h"\r
+#include "graphic_service.h"\r
+#include "phoneservice/include/PhoneService.h"\r
+\r
+#include "bts_avrcp_controller.h"\r
+#include "bts_avrcp_target.h"\r
+#include <PlayerListDelSongView.h>\r
+#include "ConfigModel.h"\r
+#include "ctype.h"\r
+#include <custom_utils.h>\r
+#include <custom_save_runtime.h>\r
+#include "NativeRegisterManager.h"\r
+\r
+\r
+\r
+namespace OHOS\r
+{\r
+\r
+\r
+static PlayerOnDragListener *g_pPlayerOnDragListener = nullptr;\r
+static JumpView *g_pJumpView = nullptr;\r
+static PlayersPresenter *g_pPlayersPresenter = nullptr;\r
+\r
+PlayersPresenter *PlayersPresenter::GetInstance(void)\r
+{\r
+ return g_pPlayersPresenter;\r
+}\r
+\r
+PlayersPresenter::PlayersPresenter()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter");\r
+ g_pPlayersPresenter = this;\r
+}\r
+\r
+PlayersPresenter::~PlayersPresenter()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayersPresenter");\r
+ g_pPlayersPresenter = nullptr;\r
+}\r
+\r
+JumpView *JumpView::GetInstance(void)\r
+{\r
+ return g_pJumpView;\r
+}\r
+\r
+JumpView::JumpView()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::JumpView");\r
+ g_pJumpView = this;\r
+ preProcessView[BLUETOOTHEARPHONEVIEW] = &JumpView::ChangeBluetoothEarPhoneView;\r
+ preProcessView[BLUETOOTHEARLISTVIEW] = &JumpView::ChangeBluetoothEarListView;\r
+ preProcessView[BLUETOOTHDEVICELISTVIEW] = &JumpView::ChangeBluetoothDeviceListView;\r
+ preProcessView[BLUETOOTHEOPTIONSVIEW] = &JumpView::ChangeBluetoothOptionsView;\r
+ preProcessView[BLUETOOTHRECONNECTVIEW] = &JumpView::ChangeBluetoothReconnectView;\r
+ preProcessView[TIPSSUCCMESSAGEVIEW] = &JumpView::ChangeTipsSuccMessageView;\r
+ preProcessView[TIPSCONNFAILMESSAGEVIEW] = &JumpView::ChangeTipsConnFailMessageView;\r
+ preProcessView[TIPSFAILMESSAGEVIEW] = &JumpView::ChangeTipsFailMessageView;\r
+ preProcessView[BLUETOOTHEVIEW] = &JumpView::ChangeBluetoothView;\r
+}\r
+\r
+JumpView::~JumpView()\r
+{\r
+ delete bluetoothEarPhoneView;\r
+ bluetoothEarPhoneView = nullptr;\r
+ delete bluetoothOptionsView;\r
+ bluetoothOptionsView = nullptr;\r
+ delete bluetoothEarListView;\r
+ bluetoothEarListView = nullptr;\r
+ delete bluetoothReconnectView;\r
+ bluetoothReconnectView = nullptr;\r
+ delete bluetoothDeviceListView;\r
+ bluetoothDeviceListView = nullptr;\r
+ delete tipsSuccMessageView;\r
+ tipsSuccMessageView = nullptr;\r
+ delete tipsConnFailMessageView;\r
+ tipsConnFailMessageView = nullptr;\r
+ delete tipsFailMessageView;\r
+ tipsFailMessageView = nullptr;\r
+ delete bluetoothView;\r
+ bluetoothView = nullptr;\r
+ int i;\r
+ for (i = BLUETOOTHEARPHONEVIEW; i <= BLUETOOTHEJUMP_MAX; i++) {\r
+ container[i] = nullptr;\r
+ }\r
+ g_pJumpView = nullptr;\r
+}\r
+\r
+bool JumpView::ChangeBluetoothEarPhoneView(int16_t hideView, int16_t thisView)\r
+{\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarPhoneView");\r
+ bluetoothEarPhoneView = new BluetoothEarPhoneView();\r
+ if (bluetoothEarPhoneView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView new fail");\r
+ return false;\r
+ }\r
+ UIViewGroup *group = bluetoothEarPhoneView->InitShowUpView(); // init view\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ }\r
+ // 动画开始\r
+ bluetoothEarPhoneView->BtAnimatorStart();\r
+ // 蓝牙扫描&清空列表\r
+ bluetoothEarPhoneView->BtEnable();\r
+ return true;\r
+}\r
+\r
+bool JumpView::ChangeBluetoothEarListView(int16_t hideView, int16_t thisView)\r
+{\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothEarListView");\r
+ bluetoothEarListView = new BluetoothEarListView();\r
+ if (bluetoothEarListView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarListView new fail");\r
+ return false;\r
+ }\r
+ UIViewGroup *group = bluetoothEarListView->InitShowUpView(); // init view\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ } else {\r
+ // 刷新列表\r
+ UIList *scanList = bluetoothEarListView->GetScanUIList();\r
+ if (scanList == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick scanList nullptr");\r
+ return false;\r
+ }\r
+ scanList->RefreshList();\r
+ }\r
+ ResetEarListView(hideView);\r
+ return true;\r
+}\r
+\r
+bool JumpView::ChangeBluetoothView(int16_t hideView, int16_t thisView)\r
+{\r
+ /*\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothView");\r
+ bluetoothView = new MusicPlayerSourceView();\r
+ if (bluetoothView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothView new fail");\r
+ return false;\r
+ }\r
+ // init view\r
+ UIViewGroup *group = bluetoothView->LoadMusicSourceView();\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeBluetoothView");\r
+ BluetoothModel::GetInstance()->SetTagConnectView(false);\r
+ */\r
+ return true;\r
+}\r
+\r
+bool JumpView::ChangeBluetoothOptionsView(int16_t hideView, int16_t thisView)\r
+{\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothOptionsView");\r
+ bluetoothOptionsView = new BluetoothOptionsView();\r
+ if (bluetoothOptionsView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView new fail");\r
+ return false;\r
+ }\r
+ // init view\r
+ UIViewGroup *group = bluetoothOptionsView->CreateBluetoothOptionsView();\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ }\r
+ return true;\r
+}\r
+\r
+bool JumpView::ChangeBluetoothDeviceListView(int16_t hideView, int16_t thisView)\r
+{\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothDeviceListView");\r
+ bluetoothDeviceListView = new BluetoothDeviceListView();\r
+ if (bluetoothDeviceListView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothDeviceListView new fail");\r
+ return false;\r
+ }\r
+ // init view\r
+ UIViewGroup *group = bluetoothDeviceListView->CreateBluetoothDeviceListView();\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Device group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ } else {\r
+ // 刷新列表\r
+ UIList *deviceList = bluetoothDeviceListView->GetDeviceUIList();\r
+ if (deviceList == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick deviceList nullptr");\r
+ return false;\r
+ }\r
+ deviceList->RefreshList();\r
+ }\r
+ BluetoothDeviceListView *bluetoothDeviceListView = BluetoothDeviceListView::GetInstance();\r
+ if (bluetoothDeviceListView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick bluetoothDeviceListView new fail");\r
+ return false;\r
+ }\r
+ bluetoothDeviceListView->RefreshBluetoothDeviceListView();\r
+ \r
+ return true;\r
+}\r
+\r
+bool JumpView::ChangeBluetoothReconnectView(int16_t hideView, int16_t thisView)\r
+{\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeBluetoothReconnectView");\r
+ bluetoothReconnectView = new BluetoothReconnectView();\r
+ if (bluetoothReconnectView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothReconnectView new fail");\r
+ return false;\r
+ }\r
+ // init view\r
+ UIViewGroup *group = bluetoothReconnectView->InitShowUpView();\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ }\r
+ BluetoothModel::GetInstance()->SetTagDisconnectView(true);\r
+ BluetoothReconnectView::GetInstance()->RefreshBluetoothNameLabel();\r
+ bluetoothReconnectView->BtReconnectStart();\r
+ return true;\r
+}\r
+\r
+void JumpView::ResetEarListView(int16_t hideView)\r
+{\r
+ BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance();\r
+ if (bluetoothEarListView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::ResetEarListView bluetoothEarListView == nullptr");\r
+ return;\r
+ }\r
+ bluetoothEarListView->SetCancelConnedRequestButtonRemove();\r
+ if (hideView == BLUETOOTHEARPHONEVIEW) {\r
+ bluetoothEarListView->SetTitleLabel("正在扫描");\r
+ bluetoothEarListView->SetNewEquipmentButtonRemove();\r
+ } else if (hideView == TIPSCONNFAILMESSAGEVIEW) {\r
+ bluetoothEarListView->SetTitleLabel("扫描完成");\r
+ bluetoothEarListView->SetNewEquipmentButtonAdd();\r
+ RootView::GetInstance()->Invalidate();\r
+ }\r
+}\r
+\r
+bool JumpView::ChangeTipsSuccMessageView(int16_t hideView, int16_t thisView)\r
+{\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsSuccMessageView");\r
+ tipsSuccMessageView = new TipsSuccMessageView();\r
+ if (tipsSuccMessageView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsSuccMessageView new fail");\r
+ return false;\r
+ }\r
+ // init view\r
+ UIViewGroup *group = tipsSuccMessageView->ShowUpViewInit();\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ }\r
+ return true;\r
+}\r
+\r
+bool JumpView::ChangeTipsConnFailMessageView(int16_t hideView, int16_t thisView)\r
+{\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView");\r
+ tipsConnFailMessageView = new TipsConnFailMessageView();\r
+ if (tipsConnFailMessageView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsConnFailMessageView new fail");\r
+ return false;\r
+ }\r
+ // init view\r
+ UIViewGroup *group = tipsConnFailMessageView->ShowUpViewInit();\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ }\r
+ BluetoothReconnectView *bluetoothReconnectView = BluetoothReconnectView::GetInstance();\r
+ if (bluetoothReconnectView == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback bluetoothReconnectView == nullptr");\r
+ } else {\r
+ container[BLUETOOTHRECONNECTVIEW]->SetVisible(false);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsConnFailMessageView SetVisible(false)");\r
+ }\r
+ return true;\r
+}\r
+\r
+bool JumpView::ChangeTipsFailMessageView(int16_t hideView, int16_t thisView)\r
+{\r
+ UNUSED(hideView);\r
+ if (container[thisView] == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ChangeTipsFailMessageView");\r
+ tipsFailMessageView = new TipsFailMessageView();\r
+ if (tipsFailMessageView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tipsFailMessageView new fail");\r
+ return false;\r
+ }\r
+ // init view\r
+ UIViewGroup *group = tipsFailMessageView->CreateTipsFailMessageView();\r
+ if (group == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group nullptr fail");\r
+ return false;\r
+ }\r
+ container[thisView] = group;\r
+ RootView::GetInstance()->Add(container[thisView]);\r
+ }\r
+ return true;\r
+}\r
+\r
+bool JumpView::CheckViewParam(int16_t hideView, int16_t showView)\r
+{\r
+ if (showView < 0 || showView >= BLUETOOTHEJUMP_MAX) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err.");\r
+ return false;\r
+ }\r
+\r
+ if (hideView < 0 || hideView > BLUETOOTHEJUMP_MAX) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::CheckViewParam showView err.");\r
+ return false;\r
+ }\r
+\r
+ if (hideView != BLUETOOTHEJUMP_MAX) {\r
+ if (container[hideView] == nullptr) {\r
+ return false;\r
+ }\r
+ container[hideView]->SetVisible(false);\r
+ }\r
+\r
+ if (hideView == BLUETOOTHEARLISTVIEW || showView == BLUETOOTHEARLISTVIEW) {\r
+ BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false);\r
+ }\r
+\r
+ return true;\r
+}\r
+\r
+void JumpView::ChangeView(int16_t hideView, int16_t showView)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView %d", hideView);\r
+ if (CheckViewParam(hideView, showView) == false) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView check param err %d %d.", hideView, showView);\r
+ return;\r
+ }\r
+\r
+ PreprosssChangeView tmpPreProcessView = preProcessView[showView];\r
+\r
+ if ((this->*tmpPreProcessView)(hideView, showView) == false) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpView::ChangeView %d %d failed", showView, hideView);\r
+ return;\r
+ }\r
+ container[showView]->SetVisible(true);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "JumpView:: ChangeView end!!!%d", showView);\r
+ RootView::GetInstance()->Invalidate();\r
+ BluetoothModel::GetInstance()->SetCurView(showView);\r
+}\r
+\r
+/* --------------------------------- 音乐列表相关 --------------------------------- */\r
+PlayersListGroup::~PlayersListGroup()\r
+{\r
+ if (playersCaseList_ != nullptr) {\r
+ playersCaseList_->Clear();\r
+ \r
+ delete playersCaseList_;\r
+ playersCaseList_ = nullptr;\r
+ }\r
+ playersList_.clear();\r
+}\r
+\r
+void PlayersListGroup::AddCase(PlayerCaseInfo testCaseInfo)\r
+{\r
+ if (playersCaseList_ == nullptr) {\r
+ return;\r
+ }\r
+ playersCaseList_->PushBack(testCaseInfo);\r
+}\r
+\r
+void PlayersListGroup::SetUpListCase()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersListGroup::SetUpListCase");\r
+ int16_t ret;\r
+ if (playersCaseList_ == nullptr) {\r
+ playersCaseList_ = new List<PlayerCaseInfo>();\r
+ if (playersCaseList_ == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersListGroup playersCaseList_ new fail");\r
+ return;\r
+ }\r
+ }\r
+ playersCaseList_->Clear();\r
+ playersList_.clear();\r
+ if(!PlayersModel::GetInstance()->getIdToMusicNameMap().empty())\r
+ {\r
+ PlayersModel::GetInstance()->getIdToMusicNameMap().clear();//清空map\r
+ }\r
+ if(!PlayersModel::GetInstance()->CreateMusicPlayDirectory())\r
+ {\r
+ return;\r
+ }\r
+ /* -------------------------------- 获取歌曲list -------------------------------- */\r
+ ret = GetAllFiles(playersList_);\r
+ if (ret == OHOS_FAILURE) {\r
+ return;\r
+ }\r
+ /* -------------------------------- 依照字母排序歌曲名 ------------------------------- */\r
+ sortPlayersCaseList(&playersList_); \r
+ // 遍历方式 使用迭代器\r
+ std::list<PlayerCaseInfo>::iterator it;\r
+ struct PlayerCaseInfo playerCaseInfo;\r
+ int i = 0;\r
+ for (it = playersList_.begin(); it!= playersList_.end(); ++it) {\r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "it musicName = %s,it index = %d",it->sliceId,it->index);\r
+ ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, it->sliceId, DEC_NUM_256);\r
+ if (ret != OHOS_SUCCESS) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret);\r
+ return;\r
+ }\r
+ playerCaseInfo.index = i;\r
+ i++;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "musicName = %s,index = %d",playerCaseInfo.sliceId,playerCaseInfo.index);\r
+ playersCaseList_->PushBack(playerCaseInfo);\r
+ }\r
+ // PlayersModel::GetInstance()->showIdToMusicNameMapData();//关闭打印\r
+}\r
+\r
+List<PlayerCaseInfo>& PlayersListGroup::GetCase()\r
+{\r
+ return *playersCaseList_;\r
+}\r
+\r
+char *PlayersListGroup::GetCase(int16_t index)\r
+{\r
+ if (index < 0 || playersCaseList_ == nullptr) {\r
+ return nullptr;\r
+ }\r
+ ListNode<PlayerCaseInfo> *node = playersCaseList_->Begin();\r
+ while (node != playersCaseList_->End()) {\r
+ if (index == node->data_.index) {\r
+ return node->data_.sliceId;\r
+ }\r
+ node = node->next_;\r
+ }\r
+ return nullptr;\r
+}\r
+\r
+// 比较函数,用于按照音乐名的字母顺序比较(不区分大小写)\r
+static bool comparePlayerCaseInfo(const PlayerCaseInfo& a, const PlayerCaseInfo& b) {\r
+ std::string nameA(a.sliceId);\r
+ std::string nameB(b.sliceId);\r
+\r
+ /*循环内部,tolower 函数将当前字符转换为小写*/\r
+ for (size_t i = 0; i < nameA.size() && i < nameB.size(); ++i) {\r
+ if (tolower(nameA[i]) < tolower(nameB[i])) {\r
+ return true;\r
+ } else if (tolower(nameA[i]) > tolower(nameB[i])) {\r
+ return false;\r
+ }\r
+ }\r
+ //如果循环结束而没有返回结果,则意味着当前字符比较没有得出结论,可能是两个字符串的前缀相同。此时,比较它们的长度:\r
+ return nameA.size() < nameB.size(); /*如:hello 与 hello word*/\r
+}\r
+\r
+/*将歌名排序*/\r
+void PlayersListGroup::sortPlayersCaseList(std::list<PlayerCaseInfo>* playersCaseList) {\r
+ playersCaseList->sort(comparePlayerCaseInfo);\r
+}\r
+// 读取指定目录(APP_MUSIC_PATH)下的文件,并将文件名等信息填充到提供的列表中\r
+int PlayersListGroup::GetAllFiles(List<PlayerCaseInfo> *playersCaseList)\r
+{\r
+ int ret;\r
+ int i{0};\r
+ struct dirent *direntp;\r
+ struct PlayerCaseInfo playerCaseInfo;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles");\r
+ // 打开目录\r
+ DIR *dirp = opendir(APP_MUSIC_PATH);\r
+ // 遍历文件\r
+ if (dirp != NULL) {\r
+ while ((direntp = readdir(dirp)) != NULL) {\r
+ ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, direntp->d_name, DEC_NUM_256);\r
+ if (ret != OHOS_SUCCESS) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret);\r
+ closedir(dirp);\r
+ return OHOS_FAILURE;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "song Name %s.", playerCaseInfo.sliceId);\r
+ playerCaseInfo.index = i;\r
+ i++;\r
+ playersCaseList->PushBack(playerCaseInfo);\r
+ }\r
+ } else {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::opendir err!");\r
+ return OHOS_FAILURE;\r
+ }\r
+ // 关闭目录\r
+ closedir(dirp);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles end!");\r
+ return OHOS_SUCCESS;\r
+}\r
+\r
+// 读取指定目录(APP_MUSIC_PATH)下的文件,并将文件名等信息填充到提供的列表中\r
+int PlayersListGroup::GetAllFiles(std::list<PlayerCaseInfo> &playersList)\r
+{\r
+ int ret;\r
+ int i{0};\r
+ struct dirent *direntp;\r
+ struct PlayerCaseInfo playerCaseInfo;\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles");\r
+ // 打开目录\r
+ DIR *dirp = opendir(APP_MUSIC_PATH);\r
+ // 遍历文件\r
+ if (dirp != NULL) {\r
+ while ((direntp = readdir(dirp)) != NULL) {\r
+ filename = direntp->d_name;\r
+ hexfilename = hex_to_string(direntp->d_name);\r
+ PlayersModel::GetInstance()->getIdToMusicNameMap()[i].first = filename; //16进制的文件名\r
+ PlayersModel::GetInstance()->getIdToMusicNameMap()[i].second = hexfilename; //转成UTF-8的文件名\r
+ ret = memcpy_s(playerCaseInfo.sliceId, DEC_NUM_256, direntp->d_name, DEC_NUM_256);\r
+ if (ret != OHOS_SUCCESS) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy_s err %d.", ret);\r
+ closedir(dirp);\r
+ return OHOS_FAILURE;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "song Name %s.", playerCaseInfo.sliceId);\r
+ playerCaseInfo.index = i;\r
+ i++;\r
+ playersList.push_back(playerCaseInfo);\r
+ }\r
+ } else {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::opendir err!");\r
+ return OHOS_FAILURE;\r
+ }\r
+ // 关闭目录\r
+ closedir(dirp);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::GetAllFiles end!");\r
+ return OHOS_SUCCESS;\r
+}\r
+\r
+//将16进制字符串转UTF-8字符串\r
+std::string PlayersListGroup::hex_to_string(const std::string &hex_str) \r
+{ \r
+ size_t length = hex_str.length(); \r
+ std::string result; \r
+ result.reserve(length / 2); // 预分配内存以容纳结果字符串,避免在 push_back 时频繁重新分配 \r
+\r
+ for (size_t i = 0; i < length / 2; i++) { \r
+ // 从十六进制字符串中提取每两个字符 \r
+ std::string byteString = hex_str.substr(i * 2, 2); // 获取两个字符的子串 \r
+\r
+ // 将十六进制字符串转换为字符 \r
+ result.push_back(static_cast<char>(strtol(byteString.c_str(), nullptr, 16))); \r
+ } \r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "hex_to_string:%s",result.c_str());\r
+ return result; // 返回结果字符串 \r
+} \r
+ButtonOnClickListener::~ButtonOnClickListener()\r
+{\r
+}\r
+\r
+/*播放或暂停按钮被点击时调用*/\r
+void ButtonOnClickListener::PlayerButtonOnClick()\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
+ return;\r
+ }\r
+\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play_or_pause_Button OnClick");\r
+ uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
+ int32_t playerState;\r
+ int32_t connCtState = avrcp_ct_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());\r
+ int32_t connTgState = avrcp_tg_get_device_connect_state(BluetoothModel::GetInstance()->GetLastConnedAddr());\r
+\r
+ state = playersView->GetPlayerButtonState();\r
+\r
+ if (PlayersModel::GetInstance()->GetPlayerCtr() == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersModel::GetInstance()->GetPlayerCtr() nullptr");\r
+ return;\r
+ }\r
+ PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "buttonState = %d playerState = %d", state, playerState);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "connCtState = %d connTgState = %d", connCtState, connTgState);\r
+\r
+ if (GetCurrCallNum() != 0 && GetScoConnectState() == HFP_SCO_STATE_CONNECTED) {\r
+ if (state == UICheckBox::UICheckBoxState::SELECTED) {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+ } else {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
+ }\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PlayerButtonOnClick] calling phone");\r
+ return;\r
+ }\r
+\r
+ if( !PlayersModel::GetInstance()->GetMusicSource()) \r
+ {\r
+ if(PlayersListGroup::GetInstance()->GetCase().IsEmpty()) //若当前歌曲列表为空且为本地音乐他跳转到音乐列表进行提示\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "current playersCaseList_ is empty!!");\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW,PlayersView::MUSIC_LIST_VIEW);\r
+ return;\r
+ }\r
+ else //若当前歌曲列表不为空且为本地音乐\r
+ {\r
+ if (PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && \r
+ PlayersModel::GetInstance()->get_a2dp_sink_playing_state()) //若ct或tg端是已连接状态且当前a2dp_sink是已播放状态\r
+ {\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW, PlayersView::MUSIC_PLAYER_TIP_VIEW); // 跳转到提示界面\r
+ } else {\r
+ if (state == UICheckBox::UICheckBoxState::SELECTED) {\r
+ /* start play */\r
+ PlayersModel::GetInstance()->ConnectBtAndLocalPlay(connCtState, connTgState, playerState);\r
+ } else if (state == UICheckBox::UICheckBoxState::UNSELECTED) {\r
+ PlayersModel::GetInstance()->ConnectBtAndLocalPause(connCtState, connTgState);\r
+ }\r
+ PlayersModel::GetInstance()->SetCurrentIndex(PlayersModel::GetInstance()->GetCurrentIndex());\r
+ }\r
+ }\r
+ }\r
+ else //手机音乐\r
+ {\r
+ /* -------------------------- 若ct或tg端是已连接状态且当前为手机音乐 ------------------------- */\r
+ if(PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected())\r
+ {\r
+ if (state == UICheckBox::UICheckBoxState::SELECTED) \r
+ {\r
+ PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_PLAY); //控制手机音乐播放\r
+ } \r
+ else if (state == UICheckBox::UICheckBoxState::UNSELECTED) \r
+ {\r
+ PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_PAUSE);//控制手机音乐暂停\r
+ }\r
+ return;\r
+ }\r
+ else\r
+ {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+ }\r
+ }\r
+}\r
+/*下一首按钮被点击时调用*/\r
+void ButtonOnClickListener::NextButtonOnClick()\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::GetInstance");\r
+ return;\r
+ }\r
+ /* -------------------------- 若ct或tg端是已连接状态且当前为手机音乐 ------------------------- */\r
+ if(PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && PlayersModel::GetInstance()->GetMusicSource())\r
+ {\r
+ PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_FORWARD); //控制手机音乐下一首\r
+ uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
+ state = playersView->GetPlayerButtonState();\r
+ if (PlayersModel::GetInstance()->get_a2dp_sink_playing_state() && state == UICheckBox::UICheckBoxState::UNSELECTED) \r
+ {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
+ }\r
+ return;\r
+ }\r
+ else\r
+ {\r
+ if (PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && \r
+ PlayersModel::GetInstance()->get_a2dp_sink_playing_state()) //若ct或tg端是已连接状态且当前a2dp_sink是已播放状态\r
+ {\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW, PlayersView::MUSIC_PLAYER_TIP_VIEW); // 跳转到提示界面\r
+ return;\r
+ }\r
+ if (playersView->GetPlaybackProgress() != nullptr) {\r
+ playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0%\r
+ playersView->GetPlaybackProgress()->Invalidate();\r
+ }\r
+ PlayersModel::GetInstance()->LoopingPlayout();\r
+ }\r
+}\r
+/*上一首按钮被点击时调用*/\r
+void ButtonOnClickListener::PreButtonOnClick()\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::GetInstance");\r
+ return;\r
+ }\r
+ /* -------------------------- 若ct或tg端是已连接状态且当前为手机音乐 ------------------------- */\r
+ if(PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && PlayersModel::GetInstance()->GetMusicSource())\r
+ {\r
+ PlayersModel::GetInstance()->set_phone_music_play_state(AVRCP_KEY_BACKWARD); //控制手机音乐上一首\r
+ uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
+ state = playersView->GetPlayerButtonState();\r
+ if (PlayersModel::GetInstance()->get_a2dp_sink_playing_state() && state == UICheckBox::UICheckBoxState::UNSELECTED) \r
+ {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
+ }\r
+ return;\r
+ }\r
+ else\r
+ {\r
+ if (PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && \r
+ PlayersModel::GetInstance()->get_a2dp_sink_playing_state()) //若ct或tg端是已连接状态且当前a2dp_sink是已播放状态\r
+ {\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW, PlayersView::MUSIC_PLAYER_TIP_VIEW); // 跳转到提示界面\r
+ return;\r
+ }\r
+ if (playersView->GetPlaybackProgress() != nullptr) {\r
+ playersView->GetPlaybackProgress()->SetValue(0); // 0:进度0%\r
+ playersView->GetPlaybackProgress()->Invalidate();\r
+ }\r
+ PlayersModel::GetInstance()->PreviousPlayout();\r
+ }\r
+}\r
+/*当声音按钮被点击时候调用*/\r
+void ButtonOnClickListener::SoundButtonOnClick()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener SoundButtonOnClick");\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick playersView nullptr err");\r
+ return;\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ if(PlayersModel::GetInstance()->GetMusicSource() == false) { //如果当前是本地音乐\r
+ if (PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && \r
+ PlayersModel::GetInstance()->get_a2dp_sink_playing_state()) //若ct或tg端是已连接状态且当前a2dp_sink是已播放状态\r
+ {\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW, PlayersView::MUSIC_PLAYER_TIP_VIEW); // 跳转到提示界面\r
+ return;\r
+ }\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW, PlayersView::MUSIC_VOLUME_CONTROL_VIEW);\r
+ VolumeSettingView *volumeSettingView = playersView->GetVolumeSettingView();\r
+ if(volumeSettingView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick volumeSettingView nullptr err");\r
+ return;\r
+ }\r
+ int32_t volume = uapi_systemVolumeGet(); //获取系统音量\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "current volume = %d", volume);\r
+ if(volumeSettingView->GetProgress()) {\r
+ volumeSettingView->GetProgress()->SetValue(volume);\r
+ }\r
+ VolumeSliderEventListener *volumeSliderEventListener = volumeSettingView->GetVolumeEventListener();\r
+ if (volumeSliderEventListener == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundButtonOnClick volumeSliderEventListener nullptr err");\r
+ return;\r
+ }\r
+ volumeSliderEventListener->SetPlayerCoefficients(VOLUMEPLAYERS); // 进度条系数\r
+ return;\r
+}\r
+//当音乐来源按钮被点击时候调用\r
+void ButtonOnClickListener::OptionsButtonOnClick()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener OptionsButtonOnClick");\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OptionsButtonOnClick playersView nullptr err");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW,PlayersView::MUSIC_SOURCE_VIEW);\r
+ return;\r
+}\r
+//当音乐列表按钮被点击时候调用\r
+void ButtonOnClickListener::MusicListButtonOnClick()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener MusicListButtonOnClick");\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OptionsButtonOnClick playersView nullptr err");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW,PlayersView::MUSIC_LIST_VIEW);\r
+ return;\r
+}\r
+//当音乐删除按钮被点击时候调用\r
+void ButtonOnClickListener::MusicDeleteButtonOnClick()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener::MusicDeleteButtonOnClick");\r
+ PlayersListGroup::GetInstance()->SetUpListCase();\r
+ return;\r
+}\r
+//当音乐播放模式按钮被点击时候调用\r
+void ButtonOnClickListener::PlayerModelButtonOnClick()\r
+{\r
+ PlayersModel::GetInstance()->SetPlayerModelAddOne();\r
+ if (PlayersModel::GetInstance()->GetPlayerModel() > RANDOM) {\r
+ PlayersModel::GetInstance()->SetPlayerModel(LOOP);\r
+ }\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerModelButtonOnClick playersView nullptr err");\r
+ return;\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ if (PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && \r
+ PlayersModel::GetInstance()->get_a2dp_sink_playing_state()) //若ct或tg端是已连接状态且当前a2dp_sink是已播放状态\r
+ {\r
+ playersView->ChangeView(PlayersView::MAIN_MUSICPLAYER_VIEW, PlayersView::MUSIC_PLAYER_TIP_VIEW); // 跳转到提示界面\r
+ return;\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ switch (PlayersModel::GetInstance()->GetPlayerModel()) {\r
+ case LOOP:\r
+ playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_LOOP); // 循环\r
+ break;\r
+ case SEQUENCE:\r
+ playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_SEQUENCE); // 顺序\r
+ break;\r
+ case REPEATS:\r
+ playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_REPEATS); // \r
+ break;\r
+ case RANDOM:\r
+ playersView->PlayerModelButtonSetSrc(PLAYER_PLAYERSMODEL_RANDOM); // 随机\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModel %d", PlayersModel::GetInstance()->GetPlayerModel());\r
+}\r
+\r
+bool ButtonOnClickListener::OnClick(UIView& view, const ClickEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ButtonOnClickListener OnClick");\r
+ UNUSED(event);\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::GetInstance");\r
+ return false;\r
+ }\r
+ if (&view == (UIView *)playersView->GetPlayerButton()) {\r
+ PlayerButtonOnClick();\r
+ } else if (&view == (UIView *)playersView->GetNextButton()) {\r
+ NextButtonOnClick();\r
+ } else if (&view == (UIView *)playersView->GetPreButton()) {\r
+ PreButtonOnClick();\r
+ } else if (&view == (UIView *)playersView->GetPlayerModelButton()) {\r
+ PlayerModelButtonOnClick();\r
+ } else if (&view == (UIView *)playersView->GetSoundButton()) {\r
+ SoundButtonOnClick();\r
+ } else if (&view == (UIView *)playersView->GetOptionsButton()) {\r
+ OptionsButtonOnClick();\r
+ }else if(&view == (UIView *)playersView->GetMusicListButton()) {\r
+ MusicListButtonOnClick();\r
+ }\r
+ if(playersView->GetPlayerListDelSongView()!=nullptr && &view == playersView->GetPlayerListDelSongView()->GetEnsureDeleteButton()) \r
+ {\r
+ //删除音乐回到音乐列表\r
+ playersView->GetPlayerListDelSongView()->DeleteSongNameFile();\r
+ MusicDeleteButtonOnClick();\r
+ playersView->ChangeView(PlayersView::MUSIC_DELETE_VIEW,PlayersView::MUSIC_LIST_VIEW);\r
+ }\r
+ else if(playersView->GetPlayerListDelSongView()!=nullptr && &view == playersView->GetPlayerListDelSongView()->GetCancelDeleteButton()) \r
+ {\r
+ //不删除音乐回到音乐列表\r
+ playersView->ChangeView(PlayersView::MUSIC_DELETE_VIEW,PlayersView::MUSIC_LIST_VIEW);\r
+ }\r
+ return true;\r
+}\r
+\r
+// 播放器回调\r
+PlayerCallbackImpl::PlayerCallbackImpl()\r
+{\r
+}\r
+\r
+PlayerCallbackImpl::~PlayerCallbackImpl()\r
+{\r
+}\r
+\r
+void PlayerCallbackImpl::OnPlaybackComplete()\r
+{\r
+ // 此处实现代码用于处理文件播放完成的事件\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnPlaybackCompleten");\r
+ GraphicService::GetInstance()->PostGraphicEvent([] {\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView != nullptr) {\r
+ if (playersView->GetPlaybackProgress() != nullptr) {\r
+ playersView->GetPlaybackProgress()->SetValue(100); // 100:进度100%\r
+ playersView->GetPlaybackProgress()->Invalidate();\r
+ }\r
+ }\r
+ });\r
+ usleep(20000);\r
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(&PlayersModel::PlaySwitching, PlayersModel::GetInstance()));\r
+}\r
+\r
+void PlayerCallbackImpl::OnError(int32_t errorType, int32_t errorCode)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnError test, errorType %d, errorCode %d", errorType, errorCode);\r
+ // 此处实现代码处理错误事件\r
+}\r
+\r
+void PlayerCallbackImpl::OnInfo(int type, int extra)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnInfo test, type %d, extra %d.", type, extra);\r
+ // 此处实现代码处理普通事件\r
+}\r
+\r
+void PlayerCallbackImpl::OnRewindToComplete()\r
+{\r
+ // 此处实现代码处理进度控制完成的事件\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnRewindToComplete test");\r
+}\r
+\r
+// 音频中断\r
+PlayerInterruptListener::PlayerInterruptListener()\r
+{\r
+}\r
+\r
+PlayerInterruptListener::~PlayerInterruptListener()\r
+{\r
+}\r
+\r
+void PlayerInterruptListener::SetOwner(std::shared_ptr<Player> player)\r
+{\r
+ player_ = player;\r
+}\r
+\r
+std::shared_ptr<Player> PlayerInterruptListener::GetPlayer()\r
+{\r
+ return player_;\r
+}\r
+\r
+void PlayerInterruptListener::RestFlag()\r
+{\r
+ isPaused_ = false;\r
+ isDelayed_ = false;\r
+ isResumed_ = false;\r
+ isBeginStopped_ = false;\r
+ isEndStopped_ = false;\r
+}\r
+\r
+void PlayerInterruptListener::SetPaused(bool value)\r
+{\r
+ isPaused_ = value;\r
+}\r
+\r
+void PlayerInterruptListener::SetResumed(bool value)\r
+{\r
+ isResumed_ = value;\r
+}\r
+\r
+bool PlayerInterruptListener::IsPaused()\r
+{\r
+ return isPaused_;\r
+}\r
+\r
+bool PlayerInterruptListener::IsDelayed()\r
+{\r
+ return isDelayed_;\r
+}\r
+\r
+bool PlayerInterruptListener::IsResumed()\r
+{\r
+ return isResumed_;\r
+}\r
+\r
+bool PlayerInterruptListener::IsBeginStopped()\r
+{\r
+ return isBeginStopped_;\r
+}\r
+\r
+bool PlayerInterruptListener::IsEndStopped()\r
+{\r
+ return isEndStopped_;\r
+}\r
+\r
+static void PlayerPostGraphicEvent(void (*fun)(void))\r
+{\r
+ GraphicService::GetInstance()->PostGraphicEvent(*fun);\r
+}\r
+\r
+static void Pause(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] start");\r
+ int32_t state;\r
+ int32_t ret;\r
+ std::shared_ptr<PlayerInterruptListener> PlayerIntrptListener =\r
+ OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener();\r
+ if (PlayerIntrptListener == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null");\r
+ return;\r
+ }\r
+\r
+ std::shared_ptr<Player> player = PlayerIntrptListener->GetPlayer();\r
+ if (player.get() == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer] player is nullptr");\r
+ return;\r
+ }\r
+\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+\r
+ player->GetPlayerState(state);\r
+ if (state == PLAYER_STARTED) {\r
+ ret = player->Pause();\r
+ if (ret == 0) {\r
+ //本地音乐暂停成功,记录该事件\r
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_PAUSE);//TOOD*\r
+ if (playersView == nullptr) {\r
+ PlayersModel::GetInstance()->SetPlayButtonState(false);\r
+ } else {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+ }\r
+ PlayerIntrptListener->RestFlag();\r
+ PlayerIntrptListener->SetPaused(true);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::PausePlayer]");\r
+ }\r
+ }\r
+}\r
+\r
+void PlayerInterruptListener::PausePlayer(void)\r
+{\r
+ PlayerPostGraphicEvent(Pause);\r
+}\r
+\r
+static void Resume(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::Resume] start");\r
+ int32_t state;\r
+ int32_t ret;\r
+ std::shared_ptr<PlayerInterruptListener> PlayerIntrptListener =\r
+ OHOS::PlayersModel::GetInstance()->GetPlayerIntrptListener();\r
+ if (PlayerIntrptListener == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener] Pause PlayerIntrptListener is null");\r
+ return;\r
+ }\r
+\r
+ std::shared_ptr<Player> player = PlayerIntrptListener->GetPlayer();\r
+ if (player.get() == nullptr) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] player is nullptr");\r
+ return;\r
+ }\r
+\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ \r
+ player->GetPlayerState(state);\r
+ if (state == PLAYER_PAUSED && PlayerIntrptListener->IsPaused() == true) {\r
+ ret = player->Play();\r
+ if (ret == 0) {\r
+ //如果播放成功,记录该事件\r
+ uapi_save_runtime_log(RUNTIME_LOG_LOCAL_MUSIC_PLAY_START);//TOOD*\r
+ if (playersView == nullptr) {\r
+ PlayersModel::GetInstance()->SetPlayButtonState(true);\r
+ } else {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
+ }\r
+ PlayerIntrptListener->RestFlag();\r
+ PlayerIntrptListener->SetResumed(true);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer]");\r
+ }\r
+ }\r
+}\r
+\r
+void PlayerInterruptListener::ResumePlayer(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] start");\r
+ usleep(50000); // 确保界面切换完成\r
+ if (NativeAbility::GetInstance().GetCurSliceId() == VIEW_INCOMING_CALL ||\r
+ (GetCurrCallState() != HFP_HF_CALL_STATE_FINISHED && GetScoConnectState() == HFP_SCO_STATE_CONNECTED)) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::ResumePlayer] this is in calling");\r
+ return; // 通话界面,禁止音乐恢复播放\r
+ }\r
+ AudioRelease(); // 适配某些机型不触发SCO\r
+\r
+ PlayerPostGraphicEvent(Resume);\r
+}\r
+\r
+static void Stop(void)\r
+{\r
+ PlayersModel::GetInstance()->PlayerStop();\r
+ PlayersModel::GetInstance()->ClearActivateAudioInterrupt();\r
+}\r
+\r
+void PlayerInterruptListener::StopPlayer(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::StopPlayer] start");\r
+ PlayerPostGraphicEvent(Stop);\r
+}\r
+\r
+void PlayerInterruptListener::OnInterrupt(int32_t type, int32_t hint)\r
+{\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "[PlayerInterruptListener::] OnInterrupt go in, type %d, hint %d.", type, hint);\r
+\r
+ if (type == INTERRUPT_TYPE_BEGIN && hint == INTERRUPT_HINT_PAUSE) {\r
+ PausePlayer();\r
+ }\r
+\r
+ if (type == INTERRUPT_TYPE_END && hint == INTERRUPT_HINT_RESUME) {\r
+ ResumePlayer();\r
+ }\r
+\r
+ if (hint == INTERRUPT_HINT_STOP) {\r
+ RestFlag();\r
+ if (type == INTERRUPT_TYPE_BEGIN) {\r
+ isBeginStopped_ = true;\r
+ StopPlayer();\r
+ } else if (type == INTERRUPT_TYPE_END) {\r
+ isEndStopped_ = true;\r
+ }\r
+ }\r
+}\r
+\r
+PlayerOnDragListener::PlayerOnDragListener()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener");\r
+ g_pPlayerOnDragListener = this;\r
+}\r
+\r
+PlayerOnDragListener::~PlayerOnDragListener()\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~PlayerOnDragListener");\r
+ g_pPlayerOnDragListener = nullptr;\r
+}\r
+\r
+PlayerOnDragListener *PlayerOnDragListener::GetInstance(void)\r
+{\r
+ return g_pPlayerOnDragListener;\r
+}\r
+\r
+void PlayerOnDragListener::OnDragChangView(const DragEvent& event, int16_t hideView, int16_t showView, bool isStopScan)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangeView=%d showView=%d", hideView, showView);\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {\r
+ if (isStopScan == true) {\r
+ BluetoothEarPhoneView *bluetoothEarPhoneView = BluetoothEarPhoneView::GetInstance();\r
+ if (bluetoothEarPhoneView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothEarPhoneView GetInstance fail");\r
+ return;\r
+ }\r
+ bluetoothEarPhoneView->BtAnimatorStop();\r
+ bluetoothEarPhoneView->StopBtDiscovery();\r
+ }\r
+ // 跳转设置页面\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ jumpView->ChangeView(hideView, showView);\r
+ }\r
+}\r
+\r
+/*从音乐来源视图回到音乐主视图*/\r
+void PlayerOnDragListener::OnDragChangMusicPlayerSourceView(const DragEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangMusicPlayerSourceView");\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MUSIC_SOURCE_VIEW,PlayersView::MAIN_MUSICPLAYER_VIEW);\r
+ X_DRAG_FLAG = true;\r
+ }\r
+}\r
+\r
+/*从音乐列表视图回到音乐主视图*/\r
+void PlayerOnDragListener::OnDragChangMusicPlayerListView(const DragEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangMusicPlayerListView");\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MUSIC_LIST_VIEW,PlayersView::MAIN_MUSICPLAYER_VIEW);\r
+ X_DRAG_FLAG = true;\r
+ }\r
+}\r
+\r
+/*从音乐删除视图回到音乐列表视图*/\r
+void PlayerOnDragListener::OnDragChangMusicPlayerDeleteView(const DragEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangMusicPlayerDeleteView");\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MUSIC_DELETE_VIEW,PlayersView::MUSIC_LIST_VIEW);\r
+ X_DRAG_FLAG = true;\r
+ }\r
+}\r
+/*从蓝牙未连接视图回到音乐主视图*/\r
+void PlayerOnDragListener::OnDragChangMusicPlayerBTDisConnectView(const DragEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangMusicPlayerBTDisConnectView");\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW,PlayersView::MAIN_MUSICPLAYER_VIEW);\r
+ X_DRAG_FLAG = true;\r
+ }\r
+}\r
+/*从蓝牙连接失败视图回到蓝牙未连接视图*/\r
+void PlayerOnDragListener::OnDragChangMusicPlayerBTConnectFailedView(const DragEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangMusicPlayerBTConnectFailedView");\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MUSIC_BT_CONNECTFAILED_VIEW,PlayersView::MUSIC_BLUETOOTH_DISCONN_VIEW);\r
+ X_DRAG_FLAG = true;\r
+ }\r
+}\r
+// 从音乐提示视图回到音乐主视图\r
+void PlayerOnDragListener::OnDragChangMusicPlayerTipView(const DragEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnDragChangMusicPlayerTipView");\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && X_DRAG_FLAG) {\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView GetInstance fail");\r
+ return;\r
+ }\r
+ playersView->ChangeView(PlayersView::MUSIC_PLAYER_TIP_VIEW, PlayersModel::GetInstance()->getPreShowView());\r
+ X_DRAG_FLAG = true;\r
+ }\r
+}\r
+void PlayerOnDragListener::DropEarPhoneView(const DragEvent& event)\r
+{\r
+ bool ret = BluetoothModel::GetInstance()->IsTagReturnToDeviceListView();\r
+ if (ret == true) {\r
+ OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, true);\r
+ } else {\r
+ OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true);\r
+ }\r
+}\r
+\r
+void PlayerOnDragListener::DropEarListView(const DragEvent& event)\r
+{\r
+ bool ret = BluetoothModel::GetInstance()->IsTagScanDeviceClicked();\r
+ if (ret == true) {\r
+ BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView Addr: %02x%02x%02x%02x%02x%02x",\r
+ caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */\r
+ caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
+ ret = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr);\r
+ if (ret == false) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::DropEarListView gap_disconnect_remote_device false");\r
+ }\r
+ }\r
+ BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView();\r
+ if (pbItermView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnDragEnd The GetConnectionView nullptr.");\r
+ } else {\r
+ pbItermView->ConnectAnimatorStop();\r
+ BluetoothModel::GetInstance()->SetConnectionView(nullptr);\r
+ }\r
+ OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, true);\r
+}\r
+\r
+bool PlayerOnDragListener::OnDrag(UIView& view, const DragEvent& event)\r
+{\r
+ UNUSED(view);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnDrag");\r
+ if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动\r
+ {\r
+ X_DRAG_FLAG = true;\r
+ }\r
+ return true;\r
+}\r
+\r
+bool PlayerOnDragListener::OnDragEnd(UIView& view, const DragEvent& event)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayerOnDragListener::OnDragEnd- %s", view.GetViewId());\r
+ if (view.GetViewId() == nullptr) {\r
+ return true;\r
+ }\r
+ if (strcmp(view.GetViewId(), BLUETOOTH_EAR_PHONE_VIEW) == 0) {\r
+ DropEarPhoneView(event);\r
+ } else if (strcmp(view.GetViewId(), TIPS_SUCC_MESSAGE_VIEW) == 0) {\r
+ OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false);\r
+ } else if (strcmp(view.GetViewId(), TIPS_FAIL_MESSAGE_VIEW) == 0) {\r
+ OnDragChangView(event, JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false);\r
+ } else if (strcmp(view.GetViewId(), TIPS_CONN_FAIL_MESSAGE_VIEW) == 0) {\r
+ CorrespondingJump(event, JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW);\r
+ } else if (strcmp(view.GetViewId(), BLUETOOTH_EARLIST_VIEW) == 0) {\r
+ DropEarListView(event);\r
+ } else if (strcmp(view.GetViewId(), BLUETOOTH_RECONNECT_VIEW) == 0) {\r
+ BluetoothModel::GetInstance()->SetTagDisconnectView(false);\r
+ CorrespondingJump(event, JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW);\r
+ BluetoothReconnectView *bluetoothReconnectView = BluetoothReconnectView::GetInstance();\r
+ if (bluetoothReconnectView != nullptr) {\r
+ bluetoothReconnectView->BtReconnectStop();\r
+ }\r
+ } else if (strcmp(view.GetViewId(), BLUETOOTH_OPTIONS_VIEW) == 0) {\r
+ OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW, false);\r
+ } else if (strcmp(view.GetViewId(), BLUETOOTH_DEVICE_LIST_VIEW) == 0) {\r
+ OnDragChangView(event, JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW, false);\r
+ } else if (strcmp(view.GetViewId(), MUSIC_PLAYER_SOURCE_VIEW) == 0) {\r
+ OnDragChangMusicPlayerSourceView(event);\r
+ return false;\r
+ } else if (strcmp(view.GetViewId(), MUSIC_PLAYER_LIST_VIEW) == 0) {\r
+ OnDragChangMusicPlayerListView(event);\r
+ return false;\r
+ }\r
+ else if (strcmp(view.GetViewId(), MUSIC_PLAYER_DELETE_VIEW) == 0) {\r
+ OnDragChangMusicPlayerDeleteView(event);\r
+ return false;\r
+ }\r
+ else if (strcmp(view.GetViewId(), MUISC_PLAYER_BLUETOOTH_DISCONN_VIEW) == 0) {\r
+ OnDragChangMusicPlayerBTDisConnectView(event);\r
+ return false;\r
+ }\r
+ else if (strcmp(view.GetViewId(), MUISC_PLAYER_BLUETOOTH_CONNECTFAILED_VIEW) == 0) {\r
+ OnDragChangMusicPlayerBTConnectFailedView(event);\r
+ return false;\r
+ }\r
+ else if (strcmp(view.GetViewId(), MUISC_PLAYER_TIP_VIEW) == 0) {\r
+ OnDragChangMusicPlayerTipView(event);\r
+ return false;\r
+ }\r
+ return true;\r
+}\r
+\r
+\r
+void PlayerOnDragListener::CorrespondingJump(const DragEvent& event, int16_t hideView)\r
+{\r
+ BluetoothModel *bluetoothModel = BluetoothModel::GetInstance();\r
+ if (bluetoothModel == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainBluetoothView::DropView bluetoothModel == nullptr");\r
+ return;\r
+ }\r
+ if (bluetoothModel->GetTagReconnectJump() == true) {\r
+ OnDragChangView(event, hideView,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW, false);\r
+ } else {\r
+ std::list<BluetoothCaseInfo> &bluetoothScanList = BluetoothModel::GetInstance()->GetCase();\r
+ bool ret = bluetoothScanList.empty();\r
+ if (ret != true) {\r
+ OnDragChangView(event, hideView,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW, false);\r
+ } else {\r
+ OnDragChangView(event, hideView,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW, false);\r
+ }\r
+ }\r
+ return;\r
+}\r
+\r
+void PlayersPresenter::OnClickRescanButton(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RescanButtonOnClickListener OnClick");\r
+ // 跳转正在搜索界面\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEARLISTVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);\r
+ return;\r
+}\r
+void PlayersPresenter::OnClickNewEquipmentButton(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NewEquipmentButtonOnClickListener OnClick");\r
+ BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(true);\r
+ // 跳转正在搜索界面\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);\r
+ return;\r
+}\r
+\r
+void PlayersPresenter::OnClickCancelConnedRequestButton(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CancelConnedRequestButton OnClick");\r
+ BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton Addr: %02x%02x%02x%02x%02x%02x",\r
+ caseInfo->addr[5], caseInfo->addr[4], caseInfo->addr[3], /* mac下标 0 1 2 3 4 5 */\r
+ caseInfo->addr[2], caseInfo->addr[1], caseInfo->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
+ bool ret = gap_disconnect_remote_device((const bd_addr_t *)caseInfo->addr);\r
+ if (ret == false) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClickCancelConnedRequestButton DisconnectRemoteDevice false");\r
+ }\r
+ BluetoothModel::GetInstance()->SetTagScanDeviceClicked(false);\r
+ // 刷新列表\r
+ BluetoothEarListView *bluetoothEarListView = BluetoothEarListView::GetInstance();\r
+ if (bluetoothEarListView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton bluetoothEarListView nullptr");\r
+ return;\r
+ }\r
+ if (bluetoothEarListView->GetScanUIList() == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClickCancelConnedRequestButton GetScanUIList nullptr");\r
+ return;\r
+ }\r
+ bluetoothEarListView->GetScanUIList()->RefreshList();\r
+ bluetoothEarListView->SetCancelConnedRequestButtonRemove();\r
+ bluetoothEarListView->SetTitleLabel("扫描完成");\r
+\r
+ BluetoothItemView *pbItermView = BluetoothModel::GetInstance()->GetConnectionView();\r
+ if (pbItermView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleBeforeChangeView The GetConnectionView get failed.");\r
+ return;\r
+ }\r
+ pbItermView->ConnectAnimatorStop();\r
+ BluetoothModel::GetInstance()->SetConnectionView(nullptr);\r
+ bluetoothEarListView->SetNewEquipmentButtonAdd();\r
+ RootView::GetInstance()->Invalidate();\r
+ return;\r
+}\r
+\r
+void PlayersPresenter::OnClickButtonUnpair(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_UNPAIR_BUTTON");\r
+ BluetoothModel::GetInstance()->SetTagConnectNew(false);\r
+ BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();\r
+ if (bluetoothOptionsView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail");\r
+ return;\r
+ }\r
+ bluetoothOptionsView->SetUnpair(); // 取消配对\r
+ // 删除对应设备列表节点\r
+ bd_addr_t bdAddr = bluetoothOptionsView->GetCurrentAddr();\r
+ List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
+ ListNode<BluetoothCaseInfo> *node = bluetoothCaseList.Begin();\r
+ if (node == nullptr) {\r
+ return;\r
+ }\r
+ while (node != bluetoothCaseList.End()) {\r
+ if ((bdAddr.addr[0] == node->data_.addr[0]) && (bdAddr.addr[1] == node->data_.addr[1])\r
+ && (bdAddr.addr[2] == node->data_.addr[2]) && (bdAddr.addr[3] == node->data_.addr[3])\r
+ && (bdAddr.addr[4] == node->data_.addr[4]) && (bdAddr.addr[5] == node->data_.addr[5])) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bdAddr true");\r
+ bluetoothCaseList.Remove(node);\r
+ }\r
+ node = node->next_;\r
+ }\r
+\r
+ // 跳转并刷新列表\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);\r
+}\r
+\r
+void PlayersPresenter::OnClickButtonOptionOne(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_OPTIONONE_BUTTON");\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ BluetoothOptionsView *bluetoothOptionsView = BluetoothOptionsView::GetInstance();\r
+ if (bluetoothOptionsView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetoothOptionsView GetInstance fail");\r
+ return;\r
+ }\r
+ BluetoothModel::GetInstance()->SetBtStatus();\r
+ if (BluetoothModel::GetInstance()->GetAclConnected() == true) {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected() == true");\r
+ BluetoothModel::GetInstance()->SetTagConnectNew(false);\r
+ bluetoothOptionsView->SetBtDisconnect();\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);\r
+ } else {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickButtonOptionOne GetAclConnected() ==false");\r
+ BluetoothModel::GetInstance()->SetTagReconnectJump(true);\r
+ // 重连动画\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEOPTIONSVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW);\r
+ // 判断是否正在连接\r
+ bd_addr_t *lastAddr = BluetoothModel::GetInstance()->GetLastConnedAddr();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BluetoothPresenter::ClickOptionsOneButton lastAddr: %02x%02x%02x%02x%02x%02x",\r
+ lastAddr->addr[5], lastAddr->addr[4], lastAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
+ lastAddr->addr[2], lastAddr->addr[1], lastAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
+ bool ret = bt_is_acl_connected(lastAddr);\r
+ if (ret) {\r
+ BluetoothModel::GetInstance()->SetTagConnectNew(true);\r
+ bluetoothOptionsView->SetBtDisconnect();\r
+ } else {\r
+ BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
+ bool ret = gap_connect_remote_device((const bd_addr_t *)&caseInfo->addr);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClickOptionsOneButton gap_connect_remote_device ret = %d", ret);\r
+ }\r
+ }\r
+}\r
+\r
+\r
+void PlayersPresenter::OnClickSetting(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SETTING_BUTTON");\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ BluetoothModel *bluetoothModel = BluetoothModel::GetInstance();\r
+ if (bluetoothModel == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClickSetting BluetoothModel GetInstance fail");\r
+ return;\r
+ }\r
+ bluetoothModel->SetTagConnectView(true);\r
+ bluetoothModel->SetBluetoothCalleridStatus(CALLERPLAYERS);\r
+ BluetoothModel::GetInstance()->SetTagReturnToDeviceListView(false);\r
+ // 设备列表\r
+ List<BluetoothCaseInfo> &bluetoothCaseList = BluetoothModel::GetInstance()->GetConnedDevicesCase();\r
+ bool ret = bluetoothCaseList.IsEmpty();\r
+ if (ret != true) {\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);\r
+ } else {\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::BLUETOOTHEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);\r
+ }\r
+}\r
+\r
+void PlayersPresenter::OnClickDelete(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_DELETE_BUTTON");\r
+}\r
+\r
+void PlayersPresenter::OnClickSuccBack(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_SUCC_BACK_BUTTON");\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSSUCCMESSAGEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHDEVICELISTVIEW);\r
+}\r
+\r
+void PlayersPresenter::OnClickConnFailBack(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_CONN_FAIL_BACK_BUTTON");\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSCONNFAILMESSAGEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHRECONNECTVIEW);\r
+ BluetoothCaseInfo *caseInfo = BluetoothModel::GetInstance()->GetTempMacValue();\r
+ bool ret = gap_connect_remote_device((const bd_addr_t *)&caseInfo->addr);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnClickConnFailBack gap_connect_remote_device ret = %d", ret);\r
+}\r
+\r
+void PlayersPresenter::OnClickFailBack(void)\r
+{\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick BLUETOOTH_FAIL_BACK_BUTTON");\r
+ JumpView *jumpView = JumpView::GetInstance();\r
+ if (jumpView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView GetInstance fail");\r
+ return;\r
+ }\r
+ jumpView->ChangeView(JumpView::BluetoothJumpViewNum::TIPSFAILMESSAGEVIEW,\r
+ JumpView::BluetoothJumpViewNum::BLUETOOTHEARPHONEVIEW);\r
+}\r
+\r
+struct PlayersOnClickMapper {\r
+ const char *id;\r
+ void (PlayersPresenter::*func)(void);\r
+};\r
+\r
+static const PlayersOnClickMapper OnClickMapper[] = {\r
+ {BLUETOOTH_RESCAN_BUTTON, &PlayersPresenter::OnClickRescanButton},\r
+ {BLUETOOTH_NEWEQUIPMENT_BUTTON, &PlayersPresenter::OnClickNewEquipmentButton},\r
+ {BLUETOOTH_CANCELCONNEDREQUEST_BUTTON, &PlayersPresenter::OnClickCancelConnedRequestButton},\r
+ {BLUETOOTH_UNPAIR_BUTTON, &PlayersPresenter::OnClickButtonUnpair},\r
+ {BLUETOOTH_OPTIONONE_BUTTON, &PlayersPresenter::OnClickButtonOptionOne},\r
+ {BLUETOOTH_SETTING_BUTTON, &PlayersPresenter::OnClickSetting},\r
+ {BLUETOOTH_DELETE_BUTTON, &PlayersPresenter::OnClickDelete},\r
+ {BLUETOOTH_SUCC_BACK_BUTTON, &PlayersPresenter::OnClickSuccBack},\r
+ {BLUETOOTH_CONN_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickConnFailBack},\r
+ {BLUETOOTH_FAIL_BACK_BUTTON, &PlayersPresenter::OnClickFailBack}\r
+};\r
+\r
+bool PlayersPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+{\r
+ uint16_t i;\r
+ UNUSED(event);\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick %s", view.GetViewId());\r
+ for (i = 0; i < sizeof(OnClickMapper) / sizeof(OnClickMapper[0]); i++) {\r
+ if (strcmp(view.GetViewId(), OnClickMapper[i].id) == 0) {\r
+ (this->*(OnClickMapper[i].func))();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersPresenter::OnClick i %d", i);\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+}\r
+\r
+void PlayersPresenter::SetPlaybackProgress(int64_t value)\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlaybackProgress playersView GetInstance fail");\r
+ return;\r
+ }\r
+ UICircleProgress *playbackProgress = playersView->GetPlaybackProgress();\r
+ if (playbackProgress == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playbackProgress nullptr err");\r
+ return;\r
+ }\r
+ playbackProgress->SetValue(value);\r
+ playbackProgress->Invalidate();\r
+}\r
+\r
+void PlayersPresenter::SetPlayerState(bool value)\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPlayerState playersView GetInstance fail");\r
+ return;\r
+ }\r
+ if (value != false) {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
+ PlayersModel::GetInstance()->SetPlayButtonState(false);\r
+ }\r
+}\r
+\r
+void PlayersPresenter::SetPhonePlayerState(bool value)\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView != nullptr) {\r
+ playersView->SetPlayerButtonState(value ? UICheckBox::UICheckBoxState::SELECTED:UICheckBox::UICheckBoxState::UNSELECTED);\r
+ }\r
+ return;\r
+}\r
+\r
+void PlayersPresenter::PlayerbackReset(void)\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail");\r
+ return;\r
+ }\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+}\r
+\r
+// 播放器按钮复位\r
+void PlayersPresenter::PlayerHeadsetReset(void)\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView == nullptr) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayerbackReset playersView GetInstance fail");\r
+ return;\r
+ }\r
+\r
+ if (playersView->GetPlayerButtonState() == UICheckBox::UICheckBoxState::UNSELECTED) {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);\r
+ } else {\r
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);\r
+ }\r
+\r
+}\r
+} // namespace OHOS\r
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: Player view
- * Author:
- * Create: 2021-07-26
- */
-#include <cstdlib>
-#include <unistd.h>
-#include "common/image_cache_manager.h"
-#include "ui_resource_image.h"
-#include "PlayersView.h"
-#include "UiConfig.h"
-#include "PlayersModel.h"
-#include "PlayersCaseListAdapter.h"
-#include "MainViewSample.h"
-
-namespace OHOS {
-static PlayersView* g_pPlayersView = nullptr;
-
-#define STEP_LABEL_X 166
-#define STEP_LABEL_Y 30
-#define TEXT_WIDTH 120
-#define TEXT_HEIGHT 30
-
-PlayersView::PlayersView()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::PlayersView");
- SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
- g_pPlayersView = this;
-}
-
-PlayersView::~PlayersView()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::~PlayersView");
- if (viewiInitStatus) {
- state_ = GetPlayerButtonState();
- if (state_ == UICheckBox::UICheckBoxState::SELECTED) {
- PlayersModel::GetInstance()->SetPlayButtonState(true);
- }
- RootView::GetInstance()->RemoveAll();
- RemoveAll();
- listGroup->RemoveAll();
- delete list;
- list = nullptr;
- delete playerlistener;
- playerlistener = nullptr;
- delete playerButton;
- playerButton = nullptr;
- delete soundlistener;
- soundlistener = nullptr;
- delete nextButton;
- nextButton = nullptr;
- delete nextlistener;
- nextlistener = nullptr;
- delete preButton;
- preButton = nullptr;
- TearDownView();
- delete adapterText;
- adapterText = nullptr;
- delete backGround;
- delete titleLabel;
- delete subTitleLabel;
- backGround = nullptr;
- titleLabel = nullptr;
- subTitleLabel = nullptr;
- delete playbackProgress;
- playbackProgress = nullptr;
- delete jumpView;
- jumpView = nullptr;
- delete playersPresenter;
- playersPresenter = nullptr;
- delete playerOnDragListener;
- playerOnDragListener = nullptr;
- }
- g_pPlayersView = nullptr;
-}
-
-void PlayersView::TitleSetText(const char *text)
-{
- titleLabel->SetText(text);
- titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
- titleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER,
- UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);
-}
-
-void PlayersView::PlayerModelButtonSetSrc(uint32_t playMode)
-{
- ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(playMode, PLAYER_IAMGES);
- playerModelButton->SetSrc(image);
-}
-
-int16_t PlayersView::GetVolumeRank(void)
-{
- return volumeSet;
-}
-
-void PlayersView::SetVolumeRank(int16_t value)
-{
- volumeSet = value;
-}
-
-void PlayersView::SetVolumeAddOne(void)
-{
- volumeSet++;
-}
-
-UIButton *PlayersView::GetPullButton(void)
-{
- return pullButton;
-}
-
-UIButton *PlayersView::GetOptionsButton(void)
-{
- return optionsButton;
-}
-
-UIButton *PlayersView::GetPreButton(void)
-{
- return preButton;
-}
-
-UIButton *PlayersView::GetNextButton(void)
-{
- return nextButton;
-}
-
-UILabel *PlayersView::GetTitleLabel(void)
-{
- return titleLabel;
-}
-
-UICheckBox *PlayersView::GetPlayerButton(void)
-{
- return playerButton;
-}
-
-UIImageView *PlayersView::GetSoundButton(void)
-{
- return soundButton;
-}
-
-UICircleProgress *PlayersView::GetPlaybackProgress(void)
-{
- return playbackProgress;
-}
-
-UIImageView *PlayersView::GetPlayerModelButton(void)
-{
- return playerModelButton;
-}
-
-UICheckBox::UICheckBoxState PlayersView::GetPlayerButtonState(void)
-{
- return playerButton->GetState();
-}
-
-void PlayersView::SetPlayerButtonState(UICheckBox::UICheckBoxState state)
-{
- if (playerButton == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetPlayerButtonState playerButton nullptr");
- return;
- }
- return playerButton->SetState(state);
-}
-
-UIList *PlayersView::GetPlayerList(void)
-{
- return list;
-}
-
-void PlayersView::SetPlayerListGroupStatus(bool status)
-{
- if (listGroup == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView listGroup is nullptr");
- return;
- }
- UIView *vew = MainViewSample::GetInstance()->GetMainViewGroup();
- if (vew != nullptr) {
- vew->SetVisible(!status);
- }
- listGroup->SetVisible(status);
- return;
-}
-
-void PlayersView::SetPlayerCtrVolume(float leftVolume, float rightVolume)
-{
- PlayersModel::GetInstance()->GetPlayerCtr()->SetVolume(leftVolume, rightVolume);
-}
-
-void PlayersView::TearDownView()
-{
- delete prelistener;
- prelistener = nullptr;
- delete playerModelButton;
- playerModelButton = nullptr;
- delete modellistener;
- modellistener = nullptr;
- delete soundButton;
- soundButton = nullptr;
- delete optionslistener;
- optionslistener = nullptr;
- delete optionsButton;
- optionsButton = nullptr;
- delete pullButton;
- pullButton = nullptr;
- delete listGroup;
- listGroup = nullptr;
-}
-
-PlayersView* PlayersView::GetInstance(void)
-{
- return g_pPlayersView;
-}
-
-// list
-void PlayersView::ShowUpListView()
-{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpListView");
- listGroup = new UIViewGroup();
- if (listGroup == nullptr) {
- return;
- }
- listGroup->SetPosition(0, 0);
- listGroup->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
-
- // list type
- if (adapterText == nullptr) {
- adapterText = new PlayersCaseListAdapter();
- if (adapterText == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adapterText new fail");
- return;
- }
- }
- if (list == nullptr) {
- list = new UIList(UIList::VERTICAL);
- if (list == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "list new fail");
- return;
- }
- list->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
- list->SetStartIndex(0); // 0 : list start index
- list->SetAdapter(adapterText);
- }
- listGroup->Add(list);
- RootView::GetInstance()->Add(listGroup);
- UIView::OnDragListener *dragListener = (UIView::OnDragListener*)OHOS::PlayerOnDragListener::GetInstance();
- if (dragListener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::OnDragListener fail");
- return;
- }
- listGroup->SetDraggable(true);
- listGroup->SetTouchable(true);
- listGroup->SetOnDragListener(dragListener);
- listGroup->SetVisible(false);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpListView end");
-}
-
-void PlayersView::SetUpButton(UIButton *btn, const Point& point,
- int16_t width, int16_t height, UIView::OnClickListener *listener)
-{
- if (btn == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetUpButton nullptr");
- return;
- }
- Add(btn);
- btn->SetPosition(point.x, point.y, width, height);
- btn->SetOnClickListener(listener);
-}
-
-int PlayersView::ShowUpCheckBoxButton()
-{
- ImageInfo *image;
- ImageInfo *hlImage;
- if (playerButton == nullptr) {
- playerButton = new UICheckBox();
- }
- if (soundButton == nullptr) {
- soundButton = new UIImageView();
- }
- if ((playerButton == nullptr) || (soundButton == nullptr)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new fail");
- return OHOS_FAILURE;
- }
- playerlistener = new ButtonOnClickListener(reinterpret_cast<UIView*>(playerButton));
- if (playerlistener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerlistener new fail");
- return OHOS_FAILURE;
- }
- playerButton->SetPosition(140, 139, 172, 172); // 140:x 139:y 172:width 172:height
- playerButton->SetOnClickListener(playerlistener);
- // image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PLAYER, PLAYER_IAMGES);
- // hlImage = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PLAYERHIGHLIGHT, PLAYER_IAMGES);
- // playerButton->SetImages(hlImage, image);
- Add(playerButton);
-
- soundlistener = new ButtonOnClickListener(reinterpret_cast<UIView*>(soundButton));
- if (soundlistener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "soundlistener new fail");
- return OHOS_FAILURE;
- }
- soundButton->SetTouchable(true);
- soundButton->SetPosition(178, 316, 95, 76); // 178:x 316:y 95:width 76:height
- soundButton->SetOnClickListener(soundlistener);
- // if (!LoadPlayerImage(soundButton, PLAYER_SOUND_IMAGE)) {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerModelButton LoadPlayerImage fail");
- // return false;
- // }
- Add(soundButton);
- return OHOS_SUCCESS;
-}
-
-int PlayersView::ShowUpButton()
-{
- struct Point pointBtn;
- ImageInfo *image;
- pointBtn.x = 331; // 331:x
- pointBtn.y = 168; // 168:y
- nextlistener = new ButtonOnClickListener(reinterpret_cast<UIView*>(nextButton));
- if (nextlistener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "nextlistener new fail");
- return OHOS_FAILURE;
- }
- SetUpButton(nextButton, pointBtn, 93, 116, nextlistener); // 93:width 116:height
- // image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_NEXT_BUTTON, PLAYER_IAMGES);
- // nextButton->SetImageSrc(image, image);
- pointBtn.x = 31; // 31:x
- pointBtn.y = 168; // 168:y
- prelistener = new ButtonOnClickListener(reinterpret_cast<UIView*>(preButton));
- if (prelistener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "prelistener new fail");
- return OHOS_FAILURE;
- }
- SetUpButton(preButton, pointBtn, 86, 116, prelistener); // 86:width 116:height
- // image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PRE_BUTTOW, PLAYER_IAMGES);
- // preButton->SetImageSrc(image, image);
-
- pointBtn.x = 87; // 87:x
- pointBtn.y = 316; // 316:y
- modellistener = new ButtonOnClickListener(reinterpret_cast<UIView*>(playerModelButton));
- if (modellistener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "modellistener new fail");
- return OHOS_FAILURE;
- }
- playerModelButton->SetTouchable(true);
- playerModelButton->SetPosition(pointBtn.x, pointBtn.y, 95, 76); // 95:width 76:height
- playerModelButton->SetOnClickListener(modellistener);
- if (!ShowUpPlayerMode()) {
- return OHOS_FAILURE;
- }
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerModel %d", PlayersModel::GetInstance()->GetPlayerModel());
- Add(playerModelButton);
-
- return OHOS_SUCCESS;
-}
-
-bool PlayersView::ShowUpPlayerMode()
-{
- if (PlayersModel::GetInstance()->GetPlayerModel() == LOOP) {
- if (!LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_LOOP)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYER_PLAYERSMODEL_LOOP fail");
- return false;
- }
- } else if (PlayersModel::GetInstance()->GetPlayerModel() == SEQUENCE) {
- if (!LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_SEQUENCE)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_SEQUENCE fail");
- return false;
- }
- } else if (PlayersModel::GetInstance()->GetPlayerModel() == REPEATS) {
- if (!LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_REPEATS)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_REPEATS fail");
- return false;
- }
- } else if (PlayersModel::GetInstance()->GetPlayerModel() == RANDOM) {
- if (!LoadPlayerImage(playerModelButton, PLAYER_PLAYERSMODEL_RANDOM)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_RANDOM fail");
- return false;
- }
- }
- return true;
-}
-
-int PlayersView::ShowUpButtonView()
-{
- int32_t ret = ShowUpCheckBoxButton();
- if (ret == OHOS_FAILURE) {
- return OHOS_FAILURE;
- }
- if (nextButton == nullptr) {
- nextButton = new UIButton();
- }
- if (preButton == nullptr) {
- preButton = new UIButton();
- }
- if (optionsButton == nullptr) {
- optionsButton = new UIButton();
- }
- if (pullButton == nullptr) {
- pullButton = new UIButton();
- }
- if (playerModelButton == nullptr) {
- playerModelButton = new UIImageView();
- }
- if ((nextButton == nullptr) || (preButton == nullptr) || (playerModelButton == nullptr) || (optionsButton == nullptr) ||
- (pullButton == nullptr)) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UIButton new fail");
- return OHOS_FAILURE;
- }
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpButtonView");
-
- ret = ShowUpButton();
- if (ret == OHOS_FAILURE) {
- return OHOS_FAILURE;
- }
- ret = ShowUpButtonOptions();
- if (ret == OHOS_FAILURE) {
- return OHOS_FAILURE;
- }
- ret = ShowUpCircleProgress();
- if (ret == OHOS_FAILURE) {
- return OHOS_FAILURE;
- }
- return OHOS_SUCCESS;
-}
-
-int PlayersView::ShowUpButtonOptions()
-{
- struct Point pointBtn;
- pointBtn.x = 284; // 284 : x
- pointBtn.y = 316; // 316 : y
- optionslistener = new ButtonOnClickListener(reinterpret_cast<UIView*>(optionsButton));
- if (optionslistener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "optionslistener new fail");
- return OHOS_FAILURE;
- }
- SetUpButton(optionsButton, pointBtn, 75, 76, optionslistener); // 75:width 76:height
- // ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_OPTIONS_IMAGE, PLAYER_IAMGES);
- // optionsButton->SetImageSrc(image, image);
-
- pointBtn.x = 178; // 178:x
- pointBtn.y = 394; // 394:y
- SetUpButton(pullButton, pointBtn, 95, 48, nullptr); // 95:width 48:height
- pullButton->SetImageSrc(PNG_PULLBUTTON_FACE_IMAGE, PNG_PULLBUTTON_FACE_IMAGE);
- return OHOS_SUCCESS;
-}
-
-int PlayersView::ShowUpCircleProgress()
-{
- if (playbackProgress == nullptr) {
- playbackProgress = new UICircleProgress();
- if (playbackProgress == nullptr) {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playbackProgress new fail");
- return OHOS_FAILURE;
- }
- }
- playbackProgress->SetPosition(140, 139, 172, 172); // 140:x 139:y 172:width 172:height
- playbackProgress->SetCenterPosition(86, 86); // 86:x 86:y
- playbackProgress->SetRange(PLAY_PROGRESS_MAX, PLAY_PROGRESS_MIN);
- playbackProgress->SetRadius(86); // 86:radius
- playbackProgress->SetStartAngle(0);
- playbackProgress->SetEndAngle(360); // 360: end angle
- playbackProgress->SetValue(0);
- playbackProgress->SetBackgroundStyle(STYLE_LINE_COLOR, Color::Gray().full);
- playbackProgress->SetForegroundStyle(STYLE_LINE_COLOR, Color::Red().full);
- playbackProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 3); // 3:width
- playbackProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 3); // 3:width
- Add(playbackProgress);
- return OHOS_SUCCESS;
-}
-
-void PlayersView::CreateJumpView(void)
-{
- if (jumpView == nullptr) {
- jumpView = new JumpView();
- if (jumpView == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView new fail");
- return;
- }
- }
-}
-
-void PlayersView::CreatePlayersPresenter(void)
-{
- if (playersPresenter == nullptr) {
- playersPresenter = new PlayersPresenter();
- if (playersPresenter == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersPresenter new fail");
- return;
- }
- }
-}
-
-void PlayersView::CreatePlayerOnDragListener(void)
-{
- if (playerOnDragListener == nullptr) {
- playerOnDragListener = new PlayerOnDragListener();
- if (playerOnDragListener == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerOnDragListener new fail");
- return;
- }
- }
-}
-bool PlayersView::InitBackGround(void)
-{
- if (backGround == nullptr) {
- backGround = new UIImageView();
- if (backGround == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backGround new fail");
- return false;
- }
- }
- backGround->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
- // if (!LoadPlayerImage(backGround, PLAYER_BACK_GROUND)) {
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "backGround LoadPlayerImage fail");
- // return false;
- // }
- Add(backGround);
- return true;
-}
-
-void PlayersView::CreatePlayerMusicName()
-{
- if (titleLabel == nullptr) {
- titleLabel = new UILabel();
- if (titleLabel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel new fail");
- return;
- }
- }
- titleLabel->SetPosition(127, 35, 200, 53); // 127:x 35:y 200:width 53:height
- titleLabel->SetText("Music Name");
- titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_FORTY_SIZE);
- Add(titleLabel);
-
- if (subTitleLabel == nullptr) {
- subTitleLabel = new UILabel();
- if (subTitleLabel == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "subTitleLabel new fail");
- return;
- }
- }
- subTitleLabel->SetPosition(77, 92, 300, 38); // 77:x 92:y 300:width 38:height
- subTitleLabel->SetText("Musical Authors");
- subTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); // 30:font data
- subTitleLabel->SetAlign(UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER, UITextLanguageAlignment::TEXT_ALIGNMENT_CENTER);
- Add(subTitleLabel);
- return;
-}
-
-bool PlayersView::OnDragEvent(const DragEvent& event)
-{
- /* 300: y limit of drag start point */
- if ((event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP) && (event.GetStartPoint().y > 300)) {
- PlayersPresenter::GetInstance()->ShowPlayerListGroup();
- return true;
- }
-
- return false;
-}
-
-bool PlayersView::InitView(void)
-{
- int ret;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " PlayersView InitView");
-
- if (!InitBackGround()) {
- return false;
- }
-
- CreatePlayerMusicName();
- // changeView
- CreateJumpView();
- // OnClick
- CreatePlayersPresenter();
- // OnDrag
- CreatePlayerOnDragListener();
- // 按键设置
- ret = ShowUpButtonView();
- if (ret == OHOS_FAILURE) {
- return false;
- }
- // 遍历文件名到list链表
- PlayersListGroup::GetInstance()->SetUpListCase();
- PlayersModel::GetInstance()->PlayerInit();
- ShowUpListView();
- SetTouchable(true);
- SetDraggable(true);
- return true;
-}
-
-void PlayersView::PreLoad(void)
-{
- if (!viewiInitStatus) {
- if (InitView()) {
- viewiInitStatus = true;
- }
- }
-}
-
-void PlayersView::UnLoad(void)
-{
- // Players's usage scenes is complicated, so we do not release it's resources inner slice.
-}
-
-bool PlayersView::LoadPlayerImage(UIImageView *view, uint32_t resId)
-{
- std::string file = PLAYER_IAMGES;
- ImageInfo* image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);
- if (image == nullptr) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::LoadPlayerImage %x fail", resId);
- return false;
- }
- view->SetSrc(image);
- return true;
-}
-}
+/*\r
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
+ * Description: Player view\r
+ * Author:\r
+ * Create: 2021-07-26\r
+ */\r
+#include <stdlib.h>\r
+#include <unistd.h>\r
+#include "ui_resource_image.h"\r
+#include "player/include/PlayersView.h"\r
+#include "UiConfig.h"\r
+#include "player/include/PlayersModel.h"\r
+#include "player/include/PlayersCaseListAdapter.h"\r
+#include "main/include/MainViewSample.h"\r
+#include "wearable_log.h"\r
+#include "settings/include/SettingModel.h"\r
+#include <custom_utils.h>\r
+namespace OHOS\r
+{\r
+ static PlayersView *g_pPlayersView = nullptr;\r
+ PlayersView::PlayersView()\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::PlayersView");\r
+ SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
+ g_pPlayersView = this;\r
+ }\r
+\r
+ PlayersView::~PlayersView()\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::~PlayersView");\r
+ if (viewiInitStatus == true)\r
+ {\r
+ UnLoadPlayerImageRes();\r
+ uint8_t state = GetPlayerButtonState();\r
+ if (state == UICheckBox::UICheckBoxState::SELECTED)\r
+ {\r
+ PlayersModel::GetInstance()->SetPlayButtonState(true);\r
+ }\r
+ RemoveAll();\r
+ ClearAll();\r
+\r
+ if (jumpView)\r
+ {\r
+ delete jumpView;\r
+ jumpView = nullptr;\r
+ }\r
+ if (playersPresenter)\r
+ {\r
+ delete playersPresenter;\r
+ playersPresenter = nullptr;\r
+ }\r
+ if (playerOnDragListener)\r
+ {\r
+ delete playerOnDragListener;\r
+ playerOnDragListener = nullptr;\r
+ }\r
+ }\r
+ g_pPlayersView = nullptr;\r
+ }\r
+\r
+ int16_t PlayersView::GetVolumeRank(void)\r
+ {\r
+ return volumeSet;\r
+ }\r
+\r
+ void PlayersView::SetVolumeRank(int16_t value)\r
+ {\r
+ volumeSet = value;\r
+ }\r
+\r
+ void PlayersView::SetVolumeAddOne(void)\r
+ {\r
+ volumeSet++;\r
+ }\r
+\r
+ /*获取音乐来源按钮*/\r
+ UIButton *PlayersView::GetOptionsButton(void)\r
+ {\r
+ return musicSourceButton;\r
+ }\r
+\r
+ /*获取上一首音乐按钮*/\r
+ UIButton *PlayersView::GetPreButton(void)\r
+ {\r
+ return preMusicButton;\r
+ }\r
+\r
+ /*获取下一首音乐按钮*/\r
+ UIButton *PlayersView::GetNextButton(void)\r
+ {\r
+ return nextMusicButton;\r
+ }\r
+\r
+ // 获取音乐列表按钮\r
+ UIButton *PlayersView::GetMusicListButton(void)\r
+ {\r
+ return music_list_button;\r
+ }\r
+\r
+ /*获取播放模式按钮*/\r
+ UIButton *PlayersView::GetPlayerModelButton(void)\r
+ {\r
+ return playerModelButton;\r
+ }\r
+\r
+ /*获取声音调节按钮*/\r
+ UIButton *PlayersView::GetSoundButton(void)\r
+ {\r
+ return soundButton;\r
+ }\r
+\r
+ /*获取音乐播放和暂停复选按钮*/\r
+ UICheckBox *PlayersView::GetPlayerButton(void)\r
+ {\r
+ return play_or_pause_Button;\r
+ }\r
+\r
+ /*获取音乐播放进度条*/\r
+ UICircleProgress *PlayersView::GetPlaybackProgress(void)\r
+ {\r
+ return playbackProgress;\r
+ }\r
+\r
+ /*获取音乐列表*/\r
+ UIList *PlayersView::GetMusicListList(void)\r
+ {\r
+ return musicList;\r
+ }\r
+\r
+ /*刷新音乐列表*/\r
+ void PlayersView::RefreshMusicListList(void)\r
+ {\r
+ if(musicList)\r
+ {\r
+ musicList->RefreshList();\r
+ }\r
+ }\r
+\r
+ /*获取音乐列表的适配器*/\r
+ PlayersCaseListAdapter *PlayersView::GetMusicListAdapter(void)\r
+ {\r
+ return musicAdapter;\r
+ }\r
+\r
+ /*获取声音设置视图*/\r
+ VolumeSettingView *PlayersView::GetVolumeSettingView()\r
+ {\r
+ return volumeSettingView;\r
+ }\r
+\r
+ PlayerListDelSongView *PlayersView::GetPlayerListDelSongView()\r
+ {\r
+ return playerListDelSongView;\r
+ }\r
+\r
+ UIViewGroup *PlayersView::GetPlayerGroupView(int index)\r
+ {\r
+ return group[index];\r
+ }\r
+\r
+ /*获取音乐播放和暂停复选按钮的状态*/\r
+ UICheckBox::UICheckBoxState PlayersView::GetPlayerButtonState(void)\r
+ {\r
+ if(play_or_pause_Button == nullptr)\r
+ {\r
+ return UICheckBox::UICheckBoxState::UNSELECTED;\r
+ }\r
+ return play_or_pause_Button->GetState();\r
+ }\r
+\r
+ // 设置播放或暂停按钮的状态\r
+ void PlayersView::SetPlayerButtonState(UICheckBox::UICheckBoxState state)\r
+ {\r
+ if (play_or_pause_Button != nullptr)\r
+ {\r
+ play_or_pause_Button->SetState(state);\r
+ play_or_pause_Button->Invalidate();\r
+ }\r
+ }\r
+\r
+ void PlayersView::SetPlayerCtrVolume(float leftVolume, float rightVolume)\r
+ {\r
+ if (PlayersModel::GetInstance()->GetPlayerCtr().get() != nullptr) \r
+ {\r
+ PlayersModel::GetInstance()->GetPlayerCtr()->SetVolume(leftVolume, rightVolume);\r
+ }\r
+ }\r
+\r
+ PlayersView *PlayersView::GetInstance(void)\r
+ {\r
+ return g_pPlayersView;\r
+ }\r
+\r
+ // 创建跳转视图\r
+ void PlayersView::CreateJumpView(void)\r
+ {\r
+ if (jumpView == nullptr)\r
+ {\r
+ jumpView = new JumpView();\r
+ if (jumpView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jumpView new fail");\r
+ return;\r
+ }\r
+ }\r
+ }\r
+ // 创建一个音乐播放器的逻辑层\r
+ void PlayersView::CreatePlayersPresenter(void)\r
+ {\r
+ if (playersPresenter == nullptr)\r
+ {\r
+ playersPresenter = new PlayersPresenter();\r
+ if (playersPresenter == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersPresenter new fail");\r
+ return;\r
+ }\r
+ }\r
+ }\r
+ // 创建一个音乐播放器的拖拽监听\r
+ void PlayersView::CreatePlayerOnDragListener(void)\r
+ {\r
+ if (playerOnDragListener == nullptr)\r
+ {\r
+ playerOnDragListener = new PlayerOnDragListener();\r
+ if (playerOnDragListener == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerOnDragListener new fail");\r
+ return;\r
+ }\r
+ }\r
+ }\r
+\r
+ /*创建音乐列表视图*/\r
+ UIViewGroup *PlayersView::CreateMusicListGroupView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MusicPlayerSourceView::CreateMusicPlayerSourceView");\r
+ if (musicListGroupView == nullptr)\r
+ {\r
+ musicListGroupView = new UIViewGroup();\r
+ if (musicListGroupView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListGroupView new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ musicListGroupView->SetPosition(0, 0, 466, 466);\r
+ musicListGroupView->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+ musicListGroupView->SetTouchable(true);\r
+ musicListGroupView->SetDraggable(true);\r
+ musicListGroupView->SetIntercept(true);\r
+ musicListGroupView->SetViewId(MUSIC_PLAYER_LIST_VIEW);\r
+ if (nullptr == playerOnDragListener)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerOnDragListener new fail");\r
+ return nullptr;\r
+ }\r
+ musicListGroupView->SetOnDragListener(playerOnDragListener);\r
+ /* -------------------------------------------------------------------------- */\r
+ if (musicListScrollView == nullptr)\r
+ {\r
+ musicListScrollView = new UIScrollView();\r
+ if (musicListScrollView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListScrollView new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ musicListScrollView->SetPosition(0, 0, 466, 466);\r
+ musicListScrollView->SetScrollBlankSize(35);\r
+ musicListScrollView->SetReboundSize(35);\r
+ musicListScrollView->SetDirection(UIScrollView::VERTICAL);\r
+ /* -------------------------------------------------------------------------- */\r
+ if (musicListTitle == nullptr)\r
+ {\r
+ musicListTitle = new UILabelExt();\r
+ if (musicListTitle == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListTitle new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ musicListTitle->SetPosition(83, 50, 300, 35);\r
+ musicListTitle->SetStyle(STYLE_TEXT_FONT, 30);\r
+ musicListTitle->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ musicListTitle->SetTextId(STR_MUSIC_LIST);\r
+ musicListTitle->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ musicListTitle->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+ musicListTitle->SetRollSpeed(23);\r
+ musicListTitle->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ /* -------------------------- musicListIsEmptyImage ------------------------- */\r
+ if (musicListIsEmptyImage == nullptr)\r
+ {\r
+ musicListIsEmptyImage = new UIImageView();\r
+ if (musicListIsEmptyImage == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListIsEmptyImage new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ musicListIsEmptyImage->SetPosition(163, 110, 140, 140);\r
+ musicListIsEmptyImage->SetAutoEnable(false);\r
+ musicListIsEmptyImage->SetResizeMode(UIImageView::CENTER);\r
+ if (LoadPlayerImage(musicListIsEmptyImage, PLAYER_PLAYING_GLARY) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListIsEmptyImage LoadPlayerImage fail");\r
+ return nullptr;\r
+ }\r
+ /* ---------------------------- musicListIsEmptyLabel ---------------------------- */\r
+ if (musicListIsEmptyLabel == nullptr)\r
+ {\r
+ musicListIsEmptyLabel = new UILabelExt();\r
+ if (musicListIsEmptyLabel == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicListIsEmptyLabel new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ musicListIsEmptyLabel->SetPosition(53, 280, 360, 70);\r
+ musicListIsEmptyLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+ musicListIsEmptyLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ musicListIsEmptyLabel->SetTextId(STR_MUSIC_LIST_IS_EMPTY); // 当前音乐列表为空请通过APP下载添加\r
+ musicListIsEmptyLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+ musicListIsEmptyLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+ musicListIsEmptyLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ musicListIsEmptyLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ /* -------------------------------------------------------------------------- */\r
+ if (musicAdapter == nullptr)\r
+ {\r
+ musicAdapter = new PlayersCaseListAdapter();\r
+ if (musicAdapter == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicAdapter new fail");\r
+ return nullptr;\r
+ }\r
+ }\r
+ if (musicList == nullptr)\r
+ {\r
+ musicList = new UIList(UIList::VERTICAL);\r
+ if (musicList == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicList new fail");\r
+ return nullptr;\r
+ }\r
+ musicList->SetPosition(68, 120, 330, 320);\r
+ // musicList->SetStartIndex(PlayersModel::GetInstance()->GetCurrentIndex());\r
+ musicList->SetThrowDrag(true);\r
+ musicList->SetIntercept(true);\r
+ musicList->SetMaxScrollDistance(1000);\r
+ musicList->SetDragACCLevel(5);\r
+ musicList->SetSwipeACCLevel(200); /*设置手指抬起屏幕后的补偿距离。*/\r
+ // musicList->SetReboundSize(35);\r
+ // musicList->SetScrollBlankSize(35);\r
+ // 增加表冠控制\r
+ musicList->SetRotateFactor(1.0);\r
+ musicList->RequestFocus();\r
+ musicList->SetAdapter(musicAdapter);\r
+ }\r
+ musicListScrollView->Add(musicListTitle);\r
+ musicListScrollView->Add(musicListIsEmptyImage);\r
+ musicListScrollView->Add(musicListIsEmptyLabel);\r
+ musicListScrollView->Add(musicList);\r
+ musicListGroupView->Add(musicListScrollView);\r
+ return musicListGroupView;\r
+ }\r
+\r
+ /*删除容器上所有组件*/\r
+ void PlayersView::ClearAll(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ClearAll");\r
+ if (group[MAIN_MUSICPLAYER_VIEW] != nullptr)\r
+ {\r
+ group[MAIN_MUSICPLAYER_VIEW]->RemoveAll();\r
+ if (musicPlayerBackGround != nullptr)\r
+ {\r
+ delete musicPlayerBackGround;\r
+ musicPlayerBackGround = nullptr;\r
+ }\r
+ if (elipse != nullptr)\r
+ {\r
+ delete elipse;\r
+ elipse = nullptr;\r
+ }\r
+ if (playbackProgress != nullptr)\r
+ {\r
+ delete playbackProgress;\r
+ playbackProgress = nullptr;\r
+ }\r
+ if (play_or_pause_Button != nullptr)\r
+ {\r
+ delete play_or_pause_Button;\r
+ play_or_pause_Button = nullptr;\r
+ }\r
+ if (music_list_button != nullptr)\r
+ {\r
+ delete music_list_button;\r
+ music_list_button = nullptr;\r
+ }\r
+ if (musicSourceButton != nullptr)\r
+ {\r
+ delete musicSourceButton;\r
+ musicSourceButton = nullptr;\r
+ }\r
+ if (preMusicButton != nullptr)\r
+ {\r
+ delete preMusicButton;\r
+ preMusicButton = nullptr;\r
+ }\r
+ if (nextMusicButton != nullptr)\r
+ {\r
+ delete nextMusicButton;\r
+ nextMusicButton = nullptr;\r
+ }\r
+ if (playerModelButton != nullptr)\r
+ {\r
+ delete playerModelButton;\r
+ playerModelButton = nullptr;\r
+ }\r
+ if (soundButton != nullptr)\r
+ {\r
+ delete soundButton;\r
+ soundButton = nullptr;\r
+ }\r
+ if (MusciSourceLabel != nullptr)\r
+ {\r
+ delete MusciSourceLabel;\r
+ MusciSourceLabel = nullptr;\r
+ }\r
+ if (PhoneMusicConnectStatusLabel != nullptr)\r
+ {\r
+ delete PhoneMusicConnectStatusLabel;\r
+ PhoneMusicConnectStatusLabel = nullptr;\r
+ }\r
+ if (clickListener != nullptr)\r
+ {\r
+ delete clickListener;\r
+ clickListener = nullptr;\r
+ }\r
+ delete group[MAIN_MUSICPLAYER_VIEW];\r
+ group[MAIN_MUSICPLAYER_VIEW] = nullptr;\r
+ }\r
+ if (volumeSettingView != nullptr)\r
+ {\r
+ delete volumeSettingView;\r
+ volumeSettingView = nullptr;\r
+ }\r
+ if (musicPlayerSourceView != nullptr)\r
+ {\r
+ delete musicPlayerSourceView;\r
+ musicPlayerSourceView = nullptr;\r
+ }\r
+ if (musicListGroupView != nullptr)\r
+ {\r
+ musicListGroupView->RemoveAll();\r
+ if (musicListScrollView != nullptr)\r
+ {\r
+ musicListScrollView->RemoveAll();\r
+ if (musicListTitle != nullptr)\r
+ {\r
+ delete musicListTitle;\r
+ musicListTitle = nullptr;\r
+ }\r
+ if (musicListIsEmptyImage != nullptr)\r
+ {\r
+ ImageInfo *image = nullptr;\r
+ musicListIsEmptyImage->SetSrc(image);\r
+ delete musicListIsEmptyImage;\r
+ musicListIsEmptyImage = nullptr;\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_PLAYING_GLARY, PLAYER_IAMGES);\r
+ }\r
+ if (musicListIsEmptyLabel != nullptr)\r
+ {\r
+ delete musicListIsEmptyLabel;\r
+ musicListIsEmptyLabel = nullptr;\r
+ }\r
+ if (musicAdapter != nullptr)\r
+ {\r
+ delete musicAdapter;\r
+ musicAdapter = nullptr;\r
+ }\r
+ if (musicList != nullptr)\r
+ {\r
+ delete musicList;\r
+ musicList = nullptr;\r
+ }\r
+ delete musicListScrollView;\r
+ musicListScrollView = nullptr;\r
+ }\r
+ delete musicListGroupView;\r
+ musicListGroupView = nullptr;\r
+ }\r
+ if (playerListDelSongView != nullptr)\r
+ {\r
+ delete playerListDelSongView;\r
+ playerListDelSongView = nullptr;\r
+ }\r
+ if (musicPlayerBluetoothDisConView != nullptr)\r
+ {\r
+ delete musicPlayerBluetoothDisConView;\r
+ musicPlayerBluetoothDisConView = nullptr;\r
+ }\r
+ if (musicPlayerBTConnectFailedView != nullptr)\r
+ {\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
+ group[i] = nullptr;\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ClearAll end");\r
+ }\r
+\r
+ UIButton *PlayersView::PlayerViewButtonInit(ButtonConfig &buttonconfig)\r
+ {\r
+ UIButton *button = new UIButton();\r
+ if (button == nullptr)\r
+ {\r
+ return nullptr;\r
+ }\r
+ button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);\r
+ button->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+ button->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+ button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0x00, UIButton::PRESSED);\r
+ button->SetOnClickListener(buttonconfig.clickListener);\r
+\r
+ return button;\r
+ }\r
+\r
+ /*创建音乐播放器的点击监听*/\r
+ bool PlayersView::CreatePlayerOnClickListener(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerOnClickListener");\r
+ clickListener = static_cast<UIView::OnClickListener *>(new ButtonOnClickListener());\r
+ if (clickListener == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener new fail!!");\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ /*创建音乐播放器的图片视图*/\r
+ bool PlayersView::CreatePlayerImageView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerImageVIew");\r
+ /* -------------------------- musicPlayerBackGround ------------------------- */\r
+ if (musicPlayerBackGround == nullptr)\r
+ {\r
+ musicPlayerBackGround = new UIImageView();\r
+ if (musicPlayerBackGround == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicPlayerBackGround new fail");\r
+ return false;\r
+ }\r
+ }\r
+ musicPlayerBackGround->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);\r
+ /* --------------------------------- elipse --------------------------------- */\r
+ if (elipse == nullptr)\r
+ {\r
+ elipse = new UIImageView();\r
+ if (elipse == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "elipse new fail");\r
+ return false;\r
+ }\r
+ }\r
+ elipse->SetPosition(173, 173, 120, 120);\r
+\r
+ return true;\r
+ }\r
+\r
+ /*创建音乐播放器的标签视图*/\r
+ bool PlayersView::CreatePlayerLabelView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerLabelView");\r
+ if (MusciSourceLabel == nullptr)\r
+ {\r
+ MusciSourceLabel = new UILabelExt();\r
+ if (MusciSourceLabel == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MusciSourceLabel new fail");\r
+ return false;\r
+ }\r
+ }\r
+ MusciSourceLabel->SetPosition(83, 90, 300, 35);\r
+ MusciSourceLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+ MusciSourceLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ MusciSourceLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+ MusciSourceLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ MusciSourceLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ /* -------------------------------------------------------------------------- */\r
+ if (PhoneMusicConnectStatusLabel == nullptr)\r
+ {\r
+ PhoneMusicConnectStatusLabel = new UILabelExt();\r
+ if (PhoneMusicConnectStatusLabel == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PhoneMusicConnectStatusLabel new fail");\r
+ return false;\r
+ }\r
+ }\r
+ PhoneMusicConnectStatusLabel->SetPosition(83, 40, 300, 35);\r
+ PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));\r
+ PhoneMusicConnectStatusLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
+ PhoneMusicConnectStatusLabel->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ PhoneMusicConnectStatusLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+ PhoneMusicConnectStatusLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ PhoneMusicConnectStatusLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ PhoneMusicConnectStatusLabel->SetVisible(false);\r
+\r
+ return true;\r
+ }\r
+\r
+ /*创建音乐播放器的进度条组件视图*/\r
+ bool PlayersView::CreatePlayerProgressView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerProgressView");\r
+ if (playbackProgress == nullptr)\r
+ {\r
+ playbackProgress = new UICircleProgress();\r
+ if (playbackProgress == nullptr)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playbackProgress new fail");\r
+ return false;\r
+ }\r
+ }\r
+ playbackProgress->SetPosition(158, 158, 150, 150);\r
+ playbackProgress->SetCenterPosition(75, 75);\r
+ playbackProgress->SetRange(PLAY_PROGRESS_MAX, PLAY_PROGRESS_MIN);\r
+ playbackProgress->SetRadius(70);\r
+ playbackProgress->SetStartAngle(0);\r
+ playbackProgress->SetEndAngle(360); // 360: end angle\r
+ playbackProgress->SetValue(0);\r
+ playbackProgress->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+ playbackProgress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+ playbackProgress->SetBackgroundStyle(STYLE_LINE_COLOR, 0xfff61313);\r
+ playbackProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 0);\r
+ playbackProgress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xfffbfbfb);\r
+ playbackProgress->SetForegroundStyle(STYLE_BORDER_COLOR, 0xffffffff);\r
+ playbackProgress->SetForegroundStyle(STYLE_LINE_COLOR, 0xffffffff);\r
+ playbackProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 6); // 6:width\r
+\r
+ return true;\r
+ }\r
+\r
+ /*创建音乐播放器的播放和暂停按钮组件视图*/\r
+ bool PlayersView::CreatePlayerCheckBoxButtonView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerCheckBoxButtonView");\r
+ if (play_or_pause_Button == nullptr)\r
+ {\r
+ play_or_pause_Button = new UICheckBox();\r
+ if (play_or_pause_Button == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new fail");\r
+ return false;\r
+ }\r
+ }\r
+ play_or_pause_Button->SetPosition(195, 195, 80, 80);\r
+ uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
+ bool isplayingflag = PlayersModel::GetInstance()->GetCurrentMusicIsPlaying();//获取当前音乐是否是在播放中\r
+ play_or_pause_Button->SetState(isplayingflag?UICheckBox::UICheckBoxState::SELECTED:UICheckBox::UICheckBoxState::UNSELECTED);\r
+ play_or_pause_Button->SetOnClickListener(clickListener);\r
+ return true;\r
+ }\r
+\r
+ /*创建音乐播放器的按钮视图*/\r
+ bool PlayersView::CreatePlayerButtonView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerImageVIew");\r
+ ButtonConfig buttonConfig = {\r
+ .x = 213,\r
+ .y = 35,\r
+ .w = 60,\r
+ .h = 60,\r
+ .clickListener = clickListener,\r
+ };\r
+ /* ---------------------------- music_list_button --------------------------- */\r
+ music_list_button = PlayerViewButtonInit(buttonConfig);\r
+ if (nullptr == music_list_button)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "music_list_button new fail!!");\r
+ return false;\r
+ }\r
+ /* ----------------------------- preMusicButton ----------------------------- */\r
+ buttonConfig.x = 60;\r
+ buttonConfig.y = 213;\r
+ preMusicButton = PlayerViewButtonInit(buttonConfig);\r
+ if (nullptr == preMusicButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "preMusicButton new fail!!");\r
+ return false;\r
+ }\r
+ /* ----------------------------- nextMusicButton ---------------------------- */\r
+ buttonConfig.x = 366;\r
+ buttonConfig.y = 213;\r
+ nextMusicButton = PlayerViewButtonInit(buttonConfig);\r
+ if (nullptr == nextMusicButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "nextMusicButton new fail!!");\r
+ return false;\r
+ }\r
+ /* ---------------------------- playerModelButton --------------------------- */\r
+ buttonConfig.x = 105;\r
+ buttonConfig.y = 321;\r
+ playerModelButton = PlayerViewButtonInit(buttonConfig);\r
+ if (nullptr == playerModelButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playerModelButton new fail!!");\r
+ return false;\r
+ }\r
+ /* ------------------------------ musicSourceButton ----------------------------- */\r
+ buttonConfig.x = 213;\r
+ buttonConfig.y = 366;\r
+ musicSourceButton = PlayerViewButtonInit(buttonConfig);\r
+ if (nullptr == musicSourceButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicSourceButton new fail!!");\r
+ return false;\r
+ }\r
+ /* ------------------------------- soundButton ------------------------------ */\r
+ buttonConfig.x = 321;\r
+ buttonConfig.y = 321;\r
+ soundButton = PlayerViewButtonInit(buttonConfig);\r
+ if (nullptr == soundButton)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "soundButton new fail!!");\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+ bool PlayersView::CreatePlayerScrollView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerScrollVIew");\r
+ if (group[MAIN_MUSICPLAYER_VIEW] == nullptr)\r
+ {\r
+ group[MAIN_MUSICPLAYER_VIEW] = new UIScrollView();\r
+ if (group[MAIN_MUSICPLAYER_VIEW] == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group[MAIN_MUSICPLAYER_VIEW] new fail!");\r
+ return false;\r
+ }\r
+ group[MAIN_MUSICPLAYER_VIEW]->SetPosition(0, 0, 466, 466);\r
+ group[MAIN_MUSICPLAYER_VIEW]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+ group[MAIN_MUSICPLAYER_VIEW]->SetTouchable(true);\r
+ group[MAIN_MUSICPLAYER_VIEW]->SetDraggable(true);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ /*创建音乐播放器主视图*/\r
+ bool PlayersView::CreatePlayerView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerVIew");\r
+ if (!CreatePlayerOnClickListener() || !CreatePlayerScrollView() || !CreatePlayerImageView() ||\r
+ !CreatePlayerProgressView() || !CreatePlayerCheckBoxButtonView() || !CreatePlayerButtonView() || !CreatePlayerLabelView())\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::CreatePlayerVIew");\r
+ return false;\r
+ }\r
+ /* ----------------------------------- Add ---------------------------------- */\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(musicPlayerBackGround);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(elipse);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(playbackProgress);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(play_or_pause_Button);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(music_list_button);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(preMusicButton);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(nextMusicButton);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(playerModelButton);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(musicSourceButton);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(soundButton);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(MusciSourceLabel);\r
+ group[MAIN_MUSICPLAYER_VIEW]->Add(PhoneMusicConnectStatusLabel);\r
+ Add(group[MAIN_MUSICPLAYER_VIEW]);\r
+ /* -------------------------------------------------------------------------- */\r
+ return true;\r
+ }\r
+\r
+ /*设置音乐来源标签内容*/\r
+ void PlayersView::MusicSourceLabelSetText(int textId)\r
+ {\r
+ if (MusciSourceLabel)\r
+ {\r
+ MusciSourceLabel->SetTextId(textId);\r
+ MusciSourceLabel->ForceResetText();\r
+ }\r
+ }\r
+\r
+ /// @brief 设置手机音乐连接状态标签内容\r
+ void PlayersView::PhoneMusicConnectStatusLabelSetText(int textId)\r
+ {\r
+ if (PhoneMusicConnectStatusLabel)\r
+ {\r
+ PhoneMusicConnectStatusLabel->SetTextId(textId);\r
+ PhoneMusicConnectStatusLabel->Invalidate();\r
+ }\r
+ }\r
+\r
+ /// @brief 设置手机连接状态标签是否可见\r
+ void PlayersView::PhoneMusicConnectStatusLabelIsSetVisible(bool status)\r
+ {\r
+ if (PhoneMusicConnectStatusLabel)\r
+ {\r
+ PhoneMusicConnectStatusLabel->SetVisible(status);\r
+ }\r
+ }\r
+\r
+ // 设置手机音乐连接状态标签颜色\r
+ void PlayersView::PhoneMusicConnectStatusLabelColor(bool state)\r
+ {\r
+ if (PhoneMusicConnectStatusLabel)\r
+ {\r
+ if (state)\r
+ {\r
+ PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
+ }\r
+ else\r
+ {\r
+ PhoneMusicConnectStatusLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0x5a, 0x36, 0xff));\r
+ }\r
+ }\r
+ }\r
+\r
+ /*设置音乐列表按钮是否可见*/\r
+ void PlayersView::MusicListButtonIsSetVisible(bool status)\r
+ {\r
+ if (music_list_button)\r
+ {\r
+ music_list_button->SetVisible(status);\r
+ }\r
+ }\r
+\r
+ /// @brief 设置选项按钮的图片样式:点击该按钮后进入音乐来源视图,点击里面的按钮,改选项按钮会被替换相应图片\r
+ void PlayersView::OptionsButtonSetImageStyle(ImageInfo *image)\r
+ {\r
+ if (musicSourceButton)\r
+ {\r
+ musicSourceButton->SetImageSrc(image, image);\r
+ musicSourceButton->Invalidate();\r
+ }\r
+ }\r
+\r
+ void PlayersView::PlayerModelButtonSetSrc(uint32_t playMode)\r
+ {\r
+ if (playerModelButton)\r
+ {\r
+ LoadPlayerButtonImage(playerModelButton, playMode);\r
+ }\r
+ }\r
+\r
+ // 停止当前正在播放的音乐\r
+ void PlayersView::StopCurPlayingMusic()\r
+ {\r
+ int32_t playerState;\r
+ PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);\r
+ if (playerState == PLAYER_STARTED || playerState == PLAYER_PAUSED) //如果当前是已经播放或播放暂停状态\r
+ {\r
+ PlayersModel::GetInstance()->PlayerStop();\r
+ PlayersModel::GetInstance()->ClearActivateAudioInterrupt();\r
+ }\r
+ }\r
+\r
+ //更新音乐播放器的声音进度条\r
+ void PlayersView::UpdateVolumeValue(void)\r
+ {\r
+ if (volumeSettingView != nullptr && volumeSettingView->GetProgress() != nullptr)\r
+ {\r
+ int val = uapi_systemVolumeGet();\r
+ volumeSettingView->GetProgress()->SetValue(val);\r
+ }\r
+ }\r
+\r
+ //初始化音乐播放器的进度条\r
+ void PlayersView::initPlayProgress(void)\r
+ {\r
+ PlayersModel::GetInstance()->updatePlayProgress();\r
+ }\r
+\r
+ /// @brief 设置音乐播放模式按钮是否可点击\r
+ /// @param musicSourceType 音乐来源类型 false:手表音乐 true 手机音乐\r
+ /// @param phoneMusicConnectStatus 手机音乐连接状态\r
+ void PlayersView::SetMusicPlayerButtonIsTouchable(bool musicSourceType)\r
+ {\r
+ if (playerModelButton)\r
+ {\r
+ bool touchableState = !musicSourceType;\r
+ playerModelButton->SetTouchable(touchableState); // 如果音乐来源为手机音乐,播放顺序按钮就不可用\r
+ /* -------------------------------------------------------------------------- */\r
+ if (musicSourceType) // 如果切換到手机音乐,且当前在放歌,就停止音乐\r
+ {\r
+ // bool value = PlayersModel::GetInstance()->get_player_state();\r
+ bool value = false;\r
+ if (PlayersModel::GetInstance()->get_avrcp_ct_or_tg_is_connected() && \r
+ PlayersModel::GetInstance()->get_a2dp_sink_playing_state()) //若ct或tg端是已连接状态且当前a2dp_sink是已播放状态\r
+ {\r
+ value = true;\r
+ }\r
+ else\r
+ {\r
+ value = false;\r
+ }\r
+ SetPlayerButtonState(value ? UICheckBox::UICheckBoxState::SELECTED:UICheckBox::UICheckBoxState::UNSELECTED);\r
+ /*停止音乐*/\r
+ StopCurPlayingMusic();\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ PreLoadPlayerModeImageRes();\r
+ }\r
+ }\r
+\r
+ void PlayersView::UpdateMusicListStatus(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::UpdateMusicListStatus");\r
+ PlayersListGroup::GetInstance()->SetUpListCase();\r
+ if (musicAdapter && musicListIsEmptyImage && musicListIsEmptyLabel && musicList)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "musicNum = %d", musicAdapter->GetCount());\r
+ if (0 == musicAdapter->GetCount()) /*歌曲为空*/\r
+ {\r
+ musicListIsEmptyImage->SetVisible(true);\r
+ musicListIsEmptyLabel->SetVisible(true);\r
+ musicList->SetVisible(false);\r
+ }\r
+ else\r
+ {\r
+ musicListIsEmptyImage->SetVisible(false);\r
+ musicListIsEmptyLabel->SetVisible(false);\r
+ musicList->SetVisible(true);\r
+ if (musicAdapter)\r
+ {\r
+ int count = musicAdapter->GetCount();\r
+ if (count > 4)\r
+ {\r
+ musicList->SetHeight(320);\r
+ musicList->SetReboundSize(35);\r
+ }\r
+ else\r
+ {\r
+ musicList->SetHeight(count * 70);\r
+ musicList->SetReboundSize(0);\r
+ }\r
+ }\r
+ musicList->RefreshList();\r
+ }\r
+ }\r
+ }\r
+\r
+ /*点击返回键回到音乐主视图*/\r
+ void PlayersView::OnClickBackKeyToMainMusicPlayerView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::OnClickBackKeyToMainMusicPlayerView");\r
+ int index = 0;\r
+ for (int i = MAIN_MUSICPLAYER_VIEW; i < MUSICPLAYERJUMPVIEWID_MAX; i++)\r
+ {\r
+ if (group[i] != nullptr)\r
+ {\r
+ if (group[index]->IsVisible() == true)\r
+ {\r
+ index = i;\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group[%d] IsVisible ", index);\r
+ break;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ continue;\r
+ }\r
+ }\r
+ if (index == MAIN_MUSICPLAYER_VIEW) /*如果是音乐主视图是可见的不做ChangeView*/\r
+ {\r
+ return;\r
+ }\r
+ ChangeView(index, MAIN_MUSICPLAYER_VIEW);\r
+ }\r
+\r
+ /*刷新播放器界面的组件状态*/\r
+ void PlayersView::UpdatePlayerView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdatePlayerView");\r
+ #ifdef SUPPORT_BLE_SERVICE\r
+ bool phoneMusicConnectStatus = uapi_a2dp_snk_get_device_connect_state();// 获取a2dp连接状态\r
+ #else\r
+ bool phoneMusicConnectStatus = false; // 模拟手机音乐连接状态\r
+ #endif\r
+\r
+ bool musicSourceType = PlayersModel::GetInstance()->GetMusicSource();\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "phoneMusicConnectStatus %d,musicSourceType %d",phoneMusicConnectStatus,musicSourceType);\r
+ ImageInfo *image;\r
+ if (musicSourceType)\r
+ {\r
+ image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PHONE_COLOR, PLAYER_IAMGES);\r
+ if (!image)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadImage fail!!");\r
+ return;\r
+ }\r
+\r
+ OptionsButtonSetImageStyle(image);\r
+ PhoneMusicConnectStatusLabelIsSetVisible(true);\r
+ MusicListButtonIsSetVisible(false);\r
+\r
+ if (phoneMusicConnectStatus)\r
+ {\r
+ PhoneMusicConnectStatusLabelSetText(STR_CONNECTED); /*已连接*/\r
+ MusicSourceLabelSetText(STR_MOBILE_MUSIC); // 手机音乐\r
+ PhoneMusicConnectStatusLabelColor(true);\r
+ }\r
+ else\r
+ {\r
+ PhoneMusicConnectStatusLabelSetText(STR_DISCONNECTED); /*未连接*/\r
+ MusicSourceLabelSetText(STR_MOBILE_MUSIC); // 手机音乐\r
+ PhoneMusicConnectStatusLabelColor(false);\r
+ }\r
+ SetMusicPlayerButtonIsTouchable(true);\r
+ }\r
+ else\r
+ {\r
+ image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_LOCAL_MUSIC_COLOR, PLAYER_IAMGES);\r
+ if (!image)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadImage fail!!");\r
+ return;\r
+ }\r
+ OptionsButtonSetImageStyle(image);\r
+ PhoneMusicConnectStatusLabelIsSetVisible(false);\r
+ MusicListButtonIsSetVisible(true);\r
+\r
+ MusicSourceLabelSetText(STR_WATCH_MUSIC); /*手表音乐*/\r
+ SetMusicPlayerButtonIsTouchable(false);\r
+ }\r
+ if (musicPlayerSourceView)\r
+ {\r
+ musicPlayerSourceView->UpdateBluetoothHeadSetViewIsVisible();\r
+ }\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdatePlayerView over!!");\r
+ }\r
+\r
+ // 初始化音乐播放器主视图\r
+ bool PlayersView::InitView(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " PlayersView InitView");\r
+ // changeView\r
+ CreateJumpView();\r
+ // OnClick\r
+ CreatePlayersPresenter();\r
+ // OnDrag\r
+ CreatePlayerOnDragListener();\r
+ /* -------------------------------------------------------------------------- */\r
+ if (CreatePlayerView() == false)\r
+ {\r
+ return false;\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ UpdatePlayerView();\r
+ initPlayProgress();\r
+ /* -------------------------------------------------------------------------- */\r
+\r
+ // PlayersListGroup::GetInstance()->SetUpListCase();\r
+ // PlayersModel::GetInstance()->PlayerInit();\r
+ // do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_MUSICNAME_READ, nullptr, 0);\r
+ SetTouchable(true);\r
+ SetDraggable(true);\r
+ return true;\r
+ }\r
+\r
+ void PlayersView::PreLoad(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::PreLoad");\r
+ if (!viewiInitStatus)\r
+ {\r
+ if (InitView())\r
+ {\r
+ viewiInitStatus = true;\r
+ }\r
+ }\r
+ PreLoadPlayerImageRes();\r
+ }\r
+\r
+ void PlayersView::UnLoad(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::UnLoad");\r
+ UnLoadPlayerImageRes();\r
+ }\r
+\r
+ // 加载图片组件音乐图片\r
+ bool PlayersView::LoadPlayerImage(UIImageView *view, uint32_t resId)\r
+ {\r
+ std::string file = PLAYER_IAMGES;\r
+ ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);\r
+ if (view == nullptr || image == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "view is nullptr or PlayersView::LoadPlayerImage %x fail", resId);\r
+ return false;\r
+ }\r
+ view->SetSrc(image);\r
+ return true;\r
+ }\r
+\r
+ // 加载按钮组件音乐图片\r
+ bool PlayersView::LoadPlayerButtonImage(UIButton *button, uint32_t resId)\r
+ {\r
+ std::string file = PLAYER_IAMGES;\r
+ ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);\r
+ if (button == nullptr || image == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "button is nullptr or PlayersView::LoadPlayerImage %x fail", resId);\r
+ return false;\r
+ }\r
+ button->SetImageSrc(image, image);\r
+ return true;\r
+ }\r
+\r
+ bool PlayersView::LoadPlayerCheckBoxButtonImage(UICheckBox *button, uint32_t resId, uint32_t hlResId)\r
+ {\r
+ std::string file = PLAYER_IAMGES;\r
+ ImageInfo *image1 = ImageCacheManager::GetInstance().LoadOneInMultiRes(resId, file);\r
+ ImageInfo *image2 = ImageCacheManager::GetInstance().LoadOneInMultiRes(hlResId, file);\r
+ if (button == nullptr || image1 == nullptr || image2 == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "button is nullptr or PlayersView::LoadPlayerImage resId = %x,hlResId = %x fail", resId, hlResId);\r
+ return false;\r
+ }\r
+ button->SetImages(image1, image2);\r
+ return true;\r
+ }\r
+\r
+ // 显示音乐播放模式:LOOP 循环播放 SEQUENCE 循序播放 REPEATS 单曲循环 RANDOM 随机播放\r
+ /*预加载音乐播放模式的图片*/\r
+ bool PlayersView::PreLoadPlayerModeImageRes(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::PreLoadPlayerModeImageRes");\r
+ if (PlayersModel::GetInstance()->GetMusicSource())\r
+ {\r
+ if (LoadPlayerButtonImage(playerModelButton, PLAYER_PLAYERSMODEL_UNUSABLE) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_RANDOM fail");\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+ if (PlayersModel::GetInstance()->GetPlayerModel() == LOOP)\r
+ {\r
+ if (LoadPlayerButtonImage(playerModelButton, PLAYER_PLAYERSMODEL_LOOP) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYER_PLAYERSMODEL_LOOP fail");\r
+ return false;\r
+ }\r
+ }\r
+ else if (PlayersModel::GetInstance()->GetPlayerModel() == SEQUENCE)\r
+ {\r
+ if (LoadPlayerButtonImage(playerModelButton, PLAYER_PLAYERSMODEL_SEQUENCE) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_SEQUENCE fail");\r
+ return false;\r
+ }\r
+ }\r
+ else if (PlayersModel::GetInstance()->GetPlayerModel() == REPEATS)\r
+ {\r
+ if (LoadPlayerButtonImage(playerModelButton, PLAYER_PLAYERSMODEL_REPEATS) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_REPEATS fail");\r
+ return false;\r
+ }\r
+ }\r
+ else if (PlayersModel::GetInstance()->GetPlayerModel() == RANDOM)\r
+ {\r
+ if (LoadPlayerButtonImage(playerModelButton, PLAYER_PLAYERSMODEL_RANDOM) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "load PLAYERSMODEL_RANDOM fail");\r
+ return false;\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+ /*卸载音乐播放模式的图片*/\r
+ bool PlayersView::UnLoadPlayerModeImageRes(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::UnLoadPlayerModeImageRes");\r
+ int16_t playermodel = PlayersModel::GetInstance()->GetPlayerModel();\r
+ switch (playermodel)\r
+ {\r
+ case LOOP:\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_PLAYERSMODEL_LOOP, PLAYER_IAMGES);\r
+ break;\r
+ case SEQUENCE:\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_PLAYERSMODEL_SEQUENCE, PLAYER_IAMGES);\r
+ break;\r
+ case REPEATS:\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_PLAYERSMODEL_REPEATS, PLAYER_IAMGES);\r
+ break;\r
+ case RANDOM:\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_PLAYERSMODEL_RANDOM, PLAYER_IAMGES);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ /*预加载音乐播放器资源*/\r
+ void PlayersView::PreLoadPlayerImageRes(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::playerResPreLoad");\r
+ if (!resLoadStatus)\r
+ {\r
+ if (LoadPlayerImage(musicPlayerBackGround, PLAYER_BACKGROUND) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicPlayerBackGround LoadPlayerImage fail");\r
+ return;\r
+ }\r
+ if (LoadPlayerImage(elipse, PLAYER_ELLIPSE) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "elipse LoadPlayerImage fail");\r
+ return;\r
+ }\r
+ if (LoadPlayerButtonImage(music_list_button, PLAYER_MUSIC_LIST) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "music_list_button LoadPlayerImage fail");\r
+ return;\r
+ }\r
+ if (LoadPlayerCheckBoxButtonImage(play_or_pause_Button, PLAYER_MUSIC_PLAY, PLAYER_MUSIC_PAUSE) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "play_or_pause_Button LoadPlayerCheckBoxButtonImage fail");\r
+ return;\r
+ }\r
+ if (LoadPlayerButtonImage(preMusicButton, PLAYER_MUSIC_PROVE) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "preMusicButton LoadPlayerImage fail");\r
+ return;\r
+ }\r
+ if (LoadPlayerButtonImage(nextMusicButton, PLAYER_MUSIC_NEXT) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "nextMusicButton LoadPlayerImage fail");\r
+ return;\r
+ }\r
+ if (PreLoadPlayerModeImageRes() == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PreLoadPlayerModeImageRes fail");\r
+ return;\r
+ }\r
+ if (LoadPlayerButtonImage(musicSourceButton, PlayersModel::GetInstance()->GetMusicSource() ? PLAYER_PHONE_COLOR : PLAYER_LOCAL_MUSIC_COLOR) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicSourceButton LoadPlayerImage fail");\r
+ return;\r
+ }\r
+ if (LoadPlayerButtonImage(soundButton, PLAYER_MUSIC_VOICE) == false)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "soundButton LoadPlayerImage fail");\r
+ return;\r
+ }\r
+ resLoadStatus = true;\r
+ }\r
+ }\r
+\r
+ /*卸载音乐播放器资源*/\r
+ void PlayersView::UnLoadPlayerImageRes(void)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::playerResUnLoad");\r
+ if (resLoadStatus)\r
+ {\r
+ ImageInfo *image = nullptr;\r
+ musicPlayerBackGround->SetSrc(image);\r
+ elipse->SetSrc(image);\r
+ music_list_button->SetImageSrc(image, image);\r
+ play_or_pause_Button->SetImages(image, image);\r
+ preMusicButton->SetImageSrc(image, image);\r
+ nextMusicButton->SetImageSrc(image, image);\r
+ playerModelButton->SetImageSrc(image, image);\r
+ musicSourceButton->SetImageSrc(image, image);\r
+ soundButton->SetImageSrc(image, image);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_BACKGROUND, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_ELLIPSE, PLAYER_IAMGES);\r
+\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_MUSIC_LIST, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_MUSIC_PLAY, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_MUSIC_PAUSE, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_MUSIC_PROVE, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_MUSIC_NEXT, PLAYER_IAMGES);\r
+ UnLoadPlayerModeImageRes();\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PlayersModel::GetInstance()->GetMusicSource() ? PLAYER_PHONE_COLOR : PLAYER_LOCAL_MUSIC_COLOR, PLAYER_IAMGES);\r
+ ImageCacheManager::GetInstance().UnloadOneInMultiRes(PLAYER_MUSIC_VOICE, PLAYER_IAMGES);\r
+\r
+ resLoadStatus = false;\r
+ }\r
+ }\r
+\r
+ struct MusicPlayerJumpViewMapper\r
+ {\r
+ const int16_t viewId;\r
+ bool (PlayersView::*func)(int16_t thisView);\r
+ };\r
+\r
+ static const MusicPlayerJumpViewMapper ViewMapper[] = {\r
+ {PlayersView::MAIN_MUSICPLAYER_VIEW, &PlayersView::ChangeToMainMusicPlayerView},\r
+ {PlayersView::MUSIC_SOURCE_VIEW, &PlayersView::ChangeToMusicSourceView},\r
+ {PlayersView::MUSIC_VOLUME_CONTROL_VIEW, &PlayersView::ChangeToVolumeControlView},\r
+ {PlayersView::MUSIC_LIST_VIEW, &PlayersView::ChangeToMusicListView},\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
+ {PlayersView::MUSIC_PLAYER_TIP_VIEW, &PlayersView::ChangeToMusicPlayerTipView},\r
+ };\r
+\r
+ /*根据传入的 interface 值,在 ViewMapper 数组中查找匹配的 viewId*/\r
+ bool PlayersView::ClickFunc(int16_t interface)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ClickFunc");\r
+ int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]);\r
+ for (int i = 0; i < funcSize; i++)\r
+ {\r
+ if (interface == ViewMapper[i].viewId)\r
+ {\r
+ bool jug = (this->*(ViewMapper[i].func))(interface);\r
+ if (jug == false)\r
+ {\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+ /*检查要切换视图参数是否有效*/\r
+ bool PlayersView::CheckViewParam(int16_t hideView, int16_t showView)\r
+ {\r
+ if (showView < 0 || showView >= MUSICPLAYERJUMPVIEWID_MAX)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::CheckViewParam showView err.");\r
+ return false;\r
+ }\r
+\r
+ if (hideView < 0 || hideView > MUSICPLAYERJUMPVIEWID_MAX)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::CheckViewParam hideView err.");\r
+ return false;\r
+ }\r
+\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
+ void PlayersView::ChangeView(int16_t hideView, int16_t showView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeView");\r
+ if (!CheckViewParam(hideView, showView))\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeView check param err %d %d.", hideView, showView);\r
+ return;\r
+ }\r
+ group[hideView]->SetVisible(false);\r
+ ClickFunc(showView);\r
+ group[showView]->SetVisible(true);\r
+\r
+ if (RootView::GetInstance() != nullptr)\r
+ {\r
+ RootView::GetInstance()->Invalidate();\r
+ }\r
+ PlayersModel::GetInstance()->setPreShowView(hideView);\r
+ DestroyTempView(hideView);\r
+ }\r
+\r
+ /*切换到音乐播放器主视图*/\r
+ bool PlayersView::ChangeToMainMusicPlayerView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMainMusicPlayerView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ Add(group[thisView]);\r
+ }\r
+ UpdatePlayerView();\r
+ return true;\r
+ }\r
+\r
+ /*切换到音乐来源视图*/\r
+ bool PlayersView::ChangeToMusicSourceView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMusicSourceView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ musicPlayerSourceView = new MusicPlayerSourceView();\r
+ if (musicPlayerSourceView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new group[%d] fail", thisView);\r
+ return false;\r
+ }\r
+ group[thisView] = musicPlayerSourceView->CreateMusicPlayerSourceView();\r
+ Add(group[thisView]);\r
+ }\r
+ if (musicPlayerSourceView != nullptr )\r
+ {\r
+ if(musicPlayerSourceView->GetMusicPlayerSourcescrollView() != nullptr)\r
+ {\r
+ musicPlayerSourceView->GetMusicPlayerSourcescrollView()->RequestFocus();\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+ /*切换到声音调节视图*/\r
+ bool PlayersView::ChangeToVolumeControlView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToVolumeControlView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ volumeSettingView = new VolumeSettingView();\r
+ if (volumeSettingView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new group[%d] fail", thisView);\r
+ return false;\r
+ }\r
+ if (!volumeSettingView->SetUpVolume())\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "volumeSetting SetUpVolume fail");\r
+ return false;\r
+ }\r
+ group[thisView] = volumeSettingView;\r
+ Add(group[thisView]);\r
+ }\r
+ if(volumeSettingView)\r
+ {\r
+ if(volumeSettingView->GetProgress())\r
+ {\r
+ volumeSettingView->GetProgress()->RequestFocus();\r
+ }\r
+ }\r
+ return true;\r
+ }\r
+\r
+ /*切换到音乐列表视图*/\r
+ bool PlayersView::ChangeToMusicListView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMusicListView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ UIViewGroup *groupview = CreateMusicListGroupView();\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
+ UpdateMusicListStatus(); /*每次切换到音乐列表都将更新一次列表*/\r
+ return true;\r
+ }\r
+\r
+ /*切换到音乐删除视图*/\r
+ bool PlayersView::ChangeToMusicDeleteView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMusicDeleteView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ playerListDelSongView = new PlayerListDelSongView();\r
+ if (playerListDelSongView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new playerListDelSongView fail");\r
+ return false;\r
+ }\r
+ UIViewGroup *groupview = playerListDelSongView->CreatePlayerListDelSongView();\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
+ return true;\r
+ }\r
+\r
+ /*切换到蓝牙未连接视图*/\r
+ bool PlayersView::ChangeToMusicBluetoothDisConnectView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMusicBluetoothDisConnectView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ musicPlayerBluetoothDisConView = new MusicPlayerBluetoothDisConView();\r
+ if (musicPlayerBluetoothDisConView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new playerListDelSongView fail");\r
+ return false;\r
+ }\r
+ UIViewGroup *groupview = musicPlayerBluetoothDisConView->CreateMusicPlayerBluetoothDisConView();\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
+ return true;\r
+ }\r
+\r
+ /*切换到蓝牙未连接视图*/\r
+ bool PlayersView::ChangeToMusicBluetoothConnectFailedView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(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
+ return true;\r
+ }\r
+\r
+ /*切换到连接动画视图*/\r
+ bool PlayersView::ChangeToMusicConnectingView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(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
+ bool PlayersView::ChangeToMusicPlayerTipView(int16_t thisView)\r
+ {\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView::ChangeToMusicPlayerTipView");\r
+ if (group[thisView] == nullptr)\r
+ {\r
+ musicPlayerTipView = new MusicPlayerTipView();\r
+ if (musicPlayerTipView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new playerListDelSongView fail");\r
+ return false;\r
+ }\r
+ UIViewGroup *groupview = musicPlayerTipView->CreateMusicPlayerTipView();\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
+ return true;\r
+ }\r
+}\r