【音乐】UI
authorCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 09:31:46 +0000 (17:31 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 09:31:46 +0000 (17:31 +0800)
28 files changed:
code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerBTConnectFailedView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerBluetoothDisConView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerSourceView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerTipView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayerListDelSongView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayerListitemView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayersCaseListAdapter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayersModel.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayersModelC.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayersPresenter.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayersView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/BluetoothView.cpp [deleted file]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerBTConnectFailedView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerBluetoothDisConView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerSourceView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerTipView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayerListitemView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayersCaseListAdapter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayersModel.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayersPresenter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayersView.cpp

diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerModel.h
new file mode 100644 (file)
index 0000000..61c4774
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerPresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerPresenter.h
new file mode 100644 (file)
index 0000000..a5e6ffa
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/include/MusicPlayerView.h
new file mode 100644 (file)
index 0000000..b30e585
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerModel.cpp
new file mode 100644 (file)
index 0000000..eccfac2
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * @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();
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerPresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerPresenter.cpp
new file mode 100644 (file)
index 0000000..7ca585c
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/musicplayer/src/MusicPlayerView.cpp
new file mode 100644 (file)
index 0000000..4dbe960
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerBTConnectFailedView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerBTConnectFailedView.h
new file mode 100644 (file)
index 0000000..ad3e92a
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerBluetoothDisConView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerBluetoothDisConView.h
new file mode 100644 (file)
index 0000000..b82f18b
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerSourceView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerSourceView.h
new file mode 100644 (file)
index 0000000..b6c8f12
--- /dev/null
@@ -0,0 +1,85 @@
+/*\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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerTipView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/MusicPlayerTipView.h
new file mode 100644 (file)
index 0000000..eea1b9b
--- /dev/null
@@ -0,0 +1,36 @@
+#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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayerListDelSongView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayerListDelSongView.h
new file mode 100644 (file)
index 0000000..beb8481
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayerListitemView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayerListitemView.h
new file mode 100644 (file)
index 0000000..c036743
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * @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
index bf1c487..6839edc 100644 (file)
@@ -1,30 +1,39 @@
-/*
- * 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
index 61e9094..fc2a792 100644 (file)
@@ -1,23 +1,24 @@
 /*
- * 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;
@@ -93,7 +94,51 @@ public:
     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};
@@ -111,11 +156,13 @@ private:
     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; /*音乐播放路径*/
 };
 }
 
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayersModelC.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/include/PlayersModelC.h
new file mode 100644 (file)
index 0000000..a0dd42e
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * @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
index f955b71..2e2267e 100644 (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
index 0dfcd58..2176157 100644 (file)
@@ -1,16 +1,18 @@
 /*\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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/BluetoothView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/BluetoothView.cpp
deleted file mode 100644 (file)
index b7bdbab..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-/*\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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerBTConnectFailedView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerBTConnectFailedView.cpp
new file mode 100644 (file)
index 0000000..2a51005
--- /dev/null
@@ -0,0 +1,324 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerBluetoothDisConView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerBluetoothDisConView.cpp
new file mode 100644 (file)
index 0000000..cdd54aa
--- /dev/null
@@ -0,0 +1,326 @@
+/*
+ * @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;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerSourceView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerSourceView.cpp
new file mode 100644 (file)
index 0000000..c2bfe8a
--- /dev/null
@@ -0,0 +1,544 @@
+/*\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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerTipView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/MusicPlayerTipView.cpp
new file mode 100644 (file)
index 0000000..a615883
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * @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
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp
new file mode 100644 (file)
index 0000000..fb40945
--- /dev/null
@@ -0,0 +1,309 @@
+#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;
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayerListitemView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/player/src/PlayerListitemView.cpp
new file mode 100644 (file)
index 0000000..531a5e3
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * @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
index b9e5502..84e0b2c 100644 (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
index 4e44628..e795edb 100644 (file)
-/*\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
index f7282a2..e6eabbd 100644 (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
index 8ae4a5a..67d1609 100644 (file)
-/*
- * 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