• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2021-2022 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
16import wifi from '@ohos.wifi';
17import Constants, {WifiState, WifiConnectionState} from './common/constants'
18import Log from "../../../../../../common/src/main/ets/default/Log";
19
20const TAG = 'WifiComponent-WifiModel';
21
22var mWifiInfo;
23var mWifiStatus;
24var mWifiOpenStatus;
25var mWifiName;
26
27export class WifiModel {
28  mIsStart: boolean = false;
29  mListener= null;
30
31  initWifiModel() {
32    if (this.mIsStart) {
33      return;
34    }
35    Log.showDebug(TAG, `initWifiModel`)
36    this.mIsStart = true;
37
38    mWifiInfo = AppStorage.SetAndLink("wifiInfo", Constants.DEFAULT_WIFI_INFO);
39    mWifiStatus = AppStorage.SetAndLink("wifiStatus", Constants.DEFAULT_WIFI_STATUS);
40    mWifiName = AppStorage.SetAndLink("wifiName", Constants.DEFAULT_WIFI_NAME)
41    mWifiOpenStatus = AppStorage.SetAndLink("wifiOpenStatus", Constants.DEFAULT_WIFI_OPEN_STATUS);
42
43    this.getWifiInfo();
44
45    wifi.on('wifiStateChange', this.onWifiStateChange.bind(this));
46    wifi.on('wifiConnectionChange', this.onWifiConnectionChange.bind(this));
47    wifi.on('wifiRssiChange', this.onWifiRssiChange.bind(this));
48  }
49
50  uninitWifiModel() {
51    if (!this.mIsStart) {
52      return;
53    }
54    Log.showInfo(TAG, `uninitWifiModel`)
55    this.mIsStart = false;
56
57    this.mListener.off('wifiRssiChange', (data) => {
58      Log.showDebug(TAG, `uninitWifiModel->wifiRssiChange, data: ${JSON.stringify(data)}`)
59    });
60    this.mListener.off('wifiConnectionChange', (data) => {
61      Log.showDebug(TAG, `uninitWifiModel->wifiConnectionChange, data: ${JSON.stringify(data)}`)
62    });
63    this.mListener.off('wifiStateChange', (data) => {
64      Log.showDebug(TAG, `uninitWifiModel->wifiStateChange, data: ${JSON.stringify(data)}`)
65    });
66    this.mListener = null;
67    mWifiOpenStatus.set(Constants.DEFAULT_WIFI_OPEN_STATUS);
68    this.setDisconnectedStatus();
69  }
70
71  onWifiStateChange(data) {
72    Log.showInfo(TAG, `onWifiStateChange, data: ${JSON.stringify(data)}`)
73
74    let isWifiInactive = data == WifiState.STATE_OFF;
75    mWifiOpenStatus.set(!isWifiInactive);
76    if (!isWifiInactive) {
77      this.getWifiConnectInfo();
78    } else {
79      this.setDisconnectedStatus();
80    }
81  }
82
83  onWifiConnectionChange(data) {
84    Log.showInfo(TAG, `onWifiConnectionChange, data: ${JSON.stringify(data)}`)
85
86    if (data == WifiConnectionState.CONNECTED) {
87      this.getLinkedInfo();
88    } else {
89      this.setDisconnectedStatus();
90    }
91  }
92
93  onWifiRssiChange(data) {
94    Log.showInfo(TAG, 'onWifiRssiChange')
95    this.getLinkedInfo();
96  }
97
98  getWifiInfo() {
99    let isWifiActive = wifi.isWifiActive();
100    Log.showInfo(TAG, `getWifiInfo, isWifiActive: ${isWifiActive}`)
101    mWifiOpenStatus.set(isWifiActive);
102    if (isWifiActive) {
103      this.getWifiConnectInfo();
104    } else {
105      this.setDisconnectedStatus();
106    }
107  }
108
109  getWifiConnectInfo() {
110    let isConnected = wifi.isConnected();
111    Log.showInfo(TAG, `getWifiConnectInfo, isConnected: ${isConnected}`)
112    if (isConnected) {
113      mWifiStatus.set(true);
114      this.getLinkedInfo();
115    } else {
116      this.setDisconnectedStatus();
117    }
118  }
119
120  getLinkedInfo() {
121    Log.showDebug(TAG, `getLinkedInfo`)
122    wifi.getLinkedInfo((err, data) => {
123      if (wifi.isConnected()) {
124        mWifiStatus.set(true);
125        mWifiName.set(data.ssid);
126        let signalLevel = wifi.getSignalLevel(data.rssi, data.band);
127        Log.showInfo(TAG, `getLinkedInfo, signalLevel: ${signalLevel}`)
128        mWifiInfo.set(signalLevel);
129      } else {
130        this.setDisconnectedStatus();
131      }
132    });
133  }
134
135  setDisconnectedStatus() {
136    Log.showInfo(TAG, `setDisconnectedStatus`)
137    mWifiStatus.set(Constants.DEFAULT_WIFI_STATUS);
138    mWifiInfo.set(Constants.DEFAULT_WIFI_INFO);
139    mWifiName.set(Constants.DEFAULT_WIFI_NAME);
140  }
141
142  enableWifi() {
143    let result = wifi.enableWifi();
144    Log.showInfo(TAG, `enableWifi, result: ${result}`);
145  }
146
147  disableWifi() {
148    let result = wifi.disableWifi();
149    Log.showInfo(TAG, `disableWifi, result: ${result}`);
150  }
151}
152
153let mWifiModel = new WifiModel();
154
155export default mWifiModel as WifiModel;