* Copyright (c) Huawei Device Co., Ltd. 2024-2025. All rights reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { bundleManager, Want } from '@kit.AbilityKit';
import { CheckEmptyUtils, LogDomain, LogHelper } from '@ohos/basicutils/src/main/ets/TsIndex';
import { GlobalContext, ViewController, viewMgrPolicy, ViewType } from '@ohos/frameworkwrapper';
import { CardItemInfo } from '../TsIndex';
import { CommonConstants } from '../constants/CommonConstants';
const TAG = 'FormEditViewManager';
const log: LogHelper = LogHelper.getLogHelper(LogDomain.HOME, TAG);
export class FormEditViewParam {
bundleName?: string;
formInfo?: CardItemInfo;
viewHeight?: number;
isSupportCreateAnimate: boolean = false;
secPageAbilityName?: string;
}
export interface FormEditViewController {
showView: (param: FormEditViewParam) => void;
hideView: (height?: number) => void;
closeView: () => void;
getViewState: () => boolean;
backGestureHandler: () => void;
recoveryDefaultHeight?: () => void;
}
const DEFAULT_Z_INDEX: number = 5;
* 界面管理类:用于跳转界面.
*/
export class FormEditViewManager {
private static mInstance: FormEditViewManager;
private mFormEditViewController: FormEditViewController | null = null;
private mFormEditSecPageController: FormEditViewController | null = null;
private editingFormInfo: CardItemInfo = new CardItemInfo();
public isSheetEditView: boolean = true;
private constructor() {
}
* 获取单实例
*
* @returns 实例
*/
public static getInstance(): FormEditViewManager {
if (FormEditViewManager.mInstance === undefined) {
FormEditViewManager.mInstance = new FormEditViewManager();
}
return FormEditViewManager.mInstance;
}
public formEditHomeGestureHandler(): void {
this.mFormEditViewController?.closeView();
this.mFormEditSecPageController?.closeView();
this.setEditingFormInfo(new CardItemInfo());
}
public setEditingFormInfo(cardItemInfo: CardItemInfo): void {
this.editingFormInfo = cardItemInfo;
}
public getEditingFormInfo(): CardItemInfo {
return this.editingFormInfo;
}
* 卡片编辑一级页面注册
*
* @param viewController
*/
public registerFormEditViewController(viewController: FormEditViewController): void {
this.mFormEditViewController = viewController;
}
public unRegisterFormEditViewController(): void {
this.mFormEditViewController = null;
}
public formEditBackGestureHandler(): void {
if (this.isFormEditSecPageShowing()) {
this.mFormEditSecPageController?.backGestureHandler();
if (this.isFormEditViewShowing()) {
this.openFormEditView();
}
return;
}
if (this.isFormEditViewShowing()) {
this.mFormEditViewController?.backGestureHandler();
}
}
public openFormEditView(param?: FormEditViewParam): void {
log.showInfo('openFormEditView');
let viewParam: FormEditViewParam = param ?? new FormEditViewParam();
if (CheckEmptyUtils.isEmpty(param)) {
viewParam.bundleName = this.editingFormInfo.bundleName;
viewParam.formInfo = this.editingFormInfo;
}
viewMgrPolicy.getViewController(ViewType.FORM_CENTER)?.setZIndex(DEFAULT_Z_INDEX);
this.mFormEditViewController?.showView(viewParam);
}
public hideFormEditView(height?: number): void {
if (this.isFormEditViewShowing()) {
this.mFormEditViewController?.hideView(height);
}
}
public closeFormEditView(): void {
log.showInfo('closeFormEditView');
if (this.isFormEditSecPageShowing()) {
this.mFormEditSecPageController?.closeView();
}
this.mFormEditViewController?.closeView();
}
public isFormEditViewShowing(): boolean {
return this.mFormEditViewController?.getViewState() ?? false;
}
* 卡片编辑二级页面注册
*
* @param viewController
*/
public registerFormEditSecPageController(viewController: FormEditViewController): void {
this.mFormEditSecPageController = viewController;
}
public unRegisterFormEditSecPageController(): void {
this.mFormEditSecPageController = null;
}
public openFormEditSecPageView(param?: FormEditViewParam): void {
log.showInfo('openFormEditSecPageView');
let viewParam: FormEditViewParam = param ?? new FormEditViewParam();
if (!CheckEmptyUtils.checkStrIsEmpty(this.editingFormInfo.bundleName) &&
this.editingFormInfo.bundleName !== viewParam.bundleName) {
log.showError('open second page fail. bundleName is exception');
return;
}
GlobalContext.getContext()?.eventHub.emit('interruptFormEffect');
this.mFormEditSecPageController?.showView(viewParam);
if (this.isSheetEditView && this.isFormEditViewShowing()) {
this.hideFormEditView();
}
}
public closeFormEditSecPageView(onlyCloseFormEditSecPage?: boolean): void {
log.showInfo('closeFormEditSecPageView');
this.mFormEditSecPageController?.closeView();
if (this.isSheetEditView) {
this.openFormEditView();
}
GlobalContext.getContext()?.eventHub.emit('enterFormEditDone');
}
public isFormEditSecPageShowing(): boolean {
return this.mFormEditSecPageController?.getViewState() ?? false;
}
public isFormEditExtensionAbility(bundleName: string, abilityName: string): boolean {
try {
const extensionAbilityType: bundleManager.ExtensionAbilityType = bundleManager.ExtensionAbilityType.UNSPECIFIED;
const extensionFlags: bundleManager.ExtensionAbilityFlag =
bundleManager.ExtensionAbilityFlag.GET_EXTENSION_ABILITY_INFO_DEFAULT;
const want: Want = {
bundleName: bundleName,
abilityName: abilityName
};
const extensionAbilityTypeName = bundleManager.queryExtensionAbilityInfoSync(want, extensionAbilityType,
extensionFlags)[0]?.extensionAbilityTypeName;
log.showWarn(TAG, `isFormEditExtensionAbility. extensionAbilityTypeName: ${extensionAbilityTypeName}`);
return extensionAbilityTypeName === CommonConstants.FORM_EDIT_UI_EXTENSION_TYPE;
} catch (err) {
log.showError(TAG, `getExtensionAbilityTypeName error, code: ${err?.code}, message: ${err?.message}`);
return false;
}
}
}