1/**
2 * Copyright (c) 2022-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 { BaseCloseAppHandler } from '../base/BaseCloseAppHandler';
17import { CheckEmptyUtils } from '../utils/CheckEmptyUtils';
18import { Log } from '../utils/Log';
19
20const TAG = 'CloseAppManager';
21
22/**
23 * close app manager
24 */
25export class CloseAppManager {
26  private mBaseCloseAppHandlerList: Array<BaseCloseAppHandler> = new Array<BaseCloseAppHandler>();
27  private mPagedesktopCloseItemInfo: any;
28  private mPagedesktopClosePosition: {
29    appIconSize: number,
30    appIconHeight: number,
31    appIconPositionX: number,
32    appIconPositionY: number
33  } = { appIconSize: 0,
34    appIconHeight: 0,
35    appIconPositionX: 0,
36    appIconPositionY: 0 };
37  private mSmartdockCloseItemInfo: any;
38  private mSmartdockClosePosition: {
39    appIconSize: number,
40    appIconHeight: number,
41    appIconPositionX: number,
42    appIconPositionY: number
43  } = { appIconSize: 0,
44    appIconHeight: 0,
45    appIconPositionX: 0,
46    appIconPositionY: 0 }
47
48  constructor() {
49  }
50
51  static getInstance(): CloseAppManager {
52    if (globalThis.CloseAppManager == null) {
53      globalThis.CloseAppManager = new CloseAppManager();
54    }
55    return globalThis.CloseAppManager;
56  }
57
58  /**
59   * register baseCloseAppHandler to manager
60   *
61   * @param baseCloseAppHandler the instance of close app handler
62   */
63  public registerCloseAppHandler(baseCloseAppHandler: BaseCloseAppHandler): void {
64    if (CheckEmptyUtils.isEmpty(baseCloseAppHandler)) {
65      Log.showError(TAG, 'registerCloseAppHandler with invalid baseCloseAppHandler')
66      return;
67    }
68
69    this.mBaseCloseAppHandlerList.push(baseCloseAppHandler);
70    Log.showInfo(TAG, `registerCloseAppHandler mBaseCloseAppHandlerList is ${this.mBaseCloseAppHandlerList.length}} `)
71  }
72
73  /**
74   * unregister baseCloseAppHandler to manager
75   *
76   * @param baseCloseAppHandler the instance of close app handler
77   */
78  public unregisterCloseAppHandler(baseCloseAppHandler: BaseCloseAppHandler): void {
79    if (CheckEmptyUtils.isEmpty(baseCloseAppHandler)) {
80      Log.showError(TAG, 'unregisterCloseAppHandler with invalid baseCloseAppHandler')
81      return;
82    }
83
84    let index: number = 0;
85    for (var i = 0; i < this.mBaseCloseAppHandlerList.length; i++) {
86      if (this.mBaseCloseAppHandlerList[i] === baseCloseAppHandler) {
87        index = i;
88        break;
89      }
90    }
91
92    this.mBaseCloseAppHandlerList.splice(index, 1);
93    Log.showInfo(TAG, `unregisterCloseAppHandler mBaseCloseAppHandlerList is ${this.mBaseCloseAppHandlerList.length}`)
94  }
95
96  /**
97   * get app icon info
98   *
99   * @param windowTarget windowTarget close window target
100   */
101  public getAppIconInfo(windowTarget): void {
102    if (CheckEmptyUtils.isEmptyArr(this.mBaseCloseAppHandlerList)) {
103      Log.showError(TAG, 'getAppIconInfo with invalid mBaseCloseAppHandlerList');
104      return;
105    }
106
107    for (var i = 0; i < this.mBaseCloseAppHandlerList.length; i++) {
108      this.mBaseCloseAppHandlerList[i].getAppIconInfo(windowTarget);
109    }
110  }
111
112  /**
113   * get app icon info
114   *
115   * @param windowTarget windowTarget close window target
116   */
117  public getAppInfo(windowTarget): any {
118    if (CheckEmptyUtils.isEmptyArr(this.mBaseCloseAppHandlerList)) {
119      Log.showError(TAG, 'getAppIconInfo with invalid mBaseCloseAppHandlerList');
120      return {};
121    }
122
123    for (var i = 0; i < this.mBaseCloseAppHandlerList.length; i++) {
124      this.mBaseCloseAppHandlerList[i].getAppIconInfo(windowTarget);
125    }
126
127    return {iconInfo: this.getAppCloseIconInfo(), appItemInfo: this.getAppCloseItemInfo()}
128  }
129
130  public addPagedesktopClosePosition(pagedesktopCloseIconInfo: any, pagedesktopCloseItemInfo?: any) {
131    Log.showDebug(TAG, `addPagedesktopClosePosition pagedesktopCloasIconInfo is ${JSON.stringify(pagedesktopCloseIconInfo)}`)
132    this.mPagedesktopClosePosition = pagedesktopCloseIconInfo;
133    this.mPagedesktopCloseItemInfo = pagedesktopCloseItemInfo;
134  }
135
136  public addSmartDockClosePosition(smartdockCloseIconInfo: any, smartdockCloseItemInfo: any) {
137    Log.showDebug(TAG, `addSmartDockClosePosition smartdockCloasIconInfo is ${JSON.stringify(smartdockCloseIconInfo)}`)
138    this.mSmartdockClosePosition = smartdockCloseIconInfo;
139    this.mSmartdockCloseItemInfo = smartdockCloseItemInfo;
140  }
141
142  public getAppCloseIconInfo(): any {
143    if (CheckEmptyUtils.isEmpty(this.mPagedesktopClosePosition)) {
144      Log.showDebug(TAG, `getAppCloseIconInfo return mSmartdockClosePosition is ${JSON.stringify(this.mSmartdockClosePosition)}`)
145      return this.mSmartdockClosePosition;
146    } else {
147      Log.showDebug(TAG, `getAppCloseIconInfo return mPagedesktopClosePosition is ${JSON.stringify(this.mPagedesktopClosePosition)}`)
148      return this.mPagedesktopClosePosition;
149    }
150  }
151
152  public getAppCloseItemInfo(): any {
153    if (CheckEmptyUtils.isEmpty(this.mPagedesktopClosePosition)) {
154      Log.showDebug(TAG, `getAppCloseIconInfo return mSmartdockClosePosition is ${JSON.stringify(this.mSmartdockClosePosition)}`)
155      return this.mSmartdockCloseItemInfo;
156    } else {
157      Log.showDebug(TAG, `getAppCloseIconInfo return mPagedesktopClosePosition is ${JSON.stringify(this.mPagedesktopClosePosition)}`)
158      return this.mPagedesktopCloseItemInfo;
159    }
160  }
161}
162