• 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 FormExtension from '@ohos.app.form.FormExtensionAbility';
17import type Want from '@ohos.app.ability.Want';
18import {
19  BigDataConstants,
20  DataStoreUtil,
21  Log,
22  UserFileManagerAccess,
23  ReportToBigDataUtil
24} from '@ohos/common';
25import { Constants, FormController, FormControllerManager } from '@ohos/formAbility';
26import type formBindingData from '@ohos.app.form.formBindingData';
27
28const TAG: string = 'photo_FormAbility';
29
30type FormVisibilityArray = { [key: string]: number };
31
32export default class FormAbility extends FormExtension {
33  onAddForm(want: Want): formBindingData.FormBindingData {
34    Log.debug(TAG, `form onCreate. want ${JSON.stringify(want)}`);
35    this.init();
36
37    let param: { [key: string]: Object } = want.parameters;
38    let formId: string = param['ohos.extra.param.key.form_identity'] as string;
39    Log.info(TAG, `form onCreate formId: ${formId}`);
40    let formControllerManager: FormControllerManager = FormControllerManager.getInstance();
41    formControllerManager.initData(formId, Constants.PHOTOS_FORM_OPERATION_MODE_NONE).then(() => {
42      let formController: FormController = formControllerManager.getController(formId);
43      if (!formController) {
44        Log.debug(TAG, `formControllerManager do not has id ${formId}`);
45        formController = formControllerManager.createFormController(formId, Constants.PHOTOS_FORM_OPERATION_MODE_NONE);
46      } else {
47        Log.debug(TAG, `formControllerManager has id ${formId}`);
48      }
49      if (!formController) {
50        Log.error(TAG, `Get null controller. formId: ${formId}`);
51        return null;
52      }
53      ReportToBigDataUtil.report(BigDataConstants.CREATE_FA_CARD_ID, null);
54      return formController.bindFormData(formId);
55    }).catch((err) => {
56      Log.error(TAG, `FA onAddForm id ${formId} init err ${err}`);
57      let msg = {
58        'err': JSON.stringify(err)
59      };
60      ReportToBigDataUtil.errEventReport(BigDataConstants.CREATE_FA_CARD_ERROR, msg);
61    })
62    return null;
63  }
64
65  onCastToNormalForm(formId: string): void {
66    Log.info(TAG, `onCastToNormal, formId: ${formId}`);
67  }
68
69  onUpdateForm(formId: string): void {
70  }
71
72  onChangeFormVisibility(newStatus: FormVisibilityArray): void {
73    Log.info(TAG, `onVisibilityChange, newStatus: ${JSON.stringify(newStatus)}`);
74
75    // 经常起来后可能直接走onVisibilityChange, 所以要初始化一下
76    this.init();
77    this.clearCache(newStatus);
78  }
79
80  onFormEvent(formId: string, message: string): void {
81    Log.debug(TAG, `onEvent, formId: ${formId}, message: ${message}`);
82
83    // 经常起来后可能直接走onEvent, 所以要初始化一下
84    this.init();
85    let formControllerManager: FormControllerManager = FormControllerManager.getInstance();
86    formControllerManager.onEvent(formId, message);
87  }
88
89  onRemoveForm(formId: string): void {
90    Log.info(TAG, `onDestroy, formId: ${formId}`);
91    ReportToBigDataUtil.report(BigDataConstants.DELETE_FA_CARD_ID, null);
92
93    // 经常起来后可能直接走onDestroy, 所以要初始化一下
94    this.init();
95    let formControllerManager: FormControllerManager = FormControllerManager.getInstance();
96    formControllerManager.destroyController(formId);
97  }
98
99  private init(): void {
100    UserFileManagerAccess.getInstance().onCreate(this.context);
101
102    // Init system album information
103    UserFileManagerAccess.getInstance().prepareSystemAlbums();
104    AppStorage.setOrCreate('formContext', this.context);
105  }
106
107  private async clearCache(newStatus: FormVisibilityArray): Promise<void> {
108    try {
109      let dataStore = DataStoreUtil.getInstance();
110      await dataStore.removeCache();
111      await dataStore.init();
112      let formControllerManager: FormControllerManager = FormControllerManager.getInstance();
113      for (let key in newStatus) {
114        Log.info(TAG, `onVisibilityChange, key:${key}  value ${newStatus[key]}`);
115        let formId = key;
116        formControllerManager.initData(formId, Constants.PHOTOS_FORM_OPERATION_MODE_NONE);
117      }
118    } catch (err) {
119      Log.error(TAG, `clearCache err:` + JSON.stringify(err));
120    }
121  }
122};