音乐播放器歌单功能基本完成,但歌单删除按钮点击无反应。
author罗正yun <1732036298@qq.com>
Tue, 2 Jan 2024 01:44:47 +0000 (09:44 +0800)
committer罗正yun <1732036298@qq.com>
Tue, 2 Jan 2024 01:44:47 +0000 (09:44 +0800)
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayerListitemView.h
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersCaseListAdapter.h
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersModel.h
code/sdk/application/wearable/nativeapp/nativeui/player/include/PlayersPresenter.h
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayerListitemView.cpp
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersCaseListAdapter.cpp
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersModel.cpp
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersPresenter.cpp
code/sdk/application/wearable/nativeapp/nativeui/player/src/PlayersView.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/music/FolkSongToTheParty.mp3 [new file with mode: 0644]

index 9b98ac4..171d36e 100644 (file)
@@ -16,7 +16,14 @@ namespace OHOS
         virtual void SetItemInfo(const PlayerListItem itemInfo);
         virtual void SetUpChild();
         int GetPlayerListIndex();
-
+        UILabel *GetLabel()
+        {
+            return &sLabel;
+        }
+        UIButton *GetButton()
+        {
+            return &sButton;
+        }
     private:
         PlayerListItemView(const PlayerListItemView &);
         UILabel sLabel;
index 25fc414..9c15544 100755 (executable)
 #include "UiConfig.h"\r
 \r
 namespace OHOS {\r
+class PlayersCaseListAdapter;\r
+class BtnOnClickListListener : public UIView::OnClickListener {\r
+public:\r
+    BtnOnClickListListener(){}\r
+    ~BtnOnClickListListener(){}\r
+    bool OnClick(UIView& view, const ClickEvent& event) override;\r
+    void SetButtonAndLabel(UILabel *label,UIButton *button,int index,UIView::OnClickListener *listener)\r
+    {\r
+        m_label[index] = label;\r
+        m_button[index] = button;\r
+        //m_button[index]->SetOnClickListener(listener);\r
+    }\r
+    void SongClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index);\r
+    void SongNotClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index);\r
+private:\r
+    void BtnOnListData(UIView& view);\r
+    UILabel * m_label[256]{nullptr};\r
+    UIButton *m_button[256]{nullptr};\r
+    int playOrDeleteStatus[256]{0};\r
+    char *sliceId_{nullptr};//歌名\r
+    int16_t index_{0}; //歌曲索引\r
+};\r
 typedef struct\r
 {\r
     int index;\r
@@ -23,14 +45,13 @@ typedef struct
 } PlayerListItem;\r
 class PlayersCaseListAdapter : public AbstractAdapter {\r
 public:\r
-    PlayersCaseListAdapter() {}\r
+    PlayersCaseListAdapter();\r
     ~PlayersCaseListAdapter();\r
+    static PlayersCaseListAdapter *GetInstance(void);\r
     UIView *GetView(UIView *inView, int16_t index) override;\r
     uint16_t GetCount() override;\r
-\r
+    BtnOnClickListListener *p_BtnOnClickListListener{nullptr};\r
 private:\r
-    void LabelButtonSet();\r
-    UILabelButton *item{nullptr};\r
     UIView::OnClickListener *listener{nullptr};\r
 };\r
 } // namespace OHOS\r
index 724c739..2df70c1 100755 (executable)
@@ -17,7 +17,7 @@
 #include "audio_base_type.h"
 #include "PlayersPresenter.h"
 #include "bts_avrcp_controller.h"
-
+#include "PlayersCaseListAdapter.h"
 namespace OHOS {
 using OHOS::Media::Player;
 using OHOS::Media::Source;
@@ -94,6 +94,7 @@ public:
     void ClearActivateAudioInterrupt(void);
     void GetDuration(int64_t &duration);
 private:
+    PlayersCaseListAdapter *m_PlayersCaseListAdapter{nullptr};
     int64_t duration_{0};
     bool audioInitStatus{false};
     char *sliceId{nullptr};
index 6ff8125..cffd0fc 100755 (executable)
@@ -26,7 +26,7 @@
 #include "TipsFailMessageView.h"\r
 #include "BluetoothDeviceListView.h"\r
 #include "BluetoothItemView.h"\r
-\r
+#include "PlayersCaseListAdapter.h"\r
 namespace OHOS {\r
 using OHOS::Media::Player;\r
 using namespace OHOS::Media;\r
@@ -108,6 +108,7 @@ private:
     void SoundButtonOnClick();\r
     void PlayerModelButtonOnClick();\r
     void OptionsButtonOnClick();\r
+    PlayersCaseListAdapter *m_PlayersCaseListAdapter{nullptr};\r
     VolumeSettingView *volumeSetting{nullptr};\r
     UIViewGroup *volumeSettingView{nullptr};\r
 };\r
index fec268c..b8798a6 100644 (file)
@@ -1,5 +1,6 @@
 #include "PlayerListitemView.h"
-
+#include "ui_resource_image.h"
+#include "common/image_cache_manager.h"
 namespace OHOS
 {
 
@@ -38,11 +39,12 @@ namespace OHOS
         sLabel.SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));
         sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
 
-        sButton.SetPosition(292, 0, 40, 40);
+        sButton.SetPosition(292, 0, 78, 78);
         sButton.SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
         sButton.SetStyle(STYLE_BACKGROUND_OPA, 0x00);
         sButton.SetStyle(STYLE_BORDER_RADIUS, 0);
-        sButton.SetImageSrc("/user/res/player/music_delete.bin", nullptr);
+        ImageInfo *image = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_DELETE, PLAYER_IAMGES);
+        sButton.SetImageSrc(image, nullptr);
         sButton.SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff4fc34c, UIButton::PRESSED);
         sButton.SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
         sButton.SetStyleForState(STYLE_BORDER_RADIUS, 0, UIButton::PRESSED);
index 5e6467e..7b8d797 100755 (executable)
 #include "wearable_log.h"\r
 #include "PlayersModel.h"\r
 #include "PlayerListitemView.h"\r
+#include "ui_resource_image.h"\r
+#include "common/image_cache_manager.h"\r
 namespace OHOS {\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
+static PlayersCaseListAdapter *g_PlayersCaseListAdapter{nullptr};\r
+PlayersCaseListAdapter::PlayersCaseListAdapter()\r
+{\r
+    g_PlayersCaseListAdapter = this;\r
+}\r
+\r
 PlayersCaseListAdapter::~PlayersCaseListAdapter()\r
 {\r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PlayersCaseListAdapter::~PlayersCaseListAdapter");\r
     delete listener;\r
     listener = nullptr;\r
+\r
+    g_PlayersCaseListAdapter = nullptr;\r
+\r
+    if(p_BtnOnClickListListener != nullptr)\r
+    {\r
+        delete p_BtnOnClickListListener;\r
+        p_BtnOnClickListListener = nullptr;\r
+    }\r
+}\r
+\r
+PlayersCaseListAdapter *PlayersCaseListAdapter::GetInstance(void)\r
+{\r
+    return g_PlayersCaseListAdapter;\r
 }\r
 \r
 uint16_t PlayersCaseListAdapter::GetCount()\r
@@ -30,18 +51,24 @@ uint16_t PlayersCaseListAdapter::GetCount()
     return PlayersListGroup::GetInstance()->GetCase().Size();\r
 }\r
 \r
-class BtnOnClickListListener : public UIView::OnClickListener {\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 *sliceId_{nullptr};//歌名\r
-    int16_t index_{0}; //歌曲索引\r
-};\r
 \r
+void BtnOnClickListListener::SongClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index)\r
+{\r
+    ImageInfo *imagePlaying = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_PLAYING, PLAYER_IAMGES);\r
+    P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_label[index]->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+    P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetImageSrc(imagePlaying,nullptr);\r
+    //P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetViewId("playing");\r
+    P_PlayersCaseListAdapter->p_BtnOnClickListListener->playOrDeleteStatus[index] = 1;\r
+}\r
+void BtnOnClickListListener::SongNotClick(PlayersCaseListAdapter *P_PlayersCaseListAdapter,int index)\r
+{\r
+    ImageInfo *imageDeleye  = ImageCacheManager::GetInstance().LoadOneInMultiRes(PLAYER_MUSIC_DELETE, PLAYER_IAMGES);\r
+    P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_label[index]->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xff));\r
+    P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetImageSrc(imageDeleye,nullptr);\r
+    //std::string viewId = "delete";\r
+    //P_PlayersCaseListAdapter->p_BtnOnClickListListener->m_button[index]->SetViewId(viewId.c_str());\r
+    P_PlayersCaseListAdapter->p_BtnOnClickListListener->playOrDeleteStatus[index] = 0;\r
+}\r
 /// @brief 这个函数是一个按钮点击事件监听器的回调函数\r
 /// @param view \r
 /// @param event \r
@@ -60,13 +87,21 @@ bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event)
     }\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
     std::string strSrcMusic(APP_MUSIC_PATH);//"/user/music"\r
     std::string tempStr("/");\r
     std::string strName = sliceId_;\r
-     PlayersModel::GetInstance()->SetPlayerUri(strSrcMusic + tempStr + strName);\r
+    PlayersModel::GetInstance()->SetPlayerUri(strSrcMusic + tempStr + strName);\r
     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
@@ -74,6 +109,17 @@ bool BtnOnClickListListener::OnClick(UIView& view, const ClickEvent& event)
     const char *songName = pureName.c_str();\r
     //playersView->TitleSetText(songName);\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
+        if(i != index_)\r
+        {\r
+           SongNotClick(P_PlayersCaseListAdapter,i);\r
+        }\r
+    }\r
+    /* -------------------------------------------------------------------------- */\r
     // 刷新UI\r
     RootView::GetInstance()->Invalidate();\r
 \r
@@ -117,19 +163,6 @@ void BtnOnClickListListener::BtnOnListData(UIView& view)
     }\r
 }\r
 \r
-void PlayersCaseListAdapter::LabelButtonSet()\r
-{\r
-    if (item == nullptr) {\r
-        return;\r
-    }\r
-    item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);\r
-    item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);\r
-    item->SetStyleForState(STYLE_BORDER_RADIUS, STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE);\r
-    item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);\r
-    item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED);\r
-    item->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE);\r
-}\r
-\r
 UIView *PlayersCaseListAdapter::GetView(UIView* inView, int16_t index)\r
 {\r
     List<PlayerCaseInfo> &playersCaseList = PlayersListGroup::GetInstance()->GetCase();\r
@@ -146,7 +179,6 @@ UIView *PlayersCaseListAdapter::GetView(UIView* inView, int16_t index)
     std::string strSongName = node->data_.sliceId;\r
     std::string pureName = strSongName.substr(0, strSongName.rfind("."));\r
     const char *songName = pureName.c_str();\r
-    //printf("%s\n",songName);\r
     PlayerListItemView *listitem = nullptr;\r
     PlayerListItem listitemData;\r
     listitemData.index = index;\r
@@ -160,16 +192,19 @@ UIView *PlayersCaseListAdapter::GetView(UIView* inView, int16_t index)
     if(listener == nullptr)\r
     {\r
         listener = new BtnOnClickListListener();\r
+        p_BtnOnClickListListener = new BtnOnClickListListener();\r
         if(listener == nullptr)\r
         {\r
-            printf("%d listener == null\n",__LINE__);\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "listener == nullptr");\r
             return nullptr;\r
         }\r
         listitem->SetOnClickListener(listener);\r
+        p_BtnOnClickListListener->SetButtonAndLabel(listitem->GetLabel(),listitem->GetButton(),index,listener);\r
     }\r
     else \r
     {\r
         listitem->SetOnClickListener(listener);\r
+        p_BtnOnClickListListener->SetButtonAndLabel(listitem->GetLabel(),listitem->GetButton(),index,listener);\r
     }\r
     return listitem;\r
     \r
index c4ae96d..ce172b3 100755 (executable)
@@ -170,6 +170,18 @@ int16_t PlayersModel::GetCurrentIndex(void)
 void PlayersModel::SetCurrentIndex(int16_t value)
 {
     currentIndex = value;
+    /* -------------------------------------------------------------------------- */
+    m_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance();
+    m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongClick(m_PlayersCaseListAdapter,currentIndex);
+    for(int i= 0;i<m_PlayersCaseListAdapter->GetCount();i++)
+    {
+        if(i != currentIndex)
+        {
+           m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongNotClick(m_PlayersCaseListAdapter,i);
+        }
+    }
+    PlayersView::GetInstance()->GetPlayerList();
+    /* -------------------------------------------------------------------------- */
 }
 
 int16_t PlayersModel::GetPlayerModel(void)
index c09de49..4bd5e65 100755 (executable)
@@ -527,6 +527,19 @@ void ButtonOnClickListener::PlayerButtonOnClick()
     } else if (state == UICheckBox::UICheckBoxState::UNSELECTED) {\r
         PlayersModel::GetInstance()->ConnectBtAndLocalPause(connCtState, connTgState);\r
     }\r
+    /* -------------------------------------------------------------------------- */\r
+    //点击播放音乐时,音乐列表当前歌曲名要变颜色\r
+    m_PlayersCaseListAdapter = PlayersCaseListAdapter::GetInstance();\r
+    m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongClick(m_PlayersCaseListAdapter,PlayersModel::GetInstance()->GetCurrentIndex());\r
+    for(int i= 0;i<m_PlayersCaseListAdapter->GetCount();i++)\r
+    {\r
+        if(i != PlayersModel::GetInstance()->GetCurrentIndex())\r
+        {\r
+           m_PlayersCaseListAdapter->p_BtnOnClickListListener->SongNotClick(m_PlayersCaseListAdapter,i);\r
+        }\r
+    }\r
+    PlayersView::GetInstance()->GetPlayerList();\r
+    /* -------------------------------------------------------------------------- */\r
 }\r
 \r
 void ButtonOnClickListener::SoundButtonOnClick()\r
index c8aa4f3..0e31a00 100755 (executable)
@@ -255,7 +255,7 @@ void PlayersView::ShowUpListView()
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "list new fail");\r
             return;\r
         }\r
-        list->SetPosition(67, 138, 332, 960);\r
+        list->SetPosition(67, 138, 332, 500);\r
         list->SetStartIndex(0); // 0 : list start index\r
         list->SetAdapter(adapterText);\r
     }\r
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/music/FolkSongToTheParty.mp3 b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/music/FolkSongToTheParty.mp3
new file mode 100644 (file)
index 0000000..6f88343
Binary files /dev/null and b/code/sdk/build/config/target_config/brandy/mk_fs_image/fs/user/music/FolkSongToTheParty.mp3 differ