• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2022-2023 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 dataStorage from '@ohos.data.storage';
17import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
18import formBindingData from '@ohos.app.form.formBindingData';
19import formInfo from '@ohos.app.form.formInfo';
20import formProvider from '@ohos.app.form.formProvider';
21import Logger from '../model/Logger'
22import type Want from '@ohos.app.ability.Want';
23
24const DATA_STORAGE_PATH = "/data/storage/el2/base/haps/form_store";
25const FORM_PARAM_IDENTITY_KEY = "ohos.extra.param.key.form_identity";
26const FORM_PARAM_NAME_KEY = "ohos.extra.param.key.form_name";
27const FORM_PARAM_TEMPORARY_KEY = "ohos.extra.param.key.form_temporary";
28
29function getTemperature(formId: string, count: number) {
30  const DECIMAL: number = 10;
31  const parsedFormId: number = parseInt(formId, DECIMAL);
32  const BASE_TEMP_MOD: number = 20;
33  const baseTemperature: number = parsedFormId % BASE_TEMP_MOD;
34  const RANGE_TEMP_MOD: number = 20;
35  return baseTemperature + Math.abs(count % RANGE_TEMP_MOD - RANGE_TEMP_MOD / 2);
36}
37
38function padZero(num: number) {
39  // trans num to string and pad 0
40  if (num < 10) {
41    return `0${num}`;
42  } else {
43    return num.toString();
44  }
45}
46
47function getTime() {
48  const date = new Date();
49  const hours = padZero(date.getHours());
50  const minutes = padZero(date.getMinutes());
51  const seconds = padZero(date.getSeconds());
52  return `${hours}:${minutes}:${seconds}`
53}
54
55async function storeFormInfo(formId: string, formName: string, tempFlag: boolean) {
56  let formInfo = {
57    "formName": formName,
58    "tempFlag": tempFlag,
59    "updateCount": 0
60  };
61  try {
62    const storage = await dataStorage.getStorage(DATA_STORAGE_PATH);
63    // put form info
64    await storage.put(formId, JSON.stringify(formInfo));
65    Logger.log(`storeFormInfo, put form info successfully, formId: ${formId}`);
66    await storage.flush();
67  } catch (err) {
68    Logger.error(`failed to storeFormInfo, err: ${JSON.stringify(err)}`);
69  }
70}
71
72async function updateTempFormInfo(formId: string) {
73  let formInfoDefault = {
74    "formName": "",
75    "tempFlag": false,
76    "updateCount": 0
77  };
78  try {
79    const storage = await dataStorage.getStorage(DATA_STORAGE_PATH);
80    // get form info
81    const data = await storage.get(formId, JSON.stringify(formInfoDefault));
82    Logger.log(`updateTempFormInfo, get form info successfully, formId: ${formId}`);
83    const formInfo = JSON.parse(data.toString());
84    if (!formInfo.tempFlag) {
85      Logger.log(`updateTempFormInfo, formId: ${formId} is not temporary.`);
86      return;
87    }
88
89    formInfo.tempFlag = false;
90    // update form info
91    await storage.put(formId, JSON.stringify(formInfo));
92    Logger.log(`updateTempFormInfo, update form info successfully, formId: ${formId}`);
93    await storage.flush();
94  } catch (err) {
95    Logger.error(`failed to updateTempFormInfo, err: ${JSON.stringify(err)}`);
96  }
97}
98
99async function updateForm(formId: string) {
100  let formInfoDefault = {
101    "formName": "",
102    "tempFlag": false,
103    "updateCount": 0
104  };
105  try {
106    const storage = await dataStorage.getStorage(DATA_STORAGE_PATH);
107    // get form info
108    const data = await storage.get(formId, JSON.stringify(formInfoDefault));
109    Logger.log(`updateForm, get form info successfully, formId: ${formId}`);
110    const formInfo = JSON.parse(data.toString());
111    formInfo.updateCount = formInfo.updateCount + 1;
112
113    let obj = {
114      "temperature": getTemperature(formId, formInfo.updateCount).toString(),
115      "time": getTime()
116    };
117    let formData = formBindingData.createFormBindingData(obj);
118    formProvider.updateForm(formId, formData).catch((err) => {
119      Logger.error(`updateForm, err: ${JSON.stringify(err)}`);
120    });
121
122    // update form info
123    await storage.put(formId, JSON.stringify(formInfo));
124    Logger.log(`updateForm, update form info successfully, formId: ${formId}`);
125    await storage.flush();
126  } catch (err) {
127    Logger.error(`failed to updateForm, err: ${JSON.stringify(err)}`);
128  }
129}
130
131async function deleteFormInfo(formId: string) {
132  try {
133    const storage = await dataStorage.getStorage(DATA_STORAGE_PATH);
134    // del form info
135    await storage.delete(formId);
136    Logger.log(`deleteFormInfo, del form info successfully, formId: ${formId}`);
137    await storage.flush();
138  } catch (err) {
139    Logger.error(`failed to deleteFormInfo, err: ${JSON.stringify(err)}`);
140  }
141}
142
143export default class FormAbility extends FormExtensionAbility {
144  onAddForm(want: Want): formBindingData.FormBindingData {
145    Logger.log(`FormAbility onCreate, want: ${JSON.stringify(want)}`);
146
147    // get form info
148    let formId: string = want.parameters[FORM_PARAM_IDENTITY_KEY].toString();
149    let formName: string = want.parameters[FORM_PARAM_NAME_KEY].toString();
150    let tempFlag: boolean = Boolean(want.parameters[FORM_PARAM_TEMPORARY_KEY]);
151    storeFormInfo(formId, formName, tempFlag);
152
153    let obj = {
154      'temperature': getTemperature(formId, 0).toString(),
155      'time': getTime()
156    };
157    let formData: formBindingData.FormBindingData = formBindingData.createFormBindingData(obj);
158    return formData;
159  }
160
161  onCastToNormalForm(formId: string): void {
162    Logger.log(`FormAbility onCastToNormal, formId: ${formId}`);
163    updateTempFormInfo(formId);
164  }
165
166  onUpdateForm(formId: string): void {
167    Logger.log(`FormAbility onUpdate, formId: ${formId}`);
168    updateForm(formId);
169  }
170
171  onChangeFormVisibility(newStatus: { [key: string]: number }): void {
172    Logger.log('FormAbility onVisibilityChange');
173  }
174
175  onFormEvent(formId: string, message: string): void {
176    Logger.log(`FormAbility onEvent, formId = ${formId}, message: ${JSON.stringify(message)}`);
177  }
178
179  onRemoveForm(formId: string): void {
180    Logger.log(`FormAbility onDestroy, formId = ${formId}`);
181    deleteFormInfo(formId);
182  }
183
184  onAcquireFormState(want: Want): formInfo.FormState {
185    Logger.log(`FormAbility onAcquireFormState`);
186    return formInfo.FormState.READY;
187  }
188};