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 22let mWifiInfo: SubscribedAbstractProperty<number>; 23let mWifiStatus: SubscribedAbstractProperty<boolean>; 24let mWifiOpenStatus: SubscribedAbstractProperty<boolean>; 25let mWifiName: SubscribedAbstractProperty<string>; 26 27export class WifiModel { 28 mIsStart = false; 29 mListener= null; 30 31 initWifiModel(): void { 32 if (this.mIsStart) { 33 return; 34 } 35 Log.showInfo(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(): void { 51 if (!this.mIsStart) { 52 return; 53 } 54 Log.showInfo(TAG, 'uninitWifiModel'); 55 this.mIsStart = false; 56 57 this.mListener.off('wifiRssiChange', (data: number) => { 58 Log.showInfo(TAG, `uninitWifiModel->wifiRssiChange, data: ${JSON.stringify(data)}`); 59 }); 60 this.mListener.off('wifiConnectionChange', (data: number) => { 61 Log.showInfo(TAG, `uninitWifiModel->wifiConnectionChange, data: ${JSON.stringify(data)}`); 62 }); 63 this.mListener.off('wifiStateChange', (data: number) => { 64 Log.showInfo(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: WifiState): void { 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: WifiConnectionState): void { 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: number): void { 94 Log.showInfo(TAG, `onWifiRssiChange, data: ${JSON.stringify(data)}`); 95 this.getLinkedInfo(); 96 } 97 98 getWifiInfo(): void { 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(): void { 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(): void { 121 Log.showInfo(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(): void { 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(): void { 143 let result = wifi.enableWifi(); 144 Log.showInfo(TAG, `enableWifi, result: ${result}`); 145 } 146 147 disableWifi(): void { 148 let result = wifi.disableWifi(); 149 Log.showInfo(TAG, `disableWifi, result: ${result}`); 150 } 151} 152 153let mWifiModel = new WifiModel(); 154 155export default mWifiModel;