1/* 2 * Copyright (c) 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 */ 15import observer from '@ohos.telephony.observer' 16import radio from '@ohos.telephony.radio' 17import Logger from '../modle/Logger' 18import router from '@ohos.router' 19import DetailData from '../modle/DetailData' 20 21const TAG: string = 'Index' 22let detailData: DetailData = new DetailData() 23 24@Entry 25@Component 26struct Index { 27 @State subscribes: Array<Resource> = [ 28 $r('app.string.network_state_change'), 29 $r('app.string.signal_info_change'), 30 $r('app.string.callState_change'), 31 $r('app.string.cellular_data_connection_state_change'), 32 $r('app.string.cellular_data_flow_change'), 33 $r('app.string.sim_state_change') 34 ] 35 networkStateChangeCallback = (data) => { 36 Logger.info(TAG, `on networkStateChange, data: ${JSON.stringify(data)}`) 37 detailData.networkState = <radio.NetworkState> data 38 } 39 signalInfoChangeCallback = (data) => { 40 Logger.info(TAG, `on signalInfoChange, data: ${JSON.stringify(data)}`) 41 detailData.signalInformation = data 42 } 43 callStateChangeCallback = (data) => { 44 Logger.info(TAG, `on callStateChange, data: ${JSON.stringify(data)}`) 45 detailData.callState = data.state 46 detailData.callNumber = data.number 47 } 48 cellularDataConnectionStateChangeCallback = (data) => { 49 Logger.info(TAG, `on cellularDataConnectionStateChange, data: ${JSON.stringify(data)}`) 50 detailData.dataConnectState = data.state 51 detailData.ratType = data.network 52 } 53 cellularDataFlowChangeCallback = (data) => { 54 Logger.info(TAG, `on cellularDataFlowChange, data: ${JSON.stringify(data)}`) 55 detailData.dataFlowType = data 56 } 57 simStateChangeCallback = (data) => { 58 Logger.info(TAG, `on simStateChange, data: ${JSON.stringify(data)}`) 59 detailData.simStateData = data 60 } 61 62 onChangeCallback(index: number, isOn: boolean) { 63 switch (index) { 64 case 0: 65 isOn ? observer.on('networkStateChange', this.networkStateChangeCallback) : 66 observer.off('networkStateChange', this.networkStateChangeCallback) 67 break 68 case 1: 69 isOn ? observer.on('signalInfoChange', this.signalInfoChangeCallback) : 70 observer.off('signalInfoChange', this.signalInfoChangeCallback) 71 break 72 case 2: 73 isOn ? observer.on('callStateChange', this.callStateChangeCallback) : 74 observer.off('callStateChange', this.callStateChangeCallback) 75 break 76 case 3: 77 isOn ? observer.on('cellularDataConnectionStateChange', this.cellularDataConnectionStateChangeCallback) : 78 observer.off('cellularDataConnectionStateChange', this.cellularDataConnectionStateChangeCallback) 79 break 80 case 4: 81 isOn ? observer.on('cellularDataFlowChange', this.cellularDataFlowChangeCallback) : 82 observer.off('cellularDataFlowChange', this.cellularDataFlowChangeCallback) 83 break 84 case 5: 85 isOn ? observer.on('simStateChange', this.simStateChangeCallback) : 86 observer.off('simStateChange', this.simStateChangeCallback) 87 break 88 default: 89 break 90 } 91 } 92 93 build() { 94 Column() { 95 Row() { 96 Text('observer') 97 .fontSize(30) 98 .fontColor(Color.White) 99 } 100 .width('100%') 101 .height('8%') 102 .padding({ left: 16 }) 103 .backgroundColor('#0D9FFB') 104 105 List({ space: 20, initialIndex: 0 }) { 106 ForEach(this.subscribes, (item, index) => { 107 ListItem() { 108 Row() { 109 Text(item) 110 .fontSize(20) 111 Blank() 112 Toggle({ type: ToggleType.Switch, isOn: false }) 113 .size({ width: 28, height: 28 }) 114 .selectedColor('#0D9FFB') 115 .onChange((isOn: boolean) => { 116 this.onChangeCallback(index, isOn) 117 }) 118 .key('switch' + (index + 1)) 119 }.width('100%') 120 } 121 .width('100%') 122 }, item => JSON.stringify(item)) 123 } 124 .width('100%') 125 .height('70%') 126 .padding({ left: 10, right: 10 }) 127 128 Button($r('app.string.details')) 129 .key('seeDetails') 130 .width('40%') 131 .onClick(() => { 132 Logger.info(TAG, `detailData is = ${JSON.stringify(detailData)}`) 133 router.push({ 134 url: 'pages/Detail', 135 params: { 136 detailData: detailData 137 } 138 }) 139 }) 140 } 141 .width('100%') 142 .height('100%') 143 } 144}