26ba3227b2e697c19f4ee5b6b62db8b189b19b4f
[mirrors/FD230.git] /
1 /*
2  * @Author: luozheng 1732036298@qq.com
3  * @Date: 2024-05-07 11:26:06
4  * @LastEditors: luozheng 1732036298@qq.com
5  * @LastEditTime: 2024-11-05 14:52:23
6  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/RespiratoryTraining/src/RespiratoryTrainingPresenter.cpp
7  */
8
9 #include "AppViewIDs.h"
10 #include "NativeAbility.h"
11 #include "respiratorytraining/include/RespiratoryTrainingPresenter.h"
12 #include "respiratorytraining/include/RespiratoryTrainingView.h"
13 #include "common/key_code.h"
14 #include <custom_utils.h>
15 #include "UiConfig.h"
16 #include <iostream>
17 #include <string>
18 #include "respiratorytraining/include/RespiratoryTrainingModel.h"
19 #include "gfx_utils/mem_check.h"
20 #include "map"
21 #include "ui_resource_string.h"
22 #include "NativeRegisterManager.h"
23 namespace OHOS
24 {
25     REGIST_MENU_PRO(VIEW_RESPIRATORY_TRAINING, RespiratoryTrainingView, RespiratoryTrainingPresenter,
26                     PNG_APPLIST_BREATHE_IMAGE_BIG, PNG_APPLIST_BREATHE_IMAGE, PNG_APPLIST_BREATHE_IMAGE, "呼吸训练", STR_BREATH_TRAINING);
27
28     // 当前Presenter属性实例化的内存指针
29     static RespiratoryTrainingPresenter *g_pRespiratoryTrainingPresenter = nullptr;
30
31     RespiratoryTrainingPresenter::RespiratoryTrainingPresenter()
32     {
33         g_pRespiratoryTrainingPresenter = this;
34 #ifdef MEM_CHECK
35         MemCheck::GetInstance()->EnableLeakCheck(true);
36 #endif
37     }
38
39     RespiratoryTrainingPresenter::~RespiratoryTrainingPresenter()
40     {
41         g_pRespiratoryTrainingPresenter = nullptr;
42 #ifdef MEM_CHECK
43         MemCheck::GetInstance()->EnableLeakCheck(false);
44 #endif
45     }
46
47     RespiratoryTrainingPresenter *RespiratoryTrainingPresenter::GetInstance()
48     {
49         return g_pRespiratoryTrainingPresenter;
50     }
51
52     void RespiratoryTrainingPresenter::OnStart()
53     {
54         // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
55     }
56
57     void RespiratoryTrainingPresenter::OnPause(void)
58     {
59         Presenter<RespiratoryTrainingView>::OnPause();
60     }
61
62     void RespiratoryTrainingPresenter::OnResume(void)
63     {
64         Presenter<RespiratoryTrainingView>::OnResume();
65     }
66
67     void RespiratoryTrainingPresenter::OnStop(void)
68     {
69         ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
70         RespiratoryTrainingModel::GetInstance().RT_StopTimer();
71         RespiratoryTrainingModel::GetInstance().ResumeStatus();
72     }
73
74     bool RespiratoryTrainingPresenter::OnClick(UIView &view, const ClickEvent &event)
75     {
76         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnClick");
77         std::string viewId = view.GetViewId();
78         if (viewId == RTCLABELBUTTON)
79         {
80             NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
81             return true;
82         }
83         std::map<std::string, int> viewMap = {
84             {TRAINING_DURATION_ONE_MIN, 1},
85             {TRAINING_DURATION_TWO_MIN, 2},
86             {TRAINING_DURATION_THREE_MIN, 3},
87             {TRAINING_DURATION_FOUR_MIN, 4},
88             {TRAINING_DURATION_FIVE_MIN, 5},
89         };
90         auto it = viewMap.find(viewId);
91         if (it != viewMap.end())
92         {
93             if (viewId == it->first)
94             {
95                 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "select time = %d", it->second);
96                 RespiratoryTrainingModel::GetInstance().SetRespiratoryTrainingSelectTime(it->second);
97                 if (RespiratoryTrainingDurationSelectionView::GetInstance())
98                 {
99                     RespiratoryTrainingDurationSelectionView::GetInstance()->UpdateRespiratoryTrainingDurationSelectionView();
100                 }
101             }
102         }
103         return true;
104     }
105
106     bool RespiratoryTrainingPresenter::OnDrag(UIView &view, const DragEvent &event)
107     {
108         UNUSED(view);
109         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDrag");
110         if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
111         {
112             RespiratoryTrainingPresenter::X_DRAG_FLAG = true;
113         }
114         return true;
115     }
116
117     bool RespiratoryTrainingPresenter::OnDragEnd(UIView &view, const DragEvent &event)
118     {
119         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnDragEnd");
120         if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && RespiratoryTrainingPresenter::X_DRAG_FLAG)
121         {
122             std::string viewId = view.GetViewId();
123             if (viewId == RESPIRATORYTRAINING_DURATIONSELECTION_VIEW)
124             {
125                 view_->ChangeView(RESPIRATORY_TRAINING_DURATION_SELECTION, RESPIRATORYTRAINING);
126             }
127             else
128             {
129                 NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
130             }
131             RespiratoryTrainingPresenter::X_DRAG_FLAG = false;
132         }
133         return true;
134     }
135
136     bool RespiratoryTrainingPresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件
137     {
138         UNUSED(view);
139         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingPresenter::OnKeyAct");
140         uint16_t keyID = event.GetKeyId();
141         uint16_t keyState = event.GetState();
142         // 如果是power键,且是亮屏状态,按键释放就返回上一级
143         if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)
144         {
145             NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
146         }
147         return true;
148     }
149
150     int RespiratoryTrainingPresenter::GetRespiratoryTrainingSelectTime()
151     {
152         int time = RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingSelectTime();
153         int textId;
154         switch (time)
155         {
156         case 1:
157             textId = STR_ONE_MIN;
158             break;
159         case 2:
160             textId = STR_TWO_MIN;
161             break;
162         case 3:
163             textId = STR_THREE_MIN;
164             break;
165         case 4:
166             textId = STR_FOUR_MIN;
167             break;
168         case 5:
169             textId = STR_FIVE_MIN;
170             break;
171         default:
172             textId = STR_TWO_MIN;
173             break;
174         }
175         return textId;
176     }
177
178     std::string RespiratoryTrainingPresenter::GetRespiratoryTrainingSelectTime1()
179     {
180         int time = RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingSelectTime();
181         std::string text;
182         switch (time)
183         {
184         case 1:
185             text = "1min";
186             break;
187         case 2:
188             text = "2min";
189             break;
190         case 3:
191             text = "3min";
192             break;
193         case 4:
194             text = "4min";
195             break;
196         case 5:
197             text = "5min";
198             break;
199         default:
200             text = "1min";
201             break;
202         }
203         return text;
204     }
205 }