1 #include "notification_manager.h"
2 #include "wearable_log.h"
3 #include "components/ui_button.h"
4 #include "components/ui_image_view.h"
5 #include "components/ui_label_ext.h"
6 #include "components/ui_scroll_view.h"
7 #include "ui_resource_string.h"
8 #include "uicomponents/UIComponents.h"
10 #include <broadcast_feature.h>
11 #include <service/graphic_service.h>
13 #include "ConfigModel.h"
14 #include "uiservice/include/ui_service.h"
15 #include "vibrator_service.h"
16 #include "custom_runtime.h"
17 #include "system/include/SystemLogModel.h"
18 #include <custom_utils.h>
19 #include "sedentaryReminder_notification.h"
24 UIViewGroup *SedentaryReminderGroupView{nullptr};
25 UIScrollView *SedentaryReminderScrollView{nullptr};
26 UILabelExt *SedentaryReminderTitleLabel{nullptr}; // 标题: 久坐提醒
27 UIImageView *SedentaryReminderImage{nullptr};
28 UILabelExt *SedentaryReminderNoteLabel{nullptr}; // 久坐提醒note
29 UILabelExt *SedentaryReminderLabel{nullptr};
30 UIButton *SedentaryReminderButton{nullptr};
32 static constexpr const int X_DRAG_OFFSET = 20;
33 static constexpr const int DOUBLES = 2;
35 static constexpr const char *SEDENTARY_REMINDER_GROUPVIEWID = "sedentary_reminder_groupviewid";
36 static constexpr const char *SEDENTARY_REMINDER_BUTTONVIEWID = "sedentary_reminder_buttonviewid";
38 SedentaryReminderViewEventListener::SedentaryReminderViewEventListener()
40 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SedentaryReminderViewEventListener::SedentaryReminderViewEventListener");
43 SedentaryReminderViewEventListener::~SedentaryReminderViewEventListener()
45 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SedentaryReminderViewEventListener::~SedentaryReminderViewEventListener");
48 SedentaryReminderViewEventListener &SedentaryReminderViewEventListener::GetInstance()
50 static SedentaryReminderViewEventListener instance;
54 bool SedentaryReminderViewEventListener::OnRelease(UIView &view, const ReleaseEvent &event)
56 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SedentaryReminderViewEventListener::OnRelease");
58 std::string viewId = view.GetViewId();
59 if (viewId == SEDENTARY_REMINDER_BUTTONVIEWID)
61 NotificationManager::GetInstance()->StopNotify();
67 bool SedentaryReminderViewEventListener::OnDrag(UIView &view, const DragEvent &event)
69 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SedentaryReminderViewEventListener::OnDrag");
71 if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
73 SedentaryReminderViewEventListener::X_DRAG_FLAG = true;
78 bool SedentaryReminderViewEventListener::OnDragEnd(UIView &view, const DragEvent &event)
80 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SedentaryReminderViewEventListener::OnDragEnd");
81 std::string viewId = view.GetViewId();
82 if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && SedentaryReminderViewEventListener::X_DRAG_FLAG)
84 if (viewId == SEDENTARY_REMINDER_GROUPVIEWID)
86 NotificationManager::GetInstance()->StopNotify();
88 SedentaryReminderViewEventListener::X_DRAG_FLAG = false;
94 void SedentaryReminderViewEventListener::record_sedentary_reminder_log(void)
96 // popup_windows_log_data systemlog;
97 // systemlog.timestamp = SystemLogModel::GetInstance()->GetCurrentTime();
98 // systemlog.type = popup_windows_type::SEDENTARY_REMINDER;
99 // SystemLogModel::GetInstance()->save_popup_windows_log(systemlog);
101 do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_POPUP_WINDOWS_DATA_LIST, &type, sizeof(type));
104 static std::string UpdateNoteLabelText(UILabelExt *&label, const std::string &newText, int id)
106 if (label == nullptr)
111 UILabelExt *labelext = new UILabelExt();
112 labelext->SetTextId(id);
113 std::string text = labelext->GetText();
115 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "UpdateLabel:%s->%s\r\n", text.c_str(), newText.c_str());
118 size_t pos = text.find("XX");
119 if (pos != std::string::npos)
122 text.replace(pos, 2, newText); // 2 是标志"XX"的长度
123 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "newText:%s\r\n", text.c_str());
124 label->SetText(text.c_str());
128 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "找不到变量标志位XX,请注意是否已经被修改!");
136 void SedentaryReminderViewEventListener::SetSedentaryReminderNoteIntervalTime(int interval)
138 UpdateNoteLabelText(SedentaryReminderNoteLabel, std::to_string(interval), STR_SEDENTARY_REMINDER_NOTE);
142 int SedentaryReminderViewEventListener::GetIntervalTime()
144 interval = ConfigModel::GetInstance()->GetSedentaryInterval();
149 UIViewGroup *CreateSedentaryReminderView(void)
151 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreateSedentaryReminderView(void)");
152 if (SedentaryReminderGroupView == nullptr)
154 SedentaryReminderGroupView = new UIViewGroup();
155 if (SedentaryReminderGroupView == nullptr)
157 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] SedentaryReminderGroupView new fail!!");
160 SedentaryReminderGroupView->SetPosition(0, 0, 466, 466);
161 SedentaryReminderGroupView->SetViewId(SEDENTARY_REMINDER_GROUPVIEWID);
162 SedentaryReminderGroupView->SetTouchable(true);
163 SedentaryReminderGroupView->SetDraggable(true);
164 UIView::OnDragListener *dragListener = static_cast<UIView::OnDragListener *>(&SedentaryReminderViewEventListener::GetInstance());
165 if (dragListener == nullptr)
167 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] dragListener new fail!!");
170 SedentaryReminderGroupView->SetOnDragListener(dragListener);
171 /* -------------------------------------------------------------------------- */
172 if (SedentaryReminderScrollView == nullptr)
174 SedentaryReminderScrollView = new UIScrollView();
175 if (SedentaryReminderScrollView == nullptr)
177 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SedentaryReminderScrollView new fail");
181 SedentaryReminderScrollView->SetPosition(0, 0, 466, 466);
182 SedentaryReminderScrollView->SetThrowDrag(true);
183 SedentaryReminderScrollView->SetDraggable(true);
184 SedentaryReminderScrollView->SetTouchable(true);
185 SedentaryReminderScrollView->SetReboundSize(30);
186 SedentaryReminderScrollView->SetScrollBlankSize(30);
187 SedentaryReminderScrollView->SetSwipeACCLevel(200); // 800: compensation distance
188 SedentaryReminderScrollView->SetDragACCLevel(5); // 5: drag acceleration
189 SedentaryReminderScrollView->SetMaxScrollDistance(1000);
190 SedentaryReminderScrollView->SetDirection(UIScrollView::VERTICAL);
191 SedentaryReminderScrollView->RequestFocus();
192 SedentaryReminderScrollView->SetRotateFactor(1.0);
193 /* ------------------------- SedentaryReminderTitleLabel ------------------------ */
194 SedentaryReminderTitleLabel = new UILabelExt();
195 if (SedentaryReminderTitleLabel == nullptr)
197 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] SedentaryReminderTitleLabel new fail!!");
200 SedentaryReminderTitleLabel->SetPosition(83, 52, 300, 35);
201 SedentaryReminderTitleLabel->SetStyle(STYLE_TEXT_FONT, 30);
202 SedentaryReminderTitleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
204 SedentaryReminderTitleLabel->SetTextId(STR_SEDENTARY_REMINDER);
206 SedentaryReminderTitleLabel->SetText("久坐提醒");
208 SedentaryReminderTitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
209 SedentaryReminderTitleLabel->SetRollSpeed(23);
210 SedentaryReminderTitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
211 SedentaryReminderTitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
212 /* --------------------------- SedentaryReminderImage --------------------------- */
213 SedentaryReminderImage = new UIImageView();
214 if (SedentaryReminderImage == nullptr)
216 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] SedentaryReminderImage new fail!!");
219 SedentaryReminderImage->SetPosition(193, 130, 80, 80);
220 SedentaryReminderImage->SetSrc("/user/res/SedentaryReminder/SedentaryReminder.bin");
221 /* ------------------------- SedentaryReminderNoteLabel ------------------------- */
222 SedentaryReminderNoteLabel = new UILabelExt();
223 if (SedentaryReminderNoteLabel == nullptr)
225 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] SedentaryReminderNoteLabel new fail!!");
228 SedentaryReminderNoteLabel->SetPosition(53, 248, 360, 70);
229 SedentaryReminderNoteLabel->SetStyle(STYLE_TEXT_FONT, 30);
230 SedentaryReminderNoteLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
232 // SetLabelId(SedentaryReminderNoteLabel, STR_SEDENTARY_REMINDER_NOTE);
233 SedentaryReminderNoteLabel->SetTextId(STR_SEDENTARY_REMINDER_NOTE);
235 // UpdateLabel(SedentaryReminderNoteLabel,"1",STR_SEDENTARY_REMINDER_NOTE);
236 SedentaryReminderViewEventListener::GetInstance().SetSedentaryReminderNoteIntervalTime(SedentaryReminderViewEventListener::GetInstance().GetIntervalTime());
237 SedentaryReminderNoteLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
238 SedentaryReminderNoteLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
239 SedentaryReminderNoteLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
240 /* --------------------------- SedentaryReminderButton -------------------------- */
241 SedentaryReminderButton = new UIButton();
242 if (SedentaryReminderButton == nullptr)
244 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] SedentaryReminderButton new fail!!");
247 SedentaryReminderButton->SetPosition(0, 366, 466, 100);
248 SedentaryReminderButton->SetViewId(SEDENTARY_REMINDER_BUTTONVIEWID);
249 const char *buttonImgSrc = "/user/res/466x100button.bin";
250 SedentaryReminderButton->SetImageSrc(buttonImgSrc, buttonImgSrc);
251 SedentaryReminderButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff0b1928, UIButton::PRESSED);
252 UIView::OnTouchListener *TouchListener = static_cast<UIView::OnTouchListener *>(&SedentaryReminderViewEventListener::GetInstance());
253 if (TouchListener == nullptr)
255 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] TouchListener new fail!!");
258 SedentaryReminderButton->SetOnTouchListener(TouchListener);
259 /* --------------------------- SedentaryReminderLabel --------------------------- */
260 SedentaryReminderLabel = new UILabelExt();
261 if (SedentaryReminderLabel == nullptr)
263 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[CreateSedentaryReminderView] SedentaryReminderLabel new fail!!");
266 SedentaryReminderLabel->SetPosition(133, 399, 200, 35);
267 SedentaryReminderLabel->SetStyle(STYLE_TEXT_FONT, 30);
268 SedentaryReminderLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
270 SedentaryReminderLabel->SetTextId(STR_KONW);
272 SedentaryReminderLabel->SetText("知道了");
274 SedentaryReminderLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
275 SedentaryReminderLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
276 SedentaryReminderLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
277 /* ----------------------------------- Add ---------------------------------- */
278 SedentaryReminderScrollView->Add(SedentaryReminderTitleLabel);
279 SedentaryReminderScrollView->Add(SedentaryReminderImage);
280 SedentaryReminderScrollView->Add(SedentaryReminderNoteLabel);
281 SedentaryReminderScrollView->Add(SedentaryReminderButton);
282 SedentaryReminderScrollView->Add(SedentaryReminderLabel);
283 SedentaryReminderGroupView->Add(SedentaryReminderScrollView);
285 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Create SedentaryReminderView succeed!!");
287 /* -------------------------------------------------------------------------- */
288 ScreenTurnOn(10 * 1000); // 显示时长10s
289 if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb() && (!uapi_sleep_mode_flag_get()))
291 custom_VibratorFunc_int(5);
293 /* -------------------------------------------------------------------------- */
294 NotificationManager::GetInstance()->RegisterNotifyCleanupFunction(FreeSedentaryReminderView);
295 return SedentaryReminderGroupView;
299 void FreeSedentaryReminderView(void)
301 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FreeSedentaryReminderView(void)");
302 if (SedentaryReminderGroupView != nullptr)
304 SedentaryReminderGroupView->RemoveAll();
305 if (SedentaryReminderScrollView != nullptr)
307 SedentaryReminderScrollView->RemoveAll();
308 delete SedentaryReminderTitleLabel;
309 SedentaryReminderTitleLabel = nullptr;
311 delete SedentaryReminderImage;
312 SedentaryReminderImage = nullptr;
314 delete SedentaryReminderNoteLabel;
315 SedentaryReminderNoteLabel = nullptr;
317 delete SedentaryReminderButton;
318 SedentaryReminderButton = nullptr;
320 delete SedentaryReminderLabel;
321 SedentaryReminderLabel = nullptr;
323 SedentaryReminderScrollView->ClearFocus();
324 delete SedentaryReminderScrollView;
325 SedentaryReminderScrollView = nullptr;
327 RootView::GetInstance()->Remove(SedentaryReminderGroupView);
328 delete SedentaryReminderGroupView;
329 SedentaryReminderGroupView = nullptr;
330 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Free SedentaryReminderView succeed!!");