1 /*
2 * Copyright (c) 2020 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "setting_wifi_ability_slice.h"
17 #include <iostream>
18 #include <thread>
19 #include "gfx_utils/style.h"
20
21 namespace OHOS {
22 REGISTER_AS(SettingWifiAbilitySlice)
23 static int g_wifiStatus = 0;
24
SettingWifiAbilitySlice()25 SettingWifiAbilitySlice::SettingWifiAbilitySlice()
26 : headView_(nullptr), toggleButtonView_(nullptr), scrollView_(nullptr), rootView_(nullptr),
27 changeListener_(nullptr), buttonBackListener_(nullptr), buttonInputListener_(nullptr), wpaCount_(0)
28 {
29 int taskPeriod = 5000;
30 Task::Init();
31 SetPeriod(taskPeriod);
32 }
33
~SettingWifiAbilitySlice()34 SettingWifiAbilitySlice::~SettingWifiAbilitySlice()
35 {
36 if (wpaCount_ == 1) {
37 printf("%s:%d call ExitWpa, this %p\n", __FUNCTION__, __LINE__, this);
38 ExitWpa();
39 ExitWpaScan();
40 wpaCount_ = 0;
41 }
42
43 if (toggleButtonView_) {
44 DeleteChildren(toggleButtonView_);
45 toggleButtonView_ = nullptr;
46 }
47
48 if (scrollView_) {
49 DeleteChildren(scrollView_);
50 scrollView_ = nullptr;
51 }
52
53 if (headView_) {
54 DeleteChildren(headView_);
55 headView_ = nullptr;
56 }
57
58 if (changeListener_) {
59 delete changeListener_;
60 changeListener_ = nullptr;
61 }
62
63 if (buttonBackListener_) {
64 delete buttonBackListener_;
65 buttonBackListener_ = nullptr;
66 }
67
68 if (buttonInputListener_) {
69 delete buttonInputListener_;
70 buttonInputListener_ = nullptr;
71 }
72 }
73
SetButtonListener(void)74 void SettingWifiAbilitySlice::SetButtonListener(void)
75 {
76 auto onClick = [this](UIView& view, const Event& event) -> bool {
77 Want want1 = { nullptr };
78 AbilitySlice* nextSlice = AbilityLoader::GetInstance().GetAbilitySliceByName("MainAbilitySlice");
79 if (nextSlice == nullptr) {
80 printf("[warning]undefined SettingWifiAbilitySlice\n");
81 } else {
82 Present(*nextSlice, want1);
83 }
84 return true;
85 };
86 buttonBackListener_ = new EventListener(onClick, nullptr);
87 }
88
SetWifiButtonListener(char * ssid)89 void SettingWifiAbilitySlice::SetWifiButtonListener(char* ssid)
90 {
91 auto onClick2 = [this, ssid](UIView& view, const Event& event) -> bool {
92 Want want1 = { nullptr };
93 bool ret = SetWantData(&want1, ssid, strlen(ssid) + 1);
94 if (ret != true) {
95 return false;
96 }
97 StartAbility(want1);
98 AbilitySlice* nextSlice =
99 AbilityLoader::GetInstance().GetAbilitySliceByName("SettingWifiInputPasswordAbilitySlice");
100 if (nextSlice == nullptr) {
101 printf("[warning]undefined SettingWifiAbilitySlice\n");
102 } else {
103 Present(*nextSlice, want1);
104 }
105 return true;
106 };
107 buttonInputListener_ = new EventListener(onClick2, nullptr);
108 }
109
SetHead(void)110 void SettingWifiAbilitySlice::SetHead(void)
111 {
112 headView_ = new UIViewGroup();
113 rootView_->Add(headView_);
114 headView_->SetPosition(DE_HEAD_X, DE_HEAD_Y, DE_HEAD_WIDTH, DE_HEAD_HEIGHT);
115 headView_->SetStyle(STYLE_BACKGROUND_OPA, 0);
116 headView_->SetTouchable(true);
117 headView_->SetOnClickListener(buttonBackListener_);
118
119 UIImageView* imageView = new UIImageView();
120 headView_->Add(imageView);
121 imageView->SetPosition(DE_HEAD_IMAGE_X, DE_HEAD_IMAGE_Y, DE_HEAD_IMAGE_WIDTH, DE_HEAD_IMAGE_HEIGHT);
122 imageView->SetSrc(DE_IMAGE_BACK);
123
124 UILabel* labelFont = new UILabel();
125 labelFont->SetPosition(DE_HEAD_TEXT_X, DE_HEAD_TEXT_Y, DE_HEAD_TEXT_WIDTH, DE_HEAD_TEXT_HEIGHT);
126 labelFont->SetText("WiFi");
127 labelFont->SetFont(DE_FONT_OTF, DE_HEAD_TEXT_SIZE);
128 labelFont->SetStyle(STYLE_TEXT_COLOR, DE_HEAD_TEXT_COLOR);
129 headView_->Add(labelFont);
130 }
131
SetToggleButton(void)132 void SettingWifiAbilitySlice::SetToggleButton(void)
133 {
134 toggleButtonView_ = new UIViewGroup();
135 toggleButtonView_->SetPosition(TOGGLE_X, TOGGLE_Y, DE_BUTTON_WIDTH, DE_BUTTON_HEIGHT);
136 toggleButtonView_->SetStyle(STYLE_BACKGROUND_COLOR, DE_BUTTON_BACKGROUND_COLOR);
137 toggleButtonView_->SetStyle(STYLE_BACKGROUND_OPA, DE_OPACITY_ALL);
138 toggleButtonView_->SetStyle(STYLE_BORDER_RADIUS, DE_BUTTON_RADIUS);
139 rootView_->Add(toggleButtonView_);
140
141 auto labelFont = new UILabel();
142 labelFont->SetPosition(DE_TITLE_TEXT_X, DE_TITLE_TEXT_Y, DE_TITLE_TEXT_WIDTH, DE_TITLE_TEXT_HEIGHT);
143 labelFont->SetText("WiFi");
144 labelFont->SetFont(DE_FONT_OTF, DE_TITLE_TEXT_SIZE);
145 labelFont->SetStyle(STYLE_TEXT_COLOR, DE_TITLE_TEXT_COLOR);
146 toggleButtonView_->Add(labelFont);
147
148 UIToggleButton* togglebutton = new UIToggleButton();
149 changeListener_ = new TestBtnOnStateChangeListener(reinterpret_cast<UIView*>(scrollView_));
150 togglebutton->SetOnClickListener(changeListener_);
151 togglebutton->SetPosition(DE_TOGGLE_BUTTON_X, DE_TOGGLE_BUTTON_Y);
152 togglebutton->SetState(true);
153 scrollView_->SetVisible(true);
154
155 toggleButtonView_->Add(togglebutton);
156 }
157
SetUseWifi(void)158 void SettingWifiAbilitySlice::SetUseWifi(void)
159 {
160 UILabel* labelFont = new UILabel();
161 labelFont->SetPosition(USE_WIFI_FONT_X, USE_WIFI_FONT_Y, DE_TITLE_TEXT_WIDTH, DE_TITLE_TEXT_HEIGHT);
162 labelFont->SetText("可用WiFi列表");
163 labelFont->SetFont(DE_FONT_OTF, DE_TITLE_TEXT_SIZE);
164 labelFont->SetStyle(STYLE_TEXT_COLOR, DE_SUBTITLE_TEXT_COLOR);
165 rootView_->Add(labelFont);
166 }
167
AddWifi(void)168 void SettingWifiAbilitySlice::AddWifi(void)
169 {
170 int ssidIndex, ssidCount;
171
172 ssidCount = GetIdNum();
173 if (ssidCount == 0) {
174 printf("[LOG]SettingWifiAbilitySlice::AddWifi ssidCount == 0 \n");
175 return;
176 }
177 if (scrollView_ == nullptr) {
178 printf("[LOG]SettingWifiAbilitySlice::AddWifi scrollView_ == nullptr \n");
179 return;
180 }
181 if (g_wifiStatus == 1) {
182 printf("[LOG]SettingWifiAbilitySlice::AddWifi wifiStatus == 1 \n");
183 return;
184 }
185 for (ssidIndex = 0; ssidIndex < ssidCount; ssidIndex++) {
186 UIViewGroup *useWifiView = new UIViewGroup();
187 useWifiView->SetPosition(ADD_WIFI_X, DE_ITEM_INTERVAL * ssidIndex, DE_BUTTON_WIDTH, DE_BUTTON_HEIGHT);
188 useWifiView->SetStyle(STYLE_BACKGROUND_COLOR, DE_BUTTON_BACKGROUND_COLOR);
189 useWifiView->SetStyle(STYLE_BACKGROUND_OPA, DE_OPACITY_ALL);
190 useWifiView->SetStyle(STYLE_BORDER_RADIUS, DE_BUTTON_RADIUS);
191 useWifiView->SetTouchable(true);
192 char* buff = GetSsid(ssidIndex); // GetSsid need return point
193 SetWifiButtonListener(buff);
194 useWifiView->SetOnClickListener(buttonInputListener_);
195 scrollView_->Add(useWifiView);
196
197 auto labelFont = new UILabel();
198 labelFont->SetPosition(DE_TITLE_TEXT_X, DE_TITLE_TEXT_Y, DE_TITLE_TEXT_WIDTH, DE_TITLE_TEXT_HEIGHT);
199 labelFont->SetText(buff);
200 labelFont->SetFont(DE_FONT_OTF, DE_TITLE_TEXT_SIZE);
201 labelFont->SetStyle(STYLE_TEXT_COLOR, DE_TITLE_TEXT_COLOR);
202 useWifiView->Add(labelFont);
203 g_wifiStatus = 1;
204 }
205
206 scrollView_->Invalidate();
207 }
208
SetScrollWifi(void)209 void SettingWifiAbilitySlice::SetScrollWifi(void)
210 {
211 scrollView_ = new UIScrollView();
212 scrollView_->SetStyle(STYLE_BACKGROUND_COLOR, DE_SCROLL_COLOR);
213 scrollView_->SetPosition(DE_SCROLL_X, SCROLL_WIFI_Y, DE_SCROLL_WIDTH, SCROLL_WIFI_HEIGHT);
214 scrollView_->SetXScrollBarVisible(false);
215 scrollView_->SetYScrollBarVisible(true);
216 rootView_->Add(scrollView_);
217 g_wifiStatus = 0;
218 AddWifi();
219 }
220
Callback()221 void SettingWifiAbilitySlice::Callback()
222 {
223 if (GetAndResetScanStat() == 1) {
224 LockWifiData();
225 AddWifi();
226 UnLockWifiData();
227 }
228 }
229
OnStart(const Want & want)230 void SettingWifiAbilitySlice::OnStart(const Want& want)
231 {
232 if (wpaCount_ == 0) {
233 printf("%s:%d call WpaClientStart, this %p\n", __FUNCTION__, __LINE__, this);
234 WpaClientStart();
235 WpaScanReconnect(nullptr, nullptr, HIDDEN_CLOSE);
236 wpaCount_ = 1;
237 }
238 AbilitySlice::OnStart(want);
239
240 rootView_ = RootView::GetWindowRootView();
241 rootView_->SetPosition(DE_ROOT_X, DE_ROOT_Y, DE_ROOT_WIDTH, DE_ROOT_HEIGHT);
242 rootView_->SetStyle(STYLE_BACKGROUND_COLOR, DE_ROOT_BACKGROUND_COLOR);
243 SetButtonListener();
244 SetHead();
245 SetUseWifi();
246 SetScrollWifi();
247 SetToggleButton();
248
249 TaskExecute();
250 SetUIContent(rootView_);
251 }
252
OnInactive()253 void SettingWifiAbilitySlice::OnInactive()
254 {
255 AbilitySlice::OnInactive();
256 }
257
OnActive(const Want & want)258 void SettingWifiAbilitySlice::OnActive(const Want& want)
259 {
260 AbilitySlice::OnActive(want);
261 }
262
OnBackground()263 void SettingWifiAbilitySlice::OnBackground()
264 {
265 AbilitySlice::OnBackground();
266 }
267
OnStop()268 void SettingWifiAbilitySlice::OnStop()
269 {
270 AbilitySlice::OnStop();
271 if (wpaCount_ == 1) {
272 printf("%s:%d call ExitWpa, this %p\n", __FUNCTION__, __LINE__, this);
273 ExitWpa();
274 ExitWpaScan();
275 wpaCount_ = 0;
276 }
277 }
278 } // namespace OHOS
279