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