播放器歌单,删除歌曲视图完成,还差最后删除歌曲功能
author罗正yun <1732036298@qq.com>
Thu, 4 Jan 2024 02:44:39 +0000 (10:44 +0800)
committer罗正yun <1732036298@qq.com>
Thu, 4 Jan 2024 02:44:39 +0000 (10:44 +0800)
code/sdk/application/wearable/nativeapp/CMakeLists.txt
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListDelSongView.h [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersCaseListAdapter.h
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersView.h
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp [new file with mode: 0644]
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersCaseListAdapter.cpp
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersPresenter.cpp
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersView.cpp

index e0ac535..5da5f59 100755 (executable)
@@ -154,6 +154,7 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersModel.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersCaseListAdapter.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayerListitemView.cpp\r
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayerListDelSongView.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/MainActivityView.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityWeekView.cpp\r
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityPresenter.cpp\r
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListDelSongView.h b/code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListDelSongView.h
new file mode 100644 (file)
index 0000000..6c5ff7a
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef PLAYER_LIST_DEL_SONG_VIEW_H
+#define PLAYER_LIST_DEL_SONG_VIEW_H
+
+#include "BaseView.h"
+#include "string"
+#include "View.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label.h"
+#include "components/ui_button.h"
+
+namespace OHOS
+{
+    class PlayerListDelSongView
+    {
+
+    public:
+        PlayerListDelSongView();
+        virtual ~PlayerListDelSongView();
+        static PlayerListDelSongView *GetInstance(void);
+        UIScrollView * InitDelSongView();
+        void DeInitView(void);
+        void SetTheSongLabelStyle(const char * songName);
+    private:
+        UIScrollView *scrollView1_ = nullptr;
+        UILabel *label1_ = nullptr;
+        UILabel *songNameLabel = nullptr;
+        UIButton *button3_ = nullptr;
+        UILabel *label2_ = nullptr;
+        UIButton *button1_ = nullptr;
+        UIButton *button2_ = nullptr;
+        bool viewInitStatus{false};
+};
+}
+#endif
index 9c15544..678b335 100755 (executable)
@@ -13,6 +13,7 @@
 #include "components/abstract_adapter.h"\r
 #include "components/ui_label.h"\r
 #include "components/ui_label_button.h"\r
+#include "components/ui_scroll_view.h"\r
 #include "UiConfig.h"\r
 \r
 namespace OHOS {\r
@@ -25,8 +26,10 @@ public:
     void SetButtonAndLabel(UILabel *label,UIButton *button,int index,UIView::OnClickListener *listener)\r
     {\r
         m_label[index] = label;\r
+        m_label[index]->SetTouchable(true);\r
+        m_label[index]->SetOnClickListener(listener);\r
         m_button[index] = button;\r
-        //m_button[index]->SetOnClickListener(listener);\r
+        m_button[index]->SetOnClickListener(listener);\r
     }\r
     void SongClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index);\r
     void SongNotClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index);\r
index cffd0fc..52f1237 100755 (executable)
@@ -186,7 +186,7 @@ public:
         TIPSSUCCMESSAGEVIEW,  // 连接成功\r
         TIPSCONNFAILMESSAGEVIEW,  // 连接失败\r
         TIPSFAILMESSAGEVIEW,\r
-        BLUETOOTHEVIEW,   // è®¾ç½®ç\95\8cé\9d¢\r
+        BLUETOOTHEVIEW,   // è\93\9dç\89\99è§\86å\9b¾\r
         BLUETOOTHEJUMP_MAX,\r
     };\r
     JumpView();\r
index bc9b0c1..314fb2c 100755 (executable)
@@ -26,6 +26,7 @@
 #include "components/ui_card_page.h"\r
 #include "PlayersPresenter.h"\r
 #include "components/ui_scroll_view.h"\r
+#include "PlayerListDelSongView.h"\r
 namespace OHOS {\r
 #define PLAY_PROGRESS_MIN 0\r
 #define PLAY_PROGRESS_MAX 100\r
@@ -67,6 +68,12 @@ public:
     void CreateJumpView(void);\r
     void CreatePlayersPresenter(void);\r
     void CreatePlayerOnDragListener(void);\r
+    void ShowUpDelSongView(void);\r
+    void SetPlayerDelSongViewStatus(bool status);\r
+    PlayerListDelSongView *GetDelSongView()\r
+    {\r
+        return p_PlayerListDelSongView;\r
+    }\r
 private:\r
     bool InitBackGround(void);\r
     void TearDownView();\r
@@ -101,6 +108,8 @@ private:
     UICircleProgress *playbackProgress{nullptr};//播放进度条\r
     UILabel *musicListTitle{nullptr};           //歌单列表名\r
     int16_t volumeSet{0};                       //声音值的大小设置\r
+    PlayerListDelSongView *p_PlayerListDelSongView{nullptr};\r
+    UIScrollView *DelSongView{nullptr};\r
     UIList *list{nullptr};\r
     JumpView *jumpView{nullptr};\r
     PlayersPresenter *playersPresenter{nullptr};\r
diff --git a/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp b/code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListDelSongView.cpp
new file mode 100644 (file)
index 0000000..03d6d6a
--- /dev/null
@@ -0,0 +1,169 @@
+#include "PlayerListDelSongView.h"
+#include "PlayersPresenter.h"
+namespace OHOS
+{
+    
+
+
+    static PlayerListDelSongView *g_pPlayerListDelSongView{nullptr};
+
+    PlayerListDelSongView::PlayerListDelSongView()
+    {
+        g_pPlayerListDelSongView = this;
+    }
+
+    PlayerListDelSongView::~PlayerListDelSongView()
+    {
+        if (viewInitStatus == true)
+        {
+            DeInitView();
+        }
+        g_pPlayerListDelSongView = nullptr;
+    }
+
+    PlayerListDelSongView *PlayerListDelSongView::GetInstance()
+    {
+
+        return g_pPlayerListDelSongView;
+    }
+
+    /// @brief 设置歌曲名标签样式
+    /// @param songName 歌曲名
+    void PlayerListDelSongView::SetTheSongLabelStyle(const char * songName)
+    {
+        songNameLabel->SetText(songName);
+        songNameLabel->Invalidate();
+    }
+
+    UIScrollView * PlayerListDelSongView::InitDelSongView()
+    {
+        if (scrollView1_ == nullptr)
+        {
+            scrollView1_ = new UIScrollView();
+        }
+        scrollView1_->SetPosition(0, 0,466,466);               
+        scrollView1_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        scrollView1_->SetDirection(1);
+        scrollView1_->SetVisible(true);
+        /* -------------------------------------------------------------------------- */
+        if (label1_ == nullptr)
+        {
+            label1_ = new UILabel();
+        }
+        label1_->SetPosition(172, 160); 
+        label1_->SetStyle(STYLE_TEXT_FONT, 30);
+        label1_->SetStyle(STYLE_LINE_HEIGHT, 35);
+        label1_->SetText("是否删除");
+        label1_->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label1_->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));
+        label1_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label1_->SetRollSpeed(0);
+        label1_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        scrollView1_->Add(label1_);
+        label1_->SetVisible(true);
+        /* -------------------------------------------------------------------------- */
+        if (songNameLabel == nullptr)
+        {
+            songNameLabel = new UILabel();
+        }
+        songNameLabel->SetPosition(83, 220,300,35); 
+        songNameLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        songNameLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+        songNameLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        songNameLabel->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+        songNameLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        songNameLabel->SetRollSpeed(0);
+        songNameLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        scrollView1_->Add(songNameLabel);
+        songNameLabel->SetVisible(true);
+        /* -------------------------------------------------------------------------- */
+        if (label2_ == nullptr)
+        {
+            label2_ = new UILabel();
+        }
+        label2_->SetPosition(173, 52); 
+        label2_->Resize(120, 35);      
+        label2_->SetViewId("label1");  
+        label2_->SetStyle(STYLE_TEXT_FONT, 30);
+        label2_->SetStyle(STYLE_LINE_HEIGHT, 36);
+        label2_->SetText("删除歌曲");
+        label2_->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+        label2_->SetRollSpeed(0);
+        label2_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        scrollView1_->Add(label2_);
+        label2_->SetVisible(true);
+        /* -------------------------------------------------------------------------- */
+        if (button1_ == nullptr)
+        {
+            button1_ = new UIButton();
+        }
+        button1_->SetPosition(256, 299); 
+        button1_->Resize(100, 100);      
+        button1_->SetViewId("Delbutton");  
+        button1_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+        char *button1defaultImgSrc = "/user/res/SYSTEM_CheckOn.bin";
+        button1_->SetImageSrc(button1defaultImgSrc, nullptr);
+        button1_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        scrollView1_->Add(button1_);
+        button1_->SetVisible(true);
+        /* -------------------------------------------------------------------------- */
+        if (button2_ == nullptr)
+        {
+            button2_ = new UIButton();
+        }
+        button2_->SetPosition(111, 299); 
+        button2_->Resize(100, 100);      
+        button2_->SetViewId("returnbutton");  
+        button2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+        char *button2defaultImgSrc = "/user/res/SYSTEM_CheckOff.bin";
+        button2_->SetImageSrc(button2defaultImgSrc, nullptr);
+        button2_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        scrollView1_->Add(button2_);
+        button2_->SetVisible(true);
+
+        UIView::OnClickListener *buttonClickListener = static_cast<UIView::OnClickListener *>(new ButtonOnClickListener());
+        button1_->SetOnClickListener(buttonClickListener);
+        button2_->SetOnClickListener(buttonClickListener);
+        viewInitStatus = true;
+        return scrollView1_;
+    }
+
+    void PlayerListDelSongView::DeInitView()
+    {
+        if (scrollView1_ != nullptr)
+        {
+            delete scrollView1_;
+            scrollView1_ = nullptr;
+        }
+        if (label1_ != nullptr)
+        {
+            delete label1_;
+            label1_ = nullptr;
+        }
+        if (songNameLabel != nullptr)
+        {
+            delete songNameLabel;
+            songNameLabel = nullptr;
+        }
+        if (button3_ != nullptr)
+        {
+            delete button3_;
+            button3_ = nullptr;
+        }
+        if (label2_ != nullptr)
+        {
+            delete label2_;
+            label2_ = nullptr;
+        }
+        if (button1_ != nullptr)
+        {
+            delete button1_;
+            button1_ = nullptr;
+        }
+        if (button2_ != nullptr)
+        {
+            delete button2_;
+            button2_ = nullptr;
+        }
+    }
+}
\ No newline at end of file
index 7b8d797..526b2f2 100755 (executable)
@@ -75,26 +75,27 @@ void BtnOnClickListListener::SongNotClick(PlayersCaseListAdapter *P_PlayersCaseL
 /// @return \r
 bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event)\r
 {\r
+    PlayersView *playersView = PlayersView::GetInstance();\r
+    PlayersCaseListAdapter *P_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance();\r
+    //BtnOnListData该函数的作用是从传入的视图中提取相关数据\r
+    BtnOnListData(view);\r
+    if((&view == P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index_]) && \r
+        P_PlayersCaseListAdapter->p_BtnOnClickListListener->playOrDeleteStatus[index_] == 0)\r
+    {\r
+        playersView->GetDelSongView()->SetTheSongLabelStyle(sliceId_);\r
+        playersView->SetPlayerDelSongViewStatus(true);\r
+        return false;\r
+    }\r
+    else if((&view == P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_label[index_])){\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtnOnClickListListener sliceId_: %s.", sliceId_);\r
     UNUSED(event);\r
     int ret;\r
     int32_t playerState;\r
     uint8_t state = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;\r
-    PlayersView *playersView = PlayersView::GetInstance();\r
     if (playersView == nullptr) {\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playersView null!");\r
         return false;\r
     }\r
-    //BtnOnListData该函数的作用是从传入的视图中提取相关数据\r
-    BtnOnListData(view);\r
-    /* -------------------------------------------------------------------------- */\r
-    PlayersCaseListAdapter *P_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance();\r
-    // if((&view == P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index_]) && (P_PlayersCaseListAdapter->p_BtnOnClickListListener->playOrDeleteStatus[index_] == 0))\r
-    // {\r
-    //     printf("delete index = %d song,%s\n",index_,__func__);\r
-    //     return false;\r
-    // }\r
-    /* -------------------------------------------------------------------------- */\r
     // 标记当前播放歌曲index_\r
     PlayersModel::GetInstance()->SetCurrentIndex(index_); //当前正在播放的歌曲\r
     // 本地播放文件路径和状态\r
@@ -105,12 +106,10 @@ bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event)
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uri: %s.", PlayersModel::GetInstance()->GetPlayerUri().c_str());\r
     std::string strSongName = sliceId_;\r
     std::string pureName = strSongName.substr(0, strSongName.rfind(".")); //获取纯粹歌曲名\r
-\r
     const char *songName = pureName.c_str();\r
     //playersView->TitleSetText(songName);\r
-    playersView->SetPlayerListGroupStatus(false);\r
+    //playersView->SetPlayerListGroupStatus(false);//这是点击歌曲后就会播放歌曲歌单隐藏\r
     /* -------------------------------------------------------------------------- */\r
-    //PlayersCaseListAdapter *P_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance();\r
     SongClick(P_PlayersCaseListAdapter,index_);\r
     for(int i= 0;i<P_PlayersCaseListAdapter->GetCount();i++)\r
     {\r
@@ -146,12 +145,14 @@ bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event)
         }\r
         PlayersModel::GetInstance()->PlayerStat();\r
     }\r
+    }\r
     return true;\r
 }\r
 \r
 void BtnOnClickListListener::BtnOnListData(UIView& view)\r
 {\r
-    index_ = view.GetViewIndex();\r
+    //index_ = view.GetViewIndex();\r
+    index_ = view.GetParent()->GetViewIndex(); //list中如果其他组件,想点击里面组件,得先获取父视图\r
     List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
     ListNode<PlayerCaseInfo>* node = playersCaseList.Begin();\r
     for (uint16_t i = 0; i < index_; i++) {\r
@@ -198,12 +199,12 @@ UIView *PlayersCaseListAdapter::GetView(UIView* inView, int16_t index)
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "listener == nullptr");\r
             return nullptr;\r
         }\r
-        listitem->SetOnClickListener(listener);\r
+        //listitem->SetOnClickListener(listener);\r
         p_BtnOnClickListListener->SetButtonAndLabel(listitem->GetLabel(),listitem->GetButton(),index,listener);\r
     }\r
     else \r
     {\r
-        listitem->SetOnClickListener(listener);\r
+        //listitem->SetOnClickListener(listener);\r
         p_BtnOnClickListListener->SetButtonAndLabel(listitem->GetLabel(),listitem->GetButton(),index,listener);\r
     }\r
     return listitem;\r
index 4bd5e65..70159e4 100755 (executable)
@@ -664,6 +664,17 @@ bool ButtonOnClickListener::OnClick(UIView& view, const ClickEvent& event)
     {\r
         PlayersPresenter::GetInstance()->ShowPlayerListGroup();\r
     }\r
+    else if(strcmp(view.GetViewId(),"Delbutton") == 0)\r
+    {\r
+        printf("Delbutton %s %d\n",__func__,__LINE__);\r
+    }\r
+    else if(strcmp(view.GetViewId(),"returnbutton") == 0)\r
+    {\r
+        PlayersView *playersView = PlayersView::GetInstance();\r
+        playersView->SetPlayerDelSongViewStatus(false);\r
+        playersView->SetPlayerListGroupStatus(true);\r
+        RootView::GetInstance()->Invalidate();\r
+    }\r
     return true;\r
 }\r
 \r
index 0e31a00..dd0f386 100755 (executable)
@@ -167,7 +167,8 @@ UIList *PlayersView::GetPlayerList(void)
 {\r
     return list;\r
 }\r
-\r
+/// @brief 根据传入的status参数来控制歌曲列表组的显示与隐藏。\r
+/// @param status \r
 void PlayersView::SetPlayerListGroupStatus(bool status)\r
 {\r
     if (listGroup == nullptr) {\r
@@ -182,6 +183,24 @@ void PlayersView::SetPlayerListGroupStatus(bool status)
     return;\r
 }\r
 \r
+/// @brief 根据传入的status参数来控制删除歌曲视图的显示与隐藏。\r
+/// @param status \r
+void PlayersView::SetPlayerDelSongViewStatus(bool status)\r
+{\r
+    if (DelSongView == nullptr) {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersView DelSongView is NULL");\r
+        return;\r
+    }\r
+    UIView *vew = MainViewSample::GetInstance()->GetMainViewGroup();\r
+    if (vew != nullptr) {\r
+        vew->SetVisible(!status);\r
+    }\r
+    DelSongView->SetVisible(status);\r
+    RootView::GetInstance()->Invalidate();\r
+    return;\r
+\r
+}\r
+\r
 void PlayersView::SetPlayerCtrVolume(float leftVolume, float rightVolume)\r
 {\r
     PlayersModel::GetInstance()->GetPlayerCtr()->SetVolume(leftVolume, rightVolume);\r
@@ -272,6 +291,21 @@ void PlayersView::ShowUpListView()
     listGroup->SetVisible(false);\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowUpListView end");\r
 }\r
+\r
+/// @brief 创建删除歌曲视图\r
+/// @param songName \r
+void PlayersView::ShowUpDelSongView()\r
+{\r
+    if(p_PlayerListDelSongView == nullptr)\r
+    {\r
+        p_PlayerListDelSongView = new PlayerListDelSongView();\r
+    }\r
+    DelSongView = p_PlayerListDelSongView->InitDelSongView();\r
+    RootView::GetInstance()->Add(DelSongView);\r
+    DelSongView->SetTouchable(true);\r
+    DelSongView->SetVisible(false);\r
+}\r
+\r
 //设置按钮的位置和监听\r
 void PlayersView::SetUpButton(UIButton *btn, const Point& point,\r
                               int16_t width, int16_t height, UIView::OnClickListener *listener)\r
@@ -672,6 +706,7 @@ bool PlayersView::InitView(void)
     PlayersListGroup::GetInstance()->SetUpListCase();\r
     PlayersModel::GetInstance()->PlayerInit();\r
     ShowUpListView();\r
+    ShowUpDelSongView();\r
     SetTouchable(true);\r
     SetDraggable(true);\r
     return true;\r