${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordDeleteView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordGoingPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordGoingView.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordListPresenter.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordListView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingPlayerPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingPlayerView.cpp
+
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingListAdapter.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingListitemView.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordListView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingPresenter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/record/src/RecordingModel.cpp
VIEW_FAST_TRAINING_ATTENTION, // 快速训练项目选择超出提示
/* ----------------------------------- 录音 ----------------------------------- */
VIEW_RECORD,
- VIEW_RECORD_LIST,
VIEW_RECORD_PLAY,
VIEW_RECORD_DELETE,
VIEW_RECORD_GOING,
void InitUISampleSlice(void);
/* ----------------------------------- 录音 ----------------------------------- */
void InitRecordingSlice(void);
- void InitRecordingListSlice(void);
void InitRecordingPlaySlice(void);
void InitRecordingDeleteSlice(void);
void InitRecordingGoingSlice(void);
#include "record/include/RecordingPresenter.h"
#include "record/include/RecordingView.h"
-#include "record/include/RecordListPresenter.h"
-#include "record/include/RecordListView.h"
#include "record/include/RecordingPlayerPresenter.h"
#include "record/include/RecordingPlayerView.h"
#include "record/include/RecordDeletePresenter.h"
{VIEW_FAST_TRAINING_ATTENTION, &NativeLauncher::InitFastTrainingAttentionSlice},
{VIEW_RECORD, &NativeLauncher::InitRecordingSlice}, // 录音实例化地址
- {VIEW_RECORD_LIST, &NativeLauncher::InitRecordingListSlice},
{VIEW_RECORD_PLAY, &NativeLauncher::InitRecordingPlaySlice},
{VIEW_RECORD_DELETE, &NativeLauncher::InitRecordingDeleteSlice},
{VIEW_RECORD_DELETE, &NativeLauncher::InitRecordingDeleteSlice},
NativeAbility::GetInstance().AddSliceProxy(VIEW_RECORD, record);
}
- void NativeLauncher::InitRecordingListSlice(void)
- {
- SliceProxy *recordlist = new AbilitySliceProxy<RecordListView, RecordListPresenter>;
- if (recordlist == nullptr)
- {
- return;
- }
- NativeAbility::GetInstance().AddSliceProxy(VIEW_RECORD_LIST, recordlist);
- }
-
void NativeLauncher::InitRecordingPlaySlice(void)
{
SliceProxy *recordplay = new AbilitySliceProxy<RecordingPlayerView, RecordingPlayerPresenter>;
+++ /dev/null
-#ifndef RECORD_LIST_PRESENTER_H\r
-#define RECORD_LIST_PRESENTER_H\r
-\r
-#include "Presenter.h"\r
- \r
-#include "RecordListView.h"\r
- \r
-namespace OHOS\r
-{\r
- class RecordListView;\r
- \r
- class RecordListPresenter : public Presenter<RecordListView>,\r
- public UIView::OnClickListener,\r
- public UIView::OnDragListener,\r
- public UIView::OnLongPressListener\r
- {\r
- public:\r
- RecordListPresenter();\r
- virtual ~RecordListPresenter();\r
- \r
- void OnStart() override; \r
- void OnPause() override; \r
- void OnResume() override; \r
- void OnStop() override; \r
- \r
- static RecordListPresenter *GetInstance(); \r
- \r
- private:\r
- //因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
- bool OnClick(UIView &view, const ClickEvent &event) override; \r
- bool OnDrag(UIView &view, const DragEvent &event) override; \r
- bool OnLongPress(UIView& view, const LongPressEvent& event) override;\r
- };\r
-} //namespace OHOS\r
-\r
-\r
-\r
-\r
-\r
-\r
-#endif
\ No newline at end of file
#include "components/ui_label.h"\r
#include "components/ui_image_view.h"\r
#include "components/ui_button.h"\r
+#include "components/ui_list.h"\r
+#include "record/include/RecordingListAdapter.h"\r
namespace OHOS\r
{\r
- class RecordListPresenter;\r
- class RecordListView : public View<RecordListPresenter>\r
+\r
+ class RecordListView\r
{\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
+ const char *text; // 文本\r
+ uint8_t lineBreakMode; // 断行模式。\r
+ };\r
RecordListView();\r
virtual ~RecordListView();\r
static RecordListView *GetInstance(void);\r
-\r
- void OnStart() override;\r
- void OnSetUpView() override;\r
- void OnTearDownView() override;\r
- void OnStop() override;\r
+ UIScrollView *RecordListViewInit(void);\r
+ void ClearAll(void);\r
+ void IsVisibleLabel(bool value);\r
\r
private:\r
- UIView::OnDragListener *draglistener{nullptr};\r
-\r
- void InitView(void);\r
- void DeInitView(void);\r
-\r
- UIViewGroup *container_ = nullptr;\r
- UIScrollView *RecordListScrollView = nullptr;\r
- UILabel *RecordListlabel1 = nullptr;\r
- UIImageView *RecordImage = nullptr;\r
- UIButton *RecordButton = nullptr;\r
-\r
- UIImageView *image6_ = nullptr;\r
- UIButton *button3 = nullptr;\r
- UIButton *button1 = nullptr;\r
- UILabel *label3 = nullptr;\r
- UILabel *label2 = nullptr;\r
- UILabel *label1 = nullptr;\r
- UIButton *button2 = nullptr;\r
- UILabel *label9 = nullptr;\r
- UILabel *label6 = nullptr;\r
- UILabel *label8 = nullptr;\r
- UILabel *label5 = nullptr;\r
- UILabel *label7 = nullptr;\r
- UILabel *label4 = nullptr;\r
+ bool SetUpScrollView(void);\r
+ UILabel *SetUpLabel(LabelConfig &labelconfig); // 设置标签\r
+ bool SetUpRecordListViewLabel(void);\r
+ bool SetUpRecordingList(void);\r
+ void AddRecordingToList(const RecordingListItem &item);\r
+ void InitRecordingInfo(void);\r
+ UIScrollView *RecordListScrollView{nullptr};\r
+ UILabel *RecordListViewTitleLabel{nullptr}; // "录音列表"\r
+ UILabel *RecordListViewAttentionLabel{nullptr}; //"当前录音列表为空"\r
+ UIList *recordList{nullptr}; // 录音列表\r
+ RecordingListAdapter *p_RecordingListAdapter{nullptr}; // 录音列表适配器\r
+ bool initViewStatus{false};\r
};\r
} // namespace OHOS\r
\r
--- /dev/null
+#ifndef RECORDING_LIST_ADAPTER_H
+#define RECORDING_LIST_ADAPTER_H
+
+#include "components/abstract_adapter.h"
+#include "components/ui_list.h"
+#include "list.h"
+#include <list>
+namespace OHOS
+{
+ typedef struct
+ {
+ int index;
+ const char *recordId; // 录音编号
+ const char *recordTotalTime; // 录音总时长
+ const char *recordTime; // 录音时间
+ } RecordingListItem;
+
+ class RecordingListAdapter : public AbstractAdapter
+ {
+ public:
+ explicit RecordingListAdapter();
+ virtual ~RecordingListAdapter();
+
+ /* *
+ * @brief Sets the UIView adapter data, which is a RecordingListItem linked list.
+ *
+ * @param data Indicates the RecordingListItem linked list data.
+ * @since 1.0
+ * @version 1.0
+ */
+ void SetData(std::list<RecordingListItem> &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 RecordingListItem &item);
+
+ void SetItemClickListener(UIView::OnClickListener *itemclicklistener)
+ {
+ itemClickListener = itemclicklistener;
+ }
+
+ private:
+ std::list<RecordingListItem> listData;
+ UIView::OnClickListener *itemClickListener{nullptr};
+ };
+
+}
+
+#endif
--- /dev/null
+#ifndef RECORDING_LIST_ITEM_VIEW
+#define RECORDING_LIST_ITEM_VIEW
+
+#include "components/ui_view_group.h"
+#include "components/ui_button.h"
+#include "components/ui_label.h"
+#include "record/include/RecordingListAdapter.h"
+
+namespace OHOS
+{
+ class RecordingListitemView : public UIViewGroup
+ {
+ public:
+ RecordingListitemView();
+ virtual ~RecordingListitemView();
+ virtual void SetItemInfo(const RecordingListItem itemInfo);
+ virtual void SetUpChild();
+ int GetRecordingListIndex();
+
+ private:
+ RecordingListitemView(const RecordingListitemView &);
+ void SetLabelStyle(UILabel &label, int x, int y, int width, int height, OHOS::ColorType textColor, int fontSize);
+ UIButton m_button;
+ UILabel m_recordId; // 录音编号
+ UILabel m_recordTotalTime; // 录音总时长
+ UILabel m_recordTime; // 录音时间
+ RecordingListItem m_ItemInfo{0, nullptr,nullptr,nullptr};
+ };
+
+}
+
+#endif
#include "audio_manager.h"
#include "audio_base_type.h"
#include "record/include/RecordingPresenter.h"
+#include "record/include/RecordingListAdapter.h"
+
+#include <iostream>
+#include <string>
+#include <vector>
+#include <sys/types.h>
+#include <dirent.h>
namespace OHOS
{
using OHOS::Media::Player;
using Audio::AudioManager;
// 播放器
-class RecordingPlayerInterruptListener : public InterruptListener {
-public:
- RecordingPlayerInterruptListener(){}
- ~RecordingPlayerInterruptListener(){}
+ class RecordingPlayerInterruptListener : public InterruptListener
+ {
+ public:
+ RecordingPlayerInterruptListener() {}
+ ~RecordingPlayerInterruptListener() {}
- 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();
+ 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};
-};
+ private:
+ std::shared_ptr<Player> player_{nullptr};
+ bool isPaused_{false};
+ bool isDelayed_{false};
+ bool isResumed_{false};
+ bool isBeginStopped_{false};
+ bool isEndStopped_{false};
+ };
class RecordingModel
{
void SetRecordingPlayerUri(std::string src);
void SetRecordingPlayButtonState(bool state);
int RecordingPlayerStat();
-
+ /* -------------------------------------------------------------------------- */
+ void InitRecordingListItem();
+ const RecordingListItem *GetRecordinglistItems() const;
+ uint8_t GetRecordingListNum() const;
+ std::string GetCleanFileName(const std::string &filePath);
+ void SearchFiles(const std::string &directory, std::vector<std::string> &fileNames, int &mp3FileCount);
private:
RecordingModel();
RecordingModel(const RecordingModel &) = delete;
RecordingModel &operator=(const RecordingModel &) = delete;
virtual ~RecordingModel();
-
private:
int64_t DurationTime{0}; // 播放时长,单位ms
bool PlayButtonState{false}; // 播放按钮状态
std::string Uri; // 唯一标识一个资源的字符串。
std::map<std::string, std::string> Header;
std::shared_ptr<Source> Resource{nullptr};
+ /* -------------------------------------------------------------------------- */
+ std::vector<std::string> fileNames; // 文件名
+ int RecordingMp3FileCount = 0; // 录音MP3数量
+ const std::string directory = "/user/res/record/recording/";
+ RecordingListItem *Recordings = nullptr;
};
}
\r
#include "Presenter.h"\r
#include "RecordingView.h"\r
-\r
#include "KeyInputListener.h"\r
#include "common/key_code.h"\r
\r
namespace OHOS\r
{\r
- class RecordingView;\r
+ typedef enum\r
+ {\r
+ RECORDINGVIEW = 0, // 录音视图(slice)\r
+ RECORDINGLISTVIEW, // 录音列表视图(subView)\r
\r
+ MAX_RECORDINGVIEWID,\r
+ } RECORDINGVIEWID;\r
+\r
+ class RecordingView;\r
class RecordingPresenter : public Presenter<RecordingView>,\r
public UIView::OnClickListener,\r
public RootView::OnKeyActListener,\r
// 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
bool OnClick(UIView &view, const ClickEvent &event) override;\r
bool OnDrag(UIView &view, const DragEvent &event) override;\r
- bool OnKeyAct(UIView &view, const KeyEvent &event) override;\r
+ bool OnDragEnd(UIView &view, const DragEvent &event) override;\r
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; \r
};\r
}\r
\r
#include "components/ui_button.h"\r
#include "components/ui_image_animator.h"\r
\r
+#include "record/include/RecordListView.h"\r
namespace OHOS\r
{\r
static const char *RECORD_BUTTON = "RecordButton"; //录音按钮\r
virtual ~RecordingView();\r
static RecordingView *GetInstance(void);\r
\r
+ bool ChangeRecordingView(int16_t thisView); // 切换到“录音”视图\r
+ bool ChangeRecordListView(int16_t thisView);//切换到"录音列表"视图\r
+ bool ClickFunc(int16_t interface);\r
+ void ChangeView(int16_t hideView, int16_t showView);\r
+ UIScrollView *GetRecordingViewScrollView(int i);\r
+\r
+ public:\r
void OnStart() override;\r
void OnSetUpView() override;\r
void OnTearDownView() override;\r
void OnStop() override;\r
\r
+ private:\r
+ RecordListView *p_RecordListView{nullptr};\r
+\r
private:\r
void RecordingViewInit(void);\r
void ClearAll(void);\r
bool SetUpScrollView(void);\r
bool SetTheTitle(void);\r
UIButton *SetTheButton(ButtonConfig &buttonconfig, UIView::OnClickListener *clickListener);\r
- UIScrollView *RecordingViewScrollView{nullptr};\r
+ UIScrollView *RecordingViewScrollView[2]{nullptr};\r
UILabel *RecordingViewTitleLabel{nullptr};\r
UIButton *RecordingViewButton{nullptr};\r
UILabel *AttentionLabel{nullptr};\r
+++ /dev/null
-#include "AppViewIDs.h"\r
-#include "NativeAbility.h"\r
-#include "graphic_math.h"\r
-#include "string.h"\r
-#include "record/include/RecordListPresenter.h"\r
-\r
-namespace OHOS\r
-{\r
-\r
- // 当前Presenter属性实例化的内存指针\r
- static RecordListPresenter *g_pRecordListPresenter = nullptr;\r
-\r
- RecordListPresenter::RecordListPresenter()\r
- {\r
-\r
- g_pRecordListPresenter = this;\r
- }\r
-\r
- RecordListPresenter::~RecordListPresenter()\r
- {\r
-\r
- g_pRecordListPresenter = nullptr;\r
- }\r
-\r
- RecordListPresenter *RecordListPresenter::GetInstance()\r
- {\r
-\r
- return g_pRecordListPresenter;\r
- }\r
-\r
- void RecordListPresenter::OnStart()\r
- {\r
-\r
- Presenter<RecordListView>::OnStart();\r
- }\r
-\r
- void RecordListPresenter::OnPause(void)\r
- {\r
-\r
- Presenter<RecordListView>::OnPause();\r
- }\r
-\r
- void RecordListPresenter::OnResume(void)\r
- {\r
-\r
- Presenter<RecordListView>::OnResume();\r
- }\r
-\r
- void RecordListPresenter::OnStop(void)\r
- {\r
-\r
- Presenter<RecordListView>::OnStop();\r
- }\r
-\r
- bool RecordListPresenter::OnDrag(UIView &view, const DragEvent &event)\r
- {\r
-\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM &&\r
- (event.GetDeltaY() > 30) && (event.GetDeltaY() > (2 * MATH_ABS(event.GetDeltaX()))))\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD);\r
- }\r
- return true;\r
- }\r
-\r
- bool RecordListPresenter::OnLongPress(UIView &view, const LongPressEvent &event)\r
- {\r
-\r
- return false;\r
- }\r
-\r
- bool RecordListPresenter::OnClick(UIView &view, const ClickEvent &event)\r
- {\r
- if (strcmp(view.GetViewId(), "button1") == 0)\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_PLAY);\r
- return true;\r
- }\r
- else if(strcmp(view.GetViewId(), "button2") == 0)\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_PLAY);\r
- return true;\r
- }\r
- else if(strcmp(view.GetViewId(), "button3") == 0)\r
- {\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_PLAY);\r
- return true;\r
- }\r
- return true;\r
- }\r
-}
\ No newline at end of file
#include "record/include/RecordListView.h"\r
-#include "record/include/RecordListPresenter.h"\r
-\r
-#include "UiConfig.h"\r
-\r
+#include "record/include/RecordingPresenter.h"\r
+#include "wearable_log.h"\r
+#include "record/include/RecordingModel.h"\r
namespace OHOS\r
{\r
\r
\r
RecordListView::RecordListView()\r
{\r
-\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListView");\r
g_pRecordListView = this;\r
}\r
\r
RecordListView::~RecordListView()\r
{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::~RecordListView");\r
+ ClearAll();\r
g_pRecordListView = nullptr;\r
}\r
\r
return g_pRecordListView;\r
}\r
\r
- void RecordListView::InitView()\r
+ void RecordListView::ClearAll()\r
{\r
- if (container_ == nullptr)\r
+ if (initViewStatus == true)\r
{\r
- container_ = new UIViewGroup();\r
- container_->SetPosition(0, 0, 466, 466);\r
- container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
- draglistener = static_cast<UIView::OnDragListener *>(RecordListPresenter::GetInstance());\r
- if (draglistener == nullptr)\r
- {\r
- return;\r
- }\r
- container_->SetOnDragListener(draglistener);\r
- container_->SetTouchable(true);\r
- container_->SetDraggable(true);\r
- }\r
+ RecordListScrollView->RemoveAll();\r
\r
- // Add ScrollView to App\r
- if (RecordListScrollView == nullptr)\r
- {\r
- RecordListScrollView = new UIScrollView();\r
- }\r
- RecordListScrollView->SetPosition(0, 0);\r
- RecordListScrollView->Resize(466, 466);\r
- RecordListScrollView->SetViewId("RecordListScrollView");\r
- RecordListScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
- // Add to rootView\r
- container_->Add(RecordListScrollView);\r
- RecordListScrollView->SetVisible(true);\r
+ delete RecordListViewAttentionLabel;\r
+ RecordListViewAttentionLabel = nullptr;\r
\r
- // Add Label to App\r
- if (RecordListlabel1 == nullptr)\r
- {\r
- RecordListlabel1 = new UILabel();\r
- }\r
- RecordListlabel1->SetPosition(188, 52);\r
- RecordListlabel1->Resize(90, 35);\r
- RecordListlabel1->SetViewId("RecordListlabel1");\r
- RecordListlabel1->SetStyle(STYLE_TEXT_FONT, 30);\r
- RecordListlabel1->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ delete RecordListViewTitleLabel;\r
+ RecordListViewTitleLabel = nullptr;\r
\r
- // Set additional property\r
- RecordListlabel1->SetText("录音机");\r
- RecordListlabel1->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- RecordListlabel1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- RecordListlabel1->SetRollSpeed(0);\r
- RecordListlabel1->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ delete p_RecordingListAdapter;\r
+ p_RecordingListAdapter = nullptr;\r
\r
- // Add to scrollView1\r
- RecordListScrollView->Add(RecordListlabel1);\r
- RecordListlabel1->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add ImageView to App\r
- if (RecordImage == nullptr)\r
- {\r
- RecordImage = new UIImageView();\r
- }\r
- RecordImage->SetPosition(158, 129);\r
- RecordImage->Resize(150, 150);\r
- RecordImage->SetViewId("RecordImage");\r
- RecordImage->SetStyle(STYLE_BORDER_RADIUS, 10);\r
- RecordImage->SetSrc(PNG_RECORD1_IMAGE);\r
+ delete recordList;\r
+ recordList = nullptr;\r
\r
- // Add to scrollView1\r
- RecordListScrollView->Add(RecordImage);\r
- RecordImage->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Button to App\r
- if (RecordButton == nullptr)\r
- {\r
- RecordButton = new UIButton();\r
- }\r
- RecordButton->SetPosition(178, 150);\r
- RecordButton->Resize(120, 120);\r
- RecordButton->SetViewId("RecordButton");\r
- RecordButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);\r
- RecordButton->SetStyle(STYLE_BORDER_RADIUS, 100);\r
-\r
- // Set additional property\r
- RecordButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffff5a36, UIButton::PRESSED);\r
- RecordButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
- RecordButton->SetStyleForState(STYLE_BORDER_RADIUS, 100, UIButton::PRESSED);\r
-\r
- // Add the CallBack about events\r
- UIView::OnClickListener *button4Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
- RecordButton->SetOnClickListener(button4Click);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(RecordButton);\r
- RecordButton->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Button to App\r
- if (button1 == nullptr)\r
- {\r
- button1 = new UIButton();\r
- }\r
- button1->SetPosition(43, 323);\r
- button1->Resize(380, 100);\r
- button1->SetViewId("button1");\r
- button1->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
- button1->SetStyle(STYLE_BORDER_RADIUS, 50);\r
- button1->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
- button1->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
- button1->SetStyleForState(STYLE_BACKGROUND_OPA, 0x82, UIButton::PRESSED);\r
- button1->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
- button1->SetStyleForState(STYLE_BORDER_RADIUS, 50, UIButton::PRESSED);\r
-\r
- // Add the CallBack about events\r
- UIView::OnClickListener *button1Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
- button1->SetOnClickListener(button1Click);\r
- UIView::OnLongPressListener *button1LongPress = static_cast<UIView::OnLongPressListener *>(RecordListPresenter::GetInstance());\r
- button1->SetOnLongPressListener(button1LongPress);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(button1);\r
- button1->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label1 == nullptr)\r
- {\r
- label1 = new UILabel();\r
- }\r
- label1->SetPosition(88, 356);\r
- label1->Resize(200, 60);\r
- label1->SetViewId("label1");\r
- label1->SetStyle(STYLE_TEXT_FONT, 30);\r
- label1->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-\r
- // Set additional property\r
- label1->SetText("录音 3");\r
- label1->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label1->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
- label1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label1->SetRollSpeed(0);\r
- label1->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label1);\r
- label1->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label2 == nullptr)\r
- {\r
- label2 = new UILabel();\r
+ delete RecordListScrollView;\r
+ RecordListScrollView = nullptr;\r
}\r
- label2->SetPosition(301, 342); // widget's left position and top position\r
- label2->Resize(200, 60); // widget's width and height\r
- label2->SetViewId("label2"); // Set style\r
- label2->SetStyle(STYLE_TEXT_FONT, 30);\r
- label2->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ }\r
\r
- // Set additional property\r
- label2->SetText("20:57");\r
- label2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label2->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
- label2->SetAlign(TEXT_ALIGNMENT_RIGHT, TEXT_ALIGNMENT_CENTER);\r
- label2->SetRollSpeed(0);\r
- label2->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label2);\r
- label2->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label3 == nullptr)\r
+ // 亮屏时长视图“scrollView”初始化\r
+ bool RecordListView::SetUpScrollView(void)\r
+ {\r
+ RecordListScrollView = new UIScrollView();\r
+ if (RecordListScrollView == nullptr)\r
{\r
- label3 = new UILabel();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::RecordListScrollView new fail!");\r
+ return false;\r
}\r
- label3->SetPosition(280, 380); // widget's left position and top position\r
- label3->Resize(200, 60); // widget's width and height\r
- label3->SetViewId("label3"); // Set style\r
- label3->SetStyle(STYLE_TEXT_FONT, 20);\r
- label3->SetStyle(STYLE_LINE_HEIGHT, 23);\r
-\r
- // Set additional property\r
- label3->SetText("2022.04.21");\r
- label3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label3->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
- label3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label3->SetRollSpeed(0);\r
- label3->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
-\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label3);\r
- label3->SetVisible(true);\r
-\r
- /********************************************************************************************************/\r
- // Add Button to App\r
- if (button2 == nullptr)\r
+ RecordListScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+ RecordListScrollView->SetScrollBlankSize(35);\r
+ RecordListScrollView->SetReboundSize(50);\r
+ RecordListScrollView->SetDirection(1);\r
+ UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(RecordingPresenter::GetInstance());\r
+ if (draglistener == nullptr)\r
{\r
- button2 = new UIButton();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ScreenDurationView::draglistener can not be nullptr!");\r
+ return false;\r
}\r
- button2->SetPosition(43, 443); // widget's left position and top position\r
- button2->Resize(380, 100); // widget's width and height\r
- button2->SetViewId("button2"); // Set style\r
- button2->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
- button2->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
- button2->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
- button2->SetStyleForState(STYLE_BACKGROUND_OPA, 0x82, UIButton::PRESSED);\r
- button2->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
+ RecordListScrollView->SetOnDragListener(draglistener);\r
+ RecordListScrollView->SetTouchable(true);\r
+ RecordListScrollView->SetDraggable(true);\r
+ return true;\r
+ }\r
\r
- // Add the CallBack about events\r
- UIView::OnClickListener *button2Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
- button2->SetOnClickListener(button2Click);\r
- UIView::OnLongPressListener *button2LongPress = static_cast<UIView::OnLongPressListener *>(RecordListPresenter::GetInstance());\r
- button2->SetOnLongPressListener(button2LongPress);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(button2);\r
- button2->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label4 == nullptr)\r
- {\r
- label4 = new UILabel();\r
- }\r
- label4->SetPosition(88, 480);\r
- label4->Resize(200, 60);\r
- label4->SetViewId("label4");\r
- label4->SetStyle(STYLE_TEXT_FONT, 30);\r
- label4->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ // 设置标签\r
+ UILabel *RecordListView::SetUpLabel(LabelConfig &labelconfig)\r
+ {\r
+ UILabel *label = new UILabel();\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->SetText(labelconfig.text); // 内容\r
+ label->SetLineBreakMode(labelconfig.lineBreakMode); // 断行模式。\r
+ label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+ return label;\r
+ }\r
\r
- // Set additional property\r
- label4->SetText("录音 2");\r
- label4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label4->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
- label4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label4->SetRollSpeed(0);\r
- label4->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label4);\r
- label4->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label5 == nullptr)\r
- {\r
- label5 = new UILabel();\r
- }\r
- label5->SetPosition(301, 462);\r
- label5->Resize(200, 60);\r
- label5->SetViewId("label5");\r
- label5->SetStyle(STYLE_TEXT_FONT, 30);\r
- label5->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ bool RecordListView::SetUpRecordListViewLabel(void)\r
+ {\r
+ // 创建ScreenDurationTitleLabel\r
+ LabelConfig labelconfig = {\r
+ .left = 173,\r
+ .top = 52,\r
+ .width = 120,\r
+ .height = 35,\r
+ .fontSize = 30,\r
+ .lineHeigh = 35,\r
+ .text = "音乐列表",\r
+ .lineBreakMode = UILabel::LINE_BREAK_ADAPT,\r
+ };\r
+\r
+ RecordListViewTitleLabel = SetUpLabel(labelconfig);\r
+ if (nullptr == RecordListViewTitleLabel)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListViewTitleLabel is nullptr!");\r
+ return false;\r
+ }\r
+\r
+ labelconfig = {\r
+ .left = 33,\r
+ .top = 273,\r
+ .width = 400,\r
+ .height = 124,\r
+ .fontSize = 26,\r
+ .lineHeigh = 30,\r
+ .text = "当前音乐列表为空",\r
+ .lineBreakMode = UILabel::LINE_BREAK_ELLIPSIS,\r
+ };\r
+ RecordListViewAttentionLabel = SetUpLabel(labelconfig);\r
+ if (nullptr == RecordListViewAttentionLabel)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::RecordListViewAttentionLabel is nullptr!");\r
+ return false;\r
+ }\r
+ RecordListViewAttentionLabel->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
+\r
+ RecordListScrollView->Add(RecordListViewTitleLabel);\r
+ RecordListScrollView->Add(RecordListViewAttentionLabel);\r
+\r
+ return true;\r
+ }\r
\r
- // Set additional property\r
- label5->SetText("09:51");\r
- label5->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label5->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
- label5->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label5->SetRollSpeed(0);\r
- label5->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+ bool RecordListView::SetUpRecordingList(void)\r
+ {\r
+ // UIList 的适配器\r
+ p_RecordingListAdapter = new RecordingListAdapter();\r
+ p_RecordingListAdapter->SetItemClickListener(RecordingPresenter::GetInstance());\r
+ recordList = new UIList();\r
+ if (recordList == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordListView::recordList is nullptr!");\r
+ return false;\r
+ }\r
+ recordList->SetPosition(43, 120, 380, 120 + 120 * RecordingModel::GetInstance()->GetRecordingListNum());\r
+ recordList->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
+ recordList->SetAdapter(p_RecordingListAdapter);\r
+ InitRecordingInfo();\r
+ recordList->RefreshList();\r
+ RecordListScrollView->Add(recordList);\r
+ return true;\r
+ }\r
\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label5);\r
- label5->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label6 == nullptr)\r
- {\r
- label6 = new UILabel();\r
- }\r
- label6->SetPosition(280, 500);\r
- label6->Resize(200, 60);\r
- label6->SetViewId("label6");\r
- label6->SetStyle(STYLE_TEXT_FONT, 20);\r
- label6->SetStyle(STYLE_LINE_HEIGHT, 23);\r
+ /// @brief 添加录音到list\r
+ /// @param item\r
+ void RecordListView::AddRecordingToList(const RecordingListItem &item)\r
+ {\r
+ p_RecordingListAdapter->AddListItem(item);\r
+ }\r
\r
- // Set additional property\r
- label6->SetText("2023.05.20");\r
- label6->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label6->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
- label6->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label6->SetRollSpeed(0);\r
- label6->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label6);\r
- label6->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Button to App\r
- if (button3 == nullptr)\r
- {\r
- button3 = new UIButton();\r
- }\r
- button3->SetPosition(43, 563); // widget's left position and top position\r
- button3->Resize(380, 100); // widget's width and height\r
- button3->SetViewId("button3"); // Set style\r
- button3->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);\r
- button3->SetImageSrc(PNG_SETTING_BACKGROUND_IMAGE, nullptr);\r
- button3->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xffffffff, UIButton::PRESSED);\r
- button3->SetStyleForState(STYLE_BACKGROUND_OPA, 0x82, UIButton::PRESSED);\r
- button3->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
- // Add the CallBack about events\r
- UIView::OnClickListener *button3Click = static_cast<UIView::OnClickListener *>(RecordListPresenter::GetInstance());\r
- button3->SetOnClickListener(button3Click);\r
- UIView::OnLongPressListener *button3LongPress = static_cast<UIView::OnLongPressListener *>(RecordListPresenter::GetInstance());\r
- button3->SetOnLongPressListener(button3LongPress);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(button3);\r
- button3->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label7 == nullptr)\r
- {\r
- label7 = new UILabel();\r
- }\r
- label7->SetPosition(88, 596); // widget's left position and top position\r
- label7->Resize(200, 60); // widget's width and height\r
- label7->SetViewId("label7"); // Set style\r
- label7->SetStyle(STYLE_TEXT_FONT, 30);\r
- label7->SetStyle(STYLE_LINE_HEIGHT, 35);\r
- label7->SetText("录音 1");\r
- label7->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label7->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
- label7->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label7->SetRollSpeed(0);\r
- label7->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label7);\r
- label7->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label8 == nullptr)\r
+ // 把录音信息数据拿到存储到list中\r
+ void RecordListView::InitRecordingInfo(void)\r
+ {\r
+ const RecordingListItem *itemInfo = RecordingModel::GetInstance()->GetRecordinglistItems();\r
+ for (int i = 0; i < RecordingModel::GetInstance()->GetRecordingListNum(); i++)\r
{\r
- label8 = new UILabel();\r
+ AddRecordingToList(itemInfo[i]);\r
}\r
- label8->SetPosition(301, 582); // widget's left position and top position\r
- label8->Resize(200, 60); // widget's width and height\r
- label8->SetViewId("label8"); // Set style\r
- label8->SetStyle(STYLE_TEXT_FONT, 30);\r
- label8->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+ }\r
\r
- // Set additional property\r
- label8->SetText("12:33");\r
- label8->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label8->SetTextColor(Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xff));\r
- label8->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label8->SetRollSpeed(0);\r
- label8->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label8);\r
- label8->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add Label to App\r
- if (label9 == nullptr)\r
+ // 设置提醒标签是否可见\r
+ void RecordListView::IsVisibleLabel(bool value)\r
+ {\r
+ if (value == true)\r
{\r
- label9 = new UILabel();\r
+ RecordListViewAttentionLabel->SetVisible(true);\r
+ recordList->SetVisible(false); // 列表设置不可见\r
+ RecordListScrollView->SetVerticalScrollState(false);\r
}\r
- label9->SetPosition(280, 620); // widget's left position and top position\r
- label9->Resize(200, 60); // widget's width and height\r
- label9->SetViewId("label9"); // Set style\r
- label9->SetStyle(STYLE_TEXT_FONT, 20);\r
- label9->SetStyle(STYLE_LINE_HEIGHT, 23);\r
- // Set additional property\r
- label9->SetText("2022.04.21");\r
- label9->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- label9->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));\r
- label9->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- label9->SetRollSpeed(0);\r
- label9->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);\r
- // Add to scrollView1\r
- RecordListScrollView->Add(label9);\r
- label9->SetVisible(true);\r
- /********************************************************************************************************/\r
- // Add ImageView to App\r
- if (image6_ == nullptr)\r
+ else\r
{\r
- image6_ = new UIImageView();\r
+ RecordListViewAttentionLabel->SetVisible(false);\r
+ recordList->SetVisible(true); // 列表设置可见\r
+ RecordListScrollView->SetVerticalScrollState(true);\r
}\r
- image6_->SetPosition(183, 632); // widget's left position and top position\r
- image6_->Resize(100, 100); // widget's width and height\r
- image6_->SetViewId("image6"); // Set style\r
-\r
- // Set additional property\r
-\r
- // Add to scrollView1\r
- RecordListScrollView->Add(image6_);\r
- image6_->SetVisible(true);\r
}\r
\r
- void RecordListView::DeInitView()\r
+ UIScrollView *RecordListView::RecordListViewInit()\r
{\r
- if (container_ != nullptr)\r
+ if (!SetUpScrollView())\r
{\r
- container_->RemoveAll();\r
+ return nullptr;\r
}\r
- if (RecordListScrollView != nullptr)\r
- {\r
- delete RecordListScrollView;\r
- RecordListScrollView = nullptr;\r
- }\r
- if (RecordListlabel1 != nullptr)\r
- {\r
- delete RecordListlabel1;\r
- RecordListlabel1 = nullptr;\r
- }\r
- if (RecordImage != nullptr)\r
- {\r
- delete RecordImage;\r
- RecordImage = nullptr;\r
- }\r
- if (RecordButton != nullptr)\r
- {\r
- delete RecordButton;\r
- RecordButton = nullptr;\r
- }\r
- if (image6_ != nullptr)\r
- {\r
- delete image6_;\r
- image6_ = nullptr;\r
- }\r
- if (button3 != nullptr)\r
- {\r
- delete button3;\r
- button3 = nullptr;\r
- }\r
- if (button1 != nullptr)\r
- {\r
- delete button1;\r
- button1 = nullptr;\r
- }\r
- if (label3 != nullptr)\r
- {\r
- delete label3;\r
- label3 = nullptr;\r
- }\r
- if (label2 != nullptr)\r
- {\r
- delete label2;\r
- label2 = nullptr;\r
- }\r
- if (label1 != nullptr)\r
- {\r
- delete label1;\r
- label1 = nullptr;\r
- }\r
- if (button2 != nullptr)\r
- {\r
- delete button2;\r
- button2 = nullptr;\r
- }\r
- if (label9 != nullptr)\r
- {\r
- delete label9;\r
- label9 = nullptr;\r
- }\r
- if (label6 != nullptr)\r
- {\r
- delete label6;\r
- label6 = nullptr;\r
- }\r
- if (label8 != nullptr)\r
+\r
+ if (!SetUpRecordingList())\r
{\r
- delete label8;\r
- label8 = nullptr;\r
+ return nullptr;\r
}\r
- if (label5 != nullptr)\r
+\r
+ if (!SetUpRecordListViewLabel())\r
{\r
- delete label5;\r
- label5 = nullptr;\r
+ return nullptr;\r
}\r
- if (label7 != nullptr)\r
+ if (RecordingModel::GetInstance()->GetRecordingListNum() == 0)\r
{\r
- delete label7;\r
- label7 = nullptr;\r
+ IsVisibleLabel(true);\r
}\r
- if (label4 != nullptr)\r
+ else\r
{\r
- delete label4;\r
- label4 = nullptr;\r
+ IsVisibleLabel(false);\r
}\r
- delete container_;\r
- container_ = nullptr;\r
- }\r
\r
- void RecordListView::OnStart()\r
- {\r
- View<RecordListPresenter>::OnStart();\r
- InitView();\r
- RootView::GetInstance()->Add(container_);\r
- }\r
-\r
- void RecordListView::OnSetUpView()\r
- {\r
-\r
- View<RecordListPresenter>::OnSetUpView();\r
- Draw();\r
- }\r
-\r
- void RecordListView::OnTearDownView()\r
- {\r
-\r
- View<RecordListPresenter>::OnTearDownView();\r
- return;\r
+ initViewStatus = true;\r
+ return RecordListScrollView;\r
}\r
\r
- void RecordListView::OnStop()\r
- {\r
-\r
- View<RecordListPresenter>::OnStop();\r
- RootView::GetInstance()->RemoveAll();\r
- return;\r
- }\r
}
\ No newline at end of file
--- /dev/null
+#include "record/include/RecordingListAdapter.h"
+#include "record/include/RecordingListitemView.h"
+namespace OHOS
+{
+
+ RecordingListAdapter::RecordingListAdapter()
+ {
+ }
+
+ RecordingListAdapter::~RecordingListAdapter()
+ {
+ listData.clear();
+ }
+
+ uint16_t RecordingListAdapter::GetCount(void)
+ {
+ return listData.size();
+ }
+
+ void RecordingListAdapter::SetData(std::list<RecordingListItem> &data)
+ {
+ if (!listData.empty())
+ {
+ listData.clear();
+ }
+ std::list<RecordingListItem>::iterator it;
+ for (it = data.begin(); it != data.end(); it++)
+ {
+ listData.push_back(*it);
+ }
+ }
+
+ UIView *RecordingListAdapter::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<RecordingListItem>::iterator it = listData.begin();
+ for (int i = 0; i < index; i++)
+ {
+ it++;
+ }
+ RecordingListItem itemData = *it;
+ RecordingListitemView *item = nullptr;
+ // 5.根据传入的inView参数是否已经存在一个视图对象,若为空则创建一个新的RecordingListItemView对象,否则将inView转换成RecordingListItemView类型的指针
+ if (inView == nullptr)
+ {
+ item = new RecordingListitemView();
+
+ }
+ else
+ {
+ item = static_cast<RecordingListitemView *>(inView);
+ }
+ item->SetItemInfo(itemData);
+ item->SetOnClickListener(itemClickListener);
+ return item;
+ }
+
+ void RecordingListAdapter::AddListItem(const RecordingListItem &item)
+ {
+ listData.push_front(item);
+ }
+}
\ No newline at end of file
--- /dev/null
+#include "record/include/RecordingListitemView.h"
+#include "wearable_log.h"
+
+namespace OHOS
+{
+
+ RecordingListitemView::RecordingListitemView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingListitemView::RecordingListitemView");
+ SetPosition(43, 100, 380, 120);
+ SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+ SetStyle(STYLE_BACKGROUND_OPA, 255);
+ SetTouchable(true);
+ SetUpChild();
+ Add(&m_button);
+ Add(&m_recordId);
+ Add(&m_recordTotalTime);
+ Add(&m_recordTime);
+ }
+
+ RecordingListitemView::~RecordingListitemView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingListitemView::~RecordingListitemView");
+ Remove(&m_button);
+ Remove(&m_recordId);
+ Remove(&m_recordTotalTime);
+ Remove(&m_recordTime);
+ }
+
+ void RecordingListitemView::SetItemInfo(const RecordingListItem itemInfo)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingListitemView::SetItemInfo");
+ m_ItemInfo = itemInfo;
+ m_recordId.SetText(itemInfo.recordId);
+ m_recordTotalTime.SetText(itemInfo.recordTotalTime);
+ m_recordTime.SetText(itemInfo.recordTime);
+ }
+
+ void RecordingListitemView::SetUpChild()
+ {
+ OHOS::ColorType textColor = Color::GetColorFromRGBA(0xcc, 0xcc, 0xcc, 0xcc);
+ OHOS::ColorType subTextColor = Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff);
+
+ m_button.SetPosition(0, 0, 380, 100);
+ m_button.SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+ m_button.SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff4FC34C, UIButton::PRESSED);
+
+ SetLabelStyle(m_recordId, 45, 33, 96, 35, textColor, 30);
+ SetLabelStyle(m_recordTotalTime, 258, 19, 73, 35, textColor, 30);
+ SetLabelStyle(m_recordTime, 237, 57, 94, 23, subTextColor, 20);
+ }
+
+ void RecordingListitemView::SetLabelStyle(UILabel &label, int x, int y, int width, int height, OHOS::ColorType textColor, int fontSize)
+ {
+ label.SetPosition(x, y, width, height);
+ label.SetTextColor(textColor);
+ label.SetStyle(STYLE_TEXT_FONT, fontSize);
+ label.SetStyle(STYLE_LINE_HEIGHT, height);
+ label.SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+ label.SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ label.SetFont(DEFAULT_VECTOR_FONT_FILENAME, fontSize);
+ }
+
+ int RecordingListitemView::GetRecordingListIndex()
+ {
+ return m_ItemInfo.index;
+ }
+
+}
\ No newline at end of file
{
PlayButtonState = state;
}
-
- //播放器状态的控制
+ // 播放器状态的控制
int RecordingModel::RecordingPlayerStat()
{
/* ------------------------------ 1.设置播放器的回调函数。 ----------------------------- */
player_ = player;
}
+ std::string RecordingModel::GetCleanFileName(const std::string &filePath)
+ {
+ size_t found = filePath.find_last_of("/\\");
+
+ std::string fileName = (found != std::string::npos) ? filePath.substr(found + 1) : filePath;
+
+ if (fileName.size() >= 4 && fileName.substr(fileName.size() - 4) == ".mp3")
+ {
+ // 去除文件名的 .mp3 后缀
+ return fileName.substr(0, fileName.size() - 4);
+ }
+ return ""; // 返回空字符串表示不是 .mp3 文件
+ }
+
+ void RecordingModel::SearchFiles(const std::string &directory, std::vector<std::string> &fileNames, int &mp3FileCount)
+ {
+ DIR *dir;
+ struct dirent *ent;
+ if ((dir = opendir(directory.c_str())) != NULL)
+ {
+ while ((ent = readdir(dir)) != NULL)
+ {
+ std::string fileName = ent->d_name;
+ if (fileName != "." && fileName != "..")
+ {
+ std::string filePath = directory + fileName;
+ if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN) // 普通文件
+ {
+ std::string cleanFileName = GetCleanFileName(filePath);
+ if (!cleanFileName.empty())
+ {
+ mp3FileCount++;
+ fileNames.push_back(cleanFileName);
+ }
+ }
+ else if (ent->d_type == DT_DIR) // 目录
+ {
+ std::string subDirectory = directory + fileName + "/";
+ SearchFiles(subDirectory, fileNames, mp3FileCount); // 递归搜索子目录
+ }
+ }
+ }
+ closedir(dir);
+ }
+ }
+
+ /// @brief 初始化录音列表数据
+ void RecordingModel::InitRecordingListItem()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::InitRecordingListItem");
+ RecordingMp3FileCount = 0;
+ if (!fileNames.empty())
+ {
+ fileNames.clear();
+ }
+ SearchFiles(directory, fileNames, RecordingMp3FileCount);
+ if (RecordingMp3FileCount != 0)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Total .mp3 Files Count:%d\n", RecordingMp3FileCount);
+ for (const auto &filename : fileNames)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File Name::%s\n", filename.c_str());
+ }
+ Recordings = new RecordingListItem[RecordingMp3FileCount];
+ if (Recordings == NULL)
+ {
+ // 内存分配失败处理
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Recordings new fail!\n");
+ }
+ else
+ {
+ int cnt = 1;
+ // 对 Recordings 数组进行操作
+ for (int i = 0; i < RecordingMp3FileCount; i++)
+ {
+ Recordings[i] = {i,fileNames[i].c_str(),"09:51", "2022.04.21"};
+ //std::string Id = "recording" + std::to_string(cnt++);
+ //Recordings[i] = {i, Id.c_str(), "09:51", "2022.04.21"};
+ }
+ // 记得在不需要使用 Recordings 后释放内存
+ // free(Recordings);
+ }
+ }
+ }
+
+ /// @brief 获取存放录音的基本信息数组
+ /// @return
+ const RecordingListItem *RecordingModel::GetRecordinglistItems() const
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordinglistItems");
+ return Recordings;
+ }
+
+ /// @brief 获取录音数量
+ /// @return
+ uint8_t RecordingModel::GetRecordingListNum() const
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RecordingModel::GetRecordingListNum");
+ return RecordingMp3FileCount;
+ }
+
}
\ No newline at end of file
if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
(event.GetDeltaX() > 30) && (event.GetDeltaX() > (3 * MATH_ABS(event.GetDeltaY()))))\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_LIST);\r
+ \r
return true;\r
}\r
}\r
#include "graphic_math.h"\r
#include "string.h"\r
#include "record/include/RecordingPresenter.h"\r
+#include "record/include/RecordingModel.h"\r
+#include <wearable_log.h>\r
namespace OHOS\r
{\r
\r
\r
RecordingPresenter::RecordingPresenter()\r
{\r
-\r
g_pRecordPresenter = this;\r
}\r
\r
\r
void RecordingPresenter::OnStart()\r
{\r
-\r
+ // 初始化录音信息\r
+ RecordingModel::GetInstance()->InitRecordingListItem();\r
Presenter<RecordingView>::OnStart();\r
}\r
\r
void RecordingPresenter::OnPause(void)\r
{\r
-\r
Presenter<RecordingView>::OnPause();\r
}\r
\r
\r
bool RecordingPresenter::OnDrag(UIView &view, const DragEvent &event)\r
{\r
+ return true;\r
+ }\r
\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&\r
- (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))\r
+ bool RecordingPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
+ {\r
+ RecordingView *p_RecordingView = RecordingView::GetInstance();\r
+ if (p_RecordingView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView GetInstance fail");\r
+ return false;\r
+ }\r
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
+ for (int i = 0; i < MAX_RECORDINGVIEWID; i++)\r
+ {\r
+ if (p_RecordingView->GetRecordingViewScrollView(i) != nullptr &&\r
+ p_RecordingView->GetRecordingViewScrollView(i)->IsVisible() == true)\r
+ {\r
+ if (i == RECORDINGVIEW)\r
+ {\r
+ NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
+ }\r
+ else\r
+ {\r
+ p_RecordingView->ChangeView(i, RECORDINGVIEW);\r
+ }\r
+ break;\r
+ }\r
+ }\r
return true;\r
}\r
else if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
{\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_RECORD_LIST);\r
+ p_RecordingView->ChangeView(RECORDINGVIEW, RECORDINGLISTVIEW);\r
return true;\r
}\r
return false;\r
{\r
\r
// 将参数保存到数组中\r
- const char *args[] = {"01", "mp3", "16000", "1", "16", "/user/res/record/recording/record_test.mp3"};\r
+ const char *args[] = {"01", "mp3", "16000", "1", "16", "/user/res/record/recording/record.mp3"};\r
int argc = sizeof(args) / sizeof(args[0]);\r
\r
// 根据控件id查找是哪个控件触发了点击回调\r
{\r
if (initViewStatus == true)\r
{\r
- RecordingViewScrollView->RemoveAll();\r
+ RecordingViewScrollView[RECORDINGVIEW]->RemoveAll();\r
\r
RecordingViewImageAnimator->Stop();\r
delete RecordingViewImageAnimator;\r
- RecordingViewImageAnimator =nullptr;\r
+ RecordingViewImageAnimator = nullptr;\r
\r
delete RecordingViewTitleLabel;\r
- RecordingViewTitleLabel =nullptr;\r
+ RecordingViewTitleLabel = nullptr;\r
\r
delete RecordingViewButton;\r
- RecordingViewButton =nullptr;\r
+ RecordingViewButton = nullptr;\r
\r
delete AttentionLabel;\r
- AttentionLabel =nullptr;\r
+ AttentionLabel = nullptr;\r
\r
delete RECORD1_Image;\r
- RECORD1_Image =nullptr;\r
+ RECORD1_Image = nullptr;\r
\r
- delete RecordingViewScrollView;\r
- RecordingViewScrollView =nullptr;\r
+ delete p_RecordListView;\r
+ p_RecordListView = nullptr;\r
+\r
+ delete RecordingViewScrollView[RECORDINGVIEW];\r
+ RecordingViewScrollView[RECORDINGVIEW] = nullptr;\r
}\r
}\r
\r
// 录音视图scrollView初始化\r
bool RecordingView::SetUpScrollView(void)\r
{\r
- RecordingViewScrollView = new UIScrollView();\r
- if (RecordingViewScrollView == nullptr)\r
+ RecordingViewScrollView[RECORDINGVIEW] = new UIScrollView();\r
+ if (RecordingViewScrollView[RECORDINGVIEW] == nullptr)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingViewScrollView new fail!");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::RecordingViewScrollView[RECORDINGVIEW] new fail!");\r
return false;\r
}\r
- RecordingViewScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
- RecordingViewScrollView->SetScrollBlankSize(35);\r
- RecordingViewScrollView->SetReboundSize(50);\r
- RecordingViewScrollView->SetDirection(1);\r
+ RecordingViewScrollView[RECORDINGVIEW]->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+ RecordingViewScrollView[RECORDINGVIEW]->SetScrollBlankSize(35);\r
+ RecordingViewScrollView[RECORDINGVIEW]->SetReboundSize(50);\r
+ RecordingViewScrollView[RECORDINGVIEW]->SetDirection(1);\r
UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(RecordingPresenter::GetInstance());\r
if (draglistener == nullptr)\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::draglistener can not be nullptr!");\r
return false;\r
}\r
- RecordingViewScrollView->SetOnDragListener(draglistener);\r
- RecordingViewScrollView->SetTouchable(true);\r
- RecordingViewScrollView->SetDraggable(true);\r
+ RecordingViewScrollView[RECORDINGVIEW]->SetOnDragListener(draglistener);\r
+ RecordingViewScrollView[RECORDINGVIEW]->SetTouchable(true);\r
+ RecordingViewScrollView[RECORDINGVIEW]->SetDraggable(true);\r
return true;\r
}\r
\r
UIButton *button = new UIButton();\r
if (button == nullptr)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " DisplayBrightnessView::SetTheButton: button new fail!");\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " RecordingView::SetTheButton: button new fail!");\r
return nullptr;\r
}\r
button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);\r
initViewStatus = true;\r
}\r
\r
+ UIScrollView *RecordingView::GetRecordingViewScrollView(int i)\r
+ {\r
+ return RecordingViewScrollView[i];\r
+ }\r
+\r
+ // 切换到“录音”视图\r
+ bool RecordingView::ChangeRecordingView(int16_t thisView)\r
+ {\r
+ if (RecordingViewScrollView[thisView] == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::ChangeRecordingView");\r
+ RootView::GetInstance()->Add(RecordingViewScrollView[thisView]);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ // 切换到录音列表视图\r
+ bool RecordingView::ChangeRecordListView(int16_t thisView)\r
+ {\r
+ if (RecordingViewScrollView[thisView] == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView::ChangeRecordListView");\r
+ p_RecordListView = new RecordListView();\r
+ if (p_RecordListView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView:: new scrollView[%d] fail", thisView);\r
+ return false;\r
+ }\r
+ RecordingViewScrollView[thisView] = p_RecordListView->RecordListViewInit();\r
+ RootView::GetInstance()->Add(RecordingViewScrollView[thisView]);\r
+ }\r
+ return true;\r
+ }\r
+\r
+ /* -------------------------------------------------------------------------- */\r
+ // 1.RecordingViewMapper:结构体定义了一个将视图ID映射到特定成员函数指针的映射表。\r
+ struct RecordingViewMapper\r
+ {\r
+ const int16_t viewId;\r
+ bool (RecordingView::*func)(int16_t thisView);\r
+ };\r
+\r
+ // 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与RecordingViewMapper类中的特定成员函数指针进行了绑定。\r
+ static const RecordingViewMapper ViewMapper[] = {\r
+ {RECORDINGVIEW, &RecordingView::ChangeRecordingView},\r
+ {RECORDINGLISTVIEW, &RecordingView::ChangeRecordListView},\r
+ };\r
+\r
+ // 3.根据传入的interface参数执行相应视图ID关联的成员函数。\r
+ bool RecordingView::ClickFunc(int16_t interface)\r
+ {\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
+ // 4.切换视图\r
+ void RecordingView::ChangeView(int16_t hideView, int16_t showView)\r
+ {\r
+ if (hideView > MAX_RECORDINGVIEWID)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordingView:: RecordingViewID Overstep ones bounds");\r
+ return;\r
+ }\r
+ RecordingViewScrollView[hideView]->SetVisible(false);\r
+ ClickFunc(showView);\r
+ RecordingViewScrollView[showView]->SetVisible(true);\r
+ Draw();\r
+ }\r
+ /* -------------------------------------------------------------------------- */\r
+\r
void RecordingView::OnStart()\r
{\r
View<RecordingPresenter>::OnStart();\r
void RecordingView::OnSetUpView()\r
{\r
View<RecordingPresenter>::OnSetUpView();\r
- RecordingViewScrollView->Add(RecordingViewTitleLabel);\r
- RecordingViewScrollView->Add(RECORD1_Image);\r
- RecordingViewScrollView->Add(RecordingViewButton);\r
- RecordingViewScrollView->Add(AttentionLabel);\r
- RecordingViewScrollView->Add(RecordingViewImageAnimator);\r
- RootView::GetInstance()->Add(RecordingViewScrollView);\r
+ RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewTitleLabel);\r
+ RecordingViewScrollView[RECORDINGVIEW]->Add(RECORD1_Image);\r
+ RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewButton);\r
+ RecordingViewScrollView[RECORDINGVIEW]->Add(AttentionLabel);\r
+ RecordingViewScrollView[RECORDINGVIEW]->Add(RecordingViewImageAnimator);\r
+ RootView::GetInstance()->Add(RecordingViewScrollView[RECORDINGVIEW]);\r
Draw();\r
}\r
\r