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};