1/* 2 * Copyright (c) 2021 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 Want from '@ohos.application.Want'; 16import { MediaDataManager } from '../data/MediaDataManager'; 17import { Log } from '@ohos/base/src/main/ets/utils/Log'; 18import { startAbility } from '@ohos/base/src/main/ets/utils/AbilityUtils'; 19import formBindingData from '@ohos.application.formBindingData'; 20import { Constants } from '../common/Constants'; 21import formProvider from '@ohos.application.formProvider'; 22import { Constants as commonConstants } from '../../common/model/common/Constants'; 23 24const TAG = "FormController" 25 26export class FormController { 27 private formId: string; 28 private operationMode: number = Constants.PHOTOS_FORM_OPERATION_MODE_NONE; 29 private callback: Function = null; 30 private static readonly MSG_ROUTER_PHOTOS = 'routerPhotos'; 31 mediaDataManager: MediaDataManager; 32 33 constructor(formId: string, operationMode: number, callback?: Function) { 34 this.formId = formId; 35 this.operationMode = operationMode; 36 this.callback = callback; 37 this.mediaDataManager = new MediaDataManager(formId, operationMode, this); 38 } 39 40 bindFormData(formId: string): any { 41 Log.info(TAG, `bindFormData start formId: ${formId}`) 42 let fd = this.mediaDataManager.getCurrentFd(); 43 let mediaData = this.mediaDataManager.getMediaData(); 44 let image: string = "image_" + fd + "_formId_" + formId + "_uri_" + mediaData.currentUri; 45 let dataObj1: any = { 46 "fd": fd == -1 ? false : true, 47 "image1": "memory://" + image, 48 "albumName": this.mediaDataManager.getCurrentAlbumName(), 49 "currentIndex": this.mediaDataManager.getCurrentIndex(), 50 "isShow": this.mediaDataManager.getIsShowAlbumName(), 51 "formImages": JSON.parse(`{ "${image}": ${fd} }`), 52 'uri': (mediaData.currentUri !== '') ? commonConstants.ACTION_URI_FORM_ABILITY : commonConstants.ACTION_URI_FORM_ABILITY_NONE, 53 'albumId': `${mediaData.albumId}`, 54 'currentUri': mediaData.currentUri 55 }; 56 Log.debug(TAG, `bindFormData, createFormBindingData dataObj2.data: ${JSON.stringify(dataObj1)}`); 57 let obj = formBindingData.createFormBindingData(JSON.stringify(dataObj1)); 58 Log.debug(TAG, `bindFormData, createFormBindingData obj2.data: ${JSON.stringify(obj.data)}`); 59 return obj; 60 } 61 62 updateFormData(formId: string, vars: string[]): void { 63 Log.debug(TAG, `updateFormData formId: ${JSON.stringify(formId)}`); 64 let obj3 = this.bindFormData(formId); 65 Log.debug(TAG, `updateFormData obj: ${JSON.stringify(obj3)}`); 66 formProvider.updateForm(formId, obj3) 67 .then((data) => { 68 Log.info(TAG, `updateFormData, data: ${JSON.stringify(data)}`); 69 if (this.mediaDataManager.getIsShowAlbumName()) { 70 formProvider.setFormNextRefreshTime(formId, this.mediaDataManager.getIntervalTime()).then(() => { 71 Log.error(TAG, `setFormNextRefreshTime successfully!`); 72 if (this.callback != null) { 73 this.callback.call(this.callback); 74 } 75 this.onDestroy(); 76 }).catch((err) => { 77 Log.error(TAG, `init err ${err}`); 78 }) 79 } else { 80 if (this.callback != null) { 81 this.callback.call(this.callback); 82 } 83 this.onDestroy(); 84 } 85 }).catch((error) => { 86 Log.error(TAG, `updateForm failed. Cause: ${JSON.stringify(error)}`); 87 this.mediaDataManager.closeFd(); 88 }); 89 } 90 91 onDestroy() { 92 Log.info(TAG, 'onDestroy start!'); 93 this.mediaDataManager.closeFd(); 94 this.callback = null; 95 Log.info(TAG, 'onDestroy done end!'); 96 } 97 98 onUpdateFormData(formId: string): void { 99 Log.debug(TAG, `onUpdateFormData formId: ${formId}`); 100 this.mediaDataManager.setNextIndex(); 101 } 102 103 routerPhotoBrowser() { 104 Log.debug(TAG, 'routerPhotoBrowser start!'); 105 let param: Want = { 106 'bundleName': 'com.ohos.photos', 107 'abilityName': 'com.ohos.photos.MainAbility', 108 'parameters': { 109 'uri': ( 110 this.mediaDataManager.getMediaData() 111 .currentUri != '') ? commonConstants.ACTION_URI_FORM_ABILITY : commonConstants.ACTION_URI_FORM_ABILITY_NONE, 112 'albumId': `${this.mediaDataManager.getMediaData().albumId}`, 113 'currentIndex': this.mediaDataManager.getMediaData().currentIndex 114 } 115 }; 116 Log.debug(TAG, `routerPhotoBrowser parm ${JSON.stringify(param)}`); 117 startAbility(param).then(() => { 118 AppStorage.Delete(Constants.FROM_CONTROLLER_MANAGER); 119 }) 120 this.onDestroy(); 121 Log.debug(TAG, 'routerPhotoBrowser end!'); 122 } 123 124 onTriggerFormEvent(formId: string, message): void { 125 Log.debug(TAG, `onTriggerFormEvent ${formId} ${message}`); 126 let msgObj = JSON.parse(message); 127 let param = msgObj["params"]; 128 let msg = param["message"]; 129 Log.debug(TAG, `onTriggerFormEvent ${param} ${msg}`); 130 if (msg == FormController.MSG_ROUTER_PHOTOS) { 131 this.routerPhotoBrowser(); 132 } 133 } 134 135 onEvent(formId: string): void { 136 Log.debug(TAG, 'onEvent start!'); 137 if (this.callback != null) { 138 if (this.mediaDataManager.getUpdateTag()) { 139 this.mediaDataManager.setUpdateTag(false) 140 Log.debug(TAG, `updateFormData formId: ${JSON.stringify(formId)}`); 141 let obj3 = this.bindFormData(formId); 142 Log.debug(TAG, `updateFormData obj: ${JSON.stringify(obj3)}`); 143 formProvider.updateForm(formId, obj3).then((data) => { 144 Log.info(TAG, `updateFormData, data: ${JSON.stringify(data)}`); 145 this.onTriggerFormEvent(formId, this.callback.call(this.callback)); 146 }).catch((error) => { 147 this.onTriggerFormEvent(formId, this.callback.call(this.callback)); 148 }); 149 } else { 150 this.onTriggerFormEvent(formId, this.callback.call(this.callback)); 151 } 152 } 153 Log.debug(TAG, 'onEvent end!'); 154 } 155 156 onCallback(): void { 157 Log.debug(TAG, 'onCallback start!'); 158 if (this.callback != null) { 159 this.callback.call(this.callback); 160 } 161 Log.debug(TAG, 'onCallback end!'); 162 } 163 164 onDeleteForm(formId: string): void { 165 this.mediaDataManager.storageDelete(); 166 } 167}