• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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