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