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