${CMAKE_CURRENT_SOURCE_DIR}/nativeui/player/src/PlayersPresenter.cpp\r
${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/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
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/remind/src/RemindView4.cpp\r
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/remind/src/RemindView5.cpp\r
\r
+ #音乐列表:测试用的\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicPresenter.cpp\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicModel.cpp\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicView.cpp\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicListAdapter.cpp\r
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/music/src/MusicListItemView.cpp\r
+ \r
+\r
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessModel.cpp\r
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessPresent.cpp\r
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/displaybrightness/src/DisplayBrightnessView.cpp\r
void InitCountDownTimeNotNullSlice(void);\r
void InitMainStopWatchSlice(void);\r
void InitRemindSlice(void);\r
+ void InitMusicSlice(void);\r
private:\r
void InitAllNativeSlices(void);\r
\r
#include "stopwatch/include/MainStopWatchView.h"\r
#include "remind/include/MainRemindPresenter.h"\r
#include "remind/include/MainRemindView.h"\r
+#include "music/include/MusicPresenter.h"\r
+#include "music/include/MusicView.h"\r
\r
namespace OHOS {\r
struct AppViewMapper\r
{VIEW_COUNTDOWN_TIME_NOT_NULL,&NativeLauncher::InitCountDownTimeNotNullSlice}, //倒计时不能为0\r
{VIEW_MAIN_STOPWATCH,&NativeLauncher::InitMainStopWatchSlice}, //秒表主视图\r
{VIEW_REMIND,&NativeLauncher::InitRemindSlice}, //提醒\r
+ {VIEW_MUSIC,&NativeLauncher::InitMusicSlice},\r
{VIEW_UISAMPLE, &NativeLauncher::InitUISampleSlice}\r
};\r
\r
}\r
NativeAbility::GetInstance().AddSliceProxy(VIEW_REMIND, remind);\r
}\r
+\r
+void NativeLauncher::InitMusicSlice(void) //音乐\r
+{\r
+ SliceProxy *music = new AbilitySliceProxy<MusicView,MusicPresenter>;\r
+ if (music == nullptr) {\r
+ return;\r
+ }\r
+ NativeAbility::GetInstance().AddSliceProxy(VIEW_MUSIC, music);\r
+}\r
}\r
--- /dev/null
+#ifndef MUSIC_LIST_ADAPTER_H
+#define MUSIC_LIST_ADAPTER_H
+#include <list>
+#include <string>
+#include "components/ui_list.h"
+#include "components/abstract_adapter.h"
+#include "components/ui_label.h"
+#include "components/ui_checkbox.h"
+
+// 音乐列表的适配器
+namespace OHOS
+{
+
+ typedef struct
+ {
+ int index;
+ const char *label; // 标签
+ } MusicListItem;
+
+ class MusicListAdapter : public AbstractAdapter
+ {
+ public:
+ explicit MusicListAdapter();
+ virtual ~MusicListAdapter();
+
+ /* *
+ * @brief Sets the UIView adapter data, which is a MusicListItem linked list.
+ *
+ * @param data Indicates the MusicListItem linked list data.
+ * @since 1.0
+ * @version 1.0
+ */
+ void SetData(std::list<MusicListItem> &data);
+
+ /* *
+ * @brief Obtains the <b>data</b> size of the UILabel adapter.
+ *
+ * @return Returns the <b>data</b> size of the UILabel adapter.
+ * @since 1.0
+ * @version 1.0
+ */
+ virtual uint16_t GetCount(void) override;
+
+ virtual UIView *GetView(UIView *inView, int16_t index) override;
+
+ virtual void AddListItem(const MusicListItem &item);
+
+ void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+ {
+ itemClickListener = itemclicklistener;
+ }
+
+ private:
+ std::list<MusicListItem> listData;
+ UIView::OnClickListener *itemClickListener{nullptr};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef MUSIC_LIST_ITEM_VIEW_H
+#define MUSIC_LIST_ITEM_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_view_group.h"
+#include "components/ui_checkbox.h"
+#include "components/ui_image_view.h"
+#include "music/include/MusicListAdapter.h"
+
+namespace OHOS
+{
+ class MusicListItemView : public UIViewGroup
+ {
+ public:
+ explicit MusicListItemView();
+ virtual ~MusicListItemView();
+ virtual void SetItemInfo(const MusicListItem itemInfo);
+ virtual void SetUpChild();
+ int GetMusicListIndex();
+
+ private:
+ MusicListItemView(const MusicListItemView &);
+ UIImageView sbackground; // 背景
+ UILabel sLabel; // 标签
+ UICheckBox scheckbox; // 复选框
+ MusicListItem sItemInfo = {0, nullptr};
+ };
+
+}
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef MUSIC_MODEL_H
+#define MUSIC_MODEL_H
+
+#include <cstdint>
+#include <map>
+#include "AppViewIDs.h"
+#include "UiConfig.h"
+#include "MusicPresenter.h"
+#include "music/include/MusicListAdapter.h"
+
+namespace OHOS
+{
+ class MusicModel
+ {
+ public:
+ static MusicModel &GetInstance(void);
+ void InitMusicListItem();
+ const MusicListItem *GetMusiclistItems() const;
+ uint8_t GetMusicListNum() const;
+ //const std::map<MusicIndex, AppViewId> &GetMusicIdToViewId() const;
+
+ private:
+ MusicModel();
+ MusicModel(const MusicModel &);
+ MusicModel &operator=(const MusicModel &);
+ virtual ~MusicModel();
+ static const uint16_t musicListMaxNum = 6;
+ MusicListItem Musics[musicListMaxNum] = {0, nullptr};
+ //std::map<int, AppViewId> MusicIdToViewId;
+ bool btConnectStatus{false};
+ };
+}
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef MUSIC_PRESENTER_H
+#define MUSIC_PRESENTER_H
+
+#include "Presenter.h"
+#include "MusicView.h"
+#include "music/include/MusicModel.h"
+namespace OHOS
+{
+ class MusicView;
+ class MusicModel;
+ class MusicPresenter : public Presenter<MusicView>,
+ public UIView::OnClickListener,
+ public UIView::OnDragListener
+ {
+ public:
+ MusicPresenter();
+ virtual ~MusicPresenter();
+
+ void OnStart() override;
+ void OnPause() override;
+ void OnResume() override;
+ void OnStop() override;
+
+ static MusicPresenter *GetInstance();
+
+ private:
+ // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+ MusicModel *p_MusicModel{nullptr};
+ };
+} // namespace OHOS
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef MUSIC_VIEW_H
+#define MUSIC_VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_list.h"
+#include "music/include/MusicListAdapter.h"
+namespace OHOS
+{
+ class MusicPresenter;
+ class MusicView : public View<MusicPresenter>
+ {
+
+ public:
+ MusicView();
+ virtual ~MusicView();
+ static MusicView *GetInstance(void);
+
+ void OnStart() override;
+ void OnSetUpView() override;
+ void OnTearDownView() override;
+ void OnStop() override;
+ void AddMusicToList(const MusicListItem &item);
+ private:
+ void InitView(void);
+ void DeInitView(void);
+ void PreLoad(void);
+
+ private:
+ UIScrollView *scrollView = nullptr;
+ UILabel *title{nullptr};
+ MusicListAdapter *p_MusicListAdapter{nullptr};
+ UIList *musicList = nullptr; // 音乐列表
+ UIView::OnDragListener *draglistener{nullptr};
+ bool viewInitStatus{false};
+ };
+} // namespace OHOS
+#endif
\ No newline at end of file
--- /dev/null
+#include "music/include/MusicListAdapter.h"
+#include "music/include/MusicListItemView.h"
+
+namespace OHOS
+{
+ MusicListAdapter::MusicListAdapter() {}
+
+ MusicListAdapter::~MusicListAdapter()
+ {
+ listData.clear();
+ }
+
+ uint16_t MusicListAdapter::GetCount(void)
+ {
+ return listData.size();
+ }
+
+ void MusicListAdapter::SetData(std::list<MusicListItem> &data)
+ {
+ if (!listData.empty())
+ {
+ listData.clear();
+ }
+ std::list<MusicListItem>::iterator it;
+ for (it = data.begin(); it != data.end(); it++)
+ {
+ listData.push_back(*it);
+ }
+ }
+
+ /// @brief 为音乐列表的每一项创建一个视图
+ /// @param inView 一个指向已存在的视图对象的指
+ /// @param index 要创建的视图在列表中的索引l。
+ /// @return 返回该视图对象
+ UIView *MusicListAdapter::GetView(UIView *inView, int16_t index)
+ {
+ //1.先检查列表数据是否为空,若为空则返回空指针
+ if (listData.empty())
+ {
+ return nullptr;
+ }
+ //2.接着检查索引是否小于0,若小于0则返回空指针
+ if (index < 0)
+ {
+ return nullptr;
+ }
+ //3.检查是否超出列表数据大小,若超出则返回空指针
+ size_t uindex = index;
+ if (uindex >= listData.size())
+ {
+ return nullptr;
+ }
+ //4.通过迭代器访问列表中指定索引位置的元素,将其赋值给itemData变量
+ std::list<MusicListItem>::iterator it = listData.begin();
+ for (int i = 0; i < index; i++)
+ {
+ it++;
+ }
+ MusicListItem itemData = *it;
+ MusicListItemView *item = nullptr;
+ //5.根据传入的inView参数是否已经存在一个视图对象,若为空则创建一个新的MusicListItemView对象,否则将inView转换成MusicListItemView类型的指针
+ if (inView == nullptr)
+ {
+ item = new MusicListItemView();
+ }
+ else
+ {
+ item = static_cast<MusicListItemView *>(inView);
+ }
+ item->SetItemInfo(itemData);
+ item->SetOnClickListener(itemClickListener);
+ return item;
+ }
+
+ void MusicListAdapter::AddListItem(const MusicListItem &item)
+ {
+ listData.push_back(item);
+ }
+} // namespace OHOS
--- /dev/null
+#include "music/include/MusicListItemView.h"
+
+namespace OHOS
+{
+
+ MusicListItemView::MusicListItemView()
+ {
+ SetPosition(0, 0, 380, 120); // 每一首歌曲的itemview宽高要配置好,因为每一首加到list歌曲都是以这个视图为基准
+ SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+ SetStyle(STYLE_BACKGROUND_OPA, 255);
+ SetTouchable(true);
+ SetUpChild();
+ Add(&sbackground);
+ Add(&sLabel);
+ Add(&scheckbox);
+ }
+
+ MusicListItemView::~MusicListItemView()
+ {
+ Remove(&sbackground);
+ Remove(&sLabel);
+ Remove(&scheckbox);
+ }
+
+ /// @brief 设置item的信息
+ /// @param itemInfo
+ void MusicListItemView::SetItemInfo(const MusicListItem itemInfo)
+ {
+ sItemInfo = itemInfo;
+ sLabel.SetText(itemInfo.label);
+ }
+
+ /// @brief 设置每一个itemview上的组件
+ void MusicListItemView::SetUpChild()
+ {
+ sbackground.SetSrc("/user/res/SETTING_BACKGROUND.bin");
+
+ sLabel.SetPosition(115, 33, 200, 40);
+ sLabel.SetStyle(STYLE_TEXT_FONT, 30);
+ sLabel.SetStyle(STYLE_LINE_HEIGHT, 36);
+ sLabel.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ sLabel.SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+ sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+ scheckbox.SetPosition(280, (120 - scheckbox.GetHeight()) / 2, 50, 50);
+ scheckbox.SetViewId("checkBox");
+ scheckbox.SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+ scheckbox.SetImages("/user/res/player/playing.bin", "/user/res/player/music_delete.bin");
+ }
+
+ /// @brief 获取list歌单的中每首歌的在list的下标
+ /// @return 返回歌曲下标
+ int MusicListItemView::GetMusicListIndex()
+ {
+ return sItemInfo.index;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+#include "music/include/MusicModel.h"
+
+namespace OHOS
+{
+
+ MusicModel::MusicModel() {}
+
+ MusicModel::~MusicModel() {}
+
+ MusicModel &MusicModel::GetInstance()
+ {
+ static MusicModel instance;
+ return instance;
+ }
+
+ void MusicModel::InitMusicListItem()
+ {
+ Musics[0] = {0, "frist song"};
+ Musics[1] = {1, "second song"};
+ Musics[2] = {2, "third song"};
+ Musics[3] = {3, "fourth song"};
+ Musics[4] = {4, "fifth song"};
+ Musics[5] = {5, "six song"};
+ }
+
+ const MusicListItem *MusicModel::GetMusiclistItems() const
+ {
+ return Musics;
+ }
+ uint8_t MusicModel::GetMusicListNum() const
+ {
+ return musicListMaxNum;
+ }
+}
\ No newline at end of file
--- /dev/null
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "music/include/MusicPresenter.h"
+#include "music/include/MusicListAdapter.h"
+#include "music/include/MusicListItemView.h"
+namespace OHOS
+{
+
+ // 当前Presenter属性实例化的内存指针
+ static MusicPresenter *g_pMusicPresenter = nullptr;
+
+ MusicPresenter::MusicPresenter()
+ {
+ p_MusicModel = &MusicModel::GetInstance();
+ g_pMusicPresenter = this;
+ }
+
+ MusicPresenter::~MusicPresenter()
+ {
+ g_pMusicPresenter = nullptr;
+ }
+
+ MusicPresenter *MusicPresenter::GetInstance()
+ {
+ return g_pMusicPresenter;
+ }
+
+ void MusicPresenter::OnStart()
+ {
+ // 初始化歌曲信息
+ p_MusicModel->InitMusicListItem();
+ Presenter<MusicView>::OnStart();
+ }
+
+ void MusicPresenter::OnPause(void)
+ {
+
+ Presenter<MusicView>::OnPause();
+ }
+
+ void MusicPresenter::OnResume(void)
+ {
+ // 把歌曲信息数据拿到存储到list中
+ if (view_ == nullptr)
+ {
+ return;
+ }
+ const MusicListItem *itemInfo = p_MusicModel->GetMusiclistItems();
+ for (int i = 0; i < p_MusicModel->GetMusicListNum(); i++)
+ {
+ view_->AddMusicToList(itemInfo[i]);
+ }
+ Presenter<MusicView>::OnResume();
+ }
+
+ void MusicPresenter::OnStop(void)
+ {
+ Presenter<MusicView>::OnStop();
+ }
+
+ bool MusicPresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
+ (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
+ {
+ NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+ }
+ return true;
+ }
+
+ bool MusicPresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ UNUSED(event);
+ MusicListItemView *musiclistItemView = static_cast<MusicListItemView *>(&view);
+ int index = musiclistItemView->GetMusicListIndex();
+ // printf("%d\n",index);//测试点击是否有效
+ if (index >= p_MusicModel->GetMusicListNum())
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::OnClick is no index");
+ return false;
+ }
+ return true;
+ }
+}
\ No newline at end of file
--- /dev/null
+#include "music/include/MusicView.h"
+#include "music/include/MusicPresenter.h"
+
+#include "UiConfig.h"
+
+namespace OHOS
+{
+
+ static MusicView *g_pMusicView{nullptr};
+
+ MusicView::MusicView()
+ {
+
+ g_pMusicView = this;
+ }
+
+ MusicView::~MusicView()
+ {
+ if (viewInitStatus == true)
+ {
+ DeInitView();
+ }
+ g_pMusicView = nullptr;
+ }
+
+ MusicView *MusicView::GetInstance()
+ {
+ return g_pMusicView;
+ }
+
+ void MusicView::InitView()
+ {
+ if (scrollView == nullptr)
+ {
+ scrollView = new UIScrollView();
+ }
+ scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ scrollView->SetScrollBlankSize(20);
+ scrollView->SetReboundSize(50);
+ scrollView->SetTouchable(true);
+ scrollView->SetDraggable(true);
+ draglistener = static_cast<UIView::OnDragListener *>(MusicPresenter::GetInstance());
+ scrollView->SetOnDragListener(draglistener);
+ /* -------------------------------------------------------------------------- */
+ if (title == nullptr)
+ {
+ title = new UILabel();
+ }
+ title->SetPosition(173, 52, 120, 35);
+ title->Resize(120, 35);
+ title->SetStyle(STYLE_TEXT_FONT, 30);
+ title->SetStyle(STYLE_LINE_HEIGHT, 36);
+ title->SetText("音乐列表");
+ title->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+ title->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));
+ title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /* -------------------------------------------------------------------------- */
+ //UIList 的适配器
+ p_MusicListAdapter = new MusicListAdapter();
+ p_MusicListAdapter->SetItemClickListener(presenter_);
+ if (musicList == nullptr)
+ {
+ musicList = new UIList();
+ }
+ musicList->SetPosition(43, 120, 380, 600);
+ musicList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+ }
+
+ void MusicView::DeInitView()
+ {
+ scrollView->RemoveAll();
+ delete title;
+ title = nullptr;
+
+ delete musicList;
+ musicList = nullptr;
+
+ delete scrollView;
+ scrollView = nullptr;
+
+ delete draglistener;
+ draglistener = nullptr;
+ }
+
+ void MusicView::PreLoad(void)
+ {
+ if (!viewInitStatus)
+ {
+ InitView();
+ viewInitStatus = true;
+ }
+ }
+
+ /// @brief 添加歌曲到list
+ /// @param item
+ void MusicView::AddMusicToList(const MusicListItem &item)
+ {
+ p_MusicListAdapter->AddListItem(item);
+ }
+
+ /// @brief 页面启动时需要执行的代码逻辑
+ void MusicView::OnStart()
+ {
+ PreLoad();
+ }
+
+ /// @brief 创建页面的视图。
+ void MusicView::OnSetUpView()
+ {
+ View<MusicPresenter>::OnSetUpView();
+ scrollView->Add(title);
+ scrollView->Add(musicList);
+ RootView::GetInstance()->Add(scrollView);
+ musicList->SetAdapter(p_MusicListAdapter);
+ Draw();
+ }
+
+ /// @brief 销毁页面的视图。
+ void MusicView::OnTearDownView()
+ {
+ View<MusicPresenter>::OnTearDownView();
+ return;
+ }
+
+ /// @brief 页面结束时需要执行的销毁逻辑。
+ void MusicView::OnStop()
+ {
+ View<MusicPresenter>::OnStop();
+ RootView::GetInstance()->RemoveAll();
+ return;
+ }
+}
\ No newline at end of file