#include "BaseView.h"\r
#include "View.h"\r
\r
-#include "components/ui_view_group.h"\r
#include "components/ui_label.h"\r
#include "components/ui_image_view.h"\r
#include "components/ui_button.h"\r
#include "components/ui_scroll_view.h"\r
-#include "animator/animator.h"\r
-#include "sys/time.h"\r
namespace OHOS\r
{\r
- static constexpr int16_t TIME_CONVERT = 60; // sec to min, and min to hor\r
- static constexpr int16_t TEXT_BUFFER_SIEZ = 20;\r
- class TimerAnimatorCallback : public AnimatorCallback\r
- {\r
- public:\r
- explicit TimerAnimatorCallback(UILabel *label) : label_(label) {}\r
- ~TimerAnimatorCallback() override {}\r
- void Callback(UIView *view) override;\r
-\r
- private:\r
- UILabel *label_ = nullptr;\r
- };\r
\r
- static const char *RECORD_GOING_BUTTON_VIEWID = "RECORD_GOING_BUTTON"; // 点击按钮后停止录音\r
- class RecordGoingPresenter;\r
- class RecordGoingView : public View<RecordGoingPresenter>\r
+ \r
+ class RecordGoingView\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
RecordGoingView();\r
virtual ~RecordGoingView();\r
static RecordGoingView *GetInstance(void);\r
-\r
- void OnStart() override;\r
- void OnSetUpView() override;\r
- void OnTearDownView() override;\r
- void OnStop() override;\r
+ UIScrollView *RecordGoingViewInit(void);\r
+ void ClearAll(void);\r
\r
private:\r
- UIView::OnClickListener *RECORD_GOING_BUTTON_CLICK{nullptr};\r
-\r
- void InitView(void);\r
- void DeInitView(void);\r
-\r
- //有bug\r
- TimerAnimatorCallback *callBack_ = nullptr;\r
- Animator *animator_ = nullptr;\r
-\r
- UIViewGroup *container_ = nullptr;\r
- UIScrollView *scrollView = nullptr;\r
- UILabel *RECORD_GOING_LABEL1 = nullptr;\r
- UIImageView *RECORD_GOING_IMAGE = nullptr;\r
- UIButton *RECORD_GOING_BUTTON = nullptr;\r
- UILabel *RECORD_GOING_LABEL2 = nullptr;\r
- UILabel *RECORD_GOING_LABEL3 = nullptr;\r
+ bool SetUpScrollView(void);\r
+ UILabel *SetUpLabel(LabelConfig &labelconfig); // 设置标签\r
+ bool SetRecordGoingViewLabel(void);\r
+ bool SetUpImageView(void);\r
+ bool SetUpButton(void);\r
+ UIScrollView *RecordGoingViewScrollView{nullptr};\r
+ UILabel *TitleLabel{nullptr}; // 标题\r
+ UILabel *RecordGoingLabel{nullptr}; // “录音中”\r
+ UILabel *Timer{nullptr}; // 显示录音时长\r
+ UIImageView *RECORD_GOING_IMAGE{nullptr};\r
+ UIButton *RECORD_GOING_BUTTON{nullptr};\r
+\r
+ \r
+ bool initViewStatus{false};\r
};\r
} // namespace OHOS\r
#endif
\ No newline at end of file
#include "record/include/RecordGoingView.h"\r
-#include "record/include/RecordGoingPresenter.h"\r
+#include "record/include/RecordingPresenter.h"\r
#include "UiConfig.h"\r
-\r
+#include "wearable_log.h"\r
namespace OHOS\r
{\r
\r
\r
RecordGoingView::RecordGoingView()\r
{\r
-\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::RecordGoingView");\r
g_pRecordGoingView = this;\r
}\r
\r
RecordGoingView::~RecordGoingView()\r
{\r
- DeInitView();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::~RecordGoingView");\r
+ ClearAll();\r
g_pRecordGoingView = nullptr;\r
}\r
\r
RecordGoingView *RecordGoingView::GetInstance()\r
{\r
-\r
return g_pRecordGoingView;\r
}\r
- static void GetTime(char *buf, int len)\r
+\r
+ void RecordGoingView::ClearAll()\r
{\r
- struct timeval tv;\r
- gettimeofday(&tv, NULL);\r
- uint32_t second = tv.tv_sec % TIME_CONVERT;\r
- uint32_t minute = tv.tv_sec / TIME_CONVERT;\r
- uint32_t hour = (minute / TIME_CONVERT) % 24; // 24: 24 hours per day\r
- // uint32_t realMilliSecond = tv.tv_usec / USEC_TO_MILLI;\r
- minute = minute % TIME_CONVERT;\r
- snprintf(buf, len, "%02d : %02d : %02d", hour, minute, second);\r
- // sprintf_s(buf, len, "%02d : %02d : %02d", hour, minute, second);\r
+ if (initViewStatus == true)\r
+ {\r
+ RecordGoingViewScrollView->RemoveAll();\r
+\r
+ delete TitleLabel;\r
+ TitleLabel = nullptr;\r
+\r
+ delete RECORD_GOING_IMAGE;\r
+ RECORD_GOING_IMAGE = nullptr;\r
+\r
+ delete RECORD_GOING_BUTTON;\r
+ RECORD_GOING_BUTTON = nullptr;\r
+\r
+ delete Timer;\r
+ Timer = nullptr;\r
+\r
+ delete RecordGoingLabel;\r
+ RecordGoingLabel = nullptr;\r
+\r
+ delete RecordGoingViewScrollView;\r
+ RecordGoingViewScrollView = nullptr;\r
+ }\r
}\r
\r
- void TimerAnimatorCallback::Callback(UIView *view)\r
+ bool RecordGoingView::SetUpScrollView(void)\r
{\r
- (void)view;\r
- char buf[TEXT_BUFFER_SIEZ] = {0};\r
- GetTime(buf, TEXT_BUFFER_SIEZ);\r
- label_->SetText(buf);\r
- RootView::GetInstance()->Invalidate();\r
+ RecordGoingViewScrollView = new UIScrollView();\r
+ if (RecordGoingViewScrollView == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::RecordGoingViewScrollView new fail!");\r
+ return false;\r
+ }\r
+ UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(RecordingPresenter::GetInstance());\r
+ if (draglistener == nullptr)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::draglistener can not be nullptr!");\r
+ return false;\r
+ }\r
+ RecordGoingViewScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+ RecordGoingViewScrollView->SetTouchable(true);\r
+ RecordGoingViewScrollView->SetDraggable(true);\r
+ return true;\r
}\r
\r
- void RecordGoingView::InitView()\r
+ UILabel *RecordGoingView::SetUpLabel(LabelConfig &labelconfig) // 设置标签\r
{\r
- if (container_ == nullptr)\r
+ UILabel *label = new UILabel();\r
+ if (label == nullptr)\r
{\r
- container_ = new UIViewGroup();\r
- container_->SetPosition(0, 0, 466, 466);\r
- container_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
- container_->SetTouchable(true);\r
+ return nullptr;\r
}\r
- if (scrollView == nullptr)\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
+ bool RecordGoingView::SetRecordGoingViewLabel(void)\r
+ {\r
+ LabelConfig labelconfig = {\r
+ .left = 188,\r
+ .top = 52,\r
+ .width = 90,\r
+ .height = 35,\r
+ .fontSize = 30,\r
+ .lineHeigh = 35,\r
+ .text = "录音机",\r
+ .lineBreakMode = UILabel::LINE_BREAK_ADAPT,\r
+ };\r
+\r
+ TitleLabel = SetUpLabel(labelconfig);\r
+ if (nullptr == TitleLabel)\r
{\r
- scrollView = new UIScrollView();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::SetRecordGoingViewLabel is nullptr!");\r
+ return false;\r
+ }\r
+ labelconfig.top = 370;\r
+ labelconfig.text = "录音中";\r
+ RecordGoingLabel = SetUpLabel(labelconfig);\r
+ if (nullptr == RecordGoingLabel)\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::RecordGoingLabel is nullptr!");\r
+ return false;\r
}\r
- scrollView->SetPosition(0, 0);\r
- scrollView->Resize(466, 466);\r
- scrollView->SetViewId("scrollView");\r
- scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
-\r
- // Add to rootView\r
- container_->Add(scrollView);\r
- scrollView->SetVisible(true);\r
\r
- // Add Label to App\r
- if (RECORD_GOING_LABEL1 == nullptr)\r
+ labelconfig = {\r
+ .left = 83,\r
+ .top = 290,\r
+ .width = 300,\r
+ .height = 77,\r
+ .fontSize = 65,\r
+ .lineHeigh = 76,\r
+ .text = "00:00:12",\r
+ .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+ };\r
+ Timer = SetUpLabel(labelconfig);\r
+ if (nullptr == Timer)\r
{\r
- RECORD_GOING_LABEL1 = new UILabel();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::Timer is nullptr!");\r
+ return false;\r
}\r
- RECORD_GOING_LABEL1->SetPosition(188, 52);\r
- RECORD_GOING_LABEL1->Resize(90, 35);\r
- RECORD_GOING_LABEL1->SetViewId("RECORD_GOING_LABEL1");\r
- RECORD_GOING_LABEL1->SetStyle(STYLE_TEXT_FONT, 30);\r
- RECORD_GOING_LABEL1->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-\r
- // Set additional property\r
- RECORD_GOING_LABEL1->SetText("录音机");\r
- RECORD_GOING_LABEL1->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- RECORD_GOING_LABEL1->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- RECORD_GOING_LABEL1->SetRollSpeed(0);\r
- RECORD_GOING_LABEL1->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-\r
- // Add to rootView\r
- scrollView->Add(RECORD_GOING_LABEL1);\r
- RECORD_GOING_LABEL1->SetVisible(true);\r
-\r
- // Add ImageView to App\r
+\r
+ return true;\r
+ }\r
+\r
+ bool RecordGoingView::SetUpImageView(void)\r
+ {\r
+ RECORD_GOING_IMAGE = new UIImageView();\r
if (RECORD_GOING_IMAGE == nullptr)\r
{\r
- RECORD_GOING_IMAGE = new UIImageView();\r
}\r
- RECORD_GOING_IMAGE->SetPosition(158, 129);\r
- RECORD_GOING_IMAGE->Resize(150, 150);\r
- RECORD_GOING_IMAGE->SetViewId("RECORD_GOING_IMAGE");\r
+ RECORD_GOING_IMAGE->SetPosition(158, 129, 150, 150);\r
RECORD_GOING_IMAGE->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
RECORD_GOING_IMAGE->SetStyle(STYLE_BORDER_RADIUS, 15);\r
RECORD_GOING_IMAGE->SetSrc(PNG_RECORD3_IMAGE);\r
\r
- // Add to rootView\r
- scrollView->Add(RECORD_GOING_IMAGE);\r
- RECORD_GOING_IMAGE->SetVisible(true);\r
+ return true;\r
+ }\r
\r
- // Add Button to App\r
+ bool RecordGoingView::SetUpButton(void)\r
+ {\r
+ RECORD_GOING_BUTTON = new UIButton();\r
if (RECORD_GOING_BUTTON == nullptr)\r
{\r
- RECORD_GOING_BUTTON = new UIButton();\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RecordGoingView::RECORD_GOING_BUTTON new fail!");\r
}\r
- RECORD_GOING_BUTTON->SetPosition(210, 180);\r
- RECORD_GOING_BUTTON->Resize(60, 60);\r
+ RECORD_GOING_BUTTON->SetPosition(210, 180, 60, 60);\r
RECORD_GOING_BUTTON->SetViewId(RECORD_GOING_BUTTON_VIEWID);\r
RECORD_GOING_BUTTON->SetStyle(STYLE_BACKGROUND_COLOR, 0xffff5a36);\r
RECORD_GOING_BUTTON->SetStyle(STYLE_BORDER_RADIUS, 20);\r
\r
- // Set additional property\r
RECORD_GOING_BUTTON->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);\r
RECORD_GOING_BUTTON->SetStyleForState(STYLE_BORDER_RADIUS, 20, UIButton::PRESSED);\r
- // Add the CallBack about events\r
- RECORD_GOING_BUTTON_CLICK = static_cast<UIView::OnClickListener *>(RecordGoingPresenter::GetInstance());\r
- RECORD_GOING_BUTTON->SetOnClickListener(RECORD_GOING_BUTTON_CLICK);\r
- // Add to rootView\r
- scrollView->Add(RECORD_GOING_BUTTON);\r
- RECORD_GOING_BUTTON->SetVisible(true);\r
-\r
- // Add Label to App\r
- if (RECORD_GOING_LABEL2 == nullptr)\r
- {\r
- RECORD_GOING_LABEL2 = new UILabel();\r
- }\r
- RECORD_GOING_LABEL2->SetPosition(107, 290);\r
- RECORD_GOING_LABEL2->Resize(253, 77);\r
- RECORD_GOING_LABEL2->SetViewId("RECORD_GOING_LABEL2");\r
- RECORD_GOING_LABEL2->SetStyle(STYLE_TEXT_FONT, 65);\r
- RECORD_GOING_LABEL2->SetStyle(STYLE_LINE_HEIGHT, 77);\r
-\r
- // Set additional property\r
- RECORD_GOING_LABEL2->SetText("00:00:00");\r
- RECORD_GOING_LABEL2->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- RECORD_GOING_LABEL2->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- RECORD_GOING_LABEL2->SetRollSpeed(0);\r
- RECORD_GOING_LABEL2->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 65);\r
-\r
- callBack_ = new TimerAnimatorCallback(RECORD_GOING_LABEL2);\r
- animator_ = new Animator(callBack_, RECORD_GOING_LABEL2, 0, true);\r
- animator_->Start();\r
- // Add to rootView\r
- container_->Add(RECORD_GOING_LABEL2);\r
- RECORD_GOING_LABEL2->SetVisible(true);\r
-\r
- // Add Label to App\r
- if (RECORD_GOING_LABEL3 == nullptr)\r
- {\r
- RECORD_GOING_LABEL3 = new UILabel();\r
- }\r
- RECORD_GOING_LABEL3->SetPosition(188, 370);\r
- RECORD_GOING_LABEL3->Resize(90, 95);\r
- RECORD_GOING_LABEL3->SetViewId("RECORD_GOING_LABEL3");\r
- RECORD_GOING_LABEL3->SetStyle(STYLE_TEXT_FONT, 30);\r
- RECORD_GOING_LABEL3->SetStyle(STYLE_LINE_HEIGHT, 35);\r
-\r
- // Set additional property\r
- RECORD_GOING_LABEL3->SetText("录音中");\r
- RECORD_GOING_LABEL3->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
- RECORD_GOING_LABEL3->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
- RECORD_GOING_LABEL3->SetRollSpeed(0);\r
- RECORD_GOING_LABEL3->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-\r
- // Add to rootView\r
- scrollView->Add(RECORD_GOING_LABEL3);\r
- RECORD_GOING_LABEL3->SetVisible(true);\r
+\r
+ UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(RecordingPresenter::GetInstance());\r
+ RECORD_GOING_BUTTON->SetOnClickListener(clickListener);\r
+ return true;\r
}\r
\r
- void RecordGoingView::DeInitView()\r
+ UIScrollView *RecordGoingView::RecordGoingViewInit()\r
{\r
- if (container_ != nullptr)\r
- {\r
- container_->RemoveAll();\r
- }\r
- if (scrollView != nullptr)\r
+ if (!SetUpScrollView())\r
{\r
- scrollView->RemoveAll();\r
- delete scrollView;\r
- scrollView = nullptr;\r
+ return nullptr;\r
}\r
- if (RECORD_GOING_LABEL1 != nullptr)\r
- {\r
- delete RECORD_GOING_LABEL1;\r
- RECORD_GOING_LABEL1 = nullptr;\r
- }\r
- if (RECORD_GOING_IMAGE != nullptr)\r
- {\r
- delete RECORD_GOING_IMAGE;\r
- RECORD_GOING_IMAGE = nullptr;\r
- }\r
- if (RECORD_GOING_BUTTON != nullptr)\r
+\r
+ if (!SetRecordGoingViewLabel())\r
{\r
- delete RECORD_GOING_BUTTON;\r
- RECORD_GOING_BUTTON = nullptr;\r
+ return nullptr;\r
}\r
- if (RECORD_GOING_LABEL2 != nullptr)\r
+\r
+ if (!SetUpImageView())\r
{\r
- delete RECORD_GOING_LABEL2;\r
- RECORD_GOING_LABEL2 = nullptr;\r
+ return nullptr;\r
}\r
- if (RECORD_GOING_LABEL3 != nullptr)\r
+\r
+ if (!SetUpButton())\r
{\r
- delete RECORD_GOING_LABEL3;\r
- RECORD_GOING_LABEL3 = nullptr;\r
+ return nullptr;\r
}\r
- delete container_;\r
- container_ = nullptr;\r
- }\r
\r
- void RecordGoingView::OnStart()\r
- {\r
- View<RecordGoingPresenter>::OnStart();\r
- InitView();\r
- RootView::GetInstance()->Add(container_);\r
+ /* ----------------------------------- Add ---------------------------------- */\r
+ RecordGoingViewScrollView->Add(TitleLabel);\r
+ RecordGoingViewScrollView->Add(RECORD_GOING_IMAGE);\r
+ RecordGoingViewScrollView->Add(RECORD_GOING_BUTTON);\r
+ RecordGoingViewScrollView->Add(Timer);\r
+ RecordGoingViewScrollView->Add(RecordGoingLabel);\r
+ initViewStatus = true;\r
+ return RecordGoingViewScrollView;\r
}\r
\r
- void RecordGoingView::OnSetUpView()\r
- {\r
- View<RecordGoingPresenter>::OnSetUpView();\r
- Draw();\r
- }\r
-\r
- void RecordGoingView::OnTearDownView()\r
- {\r
-\r
- View<RecordGoingPresenter>::OnTearDownView();\r
- return;\r
- }\r
-\r
- void RecordGoingView::OnStop()\r
- {\r
- animator_->Stop();\r
- View<RecordGoingPresenter>::OnStop();\r
- RootView::GetInstance()->RemoveAll();\r
- return;\r
- }\r
}
\ No newline at end of file