1/** 2 * Copyright (c) 2021-2022 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 formManagerAbility from '@ohos.app.form.formHost'; 17import { FormConstants } from '../constants/FormConstants'; 18import { Log } from '../utils/Log'; 19import { CardItemInfo } from '../bean/CardItemInfo'; 20import { CommonConstants } from '../constants/CommonConstants'; 21import { launcherAbilityManager } from './LauncherAbilityManager'; 22import { ResourceManager } from './ResourceManager'; 23 24const TAG = 'FormManager'; 25 26/** 27 * Wrapper class for formManager interfaces. 28 */ 29export class FormManager { 30 private readonly CARD_SIZE_1x2: number[] = [2, 1]; 31 private readonly CARD_SIZE_2x2: number[] = [2, 2]; 32 private readonly CARD_SIZE_2x4: number[] = [4, 2]; 33 private readonly CARD_SIZE_4x4: number[] = [4, 4]; 34 private readonly CARD_SIZE_6x4: number[] = [6, 4]; 35 private resourceManager: ResourceManager = ResourceManager.getInstance(); 36 37 private constructor() { 38 } 39 /** 40 * form manager instance 41 * 42 * @return formManager instance 43 */ 44 static getInstance(): FormManager { 45 if (globalThis.FormManagerInstance == null) { 46 globalThis.FormManagerInstance = new FormManager(); 47 } 48 return globalThis.FormManagerInstance; 49 } 50 51 /** 52 * get all form info 53 * 54 * @return Array<CardItemInfo> cardItemInfoList 55 */ 56 async getAllFormsInfo(): Promise<CardItemInfo[]> { 57 const formList = await formManagerAbility.getAllFormsInfo(); 58 const cardItemInfoList = new Array<CardItemInfo>(); 59 for (const formItem of formList) { 60 const cardItemInfo = new CardItemInfo(); 61 let description = await this.resourceManager.getAppNameSync(formItem.descriptionId, formItem.bundleName, 62 formItem.moduleName, formItem.name); 63 cardItemInfo.bundleName = formItem.bundleName; 64 cardItemInfo.abilityName = formItem.abilityName; 65 cardItemInfo.moduleName = formItem.moduleName; 66 cardItemInfo.cardName = formItem.name; 67 cardItemInfo.cardDimension = formItem.defaultDimension; 68 cardItemInfo.area = this.getCardSize(cardItemInfo.cardDimension); 69 cardItemInfo.description = description; 70 cardItemInfo.formConfigAbility = formItem.formConfigAbility; 71 cardItemInfo.supportDimensions = formItem.supportDimensions; 72 cardItemInfoList.push(cardItemInfo); 73 } 74 return cardItemInfoList; 75 } 76 77 getCardSize(dimension: number): number[] { 78 if (dimension == CommonConstants.CARD_DIMENSION_1x2) { 79 return this.CARD_SIZE_1x2; 80 } else if (dimension == CommonConstants.CARD_DIMENSION_2x2) { 81 return this.CARD_SIZE_2x2; 82 } else if (dimension == CommonConstants.CARD_DIMENSION_2x4) { 83 return this.CARD_SIZE_2x4; 84 } else if (dimension == CommonConstants.CARD_DIMENSION_6x4) { 85 return this.CARD_SIZE_6x4; 86 } else { 87 return this.CARD_SIZE_4x4; 88 } 89 } 90 91 /** 92 * get form info by bundleName 93 * 94 * @param bundle 95 */ 96 async getFormsInfoByApp(bundle: string): Promise<CardItemInfo[]> { 97 Log.showDebug(TAG, `getFormsInfoByApp bundle: ${bundle}`); 98 const formList = await formManagerAbility.getFormsInfo(bundle); 99 const cardItemInfoList = new Array<CardItemInfo>(); 100 for (const formItem of formList) { 101 let description = await this.resourceManager.getAppNameSync(formItem.descriptionId, formItem.bundleName, 102 formItem.moduleName, formItem.name); 103 const cardItemInfo = new CardItemInfo(); 104 cardItemInfo.bundleName = formItem.bundleName; 105 cardItemInfo.abilityName = formItem.abilityName; 106 cardItemInfo.moduleName = formItem.moduleName; 107 cardItemInfo.cardName = formItem.name; 108 cardItemInfo.cardDimension = formItem.defaultDimension; 109 cardItemInfo.area = this.getCardSize(cardItemInfo.cardDimension); 110 cardItemInfo.description = description; 111 cardItemInfo.formConfigAbility = formItem.formConfigAbility; 112 cardItemInfo.supportDimensions = formItem.supportDimensions; 113 cardItemInfoList.push(cardItemInfo); 114 } 115 return cardItemInfoList; 116 } 117 118 /** 119 * get formCardItem by want parameters 120 * 121 * @param parameters 122 * @return formCardItem 123 */ 124 async getFormCardItemByWant(params) { 125 Log.showDebug(TAG, 'getFormCardItemByWant'); 126 let formCardItem: CardItemInfo = new CardItemInfo(); 127 formCardItem.cardId = params[FormConstants.ID_PARAM]; 128 formCardItem.cardName = params[FormConstants.NAME_PARAM]; 129 formCardItem.bundleName = params[FormConstants.BUNDLE_PARAM]; 130 formCardItem.abilityName = params[FormConstants.ABILITY_PARAM]; 131 formCardItem.moduleName = params[FormConstants.MODULE_PARAM]; 132 formCardItem.cardDimension = params[FormConstants.DIMENSION_PARAM]; 133 formCardItem.formConfigAbility = await this.getFormConfigAbility(params[FormConstants.BUNDLE_PARAM], 134 params[FormConstants.MODULE_PARAM], params[FormConstants.ABILITY_PARAM], params[FormConstants.NAME_PARAM]); 135 const appInfo = await launcherAbilityManager.getAppInfoByBundleName(params[FormConstants.BUNDLE_PARAM] , 136 params[FormConstants.ABILITY_PARAM]); 137 formCardItem.appLabelId = appInfo?.appLabelId; 138 return formCardItem; 139 } 140 141 /** 142 * get formConfigAbility by bundleName moduleName abilityName and cardName 143 * 144 * @param bundle 145 * @param moduleName 146 * @param abilityName 147 * @param cardName 148 * @return formConfigAbility 149 */ 150 async getFormConfigAbility(bundle: string, moduleName: string, abilityName: string, cardName: string): Promise<string> { 151 const formList = await formManagerAbility.getFormsInfo(bundle); 152 let formConfigAbility = ""; 153 for (const formItem of formList) { 154 if (formItem.moduleName === moduleName && formItem.abilityName === abilityName && formItem.name === cardName ) { 155 formConfigAbility = formItem.formConfigAbility; 156 break; 157 } 158 } 159 return formConfigAbility; 160 } 161 162 /** 163 * get form info by bundleName and moduleName 164 * 165 * @param bundle 166 * @param moduleName 167 */ 168 async getFormsInfoByModule(bundle: string, moduleName: string): Promise<CardItemInfo[]> { 169 const formList = await formManagerAbility.getFormsInfo(bundle, moduleName); 170 const cardItemInfoList = new Array<CardItemInfo>(); 171 for (const formItem of formList) { 172 let description = await this.resourceManager.getAppNameSync(formItem.descriptionId, formItem.bundleName, 173 formItem.moduleName, formItem.name); 174 const cardItemInfo = new CardItemInfo(); 175 cardItemInfo.bundleName = formItem.bundleName; 176 cardItemInfo.abilityName = formItem.abilityName; 177 cardItemInfo.moduleName = formItem.moduleName; 178 cardItemInfo.cardName = formItem.name; 179 cardItemInfo.cardDimension = formItem.defaultDimension; 180 cardItemInfo.area = this.getCardSize(cardItemInfo.cardDimension); 181 cardItemInfo.description = description; 182 cardItemInfo.formConfigAbility = formItem.formConfigAbility; 183 cardItemInfo.supportDimensions = formItem.supportDimensions; 184 cardItemInfoList.push(cardItemInfo); 185 } 186 return cardItemInfoList; 187 } 188 189 /** 190 * delete form info by formId 191 * 192 * @param formId 193 */ 194 async deleteCard(formId: string): Promise<void> { 195 Log.showInfo(TAG, `delete form info by formId:${formId}`); 196 return await formManagerAbility.deleteForm(formId); 197 } 198} 199 200